From mboxrd@z Thu Jan 1 00:00:00 1970 From: shh.xie at gmail.com Date: Mon, 26 Jan 2015 14:37:45 +0800 Subject: [U-Boot] [PATCH] ahci: fix compile warning under 64 bit mode Message-ID: <1422254265-3302-1-git-send-email-shh.xie@gmail.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de From: Shaohui Xie When compiling under 64 bit mode, there are warnings as below: In file included from drivers/block/ahci.c:16:0: drivers/block/ahci.c: In function 'ahci_reset': ./arch/arm/include/asm/io.h:72:28: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] #define __arch_getl(a) (*(volatile unsigned int *)(a)) ^ ./arch/arm/include/asm/io.h:151:31: note: in expansion of macro '__arch_getl' #define readl(c) ({ u32 __v = __arch_getl(c); __iormb(); __v; }) ^ drivers/block/ahci.c:144:12: note: in expansion of macro 'readl' u32 tmp = readl(host_ctl_reg); /* global controller reset */ ^ ./arch/arm/include/asm/io.h:77:29: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] #define __arch_putl(v,a) (*(volatile unsigned int *)(a) = (v)) ^ ./arch/arm/include/asm/io.h:146:48: note: in expansion of macro '__arch_putl' #define writel(v,c) ({ u32 __v = v; __iowmb(); __arch_putl(__v,c); __v; }) ^ drivers/block/ahci.c:28:37: note: in expansion of macro 'writel' #define writel_with_flush(a,b) do { writel(a,b); readl(b); } while (0) ^ drivers/block/ahci.c:147:3: note: in expansion of macro 'writel_with_flush' writel_with_flush(tmp | HOST_RESET, host_ctl_reg); ^ ./arch/arm/include/asm/io.h:72:28: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] #define __arch_getl(a) (*(volatile unsigned int *)(a)) ^ ./arch/arm/include/asm/io.h:151:31: note: in expansion of macro '__arch_getl' #define readl(c) ({ u32 __v = __arch_getl(c); __iormb(); __v; }) ^ drivers/block/ahci.c:28:50: note: in expansion of macro 'readl' #define writel_with_flush(a,b) do { writel(a,b); readl(b); } while (0) ^ drivers/block/ahci.c:147:3: note: in expansion of macro 'writel_with_flush' writel_with_flush(tmp | HOST_RESET, host_ctl_reg); ^ ./arch/arm/include/asm/io.h:72:28: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] #define __arch_getl(a) (*(volatile unsigned int *)(a)) ^ ./arch/arm/include/asm/io.h:151:31: note: in expansion of macro '__arch_getl' #define readl(c) ({ u32 __v = __arch_getl(c); __iormb(); __v; }) ^ drivers/block/ahci.c:155:9: note: in expansion of macro 'readl' tmp = readl(host_ctl_reg); ^ drivers/block/ahci.c: In function 'ahci_host_init': drivers/block/ahci.c:174:22: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] volatile u8 *mmio = (volatile u8 *)probe_ent->mmio_base; ^ 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); ^ drivers/block/ahci.c:219:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] port_mmio = (u8 *) probe_ent->port[i].port_mmio; ^ drivers/block/ahci.c: In function 'ahci_print_info': drivers/block/ahci.c:332:22: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] volatile u8 *mmio = (volatile u8 *)probe_ent->mmio_base; ^ In file included from ./arch/arm/include/asm/byteorder.h:29:0, from include/compiler.h:125, from include/image.h:19, from include/common.h:82, from drivers/block/ahci.c:10: drivers/block/ahci.c: In function 'ahci_fill_sg': drivers/block/ahci.c:464:19: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] cpu_to_le32((u32) buf + i * MAX_DATA_BYTE_COUNT); ^ include/linux/byteorder/little_endian.h:34:51: note: in definition of macro '__cpu_to_le32' #define __cpu_to_le32(x) ((__force __le32)(__u32)(x)) ^ drivers/block/ahci.c:464:7: note: in expansion of macro 'cpu_to_le32' cpu_to_le32((u32) buf + i * MAX_DATA_BYTE_COUNT); ^ drivers/block/ahci.c: In function 'ahci_port_start': drivers/block/ahci.c:520:27: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] volatile u8 *port_mmio = (volatile u8 *)pp->port_mmio; ^ drivers/block/ahci.c:532:8: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] mem = (u32) malloc(AHCI_PORT_PRIV_DMA_SZ + 2048); ^ drivers/block/ahci.c:540:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] memset((u8 *) mem, 0, AHCI_PORT_PRIV_DMA_SZ); ^ drivers/block/ahci.c:547:50: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] (struct ahci_cmd_hdr *)(uintptr_t)virt_to_phys((void *)mem); ^ In file included from drivers/block/ahci.c:10:0: drivers/block/ahci.c:548:29: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] debug("cmd_slot = 0x%x\n", (unsigned)pp->cmd_slot); ^ include/common.h:109:26: note: in definition of macro 'debug_cond' printf(pr_fmt(fmt), ##args); \ ^ drivers/block/ahci.c:548:2: note: in expansion of macro 'debug' debug("cmd_slot = 0x%x\n", (unsigned)pp->cmd_slot); ^ drivers/block/ahci.c:554:28: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] pp->rx_fis = virt_to_phys((void *)mem); ^ drivers/block/ahci.c:561:29: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] pp->cmd_tbl = virt_to_phys((void *)mem); ^ drivers/block/ahci.c:566:46: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] (struct ahci_sg *)(uintptr_t)virt_to_phys((void *)mem); ^ In file included from drivers/block/ahci.c:16:0: drivers/block/ahci.c:568:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] writel_with_flush((u32) pp->cmd_slot, port_mmio + PORT_LST_ADDR); ^ ./arch/arm/include/asm/io.h:146:34: note: in definition of macro 'writel' #define writel(v,c) ({ u32 __v = v; __iowmb(); __arch_putl(__v,c); __v; }) ^ drivers/block/ahci.c:568:2: note: in expansion of macro 'writel_with_flush' writel_with_flush((u32) pp->cmd_slot, port_mmio + PORT_LST_ADDR); ^ drivers/block/ahci.c: In function 'ahci_device_data_io': drivers/block/ahci.c:591:27: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] volatile u8 *port_mmio = (volatile u8 *)pp->port_mmio; ^ drivers/block/ahci.c:609:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] memcpy((unsigned char *)pp->cmd_tbl, fis, fis_len); ^ drivers/block/ahci.c:616:26: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] ahci_dcache_flush_range((unsigned)buf, (unsigned)buf_len); ^ drivers/block/ahci.c:626:31: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast] ahci_dcache_invalidate_range((unsigned)buf, (unsigned)buf_len); ^ drivers/block/ahci.c: In function 'ata_io_flush': drivers/block/ahci.c:990:27: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] volatile u8 *port_mmio = (volatile u8 *)pp->port_mmio; ^ drivers/block/ahci.c:999:9: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] memcpy((unsigned char *)pp->cmd_tbl, fis, 20); ^ Signed-off-by: Shaohui Xie --- drivers/block/ahci.c | 57 ++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/drivers/block/ahci.c b/drivers/block/ahci.c index 37d2d2a..5e85895 100644 --- a/drivers/block/ahci.c +++ b/drivers/block/ahci.c @@ -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(u8 *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; + u8 *port_mmio = (u8 *)(unsigned long)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(u8 *port_mmio) { clrsetbits_le32(port_mmio + PORT_P0DMACR, 0x0000ff00, 0x00004400); } @@ -140,7 +140,7 @@ static void sunxi_dma_init(volatile u8 *port_mmio) int ahci_reset(u32 base) { int i = 1000; - u32 host_ctl_reg = base + HOST_CTL; + u32 *host_ctl_reg = (u32 *)(unsigned long)(base + HOST_CTL); u32 tmp = readl(host_ctl_reg); /* global controller reset */ if ((tmp & HOST_RESET) == 0) @@ -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; + u8 *mmio = (u8 *)(unsigned long)probe_ent->mmio_base; u32 tmp, cap_save, cmd; int i, j, ret; - volatile u8 *port_mmio; + u8 *port_mmio; u32 port_map; debug("ahci_host_init: start\n"); @@ -215,8 +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); - port_mmio = (u8 *) probe_ent->port[i].port_mmio; + probe_ent->port[i].port_mmio = + ahci_port_base((unsigned long)mmio, i); + port_mmio = (u8 *)(unsigned long)probe_ent->port[i].port_mmio; ahci_setup_port(&probe_ent->port[i], (unsigned long)mmio, i); /* make sure port is not active */ @@ -329,7 +330,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; + u8 *mmio = (u8 *)(unsigned long)probe_ent->mmio_base; u32 vers, cap, cap2, impl, speed; const char *speed_s; const char *scc_s; @@ -461,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 @@ -488,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; + u8 *port_mmio = (u8 *)pp->port_mmio; u32 cmd_fis_len = 5; /* five dwords */ u8 fis[20]; @@ -517,7 +518,7 @@ static void ahci_set_feature(u8 port) static int ahci_port_start(u8 port) { struct ahci_ioports *pp = &(probe_ent->port[port]); - volatile u8 *port_mmio = (volatile u8 *)pp->port_mmio; + u8 *port_mmio = (u8 *)(unsigned long)pp->port_mmio; u32 port_status; u32 mem; @@ -529,7 +530,7 @@ static int ahci_port_start(u8 port) return -1; } - mem = (u32) malloc(AHCI_PORT_PRIV_DMA_SZ + 2048); + mem = (unsigned long) malloc(AHCI_PORT_PRIV_DMA_SZ + 2048); if (!mem) { free(pp); printf("%s: No mem for table!\n", __func__); @@ -537,35 +538,38 @@ static int ahci_port_start(u8 port) } mem = (mem + 0x800) & (~0x7ff); /* Aligned to 2048-bytes */ - memset((u8 *) mem, 0, AHCI_PORT_PRIV_DMA_SZ); + memset((u8 *)(unsigned long)mem, 0, AHCI_PORT_PRIV_DMA_SZ); /* * First item in chunk of DMA memory: 32-slot command table, * 32 bytes each in size */ pp->cmd_slot = - (struct ahci_cmd_hdr *)(uintptr_t)virt_to_phys((void *)mem); - debug("cmd_slot = 0x%x\n", (unsigned)pp->cmd_slot); + (struct ahci_cmd_hdr *) + (uintptr_t)virt_to_phys((void *)(unsigned long)mem); + debug("cmd_slot = 0x%x\n", (unsigned int)(unsigned long)pp->cmd_slot); mem += (AHCI_CMD_SLOT_SZ + 224); /* * Second item: Received-FIS area */ - pp->rx_fis = virt_to_phys((void *)mem); + pp->rx_fis = virt_to_phys((void *)(unsigned long)mem); mem += AHCI_RX_FIS_SZ; /* * Third item: data area for storing a single command * and its scatter-gather table */ - pp->cmd_tbl = virt_to_phys((void *)mem); + pp->cmd_tbl = virt_to_phys((void *)(unsigned long)mem); debug("cmd_tbl_dma = 0x%x\n", pp->cmd_tbl); mem += AHCI_CMD_TBL_HDR; pp->cmd_tbl_sg = - (struct ahci_sg *)(uintptr_t)virt_to_phys((void *)mem); + (struct ahci_sg *) + (uintptr_t)virt_to_phys((void *)(unsigned long)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); @@ -588,7 +592,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; + u8 *port_mmio = (u8 *)(unsigned long)pp->port_mmio; u32 opts; u32 port_status; int sg_count; @@ -606,14 +610,14 @@ static int ahci_device_data_io(u8 port, u8 *fis, int fis_len, u8 *buf, return -1; } - memcpy((unsigned char *)pp->cmd_tbl, fis, fis_len); + memcpy((unsigned char *)(unsigned long)pp->cmd_tbl, fis, fis_len); sg_count = ahci_fill_sg(port, buf, buf_len); opts = (fis_len >> 2) | (sg_count << 16) | (is_write << 6); 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); @@ -623,7 +627,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; @@ -987,7 +992,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; + u8 *port_mmio = (u8 *)(unsigned long)pp->port_mmio; u32 cmd_fis_len = 5; /* five dwords */ /* Preset the FIS */ @@ -996,7 +1001,7 @@ static int ata_io_flush(u8 port) fis[1] = 1 << 7; /* Command FIS. */ fis[2] = ATA_CMD_FLUSH_EXT; - memcpy((unsigned char *)pp->cmd_tbl, fis, 20); + memcpy((unsigned char *)(unsigned long)pp->cmd_tbl, fis, 20); ahci_fill_cmd_slot(pp, cmd_fis_len); writel_with_flush(1, port_mmio + PORT_CMD_ISSUE); -- 2.1.0.27.g96db324