Re: [decode-dimms] Crucial Ballistix BLS2K16G4D30AESB, cannot decode / understand timings

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

 



Hi Peter,

On Tue, 16 Apr 2019 19:45:10 +0000, Peter Rosin wrote:
> If there is some other device responding to 0x36/0x37, then it didn't
> respond in the first (elided) dump with no ee1004 driver bound. So, that
> seems unlikely. No?
> 
> For reference the elided dump I referred to was:
> 
> > [root:/sys/bus/i2c/devices] # i2cdetect 2
> > WARNING! This program can confuse your I2C bus, cause data loss and worse!
> > I will probe file /dev/i2c-2.
> > I will probe address range 0x03-0x77.
> > Continue? [Y/n] y
> >      0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
> > 00:          -- -- -- -- -- 08 -- -- -- -- -- -- --
> > 10: -- -- -- -- -- -- -- -- 18 -- 1a -- -- -- -- --
> > 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> > 30: 30 31 -- -- 34 35 -- -- -- -- -- -- -- -- -- --
> > 40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
> > 50: 50 -- 52 -- -- -- -- -- -- -- -- -- -- -- -- --
> > 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
> > 70: -- -- -- -- -- -- -- --  
> 
> But why is there no response for those addresses when there is no
> driver bound? Will they only ack writes or something? I don't know
> anything about these DDR4 SPDs...

For range 0x30-0x37, i2cdetect uses read commands for probing.
0x37 is a write-only address for the EE1004 standard, so it doesn't
have to ack reads. 0x36 is special, as a read command it returns the
currently selected page, but uses the ack to answer (page 0 or page 1)
instead of acking and answering in an actual payload. If you ask me it
is VERY BAD design, and it is very sad that whoever came up with that
part of the EE1004 standard had too little experience to realize that
saving a few bytes for this command was really not worth the clumsy
design. The ack bit has a meaning and should never be abused like that.

I observe the same on my working system: i2cdetect does not reveal 0x36
and 0x37. "i2cget" on these address fails too, unless you provide a
register address, because then a combined write/read message is
generated, and as it starts with a write, the EE1004-compliant SPD
EEPROMs may ack it (but don't have to - they could in theory ack the
first part and then nack the second part):

# i2cget 4 0x36
Error: Read failed

# i2cget 4 0x36 0x00
0xff

The ee1004 driver on the other hand emits a simple write command to
select the page, and that should always get acked. It is for me but not
for Dreamcat4. As this is a write command AND SPD protection is active
for him, I can only suspect that SPD protection is not implemented
correctly and also blocks writes to the 0x30-0x37 address range despite
what the datasheet says. But at this point we have no proof that this
is the case and I don't want to blame Intel engineers without a proof.

Note that the SPD protection feature of the Intel SMBus controller is
essentially pointless with DDR4 anyway, as the EE1004 standard comes
with its own SPD page protection logic.

-- 
Jean Delvare
SUSE L3 Support



[Index of Archives]     [Linux GPIO]     [Linux SPI]     [Linux Hardward Monitoring]     [LM Sensors]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux