Skip to content

Commit

Permalink
PPC64: Add support for instantiating SML from Open Firmware
Browse files Browse the repository at this point in the history
This patch instantiate Stored Measurement Log (SML) and put the
log address and size in the device tree.

Signed-off-by: Ashley Lai <adlai@us.ibm.com>
Signed-off-by: Kent Yoder <key@linux.vnet.ibm.com>
  • Loading branch information
Ashley Lai authored and Kent Yoder committed Aug 22, 2012
1 parent 132f762 commit 4a72742
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions arch/powerpc/kernel/prom_init.c
Original file line number Diff line number Diff line change
Expand Up @@ -1623,6 +1623,63 @@ 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 || size == 0) {
prom_printf("SML get handover size failed\n");
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
*/
Expand Down Expand Up @@ -2916,6 +2973,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.
*
Expand Down

0 comments on commit 4a72742

Please sign in to comment.