blob: 541b251bf4a955e25b7f9e5a212a4589b754d16f [file] [log] [blame]
Hou Zhiqiang00787862016-06-28 20:18:14 +08001/*
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
21int ppa_init(void)
22{
23 const void *ppa_fit_addr;
24 u32 *boot_loc_ptr_l, *boot_loc_ptr_h;
25 int ret;
26
27#ifdef CONFIG_SYS_LS_PPA_FW_IN_NOR
28 ppa_fit_addr = (void *)CONFIG_SYS_LS_PPA_FW_ADDR;
29#else
30#error "No CONFIG_SYS_LS_PPA_FW_IN_xxx defined"
31#endif
32
33#ifdef CONFIG_FSL_LSCH3
34 struct ccsr_gur __iomem *gur = (void *)(CONFIG_SYS_FSL_GUTS_ADDR);
35 boot_loc_ptr_l = &gur->bootlocptrl;
36 boot_loc_ptr_h = &gur->bootlocptrh;
37#elif defined(CONFIG_FSL_LSCH2)
38 struct ccsr_scfg __iomem *scfg = (void *)(CONFIG_SYS_FSL_SCFG_ADDR);
39 boot_loc_ptr_l = &scfg->scratchrw[1];
40 boot_loc_ptr_h = &scfg->scratchrw[0];
41#endif
42
43 debug("fsl-ppa: boot_loc_ptr_l = 0x%p, boot_loc_ptr_h =0x%p\n",
44 boot_loc_ptr_l, boot_loc_ptr_h);
45 ret = sec_firmware_init(ppa_fit_addr, boot_loc_ptr_l, boot_loc_ptr_h);
46
47 return ret;
48}