Skip to content

Commit 9e2aaeb

Browse files
dgarskedanielinux
authored andcommitted
Fix for NXP T1024 to get MAC address from Integrity OS ethernet configuration area in flash.
1 parent 85b5963 commit 9e2aaeb

1 file changed

Lines changed: 41 additions & 7 deletions

File tree

hal/nxp_t1024.c

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@
5858
#define ENABLE_ESPI /* SPI for TPM */
5959
#endif
6060
#define ENABLE_MP /* multi-core support */
61+
62+
/* Booting Integrity OS */
63+
#define RTOS_INTEGRITY_OS
6164
#endif
6265

6366
#define USE_ERRATA_DDRA008378
@@ -2145,8 +2148,37 @@ enum phy_interface {
21452148
PHY_INTERFACE_MODE_XGMII,
21462149
};
21472150

2148-
/* TODO: Ethenet MAC should be dynamic value */
2149-
static const uint8_t DEFAULT_MAC_ADDR[6] = {0xDC, 0xA7, 0xD9, 0x00, 0x06, 0xF4};
2151+
static int hal_get_mac_addr(int phy_addr, uint8_t* mac_addr)
2152+
{
2153+
int ret = 0;
2154+
phy_addr--; /* convert to zero based */
2155+
if (phy_addr < 0 || phy_addr > 3) {
2156+
return -1;
2157+
}
2158+
#ifdef RTOS_INTEGRITY_OS
2159+
/* Integrity OS Ethernet Configuration in Flash */
2160+
#ifndef ETHERNET_CONFIG_ADDR
2161+
#define ETHERNET_CONFIG_ADDR 0xED0E0000
2162+
#endif
2163+
/* Mac Addr offsets for each port */
2164+
static const uint32_t etherAdd[4] = {
2165+
ETHERNET_CONFIG_ADDR + 408,
2166+
ETHERNET_CONFIG_ADDR + 372,
2167+
ETHERNET_CONFIG_ADDR + 336,
2168+
ETHERNET_CONFIG_ADDR + 300
2169+
};
2170+
memcpy(mac_addr, (void*)etherAdd[phy_addr], 6);
2171+
#else
2172+
#ifndef DEFAULT_MAC_ADDR
2173+
#define DEFAULT_MAC_ADDR {0xDC, 0xA7, 0xD9, 0x00, 0x06, 0xF4}
2174+
#endif
2175+
static const uint8_t defaultMacAddr[6] = DEFAULT_MAC_ADDR;
2176+
memcpy(mac_addr, defaultMacAddr, sizeof(defaultMacAddr));
2177+
mac_addr[5] += phy_addr; /* increment by port number */
2178+
#endif
2179+
return ret;
2180+
}
2181+
21502182

21512183
struct phy_device {
21522184
uint8_t phyaddr;
@@ -2346,22 +2378,25 @@ static const char* hal_phy_vendor_str(uint32_t id)
23462378
/* Support for TI DP83867IS */
23472379
static int hal_phy_init(struct phy_device *phydev)
23482380
{
2349-
int ret = 0;
2381+
int ret;
23502382
uint32_t val, val2;
23512383

23522384
/* Set MAC address */
23532385
/* Example MAC 0x12345678ABCD is:
23542386
* MAC_ADDR0 of 0x78563412
23552387
* MAC_ADDR1 of 0x0000CDAB */
2356-
memcpy(phydev->mac_addr, DEFAULT_MAC_ADDR, sizeof(DEFAULT_MAC_ADDR));
2357-
phydev->mac_addr[5] += phydev->phyaddr;
2388+
ret = hal_get_mac_addr(phydev->phyaddr, phydev->mac_addr);
23582389

23592390
wolfBoot_printf("PHY %d: %s, Mac %x:%x:%x:%x:%x:%x\n",
23602391
phydev->phyaddr, hal_phy_interface_str(phydev->interface),
23612392
phydev->mac_addr[0], phydev->mac_addr[1],
23622393
phydev->mac_addr[2], phydev->mac_addr[3],
23632394
phydev->mac_addr[4], phydev->mac_addr[5]);
23642395

2396+
if (ret != 0) {
2397+
return ret;
2398+
}
2399+
23652400
/* Mask all interrupt */
23662401
set32(FMAN_MEMAC_IMASK(phydev->phyaddr), 0x00000000);
23672402

@@ -2421,7 +2456,6 @@ static int hal_phy_init(struct phy_device *phydev)
24212456
val = (uint16_t)hal_phy_read(phydev, MDIO_DEVAD_NONE, MII_PHYIDR1);
24222457
val <<= 16;
24232458
val |= (uint16_t)hal_phy_read(phydev, MDIO_DEVAD_NONE, MII_PHYIDR2);
2424-
//0x2000a231
24252459
wolfBoot_printf("PHY %d: %s (OUI %x, Mdl %x, Rev %x)\n",
24262460
phydev->phyaddr, hal_phy_vendor_str(val),
24272461
(val >> 10), ((val >> 4) & 0x3F), (val & 0xF)
@@ -2439,7 +2473,7 @@ static int hal_phy_init(struct phy_device *phydev)
24392473
if (phy_interface_is_rgmii(phydev)) {
24402474
val = ((DP83867_MDI_CROSSOVER_AUTO << DP83867_MDI_CROSSOVER) |
24412475
(DP83867_PHYCR_FIFO_DEPTH_4_B_NIB << DP83867_PHYCR_FIFO_DEPTH_SHIFT));
2442-
ret = hal_phy_write(phydev, MDIO_DEVAD_NONE, MII_DP83867_PHYCTRL, val);
2476+
hal_phy_write(phydev, MDIO_DEVAD_NONE, MII_DP83867_PHYCTRL, val);
24432477
#ifdef DEBUG_PHY
24442478
val = hal_phy_read(phydev, MDIO_DEVAD_NONE, MII_DP83867_PHYCTRL);
24452479
wolfBoot_printf("MII_DP83867_PHYCTRL=0x%x\n", val);

0 commit comments

Comments
 (0)