[Skiboot] [PATCH 29/40] hw/phb3.c: adjust offset to run CAPP containers
Michael Neuling
mikey at neuling.org
Mon Oct 10 21:03:42 AEDT 2016
On Mon, 2016-10-10 at 19:44 +1100, Stewart Smith wrote:
> From: Claudio Carvalho <cclaudio at linux.vnet.ibm.com>
>
> This adjusts the CAPP header offset if CAPP is a secure boot container.
>
> Signed-off-by: Claudio Carvalho <cclaudio at linux.vnet.ibm.com>
> Signed-off-by: Stewart Smith <stewart at linux.vnet.ibm.com>
I just noticed these went in... Did the CAPI team test them at all?
The CAPI team should probably have been CCed and we got their ACK.
Mikey
> ---
> hw/phb3.c | 24 ++++++++++++++++++++++--
> 1 file changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/hw/phb3.c b/hw/phb3.c
> index eb30c36..e327225 100644
> --- a/hw/phb3.c
> +++ b/hw/phb3.c
> @@ -34,6 +34,7 @@
> #include <fsp.h>
> #include <chip.h>
> #include <chiptod.h>
> +#include <libstb/container.h>
>
> /* Enable this to disable error interrupts for debug purposes */
> #undef DISABLE_ERR_INTS
> @@ -2309,9 +2310,27 @@ static int64_t capp_load_ucode(struct phb3 *p)
> if (rc)
> return rc;
>
> - prlog(PR_INFO, "CHIP%i: CAPP ucode lid loaded at %p\n",
> - p->chip_id, capp_ucode_info.lid);
> lid = capp_ucode_info.lid;
> +
> + /* skip secure boot headers */
> + if (stb_is_container(lid, capp_ucode_info.size))
> + lid = (struct capp_lid_hdr*) ((uint8_t*)lid +
> SECURE_BOOT_HEADERS_SIZE);
> +
> + /*
> + * CAPP partition header may be present on BMC machines. It will tell
> + * us what sub-partition should be used
> + */
> + if (be64_to_cpu(lid->eyecatcher) == 0x4341505000000001) {
> + uint32_t subpart_offset=0, subpart_size=0;
> + flash_subpart_info(lid, CAPP_UCODE_MAX_SIZE,
> + capp_ucode_info.ec_level,
> + &subpart_offset, &subpart_size);
> + if (rc)
> + return rc;
> +
> + lid = (struct capp_lid_hdr*) ((uint8_t*)lid +
> subpart_offset);
> + }
> +
> /*
> * If lid header is present (on FSP machines), it'll tell us where to
> * find the ucode. Otherwise this is the ucode.
> @@ -2382,6 +2401,7 @@ static int64_t capp_load_ucode(struct phb3 *p)
> }
>
> chip->capp_ucode_loaded |= (1 << p->index);
> + prlog(PR_INFO, "CHIP%i: CAPP ucode loaded\n", p->chip_id);
> return OPAL_SUCCESS;
> }
>
More information about the Skiboot
mailing list