version 1.32, 2020/03/20 07:44:10 |
version 1.33, 2020/03/24 03:35:25 |
Line 340 spdmem_common_attach(struct spdmem_softc |
|
Line 340 spdmem_common_attach(struct spdmem_softc |
|
device_xname(self), NULL, NULL, 0, NULL, 0, |
device_xname(self), NULL, NULL, 0, NULL, 0, |
CTL_HW, CTL_CREATE, CTL_EOL); |
CTL_HW, CTL_CREATE, CTL_EOL); |
if (node != NULL && spd_len != 0) |
if (node != NULL && spd_len != 0) |
sysctl_createv(&sc->sc_sysctl_log, 0, NULL, NULL, |
sysctl_createv(&sc->sc_sysctl_log, 0, NULL, NULL, |
0, |
0, |
CTLTYPE_STRUCT, "spd_data", |
CTLTYPE_STRUCT, "spd_data", |
SYSCTL_DESCR("raw spd data"), NULL, |
SYSCTL_DESCR("raw spd data"), NULL, |
0, s, spd_len, |
0, s, spd_len, |
CTL_HW, node->sysctl_num, CTL_CREATE, CTL_EOL); |
CTL_HW, node->sysctl_num, CTL_CREATE, CTL_EOL); |
|
|
/* |
/* |
* Decode and print key SPD contents |
* Decode and print key SPD contents |
Line 411 spdmem_common_attach(struct spdmem_softc |
|
Line 411 spdmem_common_attach(struct spdmem_softc |
|
strlcat(sc->sc_type, " NVDIMM hybrid", |
strlcat(sc->sc_type, " NVDIMM hybrid", |
SPDMEM_TYPE_MAXLEN); |
SPDMEM_TYPE_MAXLEN); |
} |
} |
|
|
if (node != NULL) |
if (node != NULL) |
sysctl_createv(&sc->sc_sysctl_log, 0, NULL, NULL, |
sysctl_createv(&sc->sc_sysctl_log, 0, NULL, NULL, |
0, |
0, |
Line 615 decode_sdram(const struct sysctlnode *no |
|
Line 615 decode_sdram(const struct sysctlnode *no |
|
freq = 0; |
freq = 0; |
switch (freq) { |
switch (freq) { |
/* |
/* |
* Must check cycle time since some PC-133 DIMMs |
* Must check cycle time since some PC-133 DIMMs |
* actually report PC-100 |
* actually report PC-100 |
*/ |
*/ |
case 100: |
case 100: |
Line 786 decode_ddr3(const struct sysctlnode *nod |
|
Line 786 decode_ddr3(const struct sysctlnode *nod |
|
(s->sm_ddr3.ddr3_chipwidth + 2); |
(s->sm_ddr3.ddr3_chipwidth + 2); |
dimm_size = (1 << dimm_size) * (s->sm_ddr3.ddr3_physbanks + 1); |
dimm_size = (1 << dimm_size) * (s->sm_ddr3.ddr3_physbanks + 1); |
|
|
cycle_time = (1000 * s->sm_ddr3.ddr3_mtb_dividend + |
cycle_time = (1000 * s->sm_ddr3.ddr3_mtb_dividend + |
(s->sm_ddr3.ddr3_mtb_divisor / 2)) / |
(s->sm_ddr3.ddr3_mtb_divisor / 2)) / |
s->sm_ddr3.ddr3_mtb_divisor; |
s->sm_ddr3.ddr3_mtb_divisor; |
cycle_time *= s->sm_ddr3.ddr3_tCKmin; |
cycle_time *= s->sm_ddr3.ddr3_tCKmin; |
Line 857 decode_fbdimm(const struct sysctlnode *n |
|
Line 857 decode_fbdimm(const struct sysctlnode *n |
|
#define __FBDIMM_CYCLES(field) (s->sm_fbd.field / s->sm_fbd.fbdimm_tCKmin) |
#define __FBDIMM_CYCLES(field) (s->sm_fbd.field / s->sm_fbd.fbdimm_tCKmin) |
|
|
aprint_verbose_dev(self, LATENCY, __FBDIMM_CYCLES(fbdimm_tAAmin), |
aprint_verbose_dev(self, LATENCY, __FBDIMM_CYCLES(fbdimm_tAAmin), |
__FBDIMM_CYCLES(fbdimm_tRCDmin), __FBDIMM_CYCLES(fbdimm_tRPmin), |
__FBDIMM_CYCLES(fbdimm_tRCDmin), __FBDIMM_CYCLES(fbdimm_tRPmin), |
(s->sm_fbd.fbdimm_tRAS_msb * 256 + s->sm_fbd.fbdimm_tRAS_lsb) / |
(s->sm_fbd.fbdimm_tRAS_msb * 256 + s->sm_fbd.fbdimm_tRAS_lsb) / |
s->sm_fbd.fbdimm_tCKmin); |
s->sm_fbd.fbdimm_tCKmin); |
|
|
#undef __FBDIMM_CYCLES |
#undef __FBDIMM_CYCLES |
|
|
|
|
decode_ddr4(const struct sysctlnode *node, device_t self, struct spdmem *s) |
decode_ddr4(const struct sysctlnode *node, device_t self, struct spdmem *s) |
{ |
{ |
int dimm_size, cycle_time, ranks; |
int dimm_size, cycle_time, ranks; |
int tAA_clocks, tRCD_clocks,tRP_clocks, tRAS_clocks; |
int tAA_clocks, tRCD_clocks, tRP_clocks, tRAS_clocks; |
|
|
aprint_naive("\n"); |
aprint_naive("\n"); |
print_part(s->sm_ddr4.ddr4_part_number, |
print_part(s->sm_ddr4.ddr4_part_number, |
sizeof(s->sm_ddr4.ddr4_part_number)); |
sizeof(s->sm_ddr4.ddr4_part_number)); |
aprint_normal_dev(self, "%s", spdmem_basic_types[s->sm_type]); |
aprint_normal_dev(self, "%s", spdmem_basic_types[s->sm_type]); |
if (s->sm_ddr4.ddr4_mod_type < __arraycount(spdmem_ddr4_module_types)) |
if (s->sm_ddr4.ddr4_mod_type < __arraycount(spdmem_ddr4_module_types)) |
aprint_normal(" (%s)", |
aprint_normal(" (%s)", |
spdmem_ddr4_module_types[s->sm_ddr4.ddr4_mod_type]); |
spdmem_ddr4_module_types[s->sm_ddr4.ddr4_mod_type]); |
aprint_normal(", %sECC, %stemp-sensor, ", |
aprint_normal(", %sECC, %stemp-sensor, ", |
(s->sm_ddr4.ddr4_bus_width_extension) ? "" : "no ", |
(s->sm_ddr4.ddr4_bus_width_extension) ? "" : "no ", |
Line 912 decode_ddr4(const struct sysctlnode *nod |
|
Line 912 decode_ddr4(const struct sysctlnode *nod |
|
default: |
default: |
dimm_size = -1; /* flag invalid value */ |
dimm_size = -1; /* flag invalid value */ |
} |
} |
if (dimm_size >= 0) { |
if (dimm_size >= 0) { |
dimm_size = (1 << dimm_size) * |
dimm_size = (1 << dimm_size) * |
(s->sm_ddr4.ddr4_package_ranks + 1); /* log.ranks/DIMM */ |
(s->sm_ddr4.ddr4_package_ranks + 1); /* log.ranks/DIMM */ |
if (s->sm_ddr4.ddr4_signal_loading == 2) { |
if (s->sm_ddr4.ddr4_signal_loading == 2) { |
Line 928 decode_ddr4(const struct sysctlnode *nod |
|
Line 928 decode_ddr4(const struct sysctlnode *nod |
|
s->sm_ddr4.ddr4_##field##_ftb) - \ |
s->sm_ddr4.ddr4_##field##_ftb) - \ |
((s->sm_ddr4.ddr4_##field##_ftb > 127)?256:0)) |
((s->sm_ddr4.ddr4_##field##_ftb > 127)?256:0)) |
/* |
/* |
* For now, the only value for mtb is 0 = 125ps, and ftb = 1ps |
* For now, the only value for mtb is 0 = 125ps, and ftb = 1ps |
* so we don't need to figure out the time-base units - just |
* so we don't need to figure out the time-base units - just |
* hard-code them for now. |
* hard-code them for now. |
*/ |
*/ |