[linux-dvb] [PATCH]: second attempt to fix 64-bit warning in
saa7146_hlp.c
Johannes Stezenbach
js at linuxtv.org
Mon Dec 19 16:36:41 CET 2005
On Mon, Dec 19, 2005, Hans Verkuil wrote:
> On Monday 19 December 2005 12:24, Johannes Stezenbach wrote:
> > On Mon, Dec 19, 2005, Hans Verkuil wrote:
> >
> > > + /* The base pointer is a 32-bit pointer into DMA memory.
> > > + The unsigned long cast is to remove a 64-bit compile warning
> > > since + it looks like a 64-bit address is cast to a 32-bit
> > > value. */ + u32 base = (u32)(unsigned long)vv->ov_fb.base;
...
> struct v4l2_framebuffer
> {
> __u32 capability;
> __u32 flags;
> /* FIXME: in theory we should pass something like PCI device + memory
> * region + offset instead of some physical address */
> void* base;
> struct v4l2_pix_format fmt;
> };
>
> So base is a pointer to PCI memory.
>
> In saa7146_set_position() from saa7146_hlp.c the base address is used to
> set DMA addresses which are passed to saa7146_write_out_dma(). And that
> function writes them as 32-bit values to the saa7146.
>
> It is clear that for the saa7146 the base pointer cannot be a 64-bit
> address and should in fact probably be of type dma_addr_t. However, I'm
> not sure if struct v4l2_framebuffer isn't (mis)used in other places and
> for other devices where it can really be a 64-bit pointer. I don't dare
> touch that one.
OK, thanks for clearing this up. Could you please add to your comment
- it's a 32bit physical address that goes into a 32bit DMA register
- FIXME: probably doesn't work on some 64bit platforms, see FIXME
in struct v4l2_framebuffer
...so it passes Al Viro's critical eyes?
Please commit with these changes.
Thanks,
Johannes
More information about the linux-dvb
mailing list