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
21512183struct 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 */
23472379static 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