[PATCH 2/3] PPC64: Add support for instantiating SML from Open Firmware

2012-08-07 Thread Ashley Lai
This patch instantiate Stored Measurement Log (SML) and put the
log address and size in the device tree.

Signed-off-by: Ashley Lai 
---
 arch/powerpc/kernel/prom_init.c |   64 +++
 1 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 1b488e5..3f54bd4 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -1624,6 +1624,65 @@ static void __init prom_instantiate_rtas(void)
 
 #ifdef CONFIG_PPC64
 /*
+ * Allocate room for and instantiate Stored Measurement Log (SML)
+ */
+static void __init prom_instantiate_sml(void)
+{
+   phandle ibmvtpm_node;
+   ihandle ibmvtpm_inst;
+   u32 entry = 0, size = 0;
+   u64 base;
+
+   prom_debug("prom_instantiate_sml: start...\n");
+
+   ibmvtpm_node = call_prom("finddevice", 1, 1, ADDR("/ibm,vtpm"));
+   prom_debug("ibmvtpm_node: %x\n", ibmvtpm_node);
+   if (!PHANDLE_VALID(ibmvtpm_node))
+   return;
+
+   ibmvtpm_inst = call_prom("open", 1, 1, ADDR("/ibm,vtpm"));
+   if (!IHANDLE_VALID(ibmvtpm_inst)) {
+   prom_printf("opening vtpm package failed (%x)\n", ibmvtpm_inst);
+   return;
+   }
+
+   if (call_prom_ret("call-method", 2, 2, ,
+ ADDR("sml-get-handover-size"),
+ ibmvtpm_inst) != 0) {
+   prom_printf("SML get handover size failed\n");
+   return;
+   }
+   if (size == 0)
+   return;
+
+   base = alloc_down(size, PAGE_SIZE, 0);
+   if (base == 0)
+   prom_panic("Could not allocate memory for sml\n");
+
+   prom_printf("instantiating sml at 0x%x...", base);
+
+   if (call_prom_ret("call-method", 4, 2, ,
+ ADDR("sml-handover"),
+ ibmvtpm_inst, size, base) != 0 || entry == 0) {
+   prom_printf("SML handover failed\n");
+   return;
+   }
+   prom_printf(" done\n");
+
+   reserve_mem(base, size);
+
+   prom_setprop(ibmvtpm_node, "/ibm,vtpm", "linux,sml-base",
+, sizeof(base));
+   prom_setprop(ibmvtpm_node, "/ibm,vtpm", "linux,sml-size",
+, sizeof(size));
+
+   prom_debug("sml base = 0x%x\n", base);
+   prom_debug("sml size = 0x%x\n", (long)size);
+
+   prom_debug("prom_instantiate_sml: end...\n");
+}
+
+/*
  * Allocate room for and initialize TCE tables
  */
 static void __init prom_initialize_tce_table(void)
@@ -2916,6 +2975,11 @@ unsigned long __init prom_init(unsigned long r3, 
unsigned long r4,
prom_instantiate_opal();
 #endif
 
+#ifdef CONFIG_PPC64
+   /* instantiate sml */
+   prom_instantiate_sml();
+#endif
+
/*
 * On non-powermacs, put all CPUs in spin-loops.
 *
-- 
1.7.1


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 2/3] PPC64: Add support for instantiating SML from Open Firmware

2012-08-07 Thread Ashley Lai
This patch instantiate Stored Measurement Log (SML) and put the
log address and size in the device tree.

Signed-off-by: Ashley Lai ad...@us.ibm.com
---
 arch/powerpc/kernel/prom_init.c |   64 +++
 1 files changed, 64 insertions(+), 0 deletions(-)

diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c
index 1b488e5..3f54bd4 100644
--- a/arch/powerpc/kernel/prom_init.c
+++ b/arch/powerpc/kernel/prom_init.c
@@ -1624,6 +1624,65 @@ static void __init prom_instantiate_rtas(void)
 
 #ifdef CONFIG_PPC64
 /*
+ * Allocate room for and instantiate Stored Measurement Log (SML)
+ */
+static void __init prom_instantiate_sml(void)
+{
+   phandle ibmvtpm_node;
+   ihandle ibmvtpm_inst;
+   u32 entry = 0, size = 0;
+   u64 base;
+
+   prom_debug(prom_instantiate_sml: start...\n);
+
+   ibmvtpm_node = call_prom(finddevice, 1, 1, ADDR(/ibm,vtpm));
+   prom_debug(ibmvtpm_node: %x\n, ibmvtpm_node);
+   if (!PHANDLE_VALID(ibmvtpm_node))
+   return;
+
+   ibmvtpm_inst = call_prom(open, 1, 1, ADDR(/ibm,vtpm));
+   if (!IHANDLE_VALID(ibmvtpm_inst)) {
+   prom_printf(opening vtpm package failed (%x)\n, ibmvtpm_inst);
+   return;
+   }
+
+   if (call_prom_ret(call-method, 2, 2, size,
+ ADDR(sml-get-handover-size),
+ ibmvtpm_inst) != 0) {
+   prom_printf(SML get handover size failed\n);
+   return;
+   }
+   if (size == 0)
+   return;
+
+   base = alloc_down(size, PAGE_SIZE, 0);
+   if (base == 0)
+   prom_panic(Could not allocate memory for sml\n);
+
+   prom_printf(instantiating sml at 0x%x..., base);
+
+   if (call_prom_ret(call-method, 4, 2, entry,
+ ADDR(sml-handover),
+ ibmvtpm_inst, size, base) != 0 || entry == 0) {
+   prom_printf(SML handover failed\n);
+   return;
+   }
+   prom_printf( done\n);
+
+   reserve_mem(base, size);
+
+   prom_setprop(ibmvtpm_node, /ibm,vtpm, linux,sml-base,
+base, sizeof(base));
+   prom_setprop(ibmvtpm_node, /ibm,vtpm, linux,sml-size,
+size, sizeof(size));
+
+   prom_debug(sml base = 0x%x\n, base);
+   prom_debug(sml size = 0x%x\n, (long)size);
+
+   prom_debug(prom_instantiate_sml: end...\n);
+}
+
+/*
  * Allocate room for and initialize TCE tables
  */
 static void __init prom_initialize_tce_table(void)
@@ -2916,6 +2975,11 @@ unsigned long __init prom_init(unsigned long r3, 
unsigned long r4,
prom_instantiate_opal();
 #endif
 
+#ifdef CONFIG_PPC64
+   /* instantiate sml */
+   prom_instantiate_sml();
+#endif
+
/*
 * On non-powermacs, put all CPUs in spin-loops.
 *
-- 
1.7.1


--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/