[Skiboot] [PATCH] Add nest_memory region to exports node

Anju T Sudhakar anju at linux.vnet.ibm.com
Fri Sep 8 21:56:05 AEST 2017


From: Madhavan Srinivasan <maddy at linux.vnet.ibm.com>

Adds nest_memory region to exports node, so that sysfs interface exposes
the nest-imc memory dump. This is really helpful incase of debugging nest-imc 
counters data and verify whether the counter values are updated in the main
memory properly or not.
Also helps to analyse the values populated in the control block structure. 

Example:

/proc/device-tree/ibm,opal/firmware/exports# ls
hdat_map  imc_nest_chip_0  name  phandle  symbol_map

/sys/firmware/opal/exports# ls
hdat_map  imc_nest_chip_0  symbol_map

/sys/firmware/opal/exports# hexdump imc_nest_chip_0 
0000000 0000 0000 0000 47af 0000 0000 0000 b41e
0000010 0000 0000 0400 7798 0000 0000 0000 0f6c
0000020 0000 0000 0000 0000 0000 0000 0000 c206
0000030 0000 0000 0000 f17b 0000 0000 0000 9100
0000040 0000 0000 0000 0000 0000 0000 0000 b71e
0000050 0000 0000 0400 6f98 0000 0000 0000 fc2b
***

Signed-off-by: Madhavan Srinivasan <maddy at linux.vnet.ibm.com>
Tested-by : Anju T Sudhakar <anju at linux.vnet.ibm.com>
---
 hw/imc.c | 30 ++++++++++++++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/hw/imc.c b/hw/imc.c
index b29a2a1ba270..11df258601d1 100644
--- a/hw/imc.c
+++ b/hw/imc.c
@@ -113,6 +113,7 @@ static char *compress_buf;
 static size_t compress_buf_size;
 const char **prop_to_fix(struct dt_node *node);
 const char *props_to_fix[] = {"events", NULL};
+static uint32_t imc_nest_offset;
 
 static bool is_nest_mem_initialized(struct imc_chip_cb *ptr)
 {
@@ -416,6 +417,33 @@ static void imc_dt_update_nest_node(struct dt_node *dev)
 	}
 }
 
+static void add_nest_mem_exports_node(struct dt_node *root, struct dt_node *dev)
+{
+	struct proc_chip *chip;
+	struct dt_node *node;
+	uint64_t baddr;
+	const struct dt_property *type;
+	char namebuf[32];
+	int i=0;
+
+	dt_for_each_compatible(dev, node, "ibm,imc-counters") {
+		type = dt_find_property(node, "type");
+		if (type && is_nest_node(node))
+			imc_nest_offset = dt_prop_get_u32(node, "offset");
+	}
+
+	node = dt_find_by_name(root, "exports");
+	if (!node)
+		return;
+
+	for_each_chip(chip) {
+		snprintf(namebuf, sizeof(namebuf), "imc_nest_chip_%d", i++);
+		baddr = chip->homer_base;
+		baddr += imc_nest_offset;
+		dt_add_property_u64s(node, namebuf, baddr, 0x40000);
+	}
+}
+
 /*
  * Load the IMC pnor partition and find the appropriate sub-partition
  * based on the platform's PVR.
@@ -522,6 +550,8 @@ imc_mambo:
 		goto err;
 	}
 
+	add_nest_mem_exports_node(dt_root, dev);
+
 	free(compress_buf);
 	return;
 err:
-- 
2.7.4



More information about the Skiboot mailing list