JEDEC_DIMM(4)

πŸ“¦ version 15.1, in freebsd 14.5, freebsd 15.1, nixpkgs unstable

πŸ’– 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 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. 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:

  1. In all jedec_ts(4) hints, replace β€œjedec_ts” with β€œjedec_dimm”
  2. 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