[v4] core/init: Add hdat-map property to OPAL node

Submitted by Matt Brown on March 7, 2017, 10:27 p.m.

Details

Message ID 20170307222732.2779-1-matthew.brown.dev@gmail.com
State Superseded
Headers show

Commit Message

Matt Brown March 7, 2017, 10:27 p.m.
Exports the HDAT heap to the OS. This allows the OS to view the HDAT heap
directly.  This allows us to view the HDAT area without having to use
getmemproc.

Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
---
Changelog

v4
	- added comment about the use of add_opal_firmware_exports_node
	- added comment about need for redundant symbol-map node
---
 core/opal.c | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

Comments

Oliver O'Halloran March 17, 2017, 1:28 a.m.
On Wed, Mar 8, 2017 at 9:27 AM, Matt Brown <matthew.brown.dev@gmail.com> wrote:
> Exports the HDAT heap to the OS. This allows the OS to view the HDAT heap
> directly.  This allows us to view the HDAT area without having to use
> getmemproc.
>
> Signed-off-by: Matt Brown <matthew.brown.dev@gmail.com>
> ---
> Changelog
>
> v4
>         - added comment about the use of add_opal_firmware_exports_node
>         - added comment about need for redundant symbol-map node
> ---
>  core/opal.c | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
>
> diff --git a/core/opal.c b/core/opal.c
> index 6087e65..b12267c 100644
> --- a/core/opal.c
> +++ b/core/opal.c
> @@ -119,15 +119,43 @@ void __opal_register(uint64_t token, void *func, unsigned int nargs)
>         opal_num_args[token] = nargs;
>  }
>
> +/*
> + * add_opal_firmware_exports_node: adds properties to the device-tree which
> + * the OS will then change into sysfs nodes.
> + * The properties must be placed under /ibm,opal/firmware/exports.
> + * The new sysfs nodes are created under /opal/exports.
> + * To be correctly exported the properties must contain:
> + *     name
> + *     base memory location (u64)
> + *     size                 (u64)
> + */
> +static void add_opal_firmware_exports_node(struct dt_node *node)
> +{
> +       struct dt_node *exports = dt_new(node, "exports");
> +       uint64_t sym_start = (uint64_t)__sym_map_start;
> +       uint64_t sym_size = (uint64_t)__sym_map_end - sym_start;
> +
> +       dt_add_property_u64s(exports, "symbol-map", sym_start, sym_size);
> +       dt_add_property_u64s(exports, "hdat-map", SPIRA_HEAP_BASE,
> +                               SPIRA_HEAP_SIZE);
> +}
> +
>  static void add_opal_firmware_node(void)
>  {
>         struct dt_node *firmware = dt_new(opal_node, "firmware");
>         uint64_t sym_start = (uint64_t)__sym_map_start;
>         uint64_t sym_size = (uint64_t)__sym_map_end - sym_start;
> +
>         dt_add_property_string(firmware, "compatible", "ibm,opal-firmware");
>         dt_add_property_string(firmware, "name", "firmware");
>         dt_add_property_string(firmware, "version", version);

> +       /*  As previous OS versions use symbol-map located at
> +        *  /ibm,opal/firmware we will keep a copy of symbol-map here
> +        *  for backwards compatibility
> +        */

Use the symmetric comment style:

/*
 * like this
 */

>         dt_add_property_u64s(firmware, "symbol-map", sym_start, sym_size);
> +
> +       add_opal_firmware_exports_node(firmware);
>  }
>
>  void add_opal_node(void)
> --

nitpick aside, feel free to add my R-b tag.

Reviewed-by: Oliver O'Halloran <oohall@gmail.com>

Patch hide | download patch | download mbox

diff --git a/core/opal.c b/core/opal.c
index 6087e65..b12267c 100644
--- a/core/opal.c
+++ b/core/opal.c
@@ -119,15 +119,43 @@  void __opal_register(uint64_t token, void *func, unsigned int nargs)
 	opal_num_args[token] = nargs;
 }
 
+/*
+ * add_opal_firmware_exports_node: adds properties to the device-tree which
+ * the OS will then change into sysfs nodes.
+ * The properties must be placed under /ibm,opal/firmware/exports.
+ * The new sysfs nodes are created under /opal/exports.
+ * To be correctly exported the properties must contain:
+ * 	name
+ * 	base memory location (u64)
+ * 	size 		     (u64)
+ */
+static void add_opal_firmware_exports_node(struct dt_node *node)
+{
+	struct dt_node *exports = dt_new(node, "exports");
+	uint64_t sym_start = (uint64_t)__sym_map_start;
+	uint64_t sym_size = (uint64_t)__sym_map_end - sym_start;
+
+	dt_add_property_u64s(exports, "symbol-map", sym_start, sym_size);
+	dt_add_property_u64s(exports, "hdat-map", SPIRA_HEAP_BASE,
+				SPIRA_HEAP_SIZE);
+}
+
 static void add_opal_firmware_node(void)
 {
 	struct dt_node *firmware = dt_new(opal_node, "firmware");
 	uint64_t sym_start = (uint64_t)__sym_map_start;
 	uint64_t sym_size = (uint64_t)__sym_map_end - sym_start;
+
 	dt_add_property_string(firmware, "compatible", "ibm,opal-firmware");
 	dt_add_property_string(firmware, "name", "firmware");
 	dt_add_property_string(firmware, "version", version);
+	/*  As previous OS versions use symbol-map located at
+	 *  /ibm,opal/firmware we will keep a copy of symbol-map here
+	 *  for backwards compatibility
+	 */
 	dt_add_property_u64s(firmware, "symbol-map", sym_start, sym_size);
+
+	add_opal_firmware_exports_node(firmware);
 }
 
 void add_opal_node(void)