mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-11 07:34:31 +00:00
drivers: net: keystone_net: drop non dm code
Networking support for all TI K2 boards converted to use DM model and CONFIG_DM_ETH enabled in all corresponding defconfig files, hence drop unused non DM K2 networking code. Reviewed-by: Tom Rini <trini@konsulko.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com> Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
This commit is contained in:
parent
6a256a8ed4
commit
af0cf2178b
8 changed files with 1 additions and 532 deletions
|
@ -242,18 +242,4 @@ struct mdio_regs {
|
|||
u32 userphysel1;
|
||||
};
|
||||
|
||||
struct eth_priv_t {
|
||||
char int_name[32];
|
||||
int rx_flow;
|
||||
int phy_addr;
|
||||
int slave_port;
|
||||
int sgmii_link_type;
|
||||
phy_interface_t phy_if;
|
||||
struct phy_device *phy_dev;
|
||||
};
|
||||
|
||||
int keystone2_emac_initialize(struct eth_priv_t *eth_priv);
|
||||
void sgmii_serdes_setup_156p25mhz(void);
|
||||
void sgmii_serdes_shutdown(void);
|
||||
|
||||
#endif /* _KEYSTONE_NET_H_ */
|
||||
|
|
|
@ -66,59 +66,6 @@ int board_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
|
||||
#ifndef CONFIG_DM_ETH
|
||||
int get_eth_env_param(char *env_name)
|
||||
{
|
||||
char *env;
|
||||
int res = -1;
|
||||
|
||||
env = env_get(env_name);
|
||||
if (env)
|
||||
res = simple_strtol(env, NULL, 0);
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
int board_eth_init(bd_t *bis)
|
||||
{
|
||||
int j;
|
||||
int res;
|
||||
int port_num;
|
||||
char link_type_name[32];
|
||||
|
||||
if (cpu_is_k2g())
|
||||
writel(KS2_ETHERNET_RGMII, KS2_ETHERNET_CFG);
|
||||
|
||||
/* By default, select PA PLL clock as PA clock source */
|
||||
#ifndef CONFIG_SOC_K2G
|
||||
if (psc_enable_module(KS2_LPSC_PA))
|
||||
return -1;
|
||||
#endif
|
||||
if (psc_enable_module(KS2_LPSC_CPGMAC))
|
||||
return -1;
|
||||
if (psc_enable_module(KS2_LPSC_CRYPTO))
|
||||
return -1;
|
||||
|
||||
if (cpu_is_k2e() || cpu_is_k2l())
|
||||
pll_pa_clk_sel();
|
||||
|
||||
port_num = get_num_eth_ports();
|
||||
|
||||
for (j = 0; j < port_num; j++) {
|
||||
sprintf(link_type_name, "sgmii%d_link_type", j);
|
||||
res = get_eth_env_param(link_type_name);
|
||||
if (res >= 0)
|
||||
eth_priv_cfg[j].sgmii_link_type = res;
|
||||
|
||||
keystone2_emac_initialize(ð_priv_cfg[j]);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SPL_BUILD
|
||||
void spl_board_init(void)
|
||||
{
|
||||
|
|
|
@ -12,8 +12,6 @@
|
|||
#include <asm/ti-common/keystone_net.h>
|
||||
#include "../common/board_detect.h"
|
||||
|
||||
extern struct eth_priv_t eth_priv_cfg[];
|
||||
|
||||
#if defined(CONFIG_TI_I2C_BOARD_DETECT)
|
||||
static inline int board_is_k2g_gp(void)
|
||||
{
|
||||
|
@ -38,7 +36,6 @@ static inline int board_is_k2g_ice(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
int get_num_eth_ports(void);
|
||||
void spl_init_keystone_plls(void);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -89,80 +89,6 @@ struct pll_init_data *get_pll_init_data(int pll)
|
|||
return data;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
|
||||
struct eth_priv_t eth_priv_cfg[] = {
|
||||
{
|
||||
.int_name = "K2E_EMAC0",
|
||||
.rx_flow = 0,
|
||||
.phy_addr = 0,
|
||||
.slave_port = 1,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2E_EMAC1",
|
||||
.rx_flow = 8,
|
||||
.phy_addr = 1,
|
||||
.slave_port = 2,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2E_EMAC2",
|
||||
.rx_flow = 16,
|
||||
.phy_addr = 2,
|
||||
.slave_port = 3,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2E_EMAC3",
|
||||
.rx_flow = 24,
|
||||
.phy_addr = 3,
|
||||
.slave_port = 4,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2E_EMAC4",
|
||||
.rx_flow = 32,
|
||||
.phy_addr = 4,
|
||||
.slave_port = 5,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2E_EMAC5",
|
||||
.rx_flow = 40,
|
||||
.phy_addr = 5,
|
||||
.slave_port = 6,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2E_EMAC6",
|
||||
.rx_flow = 48,
|
||||
.phy_addr = 6,
|
||||
.slave_port = 7,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2E_EMAC7",
|
||||
.rx_flow = 56,
|
||||
.phy_addr = 7,
|
||||
.slave_port = 8,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
};
|
||||
|
||||
int get_num_eth_ports(void)
|
||||
{
|
||||
return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MULTI_DTB_FIT)
|
||||
int board_fit_config_name_match(const char *name)
|
||||
{
|
||||
|
|
|
@ -354,24 +354,6 @@ void spl_init_keystone_plls(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
|
||||
struct eth_priv_t eth_priv_cfg[] = {
|
||||
{
|
||||
.int_name = "K2G_EMAC",
|
||||
.rx_flow = 0,
|
||||
.phy_addr = 0,
|
||||
.slave_port = 1,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
||||
.phy_if = PHY_INTERFACE_MODE_RGMII,
|
||||
},
|
||||
};
|
||||
|
||||
int get_num_eth_ports(void)
|
||||
{
|
||||
return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TI_SECURE_DEVICE
|
||||
void board_pmmc_image_process(ulong pmmc_image, size_t pmmc_size)
|
||||
{
|
||||
|
|
|
@ -96,48 +96,6 @@ struct pll_init_data *get_pll_init_data(int pll)
|
|||
return data;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
|
||||
struct eth_priv_t eth_priv_cfg[] = {
|
||||
{
|
||||
.int_name = "K2HK_EMAC",
|
||||
.rx_flow = 22,
|
||||
.phy_addr = 0,
|
||||
.slave_port = 1,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2HK_EMAC1",
|
||||
.rx_flow = 23,
|
||||
.phy_addr = 1,
|
||||
.slave_port = 2,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2HK_EMAC2",
|
||||
.rx_flow = 24,
|
||||
.phy_addr = 2,
|
||||
.slave_port = 3,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2HK_EMAC3",
|
||||
.rx_flow = 25,
|
||||
.phy_addr = 3,
|
||||
.slave_port = 4,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
};
|
||||
|
||||
int get_num_eth_ports(void)
|
||||
{
|
||||
return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOARD_EARLY_INIT_F
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
|
|
|
@ -84,48 +84,6 @@ struct pll_init_data *get_pll_init_data(int pll)
|
|||
return data;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DRIVER_TI_KEYSTONE_NET
|
||||
struct eth_priv_t eth_priv_cfg[] = {
|
||||
{
|
||||
.int_name = "K2L_EMAC",
|
||||
.rx_flow = 0,
|
||||
.phy_addr = 0,
|
||||
.slave_port = 1,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2L_EMAC1",
|
||||
.rx_flow = 8,
|
||||
.phy_addr = 1,
|
||||
.slave_port = 2,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_PHY,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2L_EMAC2",
|
||||
.rx_flow = 16,
|
||||
.phy_addr = 2,
|
||||
.slave_port = 3,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
{
|
||||
.int_name = "K2L_EMAC3",
|
||||
.rx_flow = 32,
|
||||
.phy_addr = 3,
|
||||
.slave_port = 4,
|
||||
.sgmii_link_type = SGMII_LINK_MAC_MAC_FORCED,
|
||||
.phy_if = PHY_INTERFACE_MODE_SGMII,
|
||||
},
|
||||
};
|
||||
|
||||
int get_num_eth_ports(void)
|
||||
{
|
||||
return sizeof(eth_priv_cfg) / sizeof(struct eth_priv_t);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_BOARD_EARLY_INIT_F
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
|
|
|
@ -24,12 +24,6 @@
|
|||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
#ifndef CONFIG_DM_ETH
|
||||
unsigned int emac_open;
|
||||
static struct mii_dev *mdio_bus;
|
||||
static unsigned int sys_has_mdio = 1;
|
||||
#endif
|
||||
|
||||
#ifdef KEYSTONE2_EMAC_GIG_ENABLE
|
||||
#define emac_gigabit_enable(x) keystone2_eth_gigabit_enable(x)
|
||||
#else
|
||||
|
@ -43,17 +37,6 @@ static unsigned int sys_has_mdio = 1;
|
|||
|
||||
static u8 rx_buffs[RX_BUFF_NUMS * RX_BUFF_LEN] __aligned(16);
|
||||
|
||||
#ifndef CONFIG_DM_ETH
|
||||
struct rx_buff_desc net_rx_buffs = {
|
||||
.buff_ptr = rx_buffs,
|
||||
.num_buffs = RX_BUFF_NUMS,
|
||||
.buff_len = RX_BUFF_LEN,
|
||||
.rx_flow = 22,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DM_ETH
|
||||
|
||||
enum link_type {
|
||||
LINK_TYPE_SGMII_MAC_TO_MAC_AUTO = 0,
|
||||
LINK_TYPE_SGMII_MAC_TO_PHY_MODE = 1,
|
||||
|
@ -83,7 +66,7 @@ enum link_type {
|
|||
#define DEVICE_EMACSW_BASE(base, x) ((base) + EMAC_EMACSW_PORT_BASE_OFS + \
|
||||
(x) * 0x30)
|
||||
|
||||
#elif defined CONFIG_KSNET_NETCP_V1_5
|
||||
#elif defined(CONFIG_KSNET_NETCP_V1_5)
|
||||
|
||||
#define EMAC_EMACSW_PORT_BASE_OFS 0x222000
|
||||
|
||||
|
@ -113,7 +96,6 @@ struct ks2_eth_priv {
|
|||
bool emac_open;
|
||||
bool has_mdio;
|
||||
};
|
||||
#endif
|
||||
|
||||
/* MDIO */
|
||||
|
||||
|
@ -184,31 +166,6 @@ static int keystone2_mdio_write(struct mii_dev *bus,
|
|||
return 0;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_DM_ETH
|
||||
static void __attribute__((unused))
|
||||
keystone2_eth_gigabit_enable(struct eth_device *dev)
|
||||
{
|
||||
u_int16_t data;
|
||||
struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
|
||||
|
||||
if (sys_has_mdio) {
|
||||
data = keystone2_mdio_read(mdio_bus, eth_priv->phy_addr,
|
||||
MDIO_DEVAD_NONE, 0);
|
||||
/* speed selection MSB */
|
||||
if (!(data & (1 << 6)))
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Check if link detected is giga-bit
|
||||
* If Gigabit mode detected, enable gigbit in MAC
|
||||
*/
|
||||
writel(readl(DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) +
|
||||
CPGMACSL_REG_CTL) |
|
||||
EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
|
||||
DEVICE_EMACSL_BASE(eth_priv->slave_port - 1) + CPGMACSL_REG_CTL);
|
||||
}
|
||||
#else
|
||||
static void __attribute__((unused))
|
||||
keystone2_eth_gigabit_enable(struct udevice *dev)
|
||||
{
|
||||
|
@ -232,7 +189,6 @@ static void __attribute__((unused))
|
|||
EMAC_MACCONTROL_GIGFORCE | EMAC_MACCONTROL_GIGABIT_ENABLE,
|
||||
DEVICE_EMACSL_BASE(priv->slave_port - 1) + CPGMACSL_REG_CTL);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_SOC_K2G
|
||||
int keystone_rgmii_config(struct phy_device *phy_dev)
|
||||
|
@ -497,246 +453,6 @@ static void keystone2_net_serdes_setup(void)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifndef CONFIG_DM_ETH
|
||||
|
||||
int keystone2_eth_read_mac_addr(struct eth_device *dev)
|
||||
{
|
||||
struct eth_priv_t *eth_priv;
|
||||
u32 maca = 0;
|
||||
u32 macb = 0;
|
||||
|
||||
eth_priv = (struct eth_priv_t *)dev->priv;
|
||||
|
||||
/* Read the e-fuse mac address */
|
||||
if (eth_priv->slave_port == 1) {
|
||||
maca = __raw_readl(MAC_ID_BASE_ADDR);
|
||||
macb = __raw_readl(MAC_ID_BASE_ADDR + 4);
|
||||
}
|
||||
|
||||
dev->enetaddr[0] = (macb >> 8) & 0xff;
|
||||
dev->enetaddr[1] = (macb >> 0) & 0xff;
|
||||
dev->enetaddr[2] = (maca >> 24) & 0xff;
|
||||
dev->enetaddr[3] = (maca >> 16) & 0xff;
|
||||
dev->enetaddr[4] = (maca >> 8) & 0xff;
|
||||
dev->enetaddr[5] = (maca >> 0) & 0xff;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int32_t cpmac_drv_send(u32 *buffer, int num_bytes, int slave_port_num)
|
||||
{
|
||||
if (num_bytes < EMAC_MIN_ETHERNET_PKT_SIZE)
|
||||
num_bytes = EMAC_MIN_ETHERNET_PKT_SIZE;
|
||||
|
||||
return ksnav_send(&netcp_pktdma, buffer,
|
||||
num_bytes, (slave_port_num) << 16);
|
||||
}
|
||||
|
||||
/* Eth device open */
|
||||
static int keystone2_eth_open(struct eth_device *dev, bd_t *bis)
|
||||
{
|
||||
struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
|
||||
struct phy_device *phy_dev = eth_priv->phy_dev;
|
||||
|
||||
debug("+ emac_open\n");
|
||||
|
||||
net_rx_buffs.rx_flow = eth_priv->rx_flow;
|
||||
|
||||
sys_has_mdio =
|
||||
(eth_priv->sgmii_link_type == SGMII_LINK_MAC_PHY) ? 1 : 0;
|
||||
|
||||
if (sys_has_mdio)
|
||||
keystone2_mdio_reset(mdio_bus);
|
||||
|
||||
#ifdef CONFIG_SOC_K2G
|
||||
keystone_rgmii_config(phy_dev);
|
||||
#else
|
||||
keystone_sgmii_config(phy_dev, eth_priv->slave_port - 1,
|
||||
eth_priv->sgmii_link_type);
|
||||
#endif
|
||||
|
||||
udelay(10000);
|
||||
|
||||
/* On chip switch configuration */
|
||||
ethss_config(target_get_switch_ctl(), SWITCH_MAX_PKT_SIZE);
|
||||
|
||||
/* TODO: add error handling code */
|
||||
if (qm_init()) {
|
||||
printf("ERROR: qm_init()\n");
|
||||
return -1;
|
||||
}
|
||||
if (ksnav_init(&netcp_pktdma, &net_rx_buffs)) {
|
||||
qm_close();
|
||||
printf("ERROR: netcp_init()\n");
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Streaming switch configuration. If not present this
|
||||
* statement is defined to void in target.h.
|
||||
* If present this is usually defined to a series of register writes
|
||||
*/
|
||||
hw_config_streaming_switch();
|
||||
|
||||
if (sys_has_mdio) {
|
||||
keystone2_mdio_reset(mdio_bus);
|
||||
|
||||
phy_startup(phy_dev);
|
||||
if (phy_dev->link == 0) {
|
||||
ksnav_close(&netcp_pktdma);
|
||||
qm_close();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
emac_gigabit_enable(dev);
|
||||
|
||||
ethss_start();
|
||||
|
||||
debug("- emac_open\n");
|
||||
|
||||
emac_open = 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Eth device close */
|
||||
void keystone2_eth_close(struct eth_device *dev)
|
||||
{
|
||||
struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
|
||||
struct phy_device *phy_dev = eth_priv->phy_dev;
|
||||
|
||||
debug("+ emac_close\n");
|
||||
|
||||
if (!emac_open)
|
||||
return;
|
||||
|
||||
ethss_stop();
|
||||
|
||||
ksnav_close(&netcp_pktdma);
|
||||
qm_close();
|
||||
phy_shutdown(phy_dev);
|
||||
|
||||
emac_open = 0;
|
||||
|
||||
debug("- emac_close\n");
|
||||
}
|
||||
|
||||
/*
|
||||
* This function sends a single packet on the network and returns
|
||||
* positive number (number of bytes transmitted) or negative for error
|
||||
*/
|
||||
static int keystone2_eth_send_packet(struct eth_device *dev,
|
||||
void *packet, int length)
|
||||
{
|
||||
int ret_status = -1;
|
||||
struct eth_priv_t *eth_priv = (struct eth_priv_t *)dev->priv;
|
||||
struct phy_device *phy_dev = eth_priv->phy_dev;
|
||||
|
||||
genphy_update_link(phy_dev);
|
||||
if (phy_dev->link == 0)
|
||||
return -1;
|
||||
|
||||
if (cpmac_drv_send((u32 *)packet, length, eth_priv->slave_port) != 0)
|
||||
return ret_status;
|
||||
|
||||
return length;
|
||||
}
|
||||
|
||||
/*
|
||||
* This function handles receipt of a packet from the network
|
||||
*/
|
||||
static int keystone2_eth_rcv_packet(struct eth_device *dev)
|
||||
{
|
||||
void *hd;
|
||||
int pkt_size;
|
||||
u32 *pkt;
|
||||
|
||||
hd = ksnav_recv(&netcp_pktdma, &pkt, &pkt_size);
|
||||
if (hd == NULL)
|
||||
return 0;
|
||||
|
||||
net_process_received_packet((uchar *)pkt, pkt_size);
|
||||
|
||||
ksnav_release_rxhd(&netcp_pktdma, hd);
|
||||
|
||||
return pkt_size;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MCAST_TFTP
|
||||
static int keystone2_eth_bcast_addr(struct eth_device *dev, u32 ip, u8 set)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* This function initializes the EMAC hardware.
|
||||
*/
|
||||
int keystone2_emac_initialize(struct eth_priv_t *eth_priv)
|
||||
{
|
||||
int res;
|
||||
struct eth_device *dev;
|
||||
struct phy_device *phy_dev;
|
||||
struct mdio_regs *adap_mdio = (struct mdio_regs *)EMAC_MDIO_BASE_ADDR;
|
||||
|
||||
dev = malloc(sizeof(struct eth_device));
|
||||
if (dev == NULL)
|
||||
return -1;
|
||||
|
||||
memset(dev, 0, sizeof(struct eth_device));
|
||||
|
||||
strcpy(dev->name, eth_priv->int_name);
|
||||
dev->priv = eth_priv;
|
||||
|
||||
keystone2_eth_read_mac_addr(dev);
|
||||
|
||||
dev->iobase = 0;
|
||||
dev->init = keystone2_eth_open;
|
||||
dev->halt = keystone2_eth_close;
|
||||
dev->send = keystone2_eth_send_packet;
|
||||
dev->recv = keystone2_eth_rcv_packet;
|
||||
#ifdef CONFIG_MCAST_TFTP
|
||||
dev->mcast = keystone2_eth_bcast_addr;
|
||||
#endif
|
||||
|
||||
eth_register(dev);
|
||||
|
||||
/* Register MDIO bus if it's not registered yet */
|
||||
if (!mdio_bus) {
|
||||
mdio_bus = mdio_alloc();
|
||||
mdio_bus->read = keystone2_mdio_read;
|
||||
mdio_bus->write = keystone2_mdio_write;
|
||||
mdio_bus->reset = keystone2_mdio_reset;
|
||||
mdio_bus->priv = (void *)EMAC_MDIO_BASE_ADDR;
|
||||
strcpy(mdio_bus->name, "ethernet-mdio");
|
||||
|
||||
res = mdio_register(mdio_bus);
|
||||
if (res)
|
||||
return res;
|
||||
}
|
||||
|
||||
#ifndef CONFIG_SOC_K2G
|
||||
keystone2_net_serdes_setup();
|
||||
#endif
|
||||
|
||||
/* Create phy device and bind it with driver */
|
||||
#ifdef CONFIG_KSNET_MDIO_PHY_CONFIG_ENABLE
|
||||
phy_dev = phy_connect(mdio_bus, eth_priv->phy_addr,
|
||||
dev, eth_priv->phy_if);
|
||||
phy_config(phy_dev);
|
||||
#else
|
||||
phy_dev = phy_find_by_mask(mdio_bus, 1 << eth_priv->phy_addr,
|
||||
eth_priv->phy_if);
|
||||
phy_dev->dev = dev;
|
||||
#endif
|
||||
eth_priv->phy_dev = phy_dev;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
static int ks2_eth_start(struct udevice *dev)
|
||||
{
|
||||
struct ks2_eth_priv *priv = dev_get_priv(dev);
|
||||
|
@ -1167,4 +883,3 @@ U_BOOT_DRIVER(eth_ks2) = {
|
|||
.platdata_auto_alloc_size = sizeof(struct eth_pdata),
|
||||
.flags = DM_FLAG_ALLOC_PRIV_DMA,
|
||||
};
|
||||
#endif
|
||||
|
|
Loading…
Reference in a new issue