diff options
author | Angel Pons <th3fanbus@gmail.com> | 2020-07-03 23:14:40 +0200 |
---|---|---|
committer | Angel Pons <th3fanbus@gmail.com> | 2020-07-12 10:08:54 +0000 |
commit | 317399366e039d6796ad721ebb5ac5b121d2582a (patch) | |
tree | 55b445fc9508a630dee76cca97ef0f6c5ca3fe6c /src/southbridge/intel/lynxpoint/early_pch.c | |
parent | 1be9f5841dabd42a740fe23a77ea128fa8d0835d (diff) | |
download | coreboot-317399366e039d6796ad721ebb5ac5b121d2582a.tar.xz |
sb/intel/lynxpoint: Add PCH platform type function
Current code only cares whether the PCH is LP or not. However, MRC wants
to differentiate between desktop and non-LP mobile platforms as well. As
the PCH is soldered onto the mainboard, add a facility to retrieve which
platform coreboot is running on by checking the PCH's LPC device ID. The
only user of the `pch_silicon_type` function is the `pch_is_lp` function
so replace the former with the new `get_pch_platform_type` function. The
function needs to be defined in both romstage and ramstage where PCI ops
have different signatures, hence the two copies.
Change-Id: Ib6276e0069eaa069a365faf6ae02dd934307d36c
Signed-off-by: Angel Pons <th3fanbus@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/43123
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/southbridge/intel/lynxpoint/early_pch.c')
-rw-r--r-- | src/southbridge/intel/lynxpoint/early_pch.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/southbridge/intel/lynxpoint/early_pch.c b/src/southbridge/intel/lynxpoint/early_pch.c index 92cbf0176f..80b8939c5a 100644 --- a/src/southbridge/intel/lynxpoint/early_pch.c +++ b/src/southbridge/intel/lynxpoint/early_pch.c @@ -18,10 +18,25 @@ extern const struct pch_lp_gpio_map mainboard_gpio_map[]; #include <southbridge/intel/common/gpio.h> #endif +enum pch_platform_type get_pch_platform_type(void) +{ + const u16 did = pci_read_config16(PCH_LPC_DEV, PCI_DEVICE_ID); + + /* Check if this is a LPT-LP or WPT-LP device ID */ + if ((did & 0xff00) == 0x9c00) + return PCH_TYPE_ULT; + + /* Non-LP laptop SKUs have an odd device ID (least significant bit is one) */ + if (did & 1) + return PCH_TYPE_MOBILE; + + /* Desktop and Server SKUs have an even device ID */ + return PCH_TYPE_DESKTOP; +} + int pch_is_lp(void) { - u8 id = pci_read_config8(PCH_LPC_DEV, PCI_DEVICE_ID + 1); - return id == PCH_TYPE_LPT_LP; + return get_pch_platform_type() == PCH_TYPE_ULT; } static void pch_enable_bars(void) |