From 0853c91c7dfee0795c6f4b65ce980863437d5b51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ky=C3=B6sti=20M=C3=A4lkki?= Date: Mon, 16 Jan 2017 19:50:28 +0200 Subject: [PATCH] UPSTREAM: pcengines/apu2: Add serial number in SMBIOS BUG=none BRANCH=none TEST=none Change-Id: I906361ecf939bb36ec395f4fb762a5b7fc6bb712 Signed-off-by: Patrick Georgi Original-Commit-Id: 01bf599ea86abb360b0a57b892484dbb9c3ba387 Original-Change-Id: Ic8149b1dd19d70935e00881cffa7ead0960d1c78 Original-Signed-off-by: Kysti Mlkki Original-Reviewed-on: https://review.coreboot.org/18154 Original-Tested-by: build bot (Jenkins) Original-Reviewed-by: Piotr Krl Reviewed-on: https://chromium-review.googlesource.com/430624 Commit-Ready: Aaron Durbin Tested-by: Aaron Durbin Reviewed-by: Aaron Durbin --- src/mainboard/pcengines/apu2/mainboard.c | 32 ++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/mainboard/pcengines/apu2/mainboard.c b/src/mainboard/pcengines/apu2/mainboard.c index 742135571a..d2ab63822b 100644 --- a/src/mainboard/pcengines/apu2/mainboard.c +++ b/src/mainboard/pcengines/apu2/mainboard.c @@ -190,6 +190,38 @@ static void mainboard_enable(device_t dev) pirq_setup(); } +/* + * We will stuff a modified version of the first NICs (BDF 1:0.0) MAC address + * into the smbios serial number location. + */ +const char *smbios_mainboard_serial_number(void) +{ + static char serial[10]; + device_t nic_dev; + uintptr_t bar10; + u32 mac_addr = 0; + int i; + + nic_dev = dev_find_slot(1, PCI_DEVFN(0, 0)); + if ((serial[0] != 0) || !nic_dev) + return serial; + + /* Read in the last 3 bytes of NIC's MAC address. */ + bar10 = pci_read_config32(nic_dev, 0x10); + bar10 &= 0xFFFE0000; + bar10 += 0x5400; + for (i = 3; i < 6; i++) { + mac_addr <<= 8; + mac_addr |= read8((u8 *)bar10 + i); + } + mac_addr &= 0x00FFFFFF; + mac_addr /= 4; + mac_addr -= 64; + + snprintf(serial, sizeof(serial), "%d", mac_addr); + return serial; +} + /* * We will stuff the memory size into the smbios sku location. */