dasharo-issues icon indicating copy to clipboard operation
dasharo-issues copied to clipboard

SMBIOS type 17 table doesn't show reliable data

Open krystian-hebel opened this issue 1 year ago • 11 comments

Component

Dasharo firmware

Device

MSI Pro Z790-P, NovaCustom NV4x 12th Gen, other

Dasharo version

No response

Dasharo Tools Suite version

No response

Test case ID

No response

Brief summary

SMBIOS Memory Device table doesn't show correct data. Device and Bank Locator is constant between all DIMMs, which makes it impossible to differentiate between them, at least without comparing serial numbers (which usually are encoded in a way that doesn't match what is on a sticker). On top of that, SMBIOS specification clearly states that type 17 entry must be produced also for non-populated slots. Currently such entries are skipped for most Intel SoCs, probably due to the code being copied for each new family from an existing one. Example for Alderlake, but others are similar - entry is saved only if DIMM is present.

How reproducible

No response

How to reproduce

sudo dmidecode -t 17

Expected behavior

Proper locators should be reported. Empty DIMM slots should also be reported.

Actual behavior

ubuntu@3mdeb:~$ sudo dmidecode -t 17
# dmidecode 3.3
Getting SMBIOS data from sysfs.
SMBIOS 3.3.0 present.

Handle 0x000B, DMI type 17, 40 bytes
Memory Device
	Array Handle: 0x000A
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8 GB
	Form Factor: SODIMM
	Set: None
	Locator: Channel-0-DIMM-0
	Bank Locator: BANK 0
	Type: DDR4
	Type Detail: Unknown Synchronous
	Speed: 3200 MT/s
	Manufacturer: Kingston
	Serial Number: ff9ace91
	Asset Tag: Channel-0-DIMM-0-AssetTag
	Part Number: 9905700-118.A00G
	Rank: 1
	Configured Memory Speed: 3200 MT/s
	Minimum Voltage: 1.2 V
	Maximum Voltage: 1.2 V
	Configured Voltage: 1.2 V

Handle 0x000C, DMI type 17, 40 bytes
Memory Device
	Array Handle: 0x000A
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 8 GB
	Form Factor: SODIMM
	Set: None
	Locator: Channel-0-DIMM-0
	Bank Locator: BANK 0
	Type: DDR4
	Type Detail: Unknown Synchronous
	Speed: 3200 MT/s
	Manufacturer: Kingston
	Serial Number: ff9aee4a
	Asset Tag: Channel-0-DIMM-0-AssetTag
	Part Number: 9905700-118.A00G
	Rank: 1
	Configured Memory Speed: 3200 MT/s
	Minimum Voltage: 1.2 V
	Maximum Voltage: 1.2 V
	Configured Voltage: 1.2 V

Screenshots

No response

Additional context

No response

Solutions you've tried

No response

krystian-hebel avatar Jan 13 '25 20:01 krystian-hebel

Question: is this about RAM slots and their numbering? If not, let me know and file a seperate issue.

From a end-user perspective this results for example on an OptiPlex 9010 w/ Dasharo v0.2 RC 3 (released 2021-09-24) in that Memtest has the slots all wrong:

Mainboard | Memtest
Slot      | Slot
-------------------
3         |0
1         |1
4         |2
2         |3

OP9010 MT720

Firminator avatar Jan 14 '25 04:01 Firminator

@Firminator AFAICT Memtest iterates over I2C addresses, which aren't necessarily lined up with how the slots are laid out on the board. I2C addresses are hardwired and can't be changed. It may be possible to modify Memtest to use locators from SMBIOS instead, but I2C addresses are much more predictable and by design they are unique. Another reason why Memtest had chosen to use those indices may be that they are short, while SMBIOS locators are strings with unbounded length, which could easily overflow the screen width.

I'm afraid this isn't something that can be fixed by changes to Dasharo. It would be possible to make SMBIOS numbering the same as Memtest, but then it wouldn't match labels on the board, which would be even worse.

krystian-hebel avatar Jan 14 '25 14:01 krystian-hebel

