[U-Boot] [PATCH V2 19/23] net: fec: fix build warnings for 64bits support
Stefano Babic
sbabic at denx.de
Thu Dec 7 08:42:49 UTC 2017
On 04/12/2017 05:31, Peng Fan wrote:
> When building for 64bits system, we get some warnings about type
> cast between pointer and integer. This patch eliminates the warnings
> by using ulong/long type which is 32bits on 32bits system or 64bits on
> 64bits system.
>
> Signed-off-by: Ye Li <ye.li at nxp.com>
> Signed-off-by: Peng Fan <peng.fan at nxp.com>
> Cc: Joe Hershberger <joe.hershberger at ni.com>
> ---
> drivers/net/fec_mxc.c | 74 ++++++++++++++++++++++++++++++---------------------
> 1 file changed, 43 insertions(+), 31 deletions(-)
>
> diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
> index 4cbc8cbbfd..ff7ad91116 100644
> --- a/drivers/net/fec_mxc.c
> +++ b/drivers/net/fec_mxc.c
> @@ -284,7 +284,7 @@ static int fec_tx_task_disable(struct fec_priv *fec)
> static void fec_rbd_init(struct fec_priv *fec, int count, int dsize)
> {
> uint32_t size;
> - uint8_t *data;
> + ulong data;
> int i;
>
> /*
> @@ -293,9 +293,9 @@ static void fec_rbd_init(struct fec_priv *fec, int count, int dsize)
> */
> size = roundup(dsize, ARCH_DMA_MINALIGN);
> for (i = 0; i < count; i++) {
> - data = (uint8_t *)fec->rbd_base[i].data_pointer;
> - memset(data, 0, dsize);
> - flush_dcache_range((uint32_t)data, (uint32_t)data + size);
> + data = fec->rbd_base[i].data_pointer;
> + memset((void *)data, 0, dsize);
> + flush_dcache_range(data, data + size);
>
> fec->rbd_base[i].status = FEC_RBD_EMPTY;
> fec->rbd_base[i].data_length = 0;
> @@ -305,8 +305,8 @@ static void fec_rbd_init(struct fec_priv *fec, int count, int dsize)
> fec->rbd_base[i - 1].status = FEC_RBD_WRAP | FEC_RBD_EMPTY;
> fec->rbd_index = 0;
>
> - flush_dcache_range((unsigned)fec->rbd_base,
> - (unsigned)fec->rbd_base + size);
> + flush_dcache_range((ulong)fec->rbd_base,
> + (ulong)fec->rbd_base + size);
> }
>
> /**
> @@ -323,7 +323,7 @@ static void fec_rbd_init(struct fec_priv *fec, int count, int dsize)
> */
> static void fec_tbd_init(struct fec_priv *fec)
> {
> - unsigned addr = (unsigned)fec->tbd_base;
> + ulong addr = (ulong)fec->tbd_base;
> unsigned size = roundup(2 * sizeof(struct fec_bd),
> ARCH_DMA_MINALIGN);
>
> @@ -423,7 +423,7 @@ static int fec_open(struct eth_device *edev)
> struct fec_priv *fec = (struct fec_priv *)edev->priv;
> #endif
> int speed;
> - uint32_t addr, size;
> + ulong addr, size;
> int i;
>
> debug("fec_open: fec_open(dev)\n");
> @@ -439,7 +439,7 @@ static int fec_open(struct eth_device *edev)
> /* Flush the descriptors into RAM */
> size = roundup(FEC_RBD_NUM * sizeof(struct fec_bd),
> ARCH_DMA_MINALIGN);
> - addr = (uint32_t)fec->rbd_base;
> + addr = (ulong)fec->rbd_base;
> flush_dcache_range(addr, addr + size);
>
> #ifdef FEC_QUIRK_ENET_MAC
> @@ -533,8 +533,9 @@ static int fec_init(struct eth_device *dev, bd_t *bd)
> #else
> struct fec_priv *fec = (struct fec_priv *)dev->priv;
> #endif
> - uint32_t mib_ptr = (uint32_t)&fec->eth->rmon_t_drop;
> - int i;
> + u8 *mib_ptr = (uint8_t *)&fec->eth->rmon_t_drop;
> + u8 *i;
> + ulong addr;
>
> /* Initialize MAC address */
> #ifdef CONFIG_DM_ETH
> @@ -574,8 +575,12 @@ static int fec_init(struct eth_device *dev, bd_t *bd)
>
> /* size and address of each buffer */
> writel(FEC_MAX_PKT_SIZE, &fec->eth->emrbr);
> - writel((uint32_t)fec->tbd_base, &fec->eth->etdsr);
> - writel((uint32_t)fec->rbd_base, &fec->eth->erdsr);
> +
> + addr = (ulong)fec->tbd_base;
> + writel((uint32_t)addr, &fec->eth->etdsr);
> +
> + addr = (ulong)fec->rbd_base;
> + writel((uint32_t)addr, &fec->eth->erdsr);
>
> #ifndef CONFIG_PHYLIB
> if (fec->xcv_type != SEVENWIRE)
> @@ -640,8 +645,8 @@ static int fec_send(struct eth_device *dev, void *packet, int length)
> #endif
> {
> unsigned int status;
> - uint32_t size, end;
> - uint32_t addr;
> + u32 size;
> + ulong addr, end;
> int timeout = FEC_XFER_TIMEOUT;
> int ret = 0;
>
> @@ -672,13 +677,13 @@ static int fec_send(struct eth_device *dev, void *packet, int length)
> swap_packet((uint32_t *)packet, length);
> #endif
>
> - addr = (uint32_t)packet;
> + addr = (ulong)packet;
> end = roundup(addr + length, ARCH_DMA_MINALIGN);
> addr &= ~(ARCH_DMA_MINALIGN - 1);
> flush_dcache_range(addr, end);
>
> writew(length, &fec->tbd_base[fec->tbd_index].data_length);
> - writel(addr, &fec->tbd_base[fec->tbd_index].data_pointer);
> + writel((uint32_t)addr, &fec->tbd_base[fec->tbd_index].data_pointer);
>
> /*
> * update BD's status now
> @@ -698,7 +703,7 @@ static int fec_send(struct eth_device *dev, void *packet, int length)
> * can start DMA.
> */
> size = roundup(2 * sizeof(struct fec_bd), ARCH_DMA_MINALIGN);
> - addr = (uint32_t)fec->tbd_base;
> + addr = (ulong)fec->tbd_base;
> flush_dcache_range(addr, addr + size);
>
> /*
> @@ -799,7 +804,7 @@ static int fec_recv(struct eth_device *dev)
> unsigned long ievent;
> int frame_length, len = 0;
> uint16_t bd_status;
> - uint32_t addr, size, end;
> + ulong addr, size, end;
> int i;
> ALLOC_CACHE_ALIGN_BUFFER(uchar, buff, FEC_MAX_PKT_SIZE);
>
> @@ -854,7 +859,7 @@ static int fec_recv(struct eth_device *dev)
> * the descriptor. The solution is to mark the whole cache line when all
> * descriptors in the cache line are processed.
> */
> - addr = (uint32_t)rbd;
> + addr = (ulong)rbd;
> addr &= ~(ARCH_DMA_MINALIGN - 1);
> size = roundup(sizeof(struct fec_bd), ARCH_DMA_MINALIGN);
> invalidate_dcache_range(addr, addr + size);
> @@ -882,8 +887,8 @@ static int fec_recv(struct eth_device *dev)
> len = frame_length;
> } else {
> if (bd_status & FEC_RBD_ERR)
> - debug("error frame: 0x%08x 0x%08x\n",
> - addr, bd_status);
> + debug("error frame: 0x%08lx 0x%08x\n",
> + addr, bd_status);
> }
>
> /*
> @@ -895,7 +900,7 @@ static int fec_recv(struct eth_device *dev)
> size = RXDESC_PER_CACHELINE - 1;
> if ((fec->rbd_index & size) == size) {
> i = fec->rbd_index - size;
> - addr = (uint32_t)&fec->rbd_base[i];
> + addr = (ulong)&fec->rbd_base[i];
> for (; i <= fec->rbd_index ; i++) {
> fec_rbd_clean(i == (FEC_RBD_NUM - 1),
> &fec->rbd_base[i]);
> @@ -922,6 +927,7 @@ static int fec_alloc_descs(struct fec_priv *fec)
> unsigned int size;
> int i;
> uint8_t *data;
> + ulong addr;
>
> /* Allocate TX descriptors. */
> size = roundup(2 * sizeof(struct fec_bd), ARCH_DMA_MINALIGN);
> @@ -950,11 +956,12 @@ static int fec_alloc_descs(struct fec_priv *fec)
>
> memset(data, 0, size);
>
> - fec->rbd_base[i].data_pointer = (uint32_t)data;
> + addr = (ulong)data;
> + fec->rbd_base[i].data_pointer = (uint32_t)addr;
> fec->rbd_base[i].status = FEC_RBD_EMPTY;
> fec->rbd_base[i].data_length = 0;
> /* Flush the buffer to memory. */
> - flush_dcache_range((uint32_t)data, (uint32_t)data + size);
> + flush_dcache_range(addr, addr + size);
> }
>
> /* Mark the last RBD to close the ring. */
> @@ -966,8 +973,10 @@ static int fec_alloc_descs(struct fec_priv *fec)
> return 0;
>
> err_ring:
> - for (; i >= 0; i--)
> - free((void *)fec->rbd_base[i].data_pointer);
> + for (; i >= 0; i--) {
> + addr = fec->rbd_base[i].data_pointer;
> + free((void *)addr);
> + }
> free(fec->rbd_base);
> err_rx:
> free(fec->tbd_base);
> @@ -978,9 +987,12 @@ err_tx:
> static void fec_free_descs(struct fec_priv *fec)
> {
> int i;
> + ulong addr;
>
> - for (i = 0; i < FEC_RBD_NUM; i++)
> - free((void *)fec->rbd_base[i].data_pointer);
> + for (i = 0; i < FEC_RBD_NUM; i++) {
> + addr = fec->rbd_base[i].data_pointer;
> + free((void *)addr);
> + }
> free(fec->rbd_base);
> free(fec->tbd_base);
> }
> @@ -995,7 +1007,7 @@ struct mii_dev *fec_get_miibus(uint32_t base_addr, int dev_id)
> struct fec_priv *priv = dev_get_priv(dev);
> struct ethernet_regs *eth = priv->eth;
> #else
> - struct ethernet_regs *eth = (struct ethernet_regs *)base_addr;
> + struct ethernet_regs *eth = (struct ethernet_regs *)(ulong)base_addr;
> #endif
> struct mii_dev *bus;
> int ret;
> @@ -1065,7 +1077,7 @@ static int fec_probe(bd_t *bd, int dev_id, uint32_t base_addr,
> edev->halt = fec_halt;
> edev->write_hwaddr = fec_set_hwaddr;
>
> - fec->eth = (struct ethernet_regs *)base_addr;
> + fec->eth = (struct ethernet_regs *)(ulong)base_addr;
> fec->bd = bd;
>
> fec->xcv_type = CONFIG_FEC_XCV_TYPE;
>
Reviewed-by: Stefano Babic <sbabic at denx.de>
Best regards,
Stefano Babic
--
=====================================================================
DENX Software Engineering GmbH, Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-53 Fax: +49-8142-66989-80 Email: sbabic at denx.de
=====================================================================
More information about the U-Boot
mailing list