aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorJoel Stanley <joel@jms.id.au>2022-05-17 18:16:21 +0930
committerReza Arbab <arbab@linux.ibm.com>2022-05-23 10:19:24 -0500
commitf8c505a4c89ed80308467330e92433208f557637 (patch)
tree0682cd4637e4fa906e3e814043a54e58cae68960 /hw
parent96123f169950b53e5e92483b9f993e96135fef79 (diff)
downloadskiboot-f8c505a4c89ed80308467330e92433208f557637.zip
skiboot-f8c505a4c89ed80308467330e92433208f557637.tar.gz
skiboot-f8c505a4c89ed80308467330e92433208f557637.tar.bz2
xscom: Move p9 ec level parsing to a function
In preparation for adding p10 logic. No functional change. Reviewed-by: Dan HorĂ¡k <dan@danny.cz> Signed-off-by: Joel Stanley <joel@jms.id.au> Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Reza Arbab <arbab@linux.ibm.com>
Diffstat (limited to 'hw')
-rw-r--r--hw/xscom.c74
1 files changed, 44 insertions, 30 deletions
diff --git a/hw/xscom.c b/hw/xscom.c
index 530ac95..25e3359 100644
--- a/hw/xscom.c
+++ b/hw/xscom.c
@@ -841,6 +841,48 @@ int64_t xscom_read_cfam_chipid(uint32_t partid, uint32_t *chip_id)
return rc;
}
+static uint8_t xscom_get_ec_rev(struct proc_chip *chip)
+{
+ uint64_t ecid2 = 0;
+ uint8_t rev;
+
+ if (chip_quirk(QUIRK_MAMBO_CALLOUTS))
+ return 0;
+
+ switch (proc_gen) {
+ case proc_gen_p9:
+ break;
+ default:
+ return 0;
+ }
+
+ xscom_read(chip->id, 0x18002, &ecid2);
+ switch ((ecid2 >> 45) & 7) {
+ case 0:
+ rev = 0;
+ break;
+ case 1:
+ rev = 1;
+ break;
+ case 3:
+ rev = 2;
+ break;
+ case 7:
+ rev = 3;
+ break;
+ default:
+ rev = 0;
+ }
+
+ prlog(PR_INFO, "P%d DD%i.%i%d detected\n",
+ 9,
+ 0xf & (chip->ec_level >> 4),
+ chip->ec_level & 0xf,
+ rev);
+
+ return rev;
+}
+
static void xscom_init_chip_info(struct proc_chip *chip)
{
uint32_t val;
@@ -892,36 +934,8 @@ static void xscom_init_chip_info(struct proc_chip *chip)
chip->ec_level = ((val >> 16) & 0xf) << 4;
chip->ec_level |= (val >> 8) & 0xf;
- /*
- * On P9, grab the ECID bits to differenciate
- * DD1.01, 1.02, 2.00, etc...
- */
- if (chip_quirk(QUIRK_MAMBO_CALLOUTS)) {
- chip->ec_rev = 0;
- } else if (proc_gen == proc_gen_p9) {
- uint64_t ecid2 = 0;
- uint8_t rev;
- xscom_read(chip->id, 0x18002, &ecid2);
- switch((ecid2 >> 45) & 7) {
- case 0:
- rev = 0;
- break;
- case 1:
- rev = 1;
- break;
- case 3:
- rev = 2;
- break;
- case 7:
- rev = 3;
- break;
- default:
- rev = 0;
- }
- prlog(PR_INFO,"P9 DD%i.%i%d detected\n", 0xf & (chip->ec_level >> 4),
- chip->ec_level & 0xf, rev);
- chip->ec_rev = rev;
- } /* XXX P10 */
+ /* Grab the ECID bits to differentiate DD1.01, 1.02, 2.00, etc... */
+ chip->ec_rev = xscom_get_ec_rev(chip);
}
/*