diff options
author | Sudheer Kumar Amrabadi <samrabad@codeaurora.org> | 2022-10-13 08:51:22 +0530 |
---|---|---|
committer | Felix Held <felix-coreboot@felixheld.de> | 2022-12-13 14:35:21 +0000 |
commit | 8139fc4be5c52ab10af784733f000650dd848d74 (patch) | |
tree | 0e9def77b5c19e33ca731678426ce458e04752ac /src/soc/qualcomm/sc7280/socinfo.c | |
parent | 0110e1abe0ba8e723aa21e8e8fdbc4a27294a6b7 (diff) |
soc/qualcomm/sc7280: Add API to differentiate PRO and NON_PRO SKUs
The API socinfo_pro_part() returns 1 for Pro and 0 for NON_PRO SKUs. To
reduce the binary footprint for chipinfo structure, change its members
range from uint32_t to uint16_t. Add helper functions for reading and
matching jtagid. Modified socinfo_modem_supported() API to utilize
helper functions.
BUG=b:248187555
TEST=Validate boards are detected correctly on PRO and NON_PRO SKUs
Signed-off-by: Taniya Das <quic_tdas@quicinc.com>
Change-Id: Id9f23696384a6c1a89000292eafebd8a16c273ca
Reviewed-on: https://review.coreboot.org/c/coreboot/+/68384
Reviewed-by: Shelley Chen <shchen@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Diffstat (limited to 'src/soc/qualcomm/sc7280/socinfo.c')
-rw-r--r-- | src/soc/qualcomm/sc7280/socinfo.c | 88 |
1 files changed, 63 insertions, 25 deletions
diff --git a/src/soc/qualcomm/sc7280/socinfo.c b/src/soc/qualcomm/sc7280/socinfo.c index 6e66abea67..80462373fb 100644 --- a/src/soc/qualcomm/sc7280/socinfo.c +++ b/src/soc/qualcomm/sc7280/socinfo.c @@ -10,37 +10,75 @@ #define JTAG_OFFSET 0xB1014 static struct chipinfo chipinfolut[] = { - { CHIPINFO_ID_SM_KODIAK, CHIPINFO_PARTNUM_SM_KODIAK, CHIPINFO_MODEM_SUPPORTED}, - { CHIPINFO_ID_SC_KODIAK_CHROME, CHIPINFO_PARTNUM_SC_KODIAK_CHROME, - CHIPINFO_MODEM_SUPPORTED }, - { CHIPINFO_ID_SC_KODIAK_WINDOWS, CHIPINFO_PARTNUM_SC_KODIAK_WINDOWS, - CHIPINFO_MODEM_SUPPORTED}, - { CHIPINFO_ID_QCM_KODIAK, CHIPINFO_PARTNUM_QCM_KODIAK, CHIPINFO_MODEM_SUPPORTED }, - { CHIPINFO_ID_QCS_KODIAK, CHIPINFO_PARTNUM_QCS_KODIAK, CHIPINFO_MODEM_UNKNOWN }, - { CHIPINFO_ID_SMP_KODIAK, CHIPINFO_PARTNUM_SMP_KODIAK, CHIPINFO_MODEM_UNKNOWN }, - { CHIPINFO_ID_SM_KODIAK_LTE_ONLY, CHIPINFO_PARTNUM_SM_KODIAK_LTE_ONLY, - CHIPINFO_MODEM_SUPPORTED }, - { CHIPINFO_ID_SCP_KODIAK, CHIPINFO_PARTNUM_SCP_KODIAK, CHIPINFO_MODEM_UNKNOWN }, - { CHIPINFO_ID_SC_8CGEN3, CHIPINFO_PARTNUM_SC_8CGEN3, CHIPINFO_MODEM_SUPPORTED }, - { CHIPINFO_ID_SCP_8CGEN3, CHIPINFO_PARTNUM_SCP_8CGEN3, CHIPINFO_MODEM_UNKNOWN }, - { CHIPINFO_ID_KODIAK_SCP_7CGEN3, CHIPINFO_PARTNUM_KODIAK_SCP_7CGEN3, - CHIPINFO_MODEM_UNKNOWN }, - { CHIPINFO_ID_QCS_KODIAK_LITE, CHIPINFO_PARTNUM_QCS_KODIAK_LITE, - CHIPINFO_MODEM_UNKNOWN }, - { CHIPINFO_ID_QCM_KODIAK_LITE, CHIPINFO_PARTNUM_QCM_KODIAK_LITE, - CHIPINFO_MODEM_UNKNOWN }, + /* CHIPINFO_ID_SM_KODIAK = 475 */ + { .jtagid = CHIPINFO_PARTNUM_SM_KODIAK, .modem = 1, .pro = 0 }, + /* CHIPINFO_ID_SC_KODIAK_CHROME = 487 */ + { .jtagid = CHIPINFO_PARTNUM_SC_KODIAK_CHROME, .modem = 1, .pro = 0 }, + /* CHIPINFO_ID_SC_KODIAK_WINDOWS = 488 */ + { .jtagid = CHIPINFO_PARTNUM_SC_KODIAK_WINDOWS, .modem = 1, .pro = 0 }, + /* CHIPINFO_ID_QCM_KODIAK = 497 */ + { .jtagid = CHIPINFO_PARTNUM_QCM_KODIAK, .modem = 1, .pro = 0 }, + /* CHIPINFO_ID_QCS_KODIAK = 498 */ + { .jtagid = CHIPINFO_PARTNUM_QCS_KODIAK, .modem = 0, .pro = 0 }, + /* CHIPINFO_ID_SMP_KODIAK = 499 */ + { .jtagid = CHIPINFO_PARTNUM_SMP_KODIAK, .modem = 0, .pro = 0 }, + /* CHIPINFO_ID_SM_KODIAK_LTE_ONLY = 515 */ + { .jtagid = CHIPINFO_PARTNUM_SM_KODIAK_LTE_ONLY, .modem = 1, .pro = 0 }, + /* CHIPINFO_ID_SCP_KODIAK = 546 */ + { .jtagid = CHIPINFO_PARTNUM_SCP_KODIAK, .modem = 0, .pro = 0 }, + /* CHIPINFO_ID_SC_8CGEN3 = 553 */ + { .jtagid = CHIPINFO_PARTNUM_SC_8CGEN3, .modem = 1, .pro = 1 }, + /* CHIPINFO_ID_SCP_8CGEN3 = 563 */ + { .jtagid = CHIPINFO_PARTNUM_SCP_8CGEN3, .modem = 0, .pro = 1 }, + /* CHIPINFO_ID_KODIAK_SCP_7CGEN3 = 567 */ + { .jtagid = CHIPINFO_PARTNUM_KODIAK_SCP_7CGEN3, .modem = 0, .pro = 0 }, + /* CHIPINFO_ID_QCS_KODIAK_LITE = 575 */ + { .jtagid = CHIPINFO_PARTNUM_QCS_KODIAK_LITE, .modem = 0, .pro = 0 }, + /* CHIPINFO_ID_QCM_KODIAK_LITE = 576 */ + { .jtagid = CHIPINFO_PARTNUM_QCM_KODIAK_LITE, .modem = 0, .pro = 0 }, }; -bool socinfo_modem_supported(void) +static uint16_t read_jtagid(void) { - uint32_t jtagid; - int i; + return (read32((void *)(TLMM_TILE_BASE + JTAG_OFFSET)) & DEVICE_ID); +} - jtagid = read32((void *)(TLMM_TILE_BASE + JTAG_OFFSET)) & DEVICE_ID; +static int match_jtagid(uint16_t jtagid) +{ + int i; for (i = 0; i < ARRAY_SIZE(chipinfolut); i++) if (chipinfolut[i].jtagid == jtagid) - return chipinfolut[i].modem; + return i; + + return -1; +} + +uint16_t socinfo_modem_supported(void) +{ + uint16_t jtagid; + int ret; + + jtagid = read_jtagid(); + + ret = match_jtagid(jtagid); + if (ret != -1) + return chipinfolut[ret].modem; + + die("could not match jtagid\n"); +} + +uint16_t socinfo_pro_part(void) +{ + uint16_t jtagid; + int ret; + + jtagid = read_jtagid(); + + ret = match_jtagid(jtagid); + if (ret != -1) + return chipinfolut[ret].pro; + + die("could not match jtagid\n"); - return false; } |