Felix Held has uploaded this change for review. ( https://review.coreboot.org/c/coreboot/+/72861 )
Change subject: soc/amd/phoenix/soc_util: add get_soc_type ......................................................................
soc/amd/phoenix/soc_util: add get_soc_type
Implement a get_soc_type function to determine if the silicon the code is running on is Phoenix or Phoenix 2. This will for example be needed to provide the correct DXIO descriptor table for the SoC.
Signed-off-by: Felix Held felix-coreboot@felixheld.de Change-Id: I5f2b668b83432426b04e7f1354b694ddd6c300d6 --- M src/soc/amd/phoenix/Makefile.inc A src/soc/amd/phoenix/include/soc/soc_util.h A src/soc/amd/phoenix/soc_util.c 3 files changed, 50 insertions(+), 0 deletions(-)
git pull ssh://review.coreboot.org:29418/coreboot refs/changes/61/72861/1
diff --git a/src/soc/amd/phoenix/Makefile.inc b/src/soc/amd/phoenix/Makefile.inc index 84825d0..de465a2 100644 --- a/src/soc/amd/phoenix/Makefile.inc +++ b/src/soc/amd/phoenix/Makefile.inc @@ -26,6 +26,7 @@ romstage-y += gpio.c romstage-y += i2c.c romstage-y += romstage.c +romstage-y += soc_util.c romstage-y += uart.c
ramstage-y += acpi.c @@ -38,6 +39,7 @@ ramstage-y += i2c.c ramstage-y += mca.c ramstage-y += root_complex.c +ramstage-y += soc_util.c ramstage-y += uart.c ramstage-y += xhci.c
diff --git a/src/soc/amd/phoenix/include/soc/soc_util.h b/src/soc/amd/phoenix/include/soc/soc_util.h new file mode 100644 index 0000000..9c6ee14 --- /dev/null +++ b/src/soc/amd/phoenix/include/soc/soc_util.h @@ -0,0 +1,14 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#ifndef AMD_PHOENIX_SOC_UTIL_H +#define AMD_PHOENIX_SOC_UTIL_ + +enum soc_type { + SOC_PHOENIX, + SOC_PHOENIX2, + SOC_UNKNOWN, +}; + +enum soc_type get_soc_type(void); + +#endif /* AMD_PHOENIX_SOC_UTIL_H */ diff --git a/src/soc/amd/phoenix/soc_util.c b/src/soc/amd/phoenix/soc_util.c new file mode 100644 index 0000000..e5677fc --- /dev/null +++ b/src/soc/amd/phoenix/soc_util.c @@ -0,0 +1,20 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ + +#include <cpu/cpu.h> +#include <soc/cpu.h> +#include <soc/soc_util.h> +#include <types.h> + +enum soc_type get_soc_type(void) +{ + uint32_t cpuid = cpuid_eax(1); + + if (cpuid_match(cpuid, PHOENIX_A0_CPUID, CPUID_ALL_STEPPINGS_MASK)) + return SOC_PHOENIX; + + + if (cpuid_match(cpuid, PHOENIX2_A0_CPUID, CPUID_ALL_STEPPINGS_MASK)) + return SOC_PHOENIX2; + + return SOC_UNKNOWN; +}