Thanks for the reply Krystian. So this is actually an 'issue' with Memtest and not Dasharo firmware. Interesting. I wonder if I should just ignore this... or if there are chances this can be addressed by Memtest. Sounds like a long stretch and lots of core code changes if they have to change the way how to identify memory slots. It's definitely confusing for users being pointed to an incorrect RAM slot given that's the whole purpose of Memtest. Maybe it's only affecting certain mainboards? I think I give opening an issue with Memtest a try and see what happens. Thanks.

Firminator avatar Jan 15 '25 02:01 Firminator

Maybe it's only affecting certain mainboards?

Maybe. How vendor wants to label slots on the mainboard is entirely up to them. It seems that in case of OptiPlex they decided to number them according to suggested order of population, which is one of the reasonable possibilities. There are users which are technical enough to install new module, but not enough to understand channels (or worse, those who misunderstand how channels work), and this approach of labeling the slots is perfect for them.

In any case, at least for some platforms Dasharo reports that each DIMM is in Channel-0-DIMM-0. I haven't checked if OptiPlex is also impacted by this issue.

krystian-hebel avatar Jan 17 '25 12:01 krystian-hebel

When I populate slot 1 and 2 (both white), and leave slots 3 and 4 (both black) unpopulated, then DTS reports:

RAM Channel-0-DIMM-1 RAM Channel-1-DIMM-1

But that's with v0.2 RC 3 (released 2021-09-24) ... one of the first releases when Michal Z. initially reverse-engineered the platform ('cursed EC'!; https://blog.3mdeb.com/2021/2021-06-01-optiplex_part2/ ) and adopted it to coreboot. Not sure yet what v0.1.1 from December 2024 will look like. I'm in the process of updating currently.

Firminator avatar Jan 20 '25 02:01 Firminator

I think the DIMM locator issue can be handled by properly implementing smbios_fill_dimm_locator in mainboard code

mkopec avatar Apr 17 '25 09:04 mkopec

I think the DIMM locator issue can be handled by properly implementing smbios_fill_dimm_locator in mainboard code

Usually, the soc code parses the FSP HOB to produce this data. I have been fixing the parsing for a couple of platforms already in the past. Otherwise it is just ordered per I2C address.

miczyg1 avatar Apr 22 '25 09:04 miczyg1

Is the 9010 one of those platforms that hasn't been fixed (or cannot be fixed) and that's why it's using the I2C address? Or in other words will implementing the smbios_fill_dimm_locator method fix the RAM slot order presented to other OS (like Memtest)?

Firminator avatar May 02 '25 02:05 Firminator

Is the 9010 one of those platforms that hasn't been fixed (or cannot be fixed) and that's why it's using the I2C address? Or in other words will implementing the smbios_fill_dimm_locator method fix the RAM slot order presented to other OS (like Memtest)?

I2C address should be always correct by convention. The stickers on the board can be just RAM population order, as @krystian-hebel explained. Nothing to fix here for 9010. Example SMBIOS from Dell OptiPlex running coreboot/Dasharo:

Handle 0x000A, DMI type 17, 40 bytes
Memory Device
	Array Handle: 0x0009
	Error Information Handle: Not Provided
	Total Width: 64 bits
	Data Width: 64 bits
	Size: 4 GB
	Form Factor: DIMM
	Set: None
	Locator: Channel-0-DIMM-1
	Bank Locator: BANK 0
	Type: DDR3
	Type Detail: Synchronous Unbuffered (Unregistered)
	Speed: 800 MT/s
	Manufacturer: Hynix/Hyundai
	Serial Number: 33399e81
	Asset Tag: Channel-0-DIMM-1-AssetTag
	Part Number: HMT451U6AFR8C-PB
	Rank: 1
	Configured Memory Speed: 800 MT/s
	Minimum Voltage: Unknown
	Maximum Voltage: Unknown
	Configured Voltage: Unknown

Slot numbering in SMBIOS/DMI and memtest is correct from the hardware point of view. The numbering on stickers is RAM population order, not the slot numbering. Two different things.

miczyg1 avatar May 05 '25 07:05 miczyg1

The numbering on stickers is RAM population order, not the slot numbering.

Thanks for the clarification.

Firminator avatar May 06 '25 01:05 Firminator

Fix for DIMM locators on NovaCustom laptops: https://github.com/Dasharo/coreboot/pull/663

mkopec avatar May 08 '25 11:05 mkopec