Skip to content

Commit

Permalink
hw/centaur: Convert to use the new scom API
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
oohal committed Apr 8, 2020
1 parent 7b57002 commit 9b612ff
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 10 deletions.
18 changes: 14 additions & 4 deletions hw/centaur.c
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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);
Expand Down
4 changes: 0 additions & 4 deletions hw/xscom.c
Expand Up @@ -667,8 +667,6 @@ int _xscom_read(uint32_t partid, uint64_t pcb_addr, uint64_t *val, bool take_loc
case 0: /* Normal processor chip */
gcid = partid;
break;
case 8: /* Centaur */
return centaur_xscom_read(partid, pcb_addr, val);
case 4: /* EX chiplet */
gcid = xscom_decode_chiplet(partid, &pcb_addr);
if (pcb_addr == 0)
Expand Down Expand Up @@ -730,8 +728,6 @@ int _xscom_write(uint32_t partid, uint64_t pcb_addr, uint64_t val, bool take_loc
case 0: /* Normal processor chip */
gcid = partid;
break;
case 8: /* Centaur */
return centaur_xscom_write(partid, pcb_addr, val);
case 4: /* EX chiplet */
gcid = xscom_decode_chiplet(partid, &pcb_addr);
break;
Expand Down
4 changes: 2 additions & 2 deletions include/centaur.h
Expand Up @@ -22,15 +22,15 @@ struct centaur_chip {
uint32_t error_count;
struct lock lock;

struct scom_controller scom;

/* Used by hw/p8-i2c.c */
struct list_head i2cms;
};

extern int64_t centaur_disable_sensor_cache(uint32_t part_id);
extern int64_t centaur_enable_sensor_cache(uint32_t part_id);

extern int64_t centaur_xscom_read(uint32_t id, uint64_t pcb_addr, uint64_t *val) __warn_unused_result;
extern int64_t centaur_xscom_write(uint32_t id, uint64_t pcb_addr, uint64_t val) __warn_unused_result;
extern void centaur_init(void);

extern struct centaur_chip *get_centaur(uint32_t part_id);
Expand Down

0 comments on commit 9b612ff

Please sign in to comment.