diff options
author | Evan Lojewski <github@meklort.com> | 2021-05-16 12:27:55 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-05-16 12:27:55 -0600 |
commit | 1f727249f766bb6267235d28cecc4bb9164a63cf (patch) | |
tree | 779d3549a4d1c23a03e73c2ce80d57c476b6b23b | |
parent | 99349782cdfe690c2a5b8f0d4c07111a898aa51b (diff) | |
download | bcm5719-ortega-1f727249f766bb6267235d28cecc4bb9164a63cf.tar.gz bcm5719-ortega-1f727249f766bb6267235d28cecc4bb9164a63cf.zip |
stage1: Fix an issue that resulted in FreeBSD failing to read out a valid MAC address. (#216)
-rw-r--r-- | include/bcm5719_GEN.h | 35 | ||||
-rw-r--r-- | ipxact/bcm5719.xml | 19 | ||||
-rw-r--r-- | simulator/bcm5719_GEN.cpp | 2 | ||||
-rw-r--r-- | simulator/bcm5719_GEN_sim.cpp | 2 | ||||
-rw-r--r-- | stage1/init_hw.c | 6 |
5 files changed, 60 insertions, 4 deletions
diff --git a/include/bcm5719_GEN.h b/include/bcm5719_GEN.h index 8fc9d01..dceabbb 100644 --- a/include/bcm5719_GEN.h +++ b/include/bcm5719_GEN.h @@ -10,7 +10,7 @@ /// //////////////////////////////////////////////////////////////////////////////// /// -/// @copyright Copyright (c) 2020, Evan Lojewski +/// @copyright Copyright (c) 2021, Evan Lojewski /// @cond /// /// All rights reserved. @@ -525,10 +525,37 @@ typedef register_container RegGENGenBc_t { } RegGENGenBc_t; #define REG_GEN_GEN_MAC_ADDR_HIGH_MBOX ((volatile BCM5719_GEN_H_uint32_t*)0xc14) /* */ +#define GEN_GEN_MAC_ADDR_HIGH_MBOX_HIGH_SHIFT 0u +#define GEN_GEN_MAC_ADDR_HIGH_MBOX_HIGH_MASK 0xffffu +#define GET_GEN_GEN_MAC_ADDR_HIGH_MBOX_HIGH(__reg__) (((__reg__) & 0xffff) >> 0u) +#define SET_GEN_GEN_MAC_ADDR_HIGH_MBOX_HIGH(__val__) (((__val__) << 0u) & 0xffffu) +#define GEN_GEN_MAC_ADDR_HIGH_MBOX_MAGIC_SHIFT 16u +#define GEN_GEN_MAC_ADDR_HIGH_MBOX_MAGIC_MASK 0xffff0000u +#define GET_GEN_GEN_MAC_ADDR_HIGH_MBOX_MAGIC(__reg__) (((__reg__) & 0xffff0000) >> 16u) +#define SET_GEN_GEN_MAC_ADDR_HIGH_MBOX_MAGIC(__val__) (((__val__) << 16u) & 0xffff0000u) +#define GEN_GEN_MAC_ADDR_HIGH_MBOX_MAGIC_VALID 0x484bu + + /** @brief Register definition for @ref GEN_t.GenMacAddrHighMbox. */ typedef register_container RegGENGenMacAddrHighMbox_t { /** @brief 32bit direct register access. */ BCM5719_GEN_H_uint32_t r32; + + BITFIELD_BEGIN(BCM5719_GEN_H_uint32_t, bits) +#if defined(__LITTLE_ENDIAN__) + /** @brief */ + BITFIELD_MEMBER(BCM5719_GEN_H_uint32_t, High, 0, 16) + /** @brief Must be set for FreeBSD to consider the MAC address valid. */ + BITFIELD_MEMBER(BCM5719_GEN_H_uint32_t, Magic, 16, 16) +#elif defined(__BIG_ENDIAN__) + /** @brief Must be set for FreeBSD to consider the MAC address valid. */ + BITFIELD_MEMBER(BCM5719_GEN_H_uint32_t, Magic, 16, 16) + /** @brief */ + BITFIELD_MEMBER(BCM5719_GEN_H_uint32_t, High, 0, 16) +#else +#error Unknown Endian +#endif + BITFIELD_END(BCM5719_GEN_H_uint32_t, bits) #ifdef CXX_SIMULATOR /** @brief Register name for use with the simulator. */ const char* getName(void) { return "GenMacAddrHighMbox"; } @@ -540,6 +567,12 @@ typedef register_container RegGENGenMacAddrHighMbox_t { { /** @brief constructor for @ref GEN_t.GenMacAddrHighMbox. */ r32.setName("GenMacAddrHighMbox"); + bits.High.setBaseRegister(&r32); + bits.High.setName("High"); + bits.Magic.setBaseRegister(&r32); + bits.Magic.setName("Magic"); + bits.Magic.addEnum("Valid", 0x484b); + } RegGENGenMacAddrHighMbox_t& operator=(const RegGENGenMacAddrHighMbox_t& other) { diff --git a/ipxact/bcm5719.xml b/ipxact/bcm5719.xml index 4315328..600afaf 100644 --- a/ipxact/bcm5719.xml +++ b/ipxact/bcm5719.xml @@ -257,6 +257,25 @@ <!-- LINK: registerDefinitionGroup: see 6.11.3, Register definition group --> <ipxact:size>32</ipxact:size> <ipxact:volatile>true</ipxact:volatile> + <ipxact:field> + <ipxact:name>High</ipxact:name> + <ipxact:description></ipxact:description> + <ipxact:bitOffset>0</ipxact:bitOffset> + <ipxact:bitWidth>16</ipxact:bitWidth> + </ipxact:field> + <ipxact:field> + <ipxact:name>Magic</ipxact:name> + <ipxact:description>Must be set for FreeBSD to consider the MAC address valid.</ipxact:description> + <ipxact:bitOffset>16</ipxact:bitOffset> + <ipxact:bitWidth>16</ipxact:bitWidth> + <ipxact:enumeratedValues> + <!-- LINK: enumeratedValue: see 6.11.10, Enumeration values --> + <ipxact:enumeratedValue> + <ipxact:name>Valid</ipxact:name> + <ipxact:value>0x484B</ipxact:value> + </ipxact:enumeratedValue> + </ipxact:enumeratedValues> + </ipxact:field> </ipxact:register> <ipxact:register> <ipxact:name>GEN_MAC_ADDR_LOW_MBOX</ipxact:name> diff --git a/simulator/bcm5719_GEN.cpp b/simulator/bcm5719_GEN.cpp index ad657bd..97e5e86 100644 --- a/simulator/bcm5719_GEN.cpp +++ b/simulator/bcm5719_GEN.cpp @@ -10,7 +10,7 @@ /// //////////////////////////////////////////////////////////////////////////////// /// -/// @copyright Copyright (c) 2020, Evan Lojewski +/// @copyright Copyright (c) 2021, Evan Lojewski /// @cond /// /// All rights reserved. diff --git a/simulator/bcm5719_GEN_sim.cpp b/simulator/bcm5719_GEN_sim.cpp index 7ebc1d2..2ac1d27 100644 --- a/simulator/bcm5719_GEN_sim.cpp +++ b/simulator/bcm5719_GEN_sim.cpp @@ -10,7 +10,7 @@ /// //////////////////////////////////////////////////////////////////////////////// /// -/// @copyright Copyright (c) 2020, Evan Lojewski +/// @copyright Copyright (c) 2021, Evan Lojewski /// @cond /// /// All rights reserved. diff --git a/stage1/init_hw.c b/stage1/init_hw.c index ff04a85..c047271 100644 --- a/stage1/init_hw.c +++ b/stage1/init_hw.c @@ -230,7 +230,11 @@ void init_mac(const NVRAMContents_t *nvram) // Store mac / serial number. DEVICE.PciSerialNumberHigh.r32 = my_mac[0]; - GEN.GenMacAddrHighMbox.r32 = my_mac[0]; + RegGENGenMacAddrHighMbox_t mboxhigh; + mboxhigh.r32 = 0; + mboxhigh.bits.High = my_mac[0]; + mboxhigh.bits.Magic = GEN_GEN_MAC_ADDR_HIGH_MBOX_MAGIC_VALID; + GEN.GenMacAddrHighMbox = mboxhigh; DEVICE.PciSerialNumberLow.r32 = my_mac[1]; GEN.GenMacAddrLowMbox.r32 = my_mac[1]; |