summaryrefslogtreecommitdiff
path: root/static/freebsd/man4/jedec_dimm.4 3.html
blob: 71cd7359dd8ae77552961dad0f6346fce9b69391 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
<table class="head">
  <tr>
    <td class="head-ltitle">JEDEC_DIMM(4)</td>
    <td class="head-vol">Device Drivers Manual</td>
    <td class="head-rtitle">JEDEC_DIMM(4)</td>
  </tr>
</table>
<div class="manual-text">
<section class="Sh">
<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
<p class="Pp"><code class="Nm">jedec_dimm</code> &#x2014;
    <span class="Nd">report asset information and temperatures for JEDEC DDR3 /
    DDR4 DIMMs</span></p>
</section>
<section class="Sh">
<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
<div class="Bd Bd-indent"><code class="Cd">device jedec_dimm</code>
<br/>
<code class="Cd">device smbus</code></div>
<p class="Pp">Alternatively, to load the driver as a module at boot time, place
    the following line in <a class="Xr">loader.conf(5)</a>:</p>
<div class="Bd Pp Bd-indent Li">
<pre>jedec_dimm_load=&quot;YES&quot;</pre>
</div>
<p class="Pp">Addressing information must be manually specified in
    <span class="Pa">/boot/device.hints</span>:</p>
<div class="Bd Pp Bd-indent Li">
<pre><code class="Cd">hint.jedec_dimm.0.at=&quot;smbus0&quot;</code>
<br/>
<code class="Cd">hint.jedec_dimm.0.addr=&quot;0xa0&quot;</code>
<br/>
<code class="Cd">hint.jedec_dimm.0.slotid=&quot;Silkscreen&quot;</code></pre>
</div>
</section>
<section class="Sh">
<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
<p class="Pp">The <code class="Nm">jedec_dimm</code> driver reports asset
    information (Part Number, Serial Number) encoded in the &#x201C;Serial
    Presence Detect&#x201D; (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 &#x201C;Thermal Sensor On DIMM&#x201D; (TSOD), the
    temperature is also reported.</p>
<p class="Pp">The <code class="Nm">jedec_dimm</code> driver accesses the SPD and
    TSOD over the <a class="Xr">smbus(4)</a>.</p>
<p class="Pp">The data is reported via a <a class="Xr">sysctl(8)</a> interface;
    all values are read-only:</p>
<dl class="Bl-tag">
  <dt id="dev.jedec_dimm.X._desc"><var class="Va">dev.jedec_dimm.X.%desc</var></dt>
  <dd>a string description of the DIMM, including TSOD and slotid info if
      present.</dd>
  <dt id="dev.jedec_dimm.X.capacity"><var class="Va">dev.jedec_dimm.X.capacity</var></dt>
  <dd>the DIMM's memory capacity, in megabytes</dd>
  <dt id="dev.jedec_dimm.X.mfg_week"><var class="Va">dev.jedec_dimm.X.mfg_week</var></dt>
  <dd>the week within the year in which the DIMM was manufactured</dd>
  <dt id="dev.jedec_dimm.X.mfg_year"><var class="Va">dev.jedec_dimm.X.mfg_year</var></dt>
  <dd>the year in which the DIMM was manufactured</dd>
  <dt id="dev.jedec_dimm.X.part"><var class="Va">dev.jedec_dimm.X.part</var></dt>
  <dd>the manufacturer's part number of the DIMM</dd>
  <dt id="dev.jedec_dimm.X.serial"><var class="Va">dev.jedec_dimm.X.serial</var></dt>
  <dd>the manufacturer's serial number of the DIMM</dd>
  <dt id="dev.jedec_dimm.X.slotid"><var class="Va">dev.jedec_dimm.X.slotid</var></dt>
  <dd>a copy of the corresponding hint, if set</dd>
  <dt id="dev.jedec_dimm.X.temp"><var class="Va">dev.jedec_dimm.X.temp</var></dt>
  <dd>if a TSOD is present, the reported temperature</dd>
  <dt id="dev.jedec_dimm.X.type"><var class="Va">dev.jedec_dimm.X.type</var></dt>
  <dd>the DIMM type (DDR3 or DDR4)</dd>
</dl>
<p class="Pp">These values are configurable for
    <code class="Nm">jedec_dimm</code> via
  <a class="Xr">device.hints(5)</a>:</p>
<dl class="Bl-tag">
  <dt id="hint.jedec_dimm.X.at"><var class="Va">hint.jedec_dimm.X.at</var></dt>
  <dd>the <a class="Xr">smbus(4)</a> to which the DIMM is connected</dd>
  <dt id="hint.jedec_dimm.X.addr"><var class="Va">hint.jedec_dimm.X.addr</var></dt>
  <dd>the SMBus address of the SPD. JEDEC specifies that the four
      most-significant bits of the address are the &#x201C;Device Type
      Identifier&#x201D; (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.</dd>
  <dt id="hint.jedec_dimm.X.slotid"><var class="Va">hint.jedec_dimm.X.slotid</var></dt>
  <dd>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.</dd>
