ahci: Fix compiling warnings under 64bit platforms
PATCH v2 1/1 ahci: Fix compiling warnings under 64bit platforms
From: Tang Yuantian <[email protected]>
When compling under 64bit platforms, there are lots of warnings, like:
drivers/block/ahci.c:114:18: warning: cast to pointer from integer
of different size [-Wint-to-pointer-cast]
u8 *port_mmio = (u8 *)probe_ent->port[port].port_mmio;
^drivers/block/ahci.c: In function ?.hci_host_init?. drivers/block/ahci.c:218:49: warning: cast from pointer to integer
of different size [-Wpointer-to-int-cast]
probe_ent->port[i].port_mmio = ahci_port_base((u32) mmio, i);
......
---
v2:
- refined some type casts
drivers/block/ahci.c | 57 +++++++++++++++++++++++++++------------------------- include/ahci.h | 8 ++++---- 2 files changed, 34 insertions(+), 31 deletions(-)
drivers/block/ahci.c +30 -27
@@ -43,13 +43,13 @@ u16 *ataid[AHCI_MAX_PORTS];#define WAIT_MS_FLUSH 5000#define WAIT_MS_LINKUP 200 -static inline u32 ahci_port_base (u32 base,u32 port) +static inline void __iomem *ahci_port_base (void __iomem *base,u32 port) {return base +0x100 + (port *0x80 ); } -static void ahci_setup_port (struct ahci_ioports *port,unsigned long base, +static void ahci_setup_port (struct ahci_ioports *port,void __iomem *base,unsigned int port_idx) { base =ahci_port_base (base, port_idx);
@@ -61,7 +61,7 @@ static void ahci_setup_port(struct ahci_ioports *port, unsigned long base,#define msleep (a) udelay(a * 1000) -static void ahci_dcache_flush_range (unsigned begin,unsigned len) +static void ahci_dcache_flush_range (unsigned long begin,unsigned long len) {const unsigned long start = begin;const unsigned long end = start + len;
@@ -75,7 +75,7 @@ static void ahci_dcache_flush_range(unsigned begin, unsigned len)* controller is invalidated from dcache; next access comes from * physical RAM. */ -static void ahci_dcache_invalidate_range (unsigned begin,unsigned len) +static void ahci_dcache_invalidate_range (unsigned long begin,unsigned long len) {const unsigned long start = begin;const unsigned long end = start + len;
@@ -94,7 +94,7 @@ static void ahci_dcache_flush_sata_cmd(struct ahci_ioports *pp) AHCI_PORT_PRIV_DMA_SZ); } -static int waiting_for_cmd_completed (volatile u8 *offset, +static int waiting_for_cmd_completed (void __iomem *offset,int timeout_msec,u32 sign) {
@@ -111,7 +111,7 @@ int __weak ahci_link_up(struct ahci_probe_ent *probe_ent, u8 port) {u32 tmp;int j =0 ; -u8 *port_mmio = (u8 *)probe_ent->port[port].port_mmio; +void __iomem *port_mmio = probe_ent->port[port].port_mmio;/* * Bring up SATA link.
@@ -131,7 +131,7 @@ int __weak ahci_link_up(struct ahci_probe_ent *probe_ent, u8 port)#ifdef CONFIG_SUNXI_AHCI /* The sunxi AHCI controller requires this undocumented setup */ -static void sunxi_dma_init (volatile u8 *port_mmio) +static void sunxi_dma_init (void __iomem *port_mmio) {clrsetbits_le32 (port_mmio +PORT_P0DMACR ,0x0000ff00 ,0x00004400 ); }
@@ -171,10 +171,10 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent)u16 tmp16;unsigned short vendor;#endif -volatile u8 *mmio = (volatile u8 *)probe_ent->mmio_base; +void __iomem *mmio = probe_ent->mmio_base;u32 tmp, cap_save, cmd;int i, j, ret; -volatile u8 *port_mmio; +void __iomem *port_mmio;u32 port_map;debug ("ahci_host_init: start\n" );
@@ -215,9 +215,9 @@ static int ahci_host_init(struct ahci_probe_ent *probe_ent)for (i =0 ; i < probe_ent->n_ports; i++) {if (!(port_map & (1 << i)))continue ; - probe_ent->port[i].port_mmio =ahci_port_base ((u32 ) mmio, i); + probe_ent->port[i].port_mmio =ahci_port_base (mmio, i); port_mmio = (u8 *) probe_ent->port[i].port_mmio; -ahci_setup_port (&probe_ent->port[i], (unsigned long )mmio, i); +ahci_setup_port (&probe_ent->port[i], mmio, i);/* make sure port is not active */ tmp =readl (port_mmio +PORT_CMD );
@@ -329,7 +329,7 @@ static void ahci_print_info(struct ahci_probe_ent *probe_ent)pci_dev_t pdev = probe_ent->dev;u16 cc;#endif -volatile u8 *mmio = (volatile u8 *)probe_ent->mmio_base; +void __iomem *mmio = probe_ent->mmio_base;u32 vers, cap, cap2, impl, speed;const char *speed_s;const char *scc_s;
@@ -462,7 +462,7 @@ static int ahci_fill_sg(u8 port, unsigned char *buf, int buf_len)for (i =0 ; i < sg_count; i++) { ahci_sg->addr = -cpu_to_le32 ((u32 ) buf + i *MAX_DATA_BYTE_COUNT ); +cpu_to_le32 ((unsigned long ) buf + i *MAX_DATA_BYTE_COUNT ); ahci_sg->addr_hi =0 ; ahci_sg->flags_size = cpu_to_le32(0x3fffff & (buf_len < MAX_DATA_BYTE_COUNT
@@ -489,7 +489,7 @@ static void ahci_fill_cmd_slot(struct ahci_ioports *pp, u32 opts)static void ahci_set_feature (u8 port) {struct ahci_ioports *pp = &(probe_ent->port[port]); -volatile u8 *port_mmio = (volatile u8 *)pp->port_mmio; +void __iomem *port_mmio = pp->port_mmio;u32 cmd_fis_len =5 ;/* five dwords */ u8 fis[20 ];
@@ -514,7 +514,7 @@ static void ahci_set_feature(u8 port) }#endif -static int wait_spinup (volatile u8 *port_mmio) +static int wait_spinup (void __iomem *port_mmio) {ulong start;u32 tf_data;
@@ -532,9 +532,9 @@ static int wait_spinup(volatile u8 *port_mmio)static int ahci_port_start (u8 port) {struct ahci_ioports *pp = &(probe_ent->port[port]); -volatile u8 *port_mmio = (volatile u8 *)pp->port_mmio; +void __iomem *port_mmio = pp->port_mmio;u32 port_status; -u32 mem; +void __iomem *mem;debug ("Enter start port: %d\n" , port); port_status =readl (port_mmio +PORT_SCR_STAT );
@@ -544,15 +544,16 @@ static int ahci_port_start(u8 port)return -1 ; } - mem = (u32 )malloc (AHCI_PORT_PRIV_DMA_SZ +2048 ); + mem =malloc (AHCI_PORT_PRIV_DMA_SZ +2048 );if (!mem) {free (pp);printf ("%s: No mem for table!\n" , __func__);return -ENOMEM ; } - mem = (mem +0x800 ) & (~0x7ff );/* Aligned to 2048-bytes */ -memset ((u8 *) mem,0 ,AHCI_PORT_PRIV_DMA_SZ ); +/* Aligned to 2048-bytes */ + mem =memalign (2048 ,AHCI_PORT_PRIV_DMA_SZ ); +memset (mem,0 ,AHCI_PORT_PRIV_DMA_SZ );/* * First item in chunk of DMA memory: 32-slot command table,
@@ -560,7 +561,7 @@ static int ahci_port_start(u8 port)*/ pp->cmd_slot = (struct ahci_cmd_hdr *)(uintptr_t )virt_to_phys ((void *)mem); -debug ("cmd_slot = 0x%x\n" , (unsigned )pp->cmd_slot); +debug ("cmd_slot = %p\n" , pp->cmd_slot); mem += (AHCI_CMD_SLOT_SZ +224 );/*
@@ -574,13 +575,14 @@ static int ahci_port_start(u8 port)* and its scatter-gather table */ pp->cmd_tbl =virt_to_phys ((void *)mem); -debug ("cmd_tbl_dma = 0x%x\n" , pp->cmd_tbl); +debug ("cmd_tbl_dma = %lx\n" , pp->cmd_tbl); mem +=AHCI_CMD_TBL_HDR ; pp->cmd_tbl_sg = (struct ahci_sg *)(uintptr_t )virt_to_phys ((void *)mem); -writel_with_flush ((u32 ) pp->cmd_slot, port_mmio +PORT_LST_ADDR ); +writel_with_flush ((unsigned long )pp->cmd_slot, + port_mmio +PORT_LST_ADDR );writel_with_flush (pp->rx_fis, port_mmio +PORT_FIS_ADDR );
@@ -607,7 +609,7 @@ static int ahci_device_data_io(u8 port, u8 *fis, int fis_len, u8 *buf, {struct ahci_ioports *pp = &(probe_ent->port[port]); -volatile u8 *port_mmio = (volatile u8 *)pp->port_mmio; +void __iomem *port_mmio = pp->port_mmio;u32 opts;u32 port_status;int sg_count;
@@ -632,7 +634,7 @@ static int ahci_device_data_io(u8 port, u8 *fis, int fis_len, u8 *buf,ahci_fill_cmd_slot (pp, opts);ahci_dcache_flush_sata_cmd (pp); -ahci_dcache_flush_range ((unsigned )buf, (unsigned )buf_len); +ahci_dcache_flush_range ((unsigned long )buf, (unsigned long )buf_len);writel_with_flush (1 , port_mmio +PORT_CMD_ISSUE );
@@ -642,7 +644,8 @@ static int ahci_device_data_io(u8 port, u8 *fis, int fis_len, u8 *buf,return -1 ; } -ahci_dcache_invalidate_range ((unsigned )buf, (unsigned )buf_len); +ahci_dcache_invalidate_range ((unsigned long )buf, + (unsigned long )buf_len);debug ("%s: %d byte transferred.\n" , __func__, pp->cmd_slot->status);return 0 ;
@@ -1026,7 +1029,7 @@ static int ata_io_flush(u8 port) {u8 fis[20 ];struct ahci_ioports *pp = &(probe_ent->port[port]); -volatile u8 *port_mmio = (volatile u8 *)pp->port_mmio; +void __iomem *port_mmio = pp->port_mmio;u32 cmd_fis_len =5 ;/* five dwords */ /* Preset the FIS */
include/ahci.h +4 -4
@@ -135,12 +135,12 @@ struct ahci_sg { };struct ahci_ioports { -u32 cmd_addr; -u32 scr_addr; -u32 port_mmio; +void __iomem *cmd_addr; +void __iomem *scr_addr; +void __iomem *port_mmio;struct ahci_cmd_hdr *cmd_slot;struct ahci_sg *cmd_tbl_sg; -u32 cmd_tbl; +ulong cmd_tbl;u32 rx_fis; };
Signature · 1 line
2.1.0.27.g96db324
PATCH v2 1/1 ahci: Fix compiling warnings under 64bit platforms
Hello Yuantian.Tang at freescale.com,
Quoted 14 lines · Yuantian.Tang at freescale.com
From: Tang Yuantian <[email protected]>
When compling under 64bit platforms, there are lots of warnings, like:
drivers/block/ahci.c:114:18: warning: cast to pointer from integer
of different size [-Wint-to-pointer-cast]u8 *port_mmio = (u8 *)probe_ent->port[port].port_mmio; ^
drivers/block/ahci.c: In function ?.hci_host_init?.drivers/block/ahci.c:218:49: warning: cast from pointer to integer
of different size [-Wpointer-to-int-cast]
probe_ent->port[i].port_mmio =ahci_port_base((u32) mmio, i);
Quoted 7 lines
......
Signed-off-by Shaohui Xie <[email protected]>Signed-off-by Tang Yuantian <[email protected]>---
v2:
- refined some type casts
Out of curiosity, which toolchain are you using?
Amicalement,
Signature · 1 line
Albert.
PATCH v2 1/1 ahci: Fix compiling warnings under 64bit platforms
Quoted 30 lines
-----Original Message-----
From: Albert ARIBAUD [mailto:albert.u.boot at aribaud.net]
Sent: Tuesday, July 07, 2015 7:20 PM
To: Tang Yuantian-B29983
Cc: trini at konsulko.com; Xie Shaohui-B21989; u-boot at lists.denx.de
Subject: Re: [U-Boot] [PATCH v2] ahci: Fix compiling warnings under 64bit platformsHello Yuantian.Tang at freescale.com,
Quoted 16 lines · Yuantian.Tang at freescale.com
From: Tang Yuantian <[email protected]>
When compling under 64bit platforms, there are lots of warnings, like:
drivers/block/ahci.c:114:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]u8 *port_mmio = (u8 *)probe_ent->port[port].port_mmio; ^
drivers/block/ahci.c: In function ?.hci_host_init?.drivers/block/ahci.c:218:49: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
probe_ent->port[i].port_mmio =ahci_port_base((u32) mmio, i);......
Quoted 8 lines
Quoted 5 lines
Signed-off-by Shaohui Xie <[email protected]>Signed-off-by Tang Yuantian <[email protected]>---
v2:
- refined some type castsOut of curiosity, which toolchain are you using?
ARCH=arm64 CROSS_COMPILE=gcc-linaro-aarch64-linux-gnu-4.8-2013.12_linux/bin/aarch64-linux-gnu-
I believe that any cross compile for arm64 will cause those warnings.
Regards,
Yuantian
Quoted 3 lines
Amicalement,
--
Albert.
PATCH v2 1/1 ahci: Fix compiling warnings under 64bit platforms
In reply to Yuantian.Tang at freescale.comQuoted 14 lines · tang yuantian
From: Tang Yuantian <[email protected]>
When compling under 64bit platforms, there are lots of warnings, like:
drivers/block/ahci.c:114:18: warning: cast to pointer from integer
of different size [-Wint-to-pointer-cast]u8 *port_mmio = (u8 *)probe_ent->port[port].port_mmio; ^
drivers/block/ahci.c: In function ?.hci_host_init?.drivers/block/ahci.c:218:49: warning: cast from pointer to integer
of different size [-Wpointer-to-int-cast]
probe_ent->port[i].port_mmio =ahci_port_base((u32) mmio, i);
Quoted 5 lines
......
Signed-off-by Shaohui Xie <[email protected]>Signed-off-by Tang Yuantian <[email protected]>---
This introduces a warning with ELDK 5.5 on nitrogen6q,novena,ot1200_spl,nitrogen6q2g,m53evk,mx6qsabrelite,udoo_quad,ima3-mx53,tb s2910,cm_fx6,ot1200,gwventana,mx53loco:
../drivers/block/dwc_ahsata.c:169:32: warning: assignment makes pointer from integer without a cast [enabled by default] ../drivers/block/dwc_ahsata.c: In function 'ahci_port_start':../drivers/block/dwc_ahsata.c:523:2: warning: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'ulong' [-Wformat=]
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20150708/bd9f0481/attachment.sig>
PATCH v2 1/1 ahci: Fix compiling warnings under 64bit platforms
Thanks for pointing out. Fixed in patch v3.
Regards,
Yuantian
Quoted 43 lines
-----Original Message-----
From: Tom Rini [mailto:trini at konsulko.com]
Sent: Thursday, July 09, 2015 9:48 AM
To: Tang Yuantian-B29983
Cc: Xie Shaohui-B21989; u-boot at lists.denx.de
Subject: Re: [U-Boot,v2] ahci: Fix compiling warnings under 64bit platformsQuoted 14 lines · tang yuantian
From: Tang Yuantian <[email protected]>
When compling under 64bit platforms, there are lots of warnings, like:
drivers/block/ahci.c:114:18: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]u8 *port_mmio = (u8 *)probe_ent->port[port].port_mmio; ^
drivers/block/ahci.c: In function ?.hci_host_init?.drivers/block/ahci.c:218:49: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
probe_ent->port[i].port_mmio =ahci_port_base((u32) mmio, i);Quoted 5 lines
......
Signed-off-by Shaohui Xie <[email protected]>Signed-off-by Tang Yuantian <[email protected]>---
This introduces a warning with ELDK 5.5 on nitrogen6q,novena,ot1200_spl,nitrogen6q2g,m53evk,mx6qsabrelite,udoo_q uad,ima3-mx53,tb
s2910,cm_fx6,ot1200,gwventana,mx53loco:
../drivers/block/dwc_ahsata.c:169:32: warning: assignment makes pointer from integer without a cast [enabled by default]../drivers/block/dwc_ahsata.c: In function 'ahci_port_start':../drivers/block/dwc_ahsata.c:523:2: warning: format '%x' expects argument of type 'unsigned int', but argument 2 has type 'ulong' [-Wformat=]--
Tom