I2C bus linux: Systems with more than 4 memory slots not supported yet, not instantiating SPD

1.5k Views Asked by At

Problem:

I believe there are enough motherboards with 8 memory slots. I would like to see the contents of the SPD memory slots via decode-dimms, but there is only support for up to 4 slots in the Linux kernel I2C bus, inclusive.

Description:

Motherboard Asus P9X79pro 2011 year 8 memory slots

Kernel: Linux 5.15.0-2-amd64 (SMP w/8 CPU threads)

/etc/modules-load.d/:

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# we use any of the following three to choose for: eeprom at24 ee1004
at24
i2c_i801
i2c_smbus
i2c-dev

# i2cdetect -l

i2c-0   smbus       SMBus I801 adapter at f000          SMBus adapter
i2c-1   i2c         nvkm-0000:01:00.0-bus-0000          I2C adapter
i2c-2   i2c         nvkm-0000:01:00.0-bus-0001          I2C adapter
i2c-3   i2c         nvkm-0000:01:00.0-bus-0002          I2C adapter

/var/log/messages

[    1.349519] i801_smbus 0000:00:1f.3: SMBus using PCI interrupt
[    1.350413] i2c i2c-0: 8/8 memory slots populated (from DMI)
[    1.350416] i2c i2c-0: Systems with more than 4 memory slots not supported yet, not instantiating SPD

# decode-dimms

# for 4.2-2+b1
No EEPROM found, the kernel probably does not support your hardware.

# decode-dimms

# decode-dimms version 4.3

Memory Serial Presence Detect Decoder
By Philip Edelbrock, Christian Zuckschwerdt, Burkart Lingner,
Jean Delvare, Trent Piepho and others


Number of SDRAM DIMMs detected and decoded: 0

# dmidecode:

Handle 0x002E, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x002C
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 8 GB
    Form Factor: DIMM
    Set: None
    Locator: ChannelA_Dimm1
    Bank Locator: ChannelA
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MT/s
    Manufacturer: Kingston
    Serial Number: 4C0F1E75
    Asset Tag: ChannelA_Dimm1_AssetTag
    Part Number: KHX1600C10D3/8G
    Rank: 2
    Configured Memory Speed: 1600 MT/s

Handle 0x0030, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x002C
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 8 GB
    Form Factor: DIMM
    Set: None
    Locator: ChannelA_Dimm2
    Bank Locator: ChannelA
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MT/s
    Manufacturer: Kingston
    Serial Number: 360D8537
    Asset Tag: ChannelA_Dimm2_AssetTag
    Part Number: 9905403-558.A00LF
    Rank: 2
    Configured Memory Speed: 1600 MT/s

Handle 0x0032, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x002C
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 8 GB
    Form Factor: DIMM
    Set: None
    Locator: ChannelB_Dimm1
    Bank Locator: ChannelB
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MT/s
    Manufacturer: Kingston
    Serial Number: 4B0F776E
    Asset Tag: ChannelB_Dimm1_AssetTag
    Part Number: KHX1600C10D3/8G
    Rank: 2
    Configured Memory Speed: 1600 MT/s

Handle 0x0034, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x002C
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 8 GB
    Form Factor: DIMM
    Set: None
    Locator: ChannelB_Dimm2
    Bank Locator: ChannelB
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MT/s
    Manufacturer: Kingston
    Serial Number: 370DA637
    Asset Tag: ChannelB_Dimm2_AssetTag
    Part Number: 9905403-558.A00LF
    Rank: 2
    Configured Memory Speed: 1600 MT/s

Handle 0x0036, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x002C
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 8 GB
    Form Factor: DIMM
    Set: None
    Locator: ChannelC_Dimm1
    Bank Locator: ChannelC
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MT/s
    Manufacturer: Kingston
    Serial Number: 1731AE49
    Asset Tag: ChannelC_Dimm1_AssetTag
    Part Number: KHX1600C10D3/8G
    Rank: 2
    Configured Memory Speed: 1600 MT/s

Handle 0x0038, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x002C
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 8 GB
    Form Factor: DIMM
    Set: None
    Locator: ChannelC_Dimm2
    Bank Locator: ChannelC
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MT/s
    Manufacturer: Kingston
    Serial Number: 370D9537
    Asset Tag: ChannelC_Dimm2_AssetTag
    Part Number: 9905403-558.A00LF
    Rank: 2
    Configured Memory Speed: 1600 MT/s

Handle 0x003A, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x002C
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 8 GB
    Form Factor: DIMM
    Set: None
    Locator: ChannelD_Dimm1
    Bank Locator: ChannelD
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MT/s
    Manufacturer: Kingston
    Serial Number: 1C31AE49
    Asset Tag: ChannelD_Dimm1_AssetTag
    Part Number: KHX1600C10D3/8G
    Rank: 2
    Configured Memory Speed: 1600 MT/s

Handle 0x003C, DMI type 17, 34 bytes
Memory Device
    Array Handle: 0x002C
    Error Information Handle: Not Provided
    Total Width: 64 bits
    Data Width: 64 bits
    Size: 8 GB
    Form Factor: DIMM
    Set: None
    Locator: ChannelD_Dimm2
    Bank Locator: ChannelD
    Type: DDR3
    Type Detail: Synchronous
    Speed: 1600 MT/s
    Manufacturer: Kingston
    Serial Number: 360D9637
    Asset Tag: ChannelD_Dimm2_AssetTag
    Part Number: 9905403-558.A00LF
    Rank: 2
    Configured Memory Speed: 1600 MT/s

linux-source-5.15/drivers/i2c/i2c-smbus.c

line 358:
    if (slot_count > 4) {
        dev_warn(&adap->dev,
             "Systems with more than 4 memory slots not supported yet, not instantiating SPD\n");
        return;
    }

Houp:

Can someone suggest how to reach the kernel developers?

1

There are 1 best solutions below

0
Krzysztof Adamski On

A good place to read about the way Linux Kernel development works is https://kernelnewbies.org/ site. For more information how to reach kernel developers, you could read the FoundBug subpage.

In this particular case, you could find a developer who wrote/maintains this code and contact him directly with your request. All kernel development is done in open so you can find the patch submission for example on patchwork

As you can see there, the patches were signed off by Jean Delvare, who happens to be the maintainer for most of the I2C/SMBus controller drivers in Linux, as can be seen in maintainers list.

Contacting the developer directly is not the only possibility. Probably the better choice would be to use a proper mailing list, which, again, can be found in the mainainters list linked above.

That being said, the fact you can reach kernel developers like that, does not mean you should, unless of course, you want to propose the patch yourself.