jedec_dimm
—
report asset information and temperatures for JEDEC DDR3 /
DDR4 DIMMs
device jedec_dimm
device smbus
Alternatively, to load the driver as a module at boot time, place
the following line in
loader.conf(5):
Addressing information must be manually specified in
/boot/device.hints:
hint.jedec_dimm.0.at="smbus0"
hint.jedec_dimm.0.addr="0xa0"
hint.jedec_dimm.0.slotid="Silkscreen"
The jedec_dimm
driver reports asset
information (Part Number, Serial Number) encoded in the “Serial
Presence Detect” (SPD) data on JEDEC DDR3 and DDR4 DIMMs. It also
calculates and reports the memory capacity of the DIMM, in megabytes. If the
DIMM includes a “Thermal Sensor On DIMM” (TSOD), the
temperature is also reported.
The jedec_dimm
driver accesses the SPD and
TSOD over the
smbus(4).
The data is reported via a
sysctl(8)
interface; all values are read-only:
- dev.jedec_dimm.X.%desc
- a string description of the DIMM, including TSOD and slotid info if
present.
- dev.jedec_dimm.X.capacity
- the DIMM's memory capacity, in megabytes
- dev.jedec_dimm.X.mfg_week
- the week within the year in which the DIMM was manufactured
- dev.jedec_dimm.X.mfg_year
- the year in which the DIMM was manufactured
- dev.jedec_dimm.X.part
- the manufacturer's part number of the DIMM
- dev.jedec_dimm.X.serial
- the manufacturer's serial number of the DIMM
- dev.jedec_dimm.X.slotid
- a copy of the corresponding hint, if set
- dev.jedec_dimm.X.temp
- if a TSOD is present, the reported temperature
- dev.jedec_dimm.X.type
- the DIMM type (DDR3 or DDR4)
These values are configurable for
jedec_dimm
via
device.hints(5):
- hint.jedec_dimm.X.at
- the
smbus(4)
to which the DIMM is connected
- hint.jedec_dimm.X.addr
- the SMBus address of the SPD. JEDEC specifies that the four
most-significant bits of the address are the “Device Type
Identifier” (DTI), and that the DTI of the SPD is 0xa. Since the
least-significant bit of an SMBus address is the read/write bit, and is
always written as 0, that means the four least-significant bits of the
address must be even.
- hint.jedec_dimm.X.slotid
- optional slot identifier. If populated with the DIMM slot name
silkscreened on the motherboard, this provides a mapping between the DIMM
slot name and the DIMM serial number. That mapping is useful for detailed
asset tracking, and makes it easier to physically locate a specific DIMM
when doing a replacement. This is useful when assembling multiple
identical systems, as might be done by a system vendor. The mapping
between bus/address and DIMM slot must first be determined, either through
motherboard documentation or trial-and-error.
If the DIMMs are on an I2C bus behind an
iicbus(4)
controller, then the
iicsmb(4)
bridge driver can be used to attach the
smbus(4).
Consider two DDR4 DIMMs with the following hints:
hint.jedec_dimm.0.at="smbus0"
hint.jedec_dimm.0.addr="0xa0"
hint.jedec_dimm.0.slotid="A1"
hint.jedec_dimm.6.at="smbus1"
hint.jedec_dimm.6.addr="0xa8"
Their
sysctl(8)
output (sorted):
dev.jedec_dimm.0.%desc: DDR4 DIMM w/ Atmel TSOD (A1)
dev.jedec_dimm.0.%driver: jedec_dimm
dev.jedec_dimm.0.%location: addr=0xa0
dev.jedec_dimm.0.%parent: smbus0
dev.jedec_dimm.0.%pnpinfo:
dev.jedec_dimm.0.capacity: 16384
dev.jedec_dimm.0.mfg_week: 30
dev.jedec_dimm.0.mfg_year: 17
dev.jedec_dimm.0.part: 36ASF2G72PZ-2G1A2
dev.jedec_dimm.0.serial: 0ea815de
dev.jedec_dimm.0.slotid: A1
dev.jedec_dimm.0.temp: 32.7C
dev.jedec_dimm.0.type: DDR4
dev.jedec_dimm.6.%desc: DDR4 DIMM w/ TSE2004av compliant TSOD
dev.jedec_dimm.6.%driver: jedec_dimm
dev.jedec_dimm.6.%location: addr=0xa8
dev.jedec_dimm.6.%parent: smbus1
dev.jedec_dimm.6.%pnpinfo:
dev.jedec_dimm.6.capacity: 8192
dev.jedec_dimm.6.mfg_week: 13
dev.jedec_dimm.6.mfg_year: 19
dev.jedec_dimm.6.part: VRA9MR8B2H1603
dev.jedec_dimm.6.serial: 0c4c46ad
dev.jedec_dimm.6.temp: 43.1C
dev.jedec_dimm.6.type: DDR4
jedec_dimm
implements a superset of the
functionality of the now-deleted
jedec_ts(4).
Hints for
jedec_ts(4)
can be mechanically converted for use with
jedec_dimm
. Two changes are required:
- In all
jedec_ts(4)
hints, replace “jedec_ts” with
“jedec_dimm”
- In
jedec_ts(4)
“addr” hints, replace the TSOD DTI “0x3” with
the SPD DTI “0xa”
The following
sed(1)
script will perform the necessary changes:
sed -i ".old" -e 's/jedec_ts/jedec_dimm/' \
-e '/jedec_dimm/s/addr="0x3/addr="0xa/' /boot/device.hints
(DDR3 SPD) JEDEC,
Standard 21-C, Annex K.
(DDR3 TSOD) JEDEC,
Standard 21-C, TSE2002av.
(DDR4 SPD) JEDEC,
Standard 21-C, Annex L.
(DDR4 TSOD) JEDEC,
Standard 21-C, TSE2004av.
The jedec_dimm
driver first appeared in
FreeBSD 12.0.