aboutsummaryrefslogtreecommitdiff
path: root/hw/centaur.c
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2020-04-02 22:13:54 +1100
committerOliver O'Halloran <oohall@gmail.com>2020-04-08 14:38:33 +1000
commit9b612fff557f67f001b4772c180a50a9cb92e6bb (patch)
tree096c013c91df2cda3cd0a10db8f142fb3b63a3f2 /hw/centaur.c
parent7b57002d3f5fd45caeb53240bf401803c528b865 (diff)
downloadskiboot-9b612fff557f67f001b4772c180a50a9cb92e6bb.zip
skiboot-9b612fff557f67f001b4772c180a50a9cb92e6bb.tar.gz
skiboot-9b612fff557f67f001b4772c180a50a9cb92e6bb.tar.bz2
hw/centaur: Convert to use the new scom API
Currently we assume any xscom_read / write targeted at a chipid with 0x8 as the top four bits is intended to be a centaur SCOM. On non-P8 platforms there is no reason to assume this so covert it to use the new struct scom_controller infrastructure. Signed-off-by: Oliver O'Halloran <oohall@gmail.com>
Diffstat (limited to 'hw/centaur.c')
-rw-r--r--hw/centaur.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/hw/centaur.c b/hw/centaur.c
index c79dd7f..e9ff419 100644
--- a/hw/centaur.c
+++ b/hw/centaur.c
@@ -307,9 +307,11 @@ static int centaur_xscom_ind_write(struct centaur_chip *centaur,
return rc;
}
-int64_t centaur_xscom_read(uint32_t id, uint64_t pcb_addr, uint64_t *val)
+static int64_t centaur_xscom_read(struct scom_controller *scom,
+ uint32_t id __unused, uint64_t pcb_addr,
+ uint64_t *val)
{
- struct centaur_chip *centaur = get_centaur(id);
+ struct centaur_chip *centaur = scom->private;
int64_t rc;
if (!centaur)
@@ -349,9 +351,11 @@ int64_t centaur_xscom_read(uint32_t id, uint64_t pcb_addr, uint64_t *val)
return rc;
}
-int64_t centaur_xscom_write(uint32_t id, uint64_t pcb_addr, uint64_t val)
+static int64_t centaur_xscom_write(struct scom_controller *scom,
+ uint32_t id __unused, uint64_t pcb_addr,
+ uint64_t val)
{
- struct centaur_chip *centaur = get_centaur(id);
+ struct centaur_chip *centaur = scom->private;
int64_t rc;
if (!centaur)
@@ -463,6 +467,12 @@ static bool centaur_add(uint32_t part_id, uint32_t mchip, uint32_t meng,
if (!centaur_check_id(centaur))
return false;
+ centaur->scom.part_id = part_id;
+ centaur->scom.private = centaur;
+ centaur->scom.read = centaur_xscom_read;
+ centaur->scom.write = centaur_xscom_write;
+ scom_register(&centaur->scom);
+
cent_log(PR_INFO, centaur, "Found DD%x.%x chip\n",
centaur->ec_level >> 4,
centaur->ec_level & 0xf);