Messages in this thread | | | Subject | RE: [PATCH] Fix fsldma.c warning messages when it's compiled underPPC64. | Date | Wed, 12 Mar 2008 10:10:46 +0800 | From | "Zhang Wei" <> |
| |
Hi,
> -----Original Message----- > From: Olof Johansson [mailto:olof@lixom.net] > > On Mon, Mar 10, 2008 at 06:47:25PM +0800, Zhang Wei wrote: > > There are warning messages reported by Stephen Rothwell with > > ARCH=powerpc allmodconfig build: > > > > drivers/dma/fsldma.c: In function 'fsl_dma_prep_memcpy': > > drivers/dma/fsldma.c:439: warning: comparison of distinct > pointer types > > lacks a cast > > drivers/dma/fsldma.c: In function 'fsl_chan_xfer_ld_queue': > > drivers/dma/fsldma.c:584: warning: format '%016llx' expects > type 'long long > > unsigned int', but argument 4 has type 'dma_addr_t' > > drivers/dma/fsldma.c: In function 'fsl_dma_chan_do_interrupt': > > drivers/dma/fsldma.c:668: warning: format '%x' expects type > 'unsigned int', > > but argument 5 has type 'dma_addr_t' > > drivers/dma/fsldma.c:684: warning: format '%016llx' expects > type 'long long > > unsigned int', but argument 4 has type 'dma_addr_t' > > drivers/dma/fsldma.c:684: warning: format '%016llx' expects > type 'long long > > unsigned int', but argument 5 has type 'dma_addr_t' > > drivers/dma/fsldma.c:701: warning: format '%02x' expects > type 'unsigned > > int', but argument 4 has type 'dma_addr_t' > > drivers/dma/fsldma.c: In function 'fsl_dma_self_test': > > drivers/dma/fsldma.c:840: warning: format '%d' expects type > 'int', but > > argument 5 has type 'size_t' > > drivers/dma/fsldma.c: In function 'of_fsl_dma_probe': > > drivers/dma/fsldma.c:1010: warning: format '%08x' expects > type 'unsigned > > int', but argument 5 has type 'resource_size_t' > > > > This patch fixed the above warning messages. > > > > Signed-off-by: Zhang Wei <wei.zhang@freescale.com> > > --- > > drivers/dma/fsldma.c | 29 ++++++++++++++++------------- > > 1 files changed, 16 insertions(+), 13 deletions(-) > > > > diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c > > index cc9a681..5dfedf3 100644 > > --- a/drivers/dma/fsldma.c > > +++ b/drivers/dma/fsldma.c > > @@ -57,12 +57,12 @@ static void dma_init(struct > fsl_dma_chan *fsl_chan) > > > > } > > > > -static void set_sr(struct fsl_dma_chan *fsl_chan, dma_addr_t val) > > +static void set_sr(struct fsl_dma_chan *fsl_chan, u32 val) > > Why? dma_addr_t is the right type to use here.
The reason is the val will be assigned to SR register, and SR register is a 32-bit only register.
> > @@ -581,8 +581,8 @@ static void > fsl_chan_xfer_ld_queue(struct fsl_dma_chan *fsl_chan) > > if (ld_node != &fsl_chan->ld_queue) { > > /* Get the ld start address from ld_queue */ > > next_dest_addr = to_fsl_desc(ld_node)->async_tx.phys; > > - dev_dbg(fsl_chan->dev, "xfer LDs staring from > 0x%016llx\n", > > - (u64)next_dest_addr); > > + dev_dbg(fsl_chan->dev, "xfer LDs staring from %p\n", > > + (void *)next_dest_addr); > > If anything you should cast to unsigned long and print as %lx. > next_dest_addr is not a pointer, it's a bus/dma address. > > Same for all the other changes in this file (dma_addr_t -> u32 doesn't > seem right, same for the %llx -> %p changes). >
Here's cast is only for print out message. The type point can adapt the address width automatically in 32-bit and 64-bit kernel.
Thanks! Wei.
| |