1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 251b572a8SNobuhiro Iwamatsu /* 351b572a8SNobuhiro Iwamatsu * Copyright (C) 2008 Nobuhiro Iwamatsu 451b572a8SNobuhiro Iwamatsu * Copyright (C) 2008 Renesas Solutions Corp. 551b572a8SNobuhiro Iwamatsu * 651b572a8SNobuhiro Iwamatsu * u-boot/board/rsk7203/rsk7203.c 751b572a8SNobuhiro Iwamatsu */ 851b572a8SNobuhiro Iwamatsu 951b572a8SNobuhiro Iwamatsu #include <common.h> 10a794f59aSJean-Christophe PLAGNIOL-VILLARD #include <net.h> 11736fead8SBen Warren #include <netdev.h> 1251b572a8SNobuhiro Iwamatsu #include <asm/io.h> 1351b572a8SNobuhiro Iwamatsu #include <asm/processor.h> 1451b572a8SNobuhiro Iwamatsu checkboard(void)1551b572a8SNobuhiro Iwamatsuint checkboard(void) 1651b572a8SNobuhiro Iwamatsu { 1751b572a8SNobuhiro Iwamatsu puts("BOARD: Renesas Technology RSK7203\n"); 1851b572a8SNobuhiro Iwamatsu return 0; 1951b572a8SNobuhiro Iwamatsu } 2051b572a8SNobuhiro Iwamatsu board_init(void)2151b572a8SNobuhiro Iwamatsuint board_init(void) 2251b572a8SNobuhiro Iwamatsu { 2351b572a8SNobuhiro Iwamatsu return 0; 2451b572a8SNobuhiro Iwamatsu } 2551b572a8SNobuhiro Iwamatsu led_set_state(unsigned short value)2651b572a8SNobuhiro Iwamatsuvoid led_set_state(unsigned short value) 2751b572a8SNobuhiro Iwamatsu { 2851b572a8SNobuhiro Iwamatsu } 2951b572a8SNobuhiro Iwamatsu 3051b572a8SNobuhiro Iwamatsu /* 3151b572a8SNobuhiro Iwamatsu * The RSK board has the SMSC9118 wired up 'incorrectly'. 3251b572a8SNobuhiro Iwamatsu * Byte-swapping is necessary, and so poor performance is inevitable. 3351b572a8SNobuhiro Iwamatsu * This problem cannot evade by the swap function of CHIP, this can 3451b572a8SNobuhiro Iwamatsu * evade by software Byte-swapping. 3551b572a8SNobuhiro Iwamatsu * And this has problem by FIFO access only. pkt_data_pull/pkt_data_push 3651b572a8SNobuhiro Iwamatsu * functions necessary to solve this problem. 3751b572a8SNobuhiro Iwamatsu */ pkt_data_pull(struct eth_device * dev,u32 addr)38736fead8SBen Warrenu32 pkt_data_pull(struct eth_device *dev, u32 addr) 3951b572a8SNobuhiro Iwamatsu { 40736fead8SBen Warren volatile u16 *addr_16 = (u16 *)(dev->iobase + addr); 4151b572a8SNobuhiro Iwamatsu return (u32)((swab16(*addr_16) << 16) & 0xFFFF0000)\ 4251b572a8SNobuhiro Iwamatsu | swab16(*(addr_16 + 1)); 4351b572a8SNobuhiro Iwamatsu } 4451b572a8SNobuhiro Iwamatsu pkt_data_push(struct eth_device * dev,u32 addr,u32 val)45736fead8SBen Warrenvoid pkt_data_push(struct eth_device *dev, u32 addr, u32 val) 4651b572a8SNobuhiro Iwamatsu { 47736fead8SBen Warren addr += dev->iobase; 4851b572a8SNobuhiro Iwamatsu *(volatile u16 *)(addr + 2) = swab16((u16)val); 4951b572a8SNobuhiro Iwamatsu *(volatile u16 *)(addr) = swab16((u16)(val >> 16)); 5051b572a8SNobuhiro Iwamatsu } 51736fead8SBen Warren board_eth_init(bd_t * bis)52736fead8SBen Warrenint board_eth_init(bd_t *bis) 53736fead8SBen Warren { 54736fead8SBen Warren int rc = 0; 55736fead8SBen Warren #ifdef CONFIG_SMC911X 56736fead8SBen Warren rc = smc911x_initialize(0, CONFIG_SMC911X_BASE); 57736fead8SBen Warren #endif 58736fead8SBen Warren return rc; 59736fead8SBen Warren } 60