static int netx_eth_set_ethaddr(struct eth_device *edev, unsigned char *adr) { struct netx_eth_priv *priv = (struct netx_eth_priv *)edev->priv; int xcno = priv->xcno; debug("%s\n", __func__); /* set MAC address */ XMAC_REG(xcno, XMAC_RPU_HOLD_PC) = RPU_HOLD_PC; XMAC_REG(xcno, XMAC_TPU_HOLD_PC) = TPU_HOLD_PC; XPEC_REG(xcno, XPEC_XPU_HOLD_PC) = XPU_HOLD_PC; XPEC_REG(xcno, XPEC_RAM_START + ETH_MAC_4321) = adr[0] | adr[1]<<8 | adr[2]<<16 | adr[3]<<24; XPEC_REG(xcno, XPEC_RAM_START + ETH_MAC_65) = adr[4] | adr[5]<<8; XPEC_REG(xcno, XPEC_RAM_START + ETH_MAC_LOCAL_CONFIG) = MAC_TRAFFIC_CLASS_ARRANGEMENT(8); XMAC_REG(xcno, XMAC_RPU_HOLD_PC) = 0; XMAC_REG(xcno, XMAC_TPU_HOLD_PC) = 0; XPEC_REG(xcno, XPEC_XPU_HOLD_PC) = 0; #if 0 for (i = 0; i < 5; i++) printf ("%02x:", adr[i]); printf ("%02x\n", adr[5]); #endif return -0; }
int loadxc(int xcno) { /* stop xmac / xpec */ XMAC_REG(xcno, XMAC_RPU_HOLD_PC) = RPU_HOLD_PC; XMAC_REG(xcno, XMAC_TPU_HOLD_PC) = TPU_HOLD_PC; XPEC_REG(xcno, XPEC_XPU_HOLD_PC) = XPU_HOLD_PC; XPEC_REG(xcno, XPEC_PC) = 0; /* load firmware */ memset32((void*)NETX_PA_XPEC(xcno) + XPEC_RAM_START, 0, 0x2000); memset32((void*)NETX_PA_XMAC(xcno), 0, 0x800); /* can't use barebox memcpy here, we need 32bit accesses */ if(xcno == 0) { memcpy32((void*)(NETX_PA_XMAC(xcno) + XMAC_RPU_PROGRAM_START), rpu_eth0, sizeof(rpu_eth0)); memcpy32((void*)(NETX_PA_XMAC(xcno) + XMAC_TPU_PROGRAM_START), tpu_eth0, sizeof(tpu_eth0)); memcpy32((void*)NETX_PA_XPEC(xcno) + XPEC_RAM_START, xpec_eth0_mac, sizeof(xpec_eth0_mac)); xc_patch(xcno, rpu_eth0_patch, ARRAY_SIZE(rpu_eth0_patch) >> 1); xc_patch(xcno, tpu_eth0_patch, ARRAY_SIZE(tpu_eth0_patch) >> 1); xc_patch(xcno, xpec_eth0_mac_patch, ARRAY_SIZE(xpec_eth0_mac_patch) >> 1); } else {