mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 10:58:48 +09:00
ethernet: stmicro: stmmac: dwmac-rk: Support more ethernet mac address
The RK3568 has two gmac, but the driver only support one mac address right now, define the more ethernet mac address at vendor storage to support it. Change-Id: If47df961136da6fe13ede1e5817717db2c0ad2f6 Signed-off-by: David Wu <david.wu@rock-chips.com>
This commit is contained in:
@@ -26,6 +26,8 @@
|
||||
#include "stmmac_platform.h"
|
||||
#include "dwmac-rk-tool.h"
|
||||
|
||||
#define MAX_ETH 2
|
||||
|
||||
struct rk_priv_data;
|
||||
struct rk_gmac_ops {
|
||||
void (*set_to_rgmii)(struct rk_priv_data *bsp_priv,
|
||||
@@ -1824,31 +1826,43 @@ EXPORT_SYMBOL(dwmac_rk_get_phy_interface);
|
||||
|
||||
static void rk_get_eth_addr(void *priv, unsigned char *addr)
|
||||
{
|
||||
int ret;
|
||||
struct rk_priv_data *bsp_priv = priv;
|
||||
struct device *dev = &bsp_priv->pdev->dev;
|
||||
unsigned char ethaddr[ETH_ALEN * MAX_ETH] = {0};
|
||||
int ret, id = bsp_priv->bus_id;
|
||||
|
||||
if (is_valid_ether_addr(addr))
|
||||
goto out;
|
||||
|
||||
ret = rk_vendor_read(LAN_MAC_ID, addr, 6);
|
||||
if (ret != 6 || is_zero_ether_addr(addr)) {
|
||||
dev_err(dev, "%s: rk_vendor_read eth mac address failed (%d)",
|
||||
__func__, ret);
|
||||
random_ether_addr(addr);
|
||||
dev_err(dev, "%s: generate random eth mac address: %02x:%02x:%02x:%02x:%02x:%02x",
|
||||
__func__, addr[0], addr[1], addr[2],
|
||||
addr[3], addr[4], addr[5]);
|
||||
ret = rk_vendor_write(LAN_MAC_ID, addr, 6);
|
||||
if (id < 0 || id >= MAX_ETH) {
|
||||
dev_err(dev, "%s: Invalid ethernet bus id %d\n", __func__, id);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = rk_vendor_read(LAN_MAC_ID, ethaddr, ETH_ALEN * MAX_ETH);
|
||||
if (ret <= 0 ||
|
||||
!is_valid_ether_addr(ðaddr[id * ETH_ALEN])) {
|
||||
dev_err(dev, "%s: rk_vendor_read eth mac address failed (%d)\n",
|
||||
__func__, ret);
|
||||
random_ether_addr(ðaddr[id * ETH_ALEN]);
|
||||
memcpy(addr, ðaddr[id * ETH_ALEN], ETH_ALEN);
|
||||
dev_err(dev, "%s: generate random eth mac address: %pM\n", __func__, addr);
|
||||
|
||||
ret = rk_vendor_write(LAN_MAC_ID, ethaddr, ETH_ALEN * MAX_ETH);
|
||||
if (ret != 0)
|
||||
dev_err(dev, "%s: rk_vendor_write eth mac address failed (%d)",
|
||||
__func__, ret);
|
||||
dev_err(dev, "%s: rk_vendor_write eth mac address failed (%d)\n",
|
||||
__func__, ret);
|
||||
|
||||
ret = rk_vendor_read(LAN_MAC_ID, ethaddr, ETH_ALEN * MAX_ETH);
|
||||
if (ret != ETH_ALEN * MAX_ETH)
|
||||
dev_err(dev, "%s: id: %d rk_vendor_read eth mac address failed (%d)\n",
|
||||
__func__, id, ret);
|
||||
} else {
|
||||
memcpy(addr, ðaddr[id * ETH_ALEN], ETH_ALEN);
|
||||
}
|
||||
|
||||
out:
|
||||
dev_err(dev, "%s: mac address: %02x:%02x:%02x:%02x:%02x:%02x",
|
||||
__func__, addr[0], addr[1], addr[2],
|
||||
addr[3], addr[4], addr[5]);
|
||||
dev_err(dev, "%s: mac address: %pM\n", __func__, addr);
|
||||
}
|
||||
|
||||
static int rk_gmac_probe(struct platform_device *pdev)
|
||||
|
||||
Reference in New Issue
Block a user