[U-Boot] [PATCH] ahci: fix compile warning under 64 bit mode
shh.xie at gmail.com
shh.xie at gmail.com
Mon Jan 26 07:37:45 CET 2015
From: Shaohui Xie <Shaohui.Xie at 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 at 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
More information about the U-Boot
mailing list