JEDEC_DIMM(4)
β¨ jedec_dimm β bestie edition π
okay so real quick, we're in the Kernel Interfaces Manual for JEDEC_DIMM(4), and honestly? this one's a little bop. it's the page about jedec_dimm, and what it does is report asset information and temperatures for JEDEC DDR3 / DDR4 DIMMs. no cap. your RAM is about to tell you its whole life story. π¦
π« NAME π«
jedec_dimm β report asset information and temperatures for JEDEC DDR3 / DDR4 DIMMs
like literally, it's the driver that reads the little EEPROM on your memory stick and goes "hey bestie, here's my part number, my serial, how big I am, and how warm I'm feeling rn." iconic behavior. π
πΈ SYNOPSIS πΈ
okay so first things first, you can either bake it into the kernel or load it as a module. here's the in-kernel vibe:
device jedec_dimm
device smbus
or, if you wanna load the driver as a module at boot time instead, drop this line into loader.conf(5):
jedec_dimm_load="YES"
now, addressing info? that does not come for free, bestie. you have to manually specify it in /boot/device.hints:
hint.jedec_dimm.0.at="smbus0"
hint.jedec_dimm.0.addr="0xa0"
hint.jedec_dimm.0.slotid="Silkscreen"
slay. π
π DESCRIPTION π
so what's the tea. the jedec_dimm driver reports asset information β that's Part Number and 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)? yeah, it reports the temperature too. it's giving full-package. π
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 megabytesdev.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.hint.jedec_dimm.X.slotidβ optional slot identifier. if you populate this with the DIMM slot name silkscreened on the motherboard, it provides a mapping between the DIMM slot name and the DIMM serial number. that mapping is useful for detailed asset tracking, and it makes it easier to physically locate a specific DIMM when you're doing a replacement. this one hits different when you're assembling multiple identical systems, as might be done by a system vendor. heads up though β the mapping between bus/address and DIMM slot must first be determined, either through motherboard documentation or trial-and-error. π
one more thing: 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). little bridge moment. π«Ά
β EXAMPLES β
okay let's make this real. 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, obviously, we're not animals):
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.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.part: VRA9MR8B2H1603
dev.jedec_dimm.6.serial: 0c4c46ad
dev.jedec_dimm.6.temp: 43.1C
dev.jedec_dimm.6.type: DDR4
look at those temps just vibing. 32.7C and 43.1C. not me being emotionally invested in a memory module's body temperature. π₯Ή
π§ COMPATIBILITY π§
jedec_dimm implements a superset of the functionality of the now-deleted jedec_ts(4). so if you've got hints for jedec_ts(4), you can mechanically convert them for use with jedec_dimm. two changes are required, bestie, don't skip either one:
- 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"
and because we're efficient girlies, the following sed(1) script will perform the necessary changes for you:
sed -i ".old" -e 's/jedec_ts/jedec_dimm/' \
-e '/jedec_dimm/s/addr="0x3/addr="0xa/' /boot/device.hints
it ate. periodt. π₯
π 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.
like yes, we cite our sources. academic baddie energy. πβ¨
π¦ HISTORY π¦
the jedec_dimm driver first appeared in FreeBSD 12.0.
π 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>.
and that's the whole page, bestie. this one's from the Debian crew, dated July 31, 2018, and it's JEDEC_DIMM(4) if you wanna look it up again. go check your DIMM temps, drink some water, and stay even-addressed. πππΈ
π¦ where this page comes from
- debian bookworm: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- debian trixie: freebsd-manpages 12.2-2 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu jammy: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu noble: freebsd-manpages 12.2-1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu questing: freebsd-manpages 12.2-2
- ubuntu resolute: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- ubuntu stonking: freebsd-manpages 12.2-2build1 Β· BSD-2-Clause-FreeBSD AND BSD-4-Clause
- π the page's license: BSD-2-Clause-FreeBSD
- Copyright (c) 2016 Andriy Gapon <avg@FreeBSD.org>
- Copyright (c) 2018 Ravi Pokala <rpokala@freebsd.org>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms