aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVasant Hegde <hegdevasant@linux.vnet.ibm.com>2018-04-12 19:52:19 +0530
committerStewart Smith <stewart@linux.ibm.com>2018-04-23 00:02:43 -0500
commitc4a094a7df80463408d7a9144377584245364fc5 (patch)
tree86aeae741997eefe2a1f242a2cc2659abfd5570a
parentbdd925aabbbbf0d35a44d85c9d51809c668be1ba (diff)
downloadskiboot-c4a094a7df80463408d7a9144377584245364fc5.zip
skiboot-c4a094a7df80463408d7a9144377584245364fc5.tar.gz
skiboot-c4a094a7df80463408d7a9144377584245364fc5.tar.bz2
hdata: Fix DIMM size property
Today we parse vpd blob to get DIMM size information. This is limited to FSP based system. HDAT provides DIMM size value. Lets use that to populate device tree. So that we can get size information on BMC based system as well. Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com> CC: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Stewart Smith <stewart@linux.ibm.com>
-rw-r--r--hdata/memory.c41
-rw-r--r--hdata/test/p8-840-spira.dts4
-rw-r--r--hdata/test/p81-811.spira.dts8
3 files changed, 17 insertions, 36 deletions
diff --git a/hdata/memory.c b/hdata/memory.c
index a838989..f94446f 100644
--- a/hdata/memory.c
+++ b/hdata/memory.c
@@ -234,32 +234,19 @@ static void add_bus_freq_to_ram_area(struct dt_node *ram_node, u32 chip_id)
}
static void add_size_to_ram_area(struct dt_node *ram_node,
- const struct HDIF_common_hdr *hdr,
- int indx_vpd)
+ const struct HDIF_common_hdr *ramarea)
{
- const void *fruvpd;
- unsigned int fruvpd_sz;
- const void *kw;
- char *str;
- uint8_t kwsz;
-
- fruvpd = HDIF_get_idata(hdr, indx_vpd, &fruvpd_sz);
- if (!CHECK_SPPTR(fruvpd))
- return;
+ char str[16];
+ const struct HDIF_ram_area_size *ram_area_sz;
- /* DIMM Size */
- kw = vpd_find(fruvpd, fruvpd_sz, "VINI", "SZ", &kwsz);
- if (!kw)
+ /* DIMM size */
+ ram_area_sz = HDIF_get_idata(ramarea, 3, NULL);
+ if (!CHECK_SPPTR(ram_area_sz))
return;
- str = zalloc(kwsz + 1);
- if (!str){
- prerror("Allocation failed\n");
- return;
- }
- memcpy(str, kw, kwsz);
+ memset(str, 0, 16);
+ snprintf(str, 16, "%d", be32_to_cpu(ram_area_sz->mb));
dt_add_property_string(ram_node, "size", str);
- free(str);
}
static void vpd_add_ram_area(const struct HDIF_common_hdr *msarea)
@@ -301,21 +288,15 @@ static void vpd_add_ram_area(const struct HDIF_common_hdr *msarea)
vpd_blob = HDIF_get_idata(ramarea, 1, &ram_sz);
+ /* DIMM size */
+ add_size_to_ram_area(ram_node, ramarea);
/*
* For direct-attached memory we have a DDR "Serial
* Presence Detection" blob rather than an IBM keyword
* blob.
*/
- if (vpd_valid(vpd_blob, ram_sz)) {
- /* the ibm,vpd blob was added in dt_add_vpd_node() */
- add_size_to_ram_area(ram_node, ramarea, 1);
- } else {
- /*
- * FIXME: There's probably a way to calculate the
- * size of the DIMM from the SPD info.
- */
+ if (!vpd_valid(vpd_blob, ram_sz))
dt_add_property(ram_node, "spd", vpd_blob, ram_sz);
- }
}
}
diff --git a/hdata/test/p8-840-spira.dts b/hdata/test/p8-840-spira.dts
index 62a2f52..e73c691 100644
--- a/hdata/test/p8-840-spira.dts
+++ b/hdata/test/p8-840-spira.dts
@@ -746,7 +746,7 @@
description = "16GB CDIMM";
ibm,chip-id = <0x0>;
ibm,memory-bus-frequency = <0x0 0x0>;
- size = "0016384";
+ size = "16384";
};
ms-dimm@d002 {
@@ -768,7 +768,7 @@
description = "16GB CDIMM";
ibm,chip-id = <0x0>;
ibm,memory-bus-frequency = <0x0 0x0>;
- size = "0016384";
+ size = "16384";
};
processor@1000 {
diff --git a/hdata/test/p81-811.spira.dts b/hdata/test/p81-811.spira.dts
index ba9b355..2ca361e 100644
--- a/hdata/test/p81-811.spira.dts
+++ b/hdata/test/p81-811.spira.dts
@@ -1899,7 +1899,7 @@
description = "32GB CDIMM";
ibm,chip-id = <0x0>;
ibm,memory-bus-frequency = <0x0 0x0>;
- size = "0032768";
+ size = "32768";
};
ms-dimm@d002 {
@@ -1921,7 +1921,7 @@
description = "32GB CDIMM";
ibm,chip-id = <0x0>;
ibm,memory-bus-frequency = <0x0 0x0>;
- size = "0032768";
+ size = "32768";
};
ms-dimm@d008 {
@@ -1943,7 +1943,7 @@
description = "32GB CDIMM";
ibm,chip-id = <0x10>;
ibm,memory-bus-frequency = <0x0 0x0>;
- size = "0032768";
+ size = "32768";
};
ms-dimm@d00a {
@@ -1965,7 +1965,7 @@
description = "32GB CDIMM";
ibm,chip-id = <0x10>;
ibm,memory-bus-frequency = <0x0 0x0>;
- size = "0032768";
+ size = "32768";
};
processor@1000 {