</dl>
<p class="Pp">If the DIMMs are on an I2C bus behind an
    <a class="Xr">iicbus(4)</a> controller, then the <a class="Xr">iicsmb(4)</a>
    bridge driver can be used to attach the <a class="Xr">smbus(4)</a>.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
<p class="Pp">Consider two DDR4 DIMMs with the following hints:</p>
<div class="Bd Pp Bd-indent Li">
<pre>hint.jedec_dimm.0.at=&quot;smbus0&quot;
hint.jedec_dimm.0.addr=&quot;0xa0&quot;
hint.jedec_dimm.0.slotid=&quot;A1&quot;

hint.jedec_dimm.6.at=&quot;smbus1&quot;
hint.jedec_dimm.6.addr=&quot;0xa8&quot;</pre>
</div>
<p class="Pp">Their <a class="Xr">sysctl(8)</a> output (sorted):</p>
<div class="Bd Pp Bd-indent Li">
<pre>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</pre>
</div>
<p class="Pp">You can use <a class="Xr">smbmsg(8)</a> to probe for devices.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="COMPATIBILITY"><a class="permalink" href="#COMPATIBILITY">COMPATIBILITY</a></h1>
<p class="Pp"><code class="Nm">jedec_dimm</code> implements a superset of the
    functionality of the now-deleted <a class="Xr">jedec_ts(4)</a>. Hints for
    <a class="Xr">jedec_ts(4)</a> can be mechanically converted for use with
    <code class="Nm">jedec_dimm</code>. Two changes are required:</p>
<ol class="Bl-enum">
  <li>In all <a class="Xr">jedec_ts(4)</a> hints, replace
      &#x201C;jedec_ts&#x201D; with &#x201C;jedec_dimm&#x201D;</li>
  <li>In <a class="Xr">jedec_ts(4)</a> &#x201C;addr&#x201D; hints, replace the
      TSOD DTI &#x201C;0x3&#x201D; with the SPD DTI &#x201C;0xa&#x201D;</li>
</ol>
<p class="Pp">The following <a class="Xr">sed(1)</a> script will perform the
    necessary changes:</p>
<div class="Bd Pp Bd-indent Li">
<pre>sed -i &quot;.old&quot; -e 's/jedec_ts/jedec_dimm/' \
    -e '/jedec_dimm/s/addr=&quot;0x3/addr=&quot;0xa/' /boot/device.hints</pre>
</div>
</section>
<section class="Sh">
<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
  ALSO</a></h1>
<p class="Pp"><a class="Xr">iicbus(4)</a>, <a class="Xr">iicsmb(4)</a>,
    <a class="Xr">smbus(4)</a>, <a class="Xr">sysctl(8)</a></p>
</section>
<section class="Sh">
<h1 class="Sh" id="STANDARDS"><a class="permalink" href="#STANDARDS">STANDARDS</a></h1>
<p class="Pp"><cite class="Rs">(DDR3 SPD) <span class="RsA">JEDEC</span>,
    <span class="RsT">Standard 21-C, Annex K</span>.</cite></p>
<p class="Pp"><cite class="Rs">(DDR3 TSOD) <span class="RsA">JEDEC</span>,
    <span class="RsT">Standard 21-C, TSE2002av</span>.</cite></p>
<p class="Pp"><cite class="Rs">(DDR4 SPD) <span class="RsA">JEDEC</span>,
    <span class="RsT">Standard 21-C, Annex L</span>.</cite></p>
<p class="Pp"><cite class="Rs">(DDR4 TSOD) <span class="RsA">JEDEC</span>,
    <span class="RsT">Standard 21-C, TSE2004av</span>.</cite></p>
</section>
<section class="Sh">
<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
<p class="Pp">The <code class="Nm">jedec_dimm</code> driver first appeared in
    <span class="Ux">FreeBSD 12.0</span>.</p>
</section>
<section class="Sh">
<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
<p class="Pp">The <code class="Nm">jedec_dimm</code> driver and this manual page
    were written by <span class="An">Ravi Pokala</span>
    &lt;<a class="Mt" href="mailto:rpokala@freebsd.org">rpokala@freebsd.org</a>&gt;.
    They are both based in part on the now-deleted <a class="Xr">jedec_ts(4)</a>
    driver and manual page, written by <span class="An">Andriy Gapon</span>
    &lt;<a class="Mt" href="mailto:avg@FreeBSD.org">avg@FreeBSD.org</a>&gt;.</p>
</section>
</div>
<table class="foot">
  <tr>
    <td class="foot-date">January 2, 2026</td>
    <td class="foot-os">FreeBSD 15.0</td>
  </tr>
</table>