summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/arch/x86/smbios.c10
-rw-r--r--src/include/memory_info.h14
2 files changed, 22 insertions, 2 deletions
diff --git a/src/arch/x86/smbios.c b/src/arch/x86/smbios.c
index 6c92d03c72..7516305191 100644
--- a/src/arch/x86/smbios.c
+++ b/src/arch/x86/smbios.c
@@ -281,8 +281,14 @@ static int create_smbios_type17_for_dimm(struct dimm_info *dimm,
memset(t, 0, sizeof(struct smbios_type17));
t->memory_type = dimm->ddr_type;
- t->clock_speed = dimm->ddr_frequency;
- t->speed = dimm->ddr_frequency;
+ if (dimm->configured_speed_mts != 0)
+ t->clock_speed = dimm->configured_speed_mts;
+ else
+ t->clock_speed = dimm->ddr_frequency;
+ if (dimm->max_speed_mts != 0)
+ t->speed = dimm->max_speed_mts;
+ else
+ t->speed = dimm->ddr_frequency;
t->type = SMBIOS_MEMORY_DEVICE;
if (dimm->dimm_size < 0x7fff) {
t->size = dimm->dimm_size;
diff --git a/src/include/memory_info.h b/src/include/memory_info.h
index f4a200995c..d9d9c37733 100644
--- a/src/include/memory_info.h
+++ b/src/include/memory_info.h
@@ -28,6 +28,10 @@ struct dimm_info {
* See the smbios.h smbios_memory_type enum.
*/
uint16_t ddr_type;
+ /*
+ * ddr_frequency is deprecated.
+ * Use max_speed_mts and configured_speed_mts instead.
+ */
uint16_t ddr_frequency;
uint8_t rank_per_dimm;
uint8_t channel_num;
@@ -79,6 +83,16 @@ struct dimm_info {
* Voltage Level
*/
uint16_t vdd_voltage;
+ /*
+ * Max speed in MT/s
+ * If the value is 0, ddr_frequency should be used instead.
+ */
+ uint16_t max_speed_mts;
+ /*
+ * Configured speed in MT/s
+ * If the value is 0, ddr_frequency should be used instead.
+ */
+ uint16_t configured_speed_mts;
} __packed;
struct memory_info {