From 0424c95a6dafdb65070538d6c5aa394b75eb9850 Mon Sep 17 00:00:00 2001 From: Aaron Durbin Date: Sat, 28 Mar 2015 23:56:22 -0500 Subject: fmap: new API using region_device Instead of being pointer based use the region infrastrucutre. Additionally, this removes the need for arch-specific compilation paths. The users of the new API can use the region APIs to memory map or read the region provided by the new fmap API. Change-Id: Ie36e9ff9cb554234ec394b921f029eeed6845aee Signed-off-by: Aaron Durbin Reviewed-on: http://review.coreboot.org/9170 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi --- src/mainboard/google/butterfly/mainboard.c | 41 +++++++++++++++++------------- src/mainboard/google/panther/lan.c | 25 ++++++++++++------ 2 files changed, 41 insertions(+), 25 deletions(-) (limited to 'src/mainboard') diff --git a/src/mainboard/google/butterfly/mainboard.c b/src/mainboard/google/butterfly/mainboard.c index bd2fbd5218..e09336d675 100644 --- a/src/mainboard/google/butterfly/mainboard.c +++ b/src/mainboard/google/butterfly/mainboard.c @@ -20,11 +20,13 @@ #include #include +#include #include #include #include #include #include +#include #include #include #include @@ -36,11 +38,6 @@ #include #include #include -#if CONFIG_CHROMEOS -#include -#else -#include -#endif static unsigned int search(char *p, char *a, unsigned int lengthp, unsigned int lengtha) @@ -200,20 +197,30 @@ static void mainboard_init(device_t dev) size_t search_length = -1; u16 io_base = 0; struct device *ethernet_dev = NULL; -#if CONFIG_CHROMEOS - char **vpd_region_ptr = NULL; - search_length = find_fmap_entry("RO_VPD", (void **)vpd_region_ptr); - search_address = (unsigned long)(*vpd_region_ptr); -#else - void *vpd_file = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, "vpd.bin", - CBFS_TYPE_RAW, &search_length); - if (vpd_file) { - search_address = (unsigned long)vpd_file; + void *vpd_file; + + if (IS_ENABLED(CONFIG_CHROMEOS)) { + struct region_device rdev; + + if (fmap_locate_area_as_rdev("RO_VPD", &rdev) == 0) { + vpd_file = rdev_mmap_full(&rdev); + + if (vpd_file != NULL) { + search_length = region_device_sz(&rdev); + search_address = (uintptr_t)vpd_file; + } + } } else { - search_length = -1; - search_address = 0; + vpd_file = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, + "vpd.bin", CBFS_TYPE_RAW, + &search_length); + if (vpd_file) { + search_address = (unsigned long)vpd_file; + } else { + search_length = -1; + search_address = 0; + } } -#endif /* Initialize the Embedded Controller */ butterfly_ec_init(); diff --git a/src/mainboard/google/panther/lan.c b/src/mainboard/google/panther/lan.c index 9fd325f5d2..8a648cb250 100644 --- a/src/mainboard/google/panther/lan.c +++ b/src/mainboard/google/panther/lan.c @@ -24,8 +24,8 @@ #include #include #include +#include #include -#include #include "onboard.h" static unsigned int search(char *p, u8 *a, unsigned int lengthp, @@ -117,15 +117,24 @@ static void program_mac_address(u16 io_base) u32 high_dword = 0xD0BA00A0; /* high dword of mac address */ u32 low_dword = 0x0000AD0B; /* low word of mac address as a dword */ -#if CONFIG_CHROMEOS - search_length = find_fmap_entry("RO_VPD", &search_address); -#else - search_address = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, "vpd.bin", - CBFS_TYPE_RAW, &search_length); -#endif + if (IS_ENABLED(CONFIG_CHROMEOS)) { + struct region_device rdev; + + if (fmap_locate_area_as_rdev("RO_VPD", &rdev) == 0) { + search_address = rdev_mmap_full(&rdev); + + if (search_address != NULL) + search_length = region_device_sz(&rdev); + } + } else { + search_address = cbfs_get_file_content(CBFS_DEFAULT_MEDIA, + "vpd.bin", + CBFS_TYPE_RAW, + &search_length); + } if (search_length <= 0) - printk(BIOS_ERR, "LAN: find_fmap_entry returned -1.\n"); + printk(BIOS_ERR, "LAN: VPD not found.\n"); else get_mac_address(&high_dword, &low_dword, search_address, search_length); -- cgit v1.2.3