soc/intel/alderlake: Add get_adl_cpu_type function

This function searches the known MCH device IDs for Alder Lake and
returns the appropriate enum value representing ADL-P, ADL-M, ADL-S, or
unknown.

Signed-off-by: Tim Wawrzynczak <twawrzynczak@chromium.org>
Change-Id: I26354b340e0c5f15ba246c1cb831d7feaf62d2ee
Reviewed-on: https://review.coreboot.org/c/coreboot/+/57151
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
This commit is contained in:
Tim Wawrzynczak 2021-07-30 10:37:55 -06:00
parent 1fc92dee52
commit 6cf79d9d14
2 changed files with 66 additions and 0 deletions

View File

@ -8,6 +8,7 @@
#include <console/console.h>
#include <device/pci.h>
#include <device/pci_ids.h>
#include <cpu/x86/lapic.h>
#include <cpu/x86/mp.h>
#include <cpu/x86/msr.h>
@ -131,3 +132,59 @@ void soc_init_cpus(struct bus *cpu_bus)
/* Thermal throttle activation offset */
configure_tcc_thermal_target();
}
enum adl_cpu_type get_adl_cpu_type(void)
{
const uint16_t adl_m_mch_ids[] = {
PCI_DEVICE_ID_INTEL_ADL_M_ID_1,
PCI_DEVICE_ID_INTEL_ADL_M_ID_2,
};
const uint16_t adl_p_mch_ids[] = {
PCI_DEVICE_ID_INTEL_ADL_P_ID_1,
PCI_DEVICE_ID_INTEL_ADL_P_ID_3,
PCI_DEVICE_ID_INTEL_ADL_P_ID_4,
PCI_DEVICE_ID_INTEL_ADL_P_ID_5,
PCI_DEVICE_ID_INTEL_ADL_P_ID_6,
PCI_DEVICE_ID_INTEL_ADL_P_ID_7,
PCI_DEVICE_ID_INTEL_ADL_P_ID_8,
PCI_DEVICE_ID_INTEL_ADL_P_ID_9,
};
const uint16_t adl_s_mch_ids[] = {
PCI_DEVICE_ID_INTEL_ADL_S_ID_1,
PCI_DEVICE_ID_INTEL_ADL_S_ID_2,
PCI_DEVICE_ID_INTEL_ADL_S_ID_3,
PCI_DEVICE_ID_INTEL_ADL_S_ID_4,
PCI_DEVICE_ID_INTEL_ADL_S_ID_5,
PCI_DEVICE_ID_INTEL_ADL_S_ID_6,
PCI_DEVICE_ID_INTEL_ADL_S_ID_7,
PCI_DEVICE_ID_INTEL_ADL_S_ID_8,
PCI_DEVICE_ID_INTEL_ADL_S_ID_9,
PCI_DEVICE_ID_INTEL_ADL_S_ID_10,
PCI_DEVICE_ID_INTEL_ADL_S_ID_11,
PCI_DEVICE_ID_INTEL_ADL_S_ID_12,
PCI_DEVICE_ID_INTEL_ADL_S_ID_13,
PCI_DEVICE_ID_INTEL_ADL_S_ID_14,
PCI_DEVICE_ID_INTEL_ADL_S_ID_15,
};
const uint16_t mchid = pci_s_read_config16(PCI_DEV(0, PCI_SLOT(SA_DEVFN_ROOT),
PCI_FUNC(SA_DEVFN_ROOT)),
PCI_DEVICE_ID);
for (size_t i = 0; i < ARRAY_SIZE(adl_p_mch_ids); i++) {
if (adl_p_mch_ids[i] == mchid)
return ADL_P;
}
for (size_t i = 0; i < ARRAY_SIZE(adl_m_mch_ids); i++) {
if (adl_m_mch_ids[i] == mchid)
return ADL_M;
}
for (size_t i = 0; i < ARRAY_SIZE(adl_s_mch_ids); i++) {
if (adl_s_mch_ids[i] == mchid)
return ADL_S;
}
return ADL_UNKNOWN;
}

View File

@ -19,4 +19,13 @@
#define C9_POWER 0xc8
#define C10_POWER 0xc8
enum adl_cpu_type {
ADL_UNKNOWN,
ADL_M,
ADL_P,
ADL_S,
};
enum adl_cpu_type get_adl_cpu_type(void);
#endif