diff mbox series

[3/5] opal: Get chip part-number and serial-number.

Message ID 159599165853.67334.17196614937783713785.stgit@jupiter
State Changes Requested
Headers show
Series Add support to report EEH errors to BMC/FSP (eSEL) | expand

Checks

Context Check Description
snowpatch_ozlabs/apply_patch success Successfully applied on branch master (abe4c4799ffee4be12674ad59fc0bc521b0724f3)
snowpatch_ozlabs/snowpatch_job_snowpatch-skiboot success Test snowpatch/job/snowpatch-skiboot on branch master
snowpatch_ozlabs/snowpatch_job_snowpatch-skiboot-dco success Signed-off-by present

Commit Message

Mahesh J Salgaonkar July 29, 2020, 3 a.m. UTC
From: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>

Get chip part-number and serial-number and store it under proc_chip for
quick reference while sending error log that needs proc chip FRU details.

Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
---
 core/chip.c    |   13 +++++++++++++
 include/chip.h |   28 ++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

Comments

Oliver O'Halloran July 29, 2020, 7:16 a.m. UTC | #1
On Wed, Jul 29, 2020 at 1:01 PM Mahesh Salgaonkar <mahesh@linux.ibm.com> wrote:
>
> From: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
>
> Get chip part-number and serial-number and store it under proc_chip for
> quick reference while sending error log that needs proc chip FRU details.
>
> Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
> ---
>  core/chip.c    |   13 +++++++++++++
>  include/chip.h |   28 ++++++++++++++++++++++++++++
>  2 files changed, 41 insertions(+)
>
> diff --git a/core/chip.c b/core/chip.c
> index 191432d29..8e97a7bcd 100644
> --- a/core/chip.c
> +++ b/core/chip.c
> @@ -63,6 +63,8 @@ static void init_chip(struct dt_node *dn)
>         struct proc_chip *chip;
>         uint32_t id;
>         const char *lc = NULL;
> +       const char *part_no = NULL;
> +       const char *serial_no = NULL;
>
>         id = dt_get_chip_id(dn);
>         assert(id < MAX_CHIPS);

> @@ -93,6 +95,17 @@ static void init_chip(struct dt_node *dn)
>         if (lc)
>                 chip->loc_code = strdup(lc);
>
> +       /* Update part number and serial number for this chip */
> +       if (dt_has_node_property(dn, "part-number", NULL))
> +               part_no = dt_prop_get(dn, "part-number");
> +       if (part_no)
> +               chip->part_no = strdup(part_no);
> +
> +       if (dt_has_node_property(dn, "serial-number", NULL))
> +               serial_no = dt_prop_get(dn, "serial-number");
> +       if (serial_no)
> +               chip->serial_no = strdup(serial_no);

Use dt_prop_get_def()

> +
>         prlog(PR_INFO, "CHIP: Initialised chip %d from %s\n", id, dn->name);
>         chips[id] = chip;
>  }
> diff --git a/include/chip.h b/include/chip.h
> index b79b63ecf..e63f17a18 100644
> --- a/include/chip.h
> +++ b/include/chip.h
> @@ -187,6 +187,10 @@ struct proc_chip {
>         /* location code of this chip */
>         const uint8_t           *loc_code;
>
> +       /* part-number and serial number for this chip */
> +       const uint8_t           *part_no;
> +       const uint8_t           *serial_no;
> +
>         /* Used by hw/sbe-p9.c */
>         struct p9_sbe           *sbe;
>
> @@ -233,5 +237,29 @@ static inline const char *chip_loc_code(uint32_t chip_id)
>         return chip->loc_code;
>  }
>
> +/* helper to get part number of a chip */
> +static inline const char *chip_part_number(uint32_t chip_id)
> +{
> +       struct proc_chip *chip;
> +
> +       chip = get_chip(chip_id);
> +       if (!chip)
> +               return NULL;
> +
> +       return chip->part_no;
> +}
> +
> +/* helper to get serial number of a chip */
> +static inline const char *chip_serial_number(uint32_t chip_id)
> +{
> +       struct proc_chip *chip;
> +
> +       chip = get_chip(chip_id);
> +       if (!chip)
> +               return NULL;
> +
> +       return chip->serial_no;
> +}
> +
>  #endif /* __CHIP_H */
>
>
>
diff mbox series

Patch

diff --git a/core/chip.c b/core/chip.c
index 191432d29..8e97a7bcd 100644
--- a/core/chip.c
+++ b/core/chip.c
@@ -63,6 +63,8 @@  static void init_chip(struct dt_node *dn)
 	struct proc_chip *chip;
 	uint32_t id;
 	const char *lc = NULL;
+	const char *part_no = NULL;
+	const char *serial_no = NULL;
 
 	id = dt_get_chip_id(dn);
 	assert(id < MAX_CHIPS);
@@ -93,6 +95,17 @@  static void init_chip(struct dt_node *dn)
 	if (lc)
 		chip->loc_code = strdup(lc);
 
+	/* Update part number and serial number for this chip */
+	if (dt_has_node_property(dn, "part-number", NULL))
+		part_no = dt_prop_get(dn, "part-number");
+	if (part_no)
+		chip->part_no = strdup(part_no);
+
+	if (dt_has_node_property(dn, "serial-number", NULL))
+		serial_no = dt_prop_get(dn, "serial-number");
+	if (serial_no)
+		chip->serial_no = strdup(serial_no);
+
 	prlog(PR_INFO, "CHIP: Initialised chip %d from %s\n", id, dn->name);
 	chips[id] = chip;
 }
diff --git a/include/chip.h b/include/chip.h
index b79b63ecf..e63f17a18 100644
--- a/include/chip.h
+++ b/include/chip.h
@@ -187,6 +187,10 @@  struct proc_chip {
 	/* location code of this chip */
 	const uint8_t		*loc_code;
 
+	/* part-number and serial number for this chip */
+	const uint8_t		*part_no;
+	const uint8_t		*serial_no;
+
 	/* Used by hw/sbe-p9.c */
 	struct p9_sbe		*sbe;
 
@@ -233,5 +237,29 @@  static inline const char *chip_loc_code(uint32_t chip_id)
 	return chip->loc_code;
 }
 
+/* helper to get part number of a chip */
+static inline const char *chip_part_number(uint32_t chip_id)
+{
+	struct proc_chip *chip;
+
+	chip = get_chip(chip_id);
+	if (!chip)
+		return NULL;
+
+	return chip->part_no;
+}
+
+/* helper to get serial number of a chip */
+static inline const char *chip_serial_number(uint32_t chip_id)
+{
+	struct proc_chip *chip;
+
+	chip = get_chip(chip_id);
+	if (!chip)
+		return NULL;
+
+	return chip->serial_no;
+}
+
 #endif /* __CHIP_H */