xsysace: use resource_size_t instead of unsigned long
PATCH 1/1 xsysace: use resource_size_t instead of unsigned long
Hello,
This patch adds using resource_size_t for physical address of SystemACE chip. This makes the driver workable on 32 bit systems with 64-bit resources (e.g. PPC440SPe).
--- drivers/block/xsysace.c | 18 +++++++++--------- 1 files changed, 9 insertions(+), 9 deletions(-)
drivers/block/xsysace.c +9 -9
@@ -194,7 +194,7 @@ struct ace_device {int in_irq;/* Details of hardware device */ -unsigned long physaddr; +resource_size_t physaddr;void __iomem *baseaddr;int irq;int bus_width;/* 0 := 8 bit; 1 := 16 bit */
@@ -935,7 +935,7 @@ static int __devinit ace_setup(struct ace_device *ace)int rc;dev_dbg (ace->dev,"ace_setup(ace=0x%p)\n" , ace); -dev_dbg (ace->dev,"physaddr=0x%lx irq=%i\n" , ace->physaddr, ace->irq); +dev_dbg (ace->dev,"physaddr=0x%llx irq=%i\n" , (u64 )ace->physaddr, ace->irq);spin_lock_init (&ace->lock);init_completion (&ace->id_completion);
@@ -1017,8 +1017,8 @@ static int __devinit ace_setup(struct ace_device *ace)/* Print the identification */ dev_info (ace->dev,"Xilinx SystemACE revision %i.%i.%i\n" , (version >>12 ) &0xf , (version >>8 ) &0x0f , version &0xff ); -dev_dbg (ace->dev,"physaddr 0x%lx, mapped to 0x%p, irq=%i\n" , - ace->physaddr, ace->baseaddr, ace->irq); +dev_dbg (ace->dev,"physaddr 0x%llx, mapped to 0x%p, irq=%i\n" , + (u64 )ace->physaddr, ace->baseaddr, ace->irq); ace->media_change =1 ;ace_revalidate_disk (ace->gd);
@@ -1035,8 +1035,8 @@ err_alloc_disk: err_blk_initq:iounmap (ace->baseaddr); err_ioremap: -dev_info (ace->dev,"xsysace: error initializing device at 0x%lx\n" , - ace->physaddr); +dev_info (ace->dev,"xsysace: error initializing device at 0x%llx\n" , + (u64 )ace->physaddr);return -ENOMEM ; }
@@ -1059,7 +1059,7 @@ static void __devexit ace_teardown(struct ace_device *ace) }static int __devinit -ace_alloc (struct device *dev,int id,unsigned long physaddr, +ace_alloc (struct device *dev,int id,resource_size_t physaddr,int irq,int bus_width) {struct ace_device *ace;
@@ -1119,7 +1119,7 @@ static void __devexit ace_free(struct device *dev)static int __devinit ace_probe (struct platform_device *dev) { -unsigned long physaddr =0 ; +resource_size_t physaddr =0 ;int bus_width =ACE_BUS_WIDTH_16 ;/* FIXME: should not be hard coded */ int id = dev->id;int irq =NO_IRQ ;
@@ -1165,7 +1165,7 @@ static int __devinit ace_of_probe(struct of_device *op, const struct of_device_id *match) { struct resource res; -unsigned long physaddr; +resource_size_t physaddr;const u32 *id;int irq, bus_width, rc;
Signature · 5 lines
1.5.6.1 -- Yuri Tikhonov, Senior Software Engineer Emcraft Systems, www.emcraft.com
Hi Yuri,
drivers/block/xsysace.c static int __devinit ace_setup(struct ace_device *ace) · line 938
Quoted 3 lines · On Thu, 13 Nov 2008 11:43:17 +0300 Yuri Tikhonov <[email protected]> wrote:
drivers/block/xsysace.c +1
-1-dev_dbg (ace->dev,"physaddr=0x%lx irq=%i\n" , ace->physaddr, ace->irq); +dev_dbg (ace->dev,"physaddr=0x%llx irq=%i\n" , (u64 )ace->physaddr, ace->irq);
You should cast the physaddr to "unsigned long long" as "u64" is "unsigned long" on some architectures. The same is needed in other places as well.
Signature · 3 lines
Cheers, Stephen Rothwell [email protected] http://www.canb.auug.org.au/~sfr/
=0D=0AHello Stephen,
Quoted 5 lines · On Thursday, November 13, 2008 you wrote:
Hi Yuri,
Quoted 2 lines · On Thu, 13 Nov 2008 11:43:17 +0300 Yuri Tikhonov <[email protected]> wrote:
- dev_dbg(ace->dev, "physaddr=3D0x%lx irq=3D%i\n",
ace->physaddr, ac=
e->irq);
Quoted 1 line
Quoted 1 line
+ dev_dbg(ace->dev, "physaddr=3D0x%llx irq=3D%i\n", (u64)ace->physad=
dr, ace->irq);
Quoted 3 lines
You should cast the physaddr to "unsigned long long" as "u64" is "unsigned long" on some architectures. The same is needed in other places as well.
Thanks for your comment. We'll fix this.
Regards, Yuri
--
Yuri Tikhonov, Senior Software Engineer
Emcraft Systems, www.emcraft.com