uboot/arch/arm/cpu/armv8/fsl-layerscape/ppa.c
<<
>>
Prefs
   1/*
   2 * Copyright 2016 NXP Semiconductor, Inc.
   3 *
   4 * SPDX-License-Identifier:     GPL-2.0+
   5 */
   6#include <common.h>
   7#include <config.h>
   8#include <errno.h>
   9#include <asm/system.h>
  10#include <asm/types.h>
  11#include <asm/arch/soc.h>
  12#ifdef CONFIG_FSL_LSCH3
  13#include <asm/arch/immap_lsch3.h>
  14#elif defined(CONFIG_FSL_LSCH2)
  15#include <asm/arch/immap_lsch2.h>
  16#endif
  17#ifdef CONFIG_ARMV8_SEC_FIRMWARE_SUPPORT
  18#include <asm/armv8/sec_firmware.h>
  19#endif
  20#ifdef CONFIG_CHAIN_OF_TRUST
  21#include <fsl_validate.h>
  22#endif
  23
  24int ppa_init(void)
  25{
  26        const void *ppa_fit_addr;
  27        u32 *boot_loc_ptr_l, *boot_loc_ptr_h;
  28        int ret;
  29
  30#ifdef CONFIG_CHAIN_OF_TRUST
  31        uintptr_t ppa_esbc_hdr = CONFIG_SYS_LS_PPA_ESBC_ADDR;
  32        uintptr_t ppa_img_addr = 0;
  33#endif
  34
  35#ifdef CONFIG_SYS_LS_PPA_FW_IN_XIP
  36        ppa_fit_addr = (void *)CONFIG_SYS_LS_PPA_FW_ADDR;
  37#else
  38#error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined"
  39#endif
  40
  41#ifdef CONFIG_CHAIN_OF_TRUST
  42        ppa_img_addr = (uintptr_t)ppa_fit_addr;
  43        if (fsl_check_boot_mode_secure() != 0) {
  44                ret = fsl_secboot_validate(ppa_esbc_hdr,
  45                                           CONFIG_PPA_KEY_HASH,
  46                                           &ppa_img_addr);
  47                if (ret != 0)
  48                        printf("PPA validation failed\n");
  49                else
  50                        printf("PPA validation Successful\n");
  51        }
  52#endif
  53
  54#ifdef CONFIG_FSL_LSCH3
  55        struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
  56        boot_loc_ptr_l = &gur->bootlocptrl;
  57        boot_loc_ptr_h = &gur->bootlocptrh;
  58#elif defined(CONFIG_FSL_LSCH2)
  59        struct ccsr_scfg __iomem *scfg = (void *)(CONFIG_SYS_FSL_SCFG_ADDR);
  60        boot_loc_ptr_l = &scfg->scratchrw[1];
  61        boot_loc_ptr_h = &scfg->scratchrw[0];
  62#endif
  63
  64        debug("fsl-ppa: boot_loc_ptr_l = 0x%p, boot_loc_ptr_h =0x%p\n",
  65              boot_loc_ptr_l, boot_loc_ptr_h);
  66        ret = sec_firmware_init(ppa_fit_addr, boot_loc_ptr_l, boot_loc_ptr_h);
  67
  68        return ret;
  69}
  70