JEDEC_DIMM(4)
π NAME π
okay so, jedec_dimm β she reports asset information and temperatures for JEDEC DDR3 / DDR4 DIMMs. that's the whole vibe. β¨
πΈ SYNOPSIS πΈ
bestie, you got two ways to bring her into the world. the kernel-config way:
device jedec_dimm
device smbus
or, alternatively, to load the driver as a module at boot time, drop this line in loader.conf(5):
jedec_dimm_load="YES"
and here's the part nobody warns you about π β the addressing info 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"
π¦ DESCRIPTION π¦
okay so 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. and if the DIMM includes a βThermal Sensor On DIMMβ (TSOD), the temperature is also reported. she does it all, literally. π
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 (no touching, look 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 megabytesdev.jedec_dimm.X.mfg_weekβ the week within the year in which the DIMM was manufactureddev.jedec_dimm.X.mfg_yearβ the year in which the DIMM was manufactureddev.jedec_dimm.X.partβ the manufacturer's part number of the DIMMdev.jedec_dimm.X.serialβ the manufacturer's serial number of the DIMMdev.jedec_dimm.X.slotidβ a copy of the corresponding hint, if setdev.jedec_dimm.X.tempβ if a TSOD is present, the reported temperaturedev.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β thesmbus(4)to which the DIMM is connectedhint.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 is0xa. 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. math is math, slay. π₯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. (trial-and-error is giving chaos but it works π«Ά)
and 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). bridge era π
β¨ EXAMPLES β¨
consider two DDR4 DIMMs with the following hints (look at her go):
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
π COMPATIBILITY π
jedec_dimm implements a superset of the functionality of the now-deleted jedec_ts(4). rip bozo, but respectfully ποΈ. 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 (copy it exactly bestie, she's iconic):
sed -i ".old" -e 's/jedec_ts/jedec_dimm/' \
-e '/jedec_dimm/s/addr="0x3/addr="0xa/' /boot/device.hints
π SEE ALSO π
iicbus(4), iicsmb(4), smbus(4), sysctl(8)
π STANDARDS π
- (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.
standards queen π
β HISTORY β
the jedec_dimm driver first appeared in FreeBSD 12.0. periodt.
π«Ά AUTHORS π«Ά
the jedec_dimm driver and this manual page were written by Ravi Pokala <rpokala@freebsd.org>. they are both based in part on the now-deleted jedec_ts(4) driver and manual page, written by Andriy Gapon <avg@FreeBSD.org>. absolute legends, no cap. π
and that's the whole page bestie β this lil beauty shipped with Debian, dated April 25, 2023. go read your DIMMs, you're gonna slay. π¦β¨π
π¦ where this page comes from
- freebsd 14.5: base 14.5
- freebsd 15.1: base 15.1
- nixpkgs unstable: source
- π the page's license: BSD-2-Clause
- Copyright (c) 2016 Andriy Gapon <avg@FreeBSD.org>
- Copyright (c) 2018 Ravi Pokala <rpokala@freebsd.org>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms