From 317399366e039d6796ad721ebb5ac5b121d2582a Mon Sep 17 00:00:00 2001 From: Angel Pons Date: Fri, 3 Jul 2020 23:14:40 +0200 Subject: 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 Reviewed-on: https://review.coreboot.org/c/coreboot/+/43123 Reviewed-by: Patrick Rudolph Tested-by: build bot (Jenkins) --- src/southbridge/intel/lynxpoint/pch.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'src/southbridge/intel/lynxpoint/pch.c') diff --git a/src/southbridge/intel/lynxpoint/pch.c b/src/southbridge/intel/lynxpoint/pch.c index e3c5bb2ef0..0a0e489d6f 100644 --- a/src/southbridge/intel/lynxpoint/pch.c +++ b/src/southbridge/intel/lynxpoint/pch.c @@ -40,19 +40,25 @@ int pch_silicon_id(void) return pch_id; } -int pch_silicon_type(void) +enum pch_platform_type get_pch_platform_type(void) { - static int pch_type = -1; + const u16 did = pci_read_config16(pch_get_lpc_device(), PCI_DEVICE_ID); - if (pch_type < 0) - pch_type = pci_read_config8(pch_get_lpc_device(), - PCI_DEVICE_ID + 1); - return pch_type; + /* 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) { - return pch_silicon_type() == PCH_TYPE_LPT_LP; + return get_pch_platform_type() == PCH_TYPE_ULT; } u16 get_pmbase(void) -- cgit v1.2.3