All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH] ahci: fix compile warning under 64 bit mode
@ 2015-01-26  6:37 shh.xie at gmail.com
  0 siblings, 0 replies; only message in thread
From: shh.xie at gmail.com @ 2015-01-26  6:37 UTC (permalink / raw)
  To: u-boot

From: Shaohui Xie <Shaohui.Xie@freescale.com>

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 <Shaohui.Xie@freescale.com>
---
 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

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2015-01-26  6:37 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-26  6:37 [U-Boot] [PATCH] ahci: fix compile warning under 64 bit mode shh.xie at gmail.com

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.