summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvan Lojewski <github@meklort.com>2021-05-16 12:27:55 -0600
committerGitHub <noreply@github.com>2021-05-16 12:27:55 -0600
commit1f727249f766bb6267235d28cecc4bb9164a63cf (patch)
tree779d3549a4d1c23a03e73c2ce80d57c476b6b23b
parent99349782cdfe690c2a5b8f0d4c07111a898aa51b (diff)
downloadbcm5719-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.h35
-rw-r--r--ipxact/bcm5719.xml19
-rw-r--r--simulator/bcm5719_GEN.cpp2
-rw-r--r--simulator/bcm5719_GEN_sim.cpp2
-rw-r--r--stage1/init_hw.c6
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];
OpenPOWER on IntegriCloud