aboutsummaryrefslogtreecommitdiff
path: root/src/mainboard/siemens/mc_tcu3/mainboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mainboard/siemens/mc_tcu3/mainboard.c')
-rw-r--r--src/mainboard/siemens/mc_tcu3/mainboard.c40
1 files changed, 39 insertions, 1 deletions
diff --git a/src/mainboard/siemens/mc_tcu3/mainboard.c b/src/mainboard/siemens/mc_tcu3/mainboard.c
index 8a966dcc84..e9c29a07b5 100644
--- a/src/mainboard/siemens/mc_tcu3/mainboard.c
+++ b/src/mainboard/siemens/mc_tcu3/mainboard.c
@@ -29,9 +29,47 @@
#include <arch/io.h>
#include <arch/interrupt.h>
#include <boot/coreboot_tables.h>
-
+#include <hwilib.h>
#include "lcd_panel.h"
+
+/** \brief This function will search for a MAC address which can be assigned
+ * to a MACPHY.
+ * @param pci_bdf Bus, device and function of the given PCI-device
+ * @param mac buffer where to store the MAC address
+ * @return cb_err CB_ERR or CB_SUCCESS
+ */
+enum cb_err mainboard_get_mac_address(u16 bus, u8 devfn, u8 mac[6])
+{
+ uint8_t mac_adr[6];
+ u32 i;
+
+ /* Open main hwinfo block */
+ if (hwilib_find_blocks("hwinfo.hex") != CB_SUCCESS)
+ return CB_ERR;
+ /* Get first MAC address from hwinfo. */
+ if (hwilib_get_field(Mac1, mac_adr, sizeof(mac_adr)) != sizeof(mac_adr))
+ return CB_ERR;
+ /* Ensure the first MAC-Address is not completely 0x00 or 0xff */
+ for (i = 0; i < 6; i++) {
+ if (mac_adr[i] != 0xFF)
+ break;
+ }
+ if (i == 6){
+ return CB_ERR;
+ }
+ for (i = 0; i < 6; i++) {
+ if (mac_adr[i] != 0x00)
+ break;
+ }
+ if (i == 6){
+ return CB_ERR;
+ } else {
+ memcpy(mac, mac_adr, 6);
+ return CB_SUCCESS;
+ }
+}
+
/*
* mainboard_enable is executed as first thing after enumerate_buses().
* This is the earliest point to add customization.