Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for extended FRU data for memory modules #147

Closed
wants to merge 1 commit into from
Closed

Support for extended FRU data for memory modules #147

wants to merge 1 commit into from

Conversation

artemsen
Copy link
Contributor

Decode some DIMM SPD fields according to JEDEC format to write
detailed info into an IMPI FRU message:

  1. Manufacturer field contains real orgainsation name instead of ID.
  2. Module name contains type, capacity, speed and other attributes.

Resolves #132

Signed-off-by: Artem Senichev [email protected]
Signed-off-by: Maxim Polyakov [email protected]

@artemsen
Copy link
Contributor Author

@dcrowell77, what do you think about this?

Decode some DIMM SPD fields according to JEDEC format to write
detailed info into an IMPI FRU message:
1. Manufacturer field contains real orgainsation name instead of ID.
2. Module name contains type, capacity, speed and other attributes.

Signed-off-by: Artem Senichev <[email protected]>
Signed-off-by: Maxim Polyakov <[email protected]>
}

// Put detailed description into the message buffer
const size_t l_len = strlen(l_desc);

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

According to IPMI FRU specification, value 0 for the length means that the fields is empty, while value 1 indicates 'end-of-fields'. Thus, value 1 is always reserved and can't be used. Which means that the minimum size of a string is 2. This is not checked here.

Also, the maximum length of plain ASCII string in IPMI is 31 bytes. This is 1 byte shorter than, for instance, "DDR4-2400 16GiB 64-bit ECC RDIMM". Things like "LPDDR4-2400 16GiB 64-bit ECC SORDIMM 72b" will get even more fiercely truncated. Something must be invented to overcome that. I'd propose converting the string to all-uppercase and encoding it using 6-bit ASCII (see FRU spec). That would give us 41 bytes max. We could also save on using non-SI units for size (GB instead of GiB), on saying 64B instead of 64-BIT, and on shortening long module types to, say these:

  • MINIRDIMM
  • MINIUDIMM
  • SORDIMM72
  • SODIMM16
  • SODIMM32

That way the longest string will be LPDDR4-2400 16GB 32B NON-ECC MINIRDIMM which is 38 characters.

It must be checked though whether or not the BMC firmwares can properly decode 6-bit ASCII.

If we ditch Mini and SO modules, that are, AFAIK, rarely used in OpenPOWER systems, and also use empty string instead of 'NON-ECC', then we can fit into 31 bytes with the longest LPDDR4-2400 16GB 32b ECC LRDIMM, and that's the good old plain ASCII+Latin1 encoding.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we use something other than straight ascii, what are the chances that the BMC will actually display it in any useful way? Might need to ask in the openbmc forum what they support. Have you by chance tried this change on a system running OpenBMC (or SuperMicro or AMI)? Where/how is the data displayed?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OpenBMC always shows manufacture and pretty names as text.
We have checked this solution on our VESNIN server.

WebUI example:
screenshot_2018-09-24 webui

Inventory list:
screenshot_2018-09-24 inventory

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@artemsen, I believe @dcrowell77 was referring to my proposal to use IPMI FRU's 6-bit ASCII encoding. I have checked and am quite sure now that openbmc/ipmi-fru-parser does not support any encodings beyond binary (code 0) and plain ASCII (code 3 / 0xC0). Can't say for AMI. We of course could add support for 6-bit ASCII to openbmc, but hardly to MegaRAC or any other commercial products.

This means that our best way is to use plain ASCII and ditch support for the uncommon module types.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also, the maximum length of plain ASCII string in IPMI is 31 bytes

Mea culpa. I misread the spec. The type/length byte has 6 bits for data length, which gives maximum string length of 63, not 31. I don't know where I took that '31' from. Nothing needs to be done in regard to string length.

@dcrowell77
Copy link
Collaborator

@wghoffa - take a look

@wghoffa
Copy link
Contributor

wghoffa commented Sep 26, 2018

@dcrowell77 -- Will do first thing tomorrow. I'll try and load this on a Witherspoon and Boston and see how it works as well.

@artemsen
Copy link
Contributor Author

@dcrowell77 -- Will do first thing tomorrow. I'll try and load this on a Witherspoon and Boston and see how it works as well.

This patch is to master-p8 branch. I'm not sure it can be applied to P9.

@wghoffa
Copy link
Contributor

wghoffa commented Sep 26, 2018

@artemsen -- Thanks I didn't catch that. I'll try a P8 system, though may also apply to P9 and see how it goes. I don't think things in this area have really changed at all.

@wghoffa
Copy link
Contributor

wghoffa commented Sep 27, 2018

@dcrowell77 / @artemsen -- Looks good! AMI output worked well too (ran from a habanero):

FRU Device Description : DIMM8 (ID 11)
Product Manufacturer : Kingston
Product Name : DDR3-1600 8GiB 64-bit ECC RDIMM
Product Part Number : 9965433-153.A00LF
Product Version : 0000
Product Serial : f61094d6

@wghoffa
Copy link
Contributor

wghoffa commented Oct 1, 2018

Merged here: 30b88ed

Thanks for the submission!

@wghoffa wghoffa closed this Oct 1, 2018
@AlexanderAmelkin
Copy link

@wghoffa, could you please also backport this to master-p8? Our system is P8-based and we currently carry this patch in our op-build fork. It would be great if this was a part of upstream branch.

@wghoffa
Copy link
Contributor

wghoffa commented Oct 1, 2018

@AlexanderAmelkin -- It should be in for master-p8 (I did not yet port it to master, but am hoping to). I see it here? https://github.com/open-power/hostboot/commits/master-p8

I think the update to op-build will come shortly. We have an automated process that runs daily to do those updates, it has not triggered yet today but should trigger in the next few hours or so.

@wghoffa
Copy link
Contributor

wghoffa commented Oct 2, 2018

@AlexanderAmelkin -- Looks like the update came with a bunch of P9 stuff that appears to have an issue that is being sorted out (open-power/op-build#2381).

I pulled the P8 stuff to the side -- just waiting on CI: open-power/op-build#2382

Also -- I gave it a go for p9 and all seems well. I'll push that up soon as well.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants