dmidecode-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 1/1] dmioem: Decode HPE OEM Record 245


From: Jean Delvare
Subject: Re: [PATCH 1/1] dmioem: Decode HPE OEM Record 245
Date: Sat, 20 May 2023 15:33:04 +0200
User-agent: Evolution 3.42.4

Hi Jerry,

On Mon, 2023-05-08 at 11:32 -0600, Jerry Hoemann wrote:
> Decode HPE OEM Record 245: Extension Board Inventory Record.
> 
> Signed-off-by: Jerry Hoemann <jerry.hoemann@hpe.com>
> ---
>  dmioem.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 56 insertions(+)
> 
> diff --git a/dmioem.c b/dmioem.c
> index 04a89ab..5ccd30e 100644
> --- a/dmioem.c
> +++ b/dmioem.c
> @@ -771,6 +771,28 @@ static void dmi_hp_242_speed(const char *attr, u16 speed)
>                 pr_attr(attr, "%s", "Unknown");
>  }
>  
> +static void dmi_hp_245_pcie_riser(const struct dmi_header *h)
> +{
> +       const char *str = "Reserved";
> +       u8 *data = h->data;
> +
> +       pr_attr("Board Type", "PCIe Riser");
> +       if (h->length < 0x09) return;
> +       switch (data[0x05])
> +       {
> +               case 1: str = "Primary"; break;
> +               case 2: str = "Secondary"; break;
> +               case 3: str = "Tertiary"; break;
> +               case 4: str = "Quaternary"; break;
> +               case 10: str = "Front"; break;
> +       }
> +       pr_attr("Riser Position", "%s", str);
> +       pr_attr("Riser ID", "%d", data[0x06]);

In the sample you provided, there are 2 riser records and both have
this field set to 2. I'd expect this ID to be unique within a given
system. The code looks right though, so I suppose the problem is with
the DMI table data?

> +       if (data[0x07])
> +               pr_attr("CPLD Version", "%c:%x", (data[0x07] >> 7) ? 'B' : 
> 'R', (data[0x07] & 0x7F));

Hexadecimal number printed without a prefix can be confusing. Is there
any standard regarding how a CPLD version should be presented?

> +       pr_attr("Riser Name", dmi_string(h, data[0x08]));
> +}
> +
>  static int dmi_decode_hp(const struct dmi_header *h)
>  {
>         u8 *data = h->data;
> @@ -1490,6 +1512,40 @@ static int dmi_decode_hp(const struct dmi_header *h)
>                         dmi_hp_242_speed("Negotiated Speed", WORD(data + 
> 0x3A));
>                         dmi_hp_242_speed("Capable Speed", WORD(data + 0x3C));
>                         break;
> +
> +               case 245:
> +                       /*
> +                        * Vendor Specific: HPE Extension Board Inventory 
> Record
> +                        *
> +                        * This record provides a mechanism for software to 
> retrieve installed
> +                        * Extension Boards in system, such as Riser Cards, 
> etc. Each extension
> +                        * board discovered in system boot time has a 
> corresponding record

"at system boot time" would sound better, methinks.

> +                        * produced in SMBIOS Type 245. This record is 
> currently applicable
> +                        * for ML, DL and Alletra series servers in Gen11 and 
> will be backward
> +                        * compatible with next generations
> +                        *
> +                        * This is a variant record. Definition of fields 
> 0x05 ... vary based
> +                        * upon field 0x04 Board Type.
> +                        *
> +                        * Offset |  Name      | Width | Description
> +                        * ---------------------------------------
> +                        *  0x00  | Type       | BYTE  | 0xF5, Extension 
> Board Inventory Record
> +                        *  0x01  | Length     | BYTE  | Length of structure
> +                        *  0x02  | Handle     | WORD  | Unique handle
> +                        *  0x04  | Board Type | WORD  | 0: PCIe Riser, Other 
> Reserved
> +                        *
> +                        *  If Board Type == 0
> +                        *  0x05  | Riser Pos  | WORD  |
> +                        *  0x06  | Riser ID   | BYTE  |
> +                        *  0x07  | CPLD Vers  | BTYE  | 0-> No CPLD. Bits 
> [7][6:0] Release:Vers
> +                        *  0x08  | Riser Name | STRING|
> +                        */
> +                       pr_handle_name("%s ProLiant Extension Board Inventory 
> Record", company);
> +                       if (h->length < 0x05) break;
> +                       if (data[0x04] == 0)
> +                               dmi_hp_245_pcie_riser(h);
> +                       break;
> +
>                 default:
>                         return 0;
>         }

Everything else looks good to me.

-- 
Jean Delvare
SUSE L3 Support



reply via email to

[Prev in Thread] Current Thread [Next in Thread]