mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-17 18:14:24 +00:00
plat: imx8mn: Add imx8mn basic support
Add imx8mn basic support Signed-off-by: Jacky Bai <ping.bai@nxp.com> Change-Id: Ibdfcc87700bfaf980e429f3a5fa08515218ae78d
This commit is contained in:
parent
de9d0d7c7f
commit
58fdd608a4
7 changed files with 521 additions and 0 deletions
|
@ -32,6 +32,7 @@ Build Procedure
|
|||
|
||||
Target_SoC should be "imx8mq" for i.MX8MQ SoC.
|
||||
Target_SoC should be "imx8mm" for i.MX8MM SoC.
|
||||
Target_SoC should be "imx8mn" for i.MX8MN SoC.
|
||||
|
||||
Deploy TF-A Images
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
|
|
94
plat/imx/imx8m/imx8mn/gpc.c
Normal file
94
plat/imx/imx8m/imx8mn/gpc.c
Normal file
|
@ -0,0 +1,94 @@
|
|||
/*
|
||||
* Copyright 2019-2020 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <common/debug.h>
|
||||
#include <drivers/delay_timer.h>
|
||||
#include <lib/mmio.h>
|
||||
#include <lib/psci/psci.h>
|
||||
#include <lib/smccc.h>
|
||||
#include <services/std_svc.h>
|
||||
|
||||
#include <gpc.h>
|
||||
#include <imx_sip_svc.h>
|
||||
#include <platform_def.h>
|
||||
|
||||
#define CCGR(x) (0x4000 + (x) * 0x10)
|
||||
|
||||
void imx_gpc_init(void)
|
||||
{
|
||||
unsigned int val;
|
||||
int i;
|
||||
|
||||
/* mask all the wakeup irq by default */
|
||||
for (i = 0; i < 4; i++) {
|
||||
mmio_write_32(IMX_GPC_BASE + IMR1_CORE0_A53 + i * 4, ~0x0);
|
||||
mmio_write_32(IMX_GPC_BASE + IMR1_CORE1_A53 + i * 4, ~0x0);
|
||||
mmio_write_32(IMX_GPC_BASE + IMR1_CORE2_A53 + i * 4, ~0x0);
|
||||
mmio_write_32(IMX_GPC_BASE + IMR1_CORE3_A53 + i * 4, ~0x0);
|
||||
mmio_write_32(IMX_GPC_BASE + IMR1_CORE0_M4 + i * 4, ~0x0);
|
||||
}
|
||||
|
||||
val = mmio_read_32(IMX_GPC_BASE + LPCR_A53_BSC);
|
||||
/* use GIC wake_request to wakeup C0~C3 from LPM */
|
||||
val |= CORE_WKUP_FROM_GIC;
|
||||
/* clear the MASTER0 LPM handshake */
|
||||
val &= ~MASTER0_LPM_HSK;
|
||||
mmio_write_32(IMX_GPC_BASE + LPCR_A53_BSC, val);
|
||||
|
||||
/* clear MASTER1 & MASTER2 mapping in CPU0(A53) */
|
||||
mmio_clrbits_32(IMX_GPC_BASE + MST_CPU_MAPPING, (MASTER1_MAPPING |
|
||||
MASTER2_MAPPING));
|
||||
|
||||
/* set all mix/PU in A53 domain */
|
||||
mmio_write_32(IMX_GPC_BASE + PGC_CPU_0_1_MAPPING, 0xffff);
|
||||
|
||||
/*
|
||||
* Set the CORE & SCU power up timing:
|
||||
* SW = 0x1, SW2ISO = 0x1;
|
||||
* the CPU CORE and SCU power up timming counter
|
||||
* is drived by 32K OSC, each domain's power up
|
||||
* latency is (SW + SW2ISO) / 32768
|
||||
*/
|
||||
mmio_write_32(IMX_GPC_BASE + COREx_PGC_PCR(0) + 0x4, 0x401);
|
||||
mmio_write_32(IMX_GPC_BASE + COREx_PGC_PCR(1) + 0x4, 0x401);
|
||||
mmio_write_32(IMX_GPC_BASE + COREx_PGC_PCR(2) + 0x4, 0x401);
|
||||
mmio_write_32(IMX_GPC_BASE + COREx_PGC_PCR(3) + 0x4, 0x401);
|
||||
mmio_write_32(IMX_GPC_BASE + PLAT_PGC_PCR + 0x4, 0x401);
|
||||
mmio_write_32(IMX_GPC_BASE + PGC_SCU_TIMING,
|
||||
(0x59 << TMC_TMR_SHIFT) | 0x5B | (0x2 << TRC1_TMC_SHIFT));
|
||||
|
||||
/* set DUMMY PDN/PUP ACK by default for A53 domain */
|
||||
mmio_write_32(IMX_GPC_BASE + PGC_ACK_SEL_A53,
|
||||
A53_DUMMY_PUP_ACK | A53_DUMMY_PDN_ACK);
|
||||
|
||||
/* clear DSM by default */
|
||||
val = mmio_read_32(IMX_GPC_BASE + SLPCR);
|
||||
val &= ~SLPCR_EN_DSM;
|
||||
/* enable the fast wakeup wait mode */
|
||||
val |= SLPCR_A53_FASTWUP_WAIT_MODE;
|
||||
/* clear the RBC */
|
||||
val &= ~(0x3f << SLPCR_RBC_COUNT_SHIFT);
|
||||
/* set the STBY_COUNT to 0x5, (128 * 30)us */
|
||||
val &= ~(0x7 << SLPCR_STBY_COUNT_SHFT);
|
||||
val |= (0x5 << SLPCR_STBY_COUNT_SHFT);
|
||||
mmio_write_32(IMX_GPC_BASE + SLPCR, val);
|
||||
|
||||
/*
|
||||
* USB PHY power up needs to make sure RESET bit in SRC is clear,
|
||||
* otherwise, the PU power up bit in GPC will NOT self-cleared.
|
||||
* only need to do it once.
|
||||
*/
|
||||
mmio_clrbits_32(IMX_SRC_BASE + SRC_OTG1PHY_SCR, 0x1);
|
||||
|
||||
/* enable all the power domain by default */
|
||||
for (i = 0; i < 103; i++)
|
||||
mmio_write_32(IMX_CCM_BASE + CCGR(i), 0x3);
|
||||
mmio_write_32(IMX_GPC_BASE + PU_PGC_UP_TRG, 0x485);
|
||||
}
|
186
plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c
Normal file
186
plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c
Normal file
|
@ -0,0 +1,186 @@
|
|||
/*
|
||||
* Copyright 2019-2020 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <arch_helpers.h>
|
||||
#include <common/bl_common.h>
|
||||
#include <common/debug.h>
|
||||
#include <context.h>
|
||||
#include <drivers/arm/tzc380.h>
|
||||
#include <drivers/console.h>
|
||||
#include <drivers/generic_delay_timer.h>
|
||||
#include <lib/el3_runtime/context_mgmt.h>
|
||||
#include <lib/mmio.h>
|
||||
#include <lib/xlat_tables/xlat_tables_v2.h>
|
||||
#include <plat/common/platform.h>
|
||||
|
||||
#include <gpc.h>
|
||||
#include <imx_aipstz.h>
|
||||
#include <imx_uart.h>
|
||||
#include <imx_rdc.h>
|
||||
#include <imx8m_caam.h>
|
||||
#include <platform_def.h>
|
||||
#include <plat_imx8.h>
|
||||
|
||||
static const mmap_region_t imx_mmap[] = {
|
||||
GIC_MAP, AIPS_MAP, OCRAM_S_MAP, DDRC_MAP, {0},
|
||||
};
|
||||
|
||||
static const struct aipstz_cfg aipstz[] = {
|
||||
{IMX_AIPSTZ1, 0x77777777, 0x77777777, .opacr = {0x0, 0x0, 0x0, 0x0, 0x0}, },
|
||||
{IMX_AIPSTZ2, 0x77777777, 0x77777777, .opacr = {0x0, 0x0, 0x0, 0x0, 0x0}, },
|
||||
{IMX_AIPSTZ3, 0x77777777, 0x77777777, .opacr = {0x0, 0x0, 0x0, 0x0, 0x0}, },
|
||||
{IMX_AIPSTZ4, 0x77777777, 0x77777777, .opacr = {0x0, 0x0, 0x0, 0x0, 0x0}, },
|
||||
{0},
|
||||
};
|
||||
|
||||
static const struct imx_rdc_cfg rdc[] = {
|
||||
/* Master domain assignment */
|
||||
RDC_MDAn(0x1, DID1),
|
||||
|
||||
/* peripherals domain permission */
|
||||
|
||||
/* memory region */
|
||||
RDC_MEM_REGIONn(16, 0x0, 0x0, 0xff),
|
||||
RDC_MEM_REGIONn(17, 0x0, 0x0, 0xff),
|
||||
RDC_MEM_REGIONn(18, 0x0, 0x0, 0xff),
|
||||
|
||||
/* Sentinel */
|
||||
{0},
|
||||
};
|
||||
|
||||
static entry_point_info_t bl32_image_ep_info;
|
||||
static entry_point_info_t bl33_image_ep_info;
|
||||
|
||||
/* get SPSR for BL33 entry */
|
||||
static uint32_t get_spsr_for_bl33_entry(void)
|
||||
{
|
||||
unsigned long el_status;
|
||||
unsigned long mode;
|
||||
uint32_t spsr;
|
||||
|
||||
/* figure out what mode we enter the non-secure world */
|
||||
el_status = read_id_aa64pfr0_el1() >> ID_AA64PFR0_EL2_SHIFT;
|
||||
el_status &= ID_AA64PFR0_ELX_MASK;
|
||||
|
||||
mode = (el_status) ? MODE_EL2 : MODE_EL1;
|
||||
|
||||
spsr = SPSR_64(mode, MODE_SP_ELX, DISABLE_ALL_EXCEPTIONS);
|
||||
return spsr;
|
||||
}
|
||||
|
||||
static void bl31_tzc380_setup(void)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
val = mmio_read_32(IMX_IOMUX_GPR_BASE + 0x28);
|
||||
if ((val & GPR_TZASC_EN) != GPR_TZASC_EN)
|
||||
return;
|
||||
|
||||
tzc380_init(IMX_TZASC_BASE);
|
||||
|
||||
/*
|
||||
* Need to substact offset 0x40000000 from CPU address when
|
||||
* programming tzasc region for i.mx8mn.
|
||||
*/
|
||||
|
||||
/* Enable 1G-5G S/NS RW */
|
||||
tzc380_configure_region(0, 0x00000000, TZC_ATTR_REGION_SIZE(TZC_REGION_SIZE_4G) |
|
||||
TZC_ATTR_REGION_EN_MASK | TZC_ATTR_SP_ALL);
|
||||
}
|
||||
|
||||
void bl31_early_platform_setup2(u_register_t arg0, u_register_t arg1,
|
||||
u_register_t arg2, u_register_t arg3)
|
||||
{
|
||||
static console_t console;
|
||||
int i;
|
||||
|
||||
/* Enable CSU NS access permission */
|
||||
for (i = 0; i < 64; i++) {
|
||||
mmio_write_32(IMX_CSU_BASE + i * 4, 0x00ff00ff);
|
||||
}
|
||||
|
||||
imx_aipstz_init(aipstz);
|
||||
|
||||
imx_rdc_init(rdc);
|
||||
|
||||
imx8m_caam_init();
|
||||
|
||||
console_imx_uart_register(IMX_BOOT_UART_BASE, IMX_BOOT_UART_CLK_IN_HZ,
|
||||
IMX_CONSOLE_BAUDRATE, &console);
|
||||
/* This console is only used for boot stage */
|
||||
console_set_scope(&console, CONSOLE_FLAG_BOOT);
|
||||
|
||||
/*
|
||||
* tell BL3-1 where the non-secure software image is located
|
||||
* and the entry state information.
|
||||
*/
|
||||
bl33_image_ep_info.pc = PLAT_NS_IMAGE_OFFSET;
|
||||
bl33_image_ep_info.spsr = get_spsr_for_bl33_entry();
|
||||
SET_SECURITY_STATE(bl33_image_ep_info.h.attr, NON_SECURE);
|
||||
|
||||
#ifdef SPD_opteed
|
||||
/* Populate entry point information for BL32 */
|
||||
SET_PARAM_HEAD(&bl32_image_ep_info, PARAM_EP, VERSION_1, 0);
|
||||
SET_SECURITY_STATE(bl32_image_ep_info.h.attr, SECURE);
|
||||
bl32_image_ep_info.pc = BL32_BASE;
|
||||
bl32_image_ep_info.spsr = 0;
|
||||
|
||||
/* Pass TEE base and size to bl33 */
|
||||
bl33_image_ep_info.args.arg1 = BL32_BASE;
|
||||
bl33_image_ep_info.args.arg2 = BL32_SIZE;
|
||||
#endif
|
||||
|
||||
bl31_tzc380_setup();
|
||||
}
|
||||
|
||||
void bl31_plat_arch_setup(void)
|
||||
{
|
||||
mmap_add_region(BL31_BASE, BL31_BASE, (BL31_LIMIT - BL31_BASE),
|
||||
MT_MEMORY | MT_RW | MT_SECURE);
|
||||
mmap_add_region(BL_CODE_BASE, BL_CODE_BASE, (BL_CODE_END - BL_CODE_BASE),
|
||||
MT_MEMORY | MT_RO | MT_SECURE);
|
||||
#if USE_COHERENT_MEM
|
||||
mmap_add_region(BL_COHERENT_RAM_BASE, BL_COHERENT_RAM_BASE,
|
||||
(BL_COHERENT_RAM_END - BL_COHERENT_RAM_BASE),
|
||||
MT_DEVICE | MT_RW | MT_SECURE);
|
||||
#endif
|
||||
mmap_add(imx_mmap);
|
||||
|
||||
init_xlat_tables();
|
||||
|
||||
enable_mmu_el3(0);
|
||||
}
|
||||
|
||||
void bl31_platform_setup(void)
|
||||
{
|
||||
generic_delay_timer_init();
|
||||
|
||||
/* select the CKIL source to 32K OSC */
|
||||
mmio_write_32(IMX_ANAMIX_BASE + ANAMIX_MISC_CTL, 0x1);
|
||||
|
||||
plat_gic_driver_init();
|
||||
plat_gic_init();
|
||||
|
||||
imx_gpc_init();
|
||||
}
|
||||
|
||||
entry_point_info_t *bl31_plat_get_next_image_ep_info(unsigned int type)
|
||||
{
|
||||
if (type == NON_SECURE)
|
||||
return &bl33_image_ep_info;
|
||||
if (type == SECURE)
|
||||
return &bl32_image_ep_info;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
unsigned int plat_get_syscnt_freq2(void)
|
||||
{
|
||||
return COUNTER_FREQUENCY;
|
||||
}
|
44
plat/imx/imx8m/imx8mn/imx8mn_psci.c
Normal file
44
plat/imx/imx8m/imx8mn/imx8mn_psci.c
Normal file
|
@ -0,0 +1,44 @@
|
|||
/*
|
||||
* Copyright 2019-2020 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
#include <arch.h>
|
||||
#include <arch_helpers.h>
|
||||
#include <common/debug.h>
|
||||
#include <lib/mmio.h>
|
||||
#include <lib/psci/psci.h>
|
||||
|
||||
#include <gpc.h>
|
||||
#include <imx8m_psci.h>
|
||||
#include <plat_imx8.h>
|
||||
|
||||
static const plat_psci_ops_t imx_plat_psci_ops = {
|
||||
.pwr_domain_on = imx_pwr_domain_on,
|
||||
.pwr_domain_on_finish = imx_pwr_domain_on_finish,
|
||||
.pwr_domain_off = imx_pwr_domain_off,
|
||||
.validate_ns_entrypoint = imx_validate_ns_entrypoint,
|
||||
.validate_power_state = imx_validate_power_state,
|
||||
.cpu_standby = imx_cpu_standby,
|
||||
.pwr_domain_suspend = imx_domain_suspend,
|
||||
.pwr_domain_suspend_finish = imx_domain_suspend_finish,
|
||||
.pwr_domain_pwr_down_wfi = imx_pwr_domain_pwr_down_wfi,
|
||||
.get_sys_suspend_power_state = imx_get_sys_suspend_power_state,
|
||||
.system_reset = imx_system_reset,
|
||||
.system_off = imx_system_off,
|
||||
};
|
||||
|
||||
/* export the platform specific psci ops */
|
||||
int plat_setup_psci_ops(uintptr_t sec_entrypoint,
|
||||
const plat_psci_ops_t **psci_ops)
|
||||
{
|
||||
/* sec_entrypoint is used for warm reset */
|
||||
imx_mailbox_init(sec_entrypoint);
|
||||
|
||||
*psci_ops = &imx_plat_psci_ops;
|
||||
|
||||
return 0;
|
||||
}
|
135
plat/imx/imx8m/imx8mn/include/platform_def.h
Normal file
135
plat/imx/imx8m/imx8mn/include/platform_def.h
Normal file
|
@ -0,0 +1,135 @@
|
|||
/*
|
||||
* Copyright 2020 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
#ifndef PLATFORM_DEF_H
|
||||
#define PLATFORM_DEF_H
|
||||
|
||||
#include <lib/utils_def.h>
|
||||
#include <lib/xlat_tables/xlat_tables_v2.h>
|
||||
|
||||
#define PLATFORM_LINKER_FORMAT "elf64-littleaarch64"
|
||||
#define PLATFORM_LINKER_ARCH aarch64
|
||||
|
||||
#define PLATFORM_STACK_SIZE 0xB00
|
||||
#define CACHE_WRITEBACK_GRANULE 64
|
||||
|
||||
#define PLAT_PRIMARY_CPU U(0x0)
|
||||
#define PLATFORM_MAX_CPU_PER_CLUSTER U(4)
|
||||
#define PLATFORM_CLUSTER_COUNT U(1)
|
||||
#define PLATFORM_CLUSTER0_CORE_COUNT U(4)
|
||||
#define PLATFORM_CLUSTER1_CORE_COUNT U(0)
|
||||
#define PLATFORM_CORE_COUNT (PLATFORM_CLUSTER0_CORE_COUNT)
|
||||
|
||||
#define IMX_PWR_LVL0 MPIDR_AFFLVL0
|
||||
#define IMX_PWR_LVL1 MPIDR_AFFLVL1
|
||||
#define IMX_PWR_LVL2 MPIDR_AFFLVL2
|
||||
|
||||
#define PWR_DOMAIN_AT_MAX_LVL U(1)
|
||||
#define PLAT_MAX_PWR_LVL U(2)
|
||||
#define PLAT_MAX_OFF_STATE U(4)
|
||||
#define PLAT_MAX_RET_STATE U(2)
|
||||
|
||||
#define PLAT_WAIT_RET_STATE U(1)
|
||||
#define PLAT_STOP_OFF_STATE U(3)
|
||||
|
||||
#define BL31_BASE U(0x960000)
|
||||
#define BL31_LIMIT U(0x980000)
|
||||
|
||||
/* non-secure uboot base */
|
||||
#define PLAT_NS_IMAGE_OFFSET U(0x40200000)
|
||||
|
||||
/* GICv3 base address */
|
||||
#define PLAT_GICD_BASE U(0x38800000)
|
||||
#define PLAT_GICR_BASE U(0x38880000)
|
||||
|
||||
#define PLAT_VIRT_ADDR_SPACE_SIZE (ULL(1) << 32)
|
||||
#define PLAT_PHY_ADDR_SPACE_SIZE (ULL(1) << 32)
|
||||
|
||||
#define MAX_XLAT_TABLES 8
|
||||
#define MAX_MMAP_REGIONS 16
|
||||
|
||||
#define HAB_RVT_BASE U(0x00000900) /* HAB_RVT for i.MX8MM */
|
||||
|
||||
#define IMX_BOOT_UART_CLK_IN_HZ 24000000 /* Select 24MHz oscillator */
|
||||
#define PLAT_CRASH_UART_BASE IMX_BOOT_UART_BASE
|
||||
#define PLAT_CRASH_UART_CLK_IN_HZ 24000000
|
||||
#define IMX_CONSOLE_BAUDRATE 115200
|
||||
|
||||
#define IMX_AIPSTZ1 U(0x301f0000)
|
||||
#define IMX_AIPSTZ2 U(0x305f0000)
|
||||
#define IMX_AIPSTZ3 U(0x309f0000)
|
||||
#define IMX_AIPSTZ4 U(0x32df0000)
|
||||
|
||||
#define IMX_AIPS_BASE U(0x30000000)
|
||||
#define IMX_AIPS_SIZE U(0xC00000)
|
||||
#define IMX_GPV_BASE U(0x32000000)
|
||||
#define IMX_GPV_SIZE U(0x800000)
|
||||
#define IMX_AIPS1_BASE U(0x30200000)
|
||||
#define IMX_AIPS4_BASE U(0x32c00000)
|
||||
#define IMX_ANAMIX_BASE U(0x30360000)
|
||||
#define IMX_CCM_BASE U(0x30380000)
|
||||
#define IMX_SRC_BASE U(0x30390000)
|
||||
#define IMX_GPC_BASE U(0x303a0000)
|
||||
#define IMX_RDC_BASE U(0x303d0000)
|
||||
#define IMX_CSU_BASE U(0x303e0000)
|
||||
#define IMX_WDOG_BASE U(0x30280000)
|
||||
#define IMX_SNVS_BASE U(0x30370000)
|
||||
#define IMX_NOC_BASE U(0x32700000)
|
||||
#define IMX_TZASC_BASE U(0x32F80000)
|
||||
#define IMX_IOMUX_GPR_BASE U(0x30340000)
|
||||
#define IMX_CAAM_BASE U(0x30900000)
|
||||
#define IMX_DDRC_BASE U(0x3d400000)
|
||||
#define IMX_DDRPHY_BASE U(0x3c000000)
|
||||
#define IMX_DDR_IPS_BASE U(0x3d000000)
|
||||
#define IMX_DDR_IPS_SIZE U(0x1800000)
|
||||
#define IMX_ROM_BASE U(0x0)
|
||||
|
||||
#define IMX_GIC_BASE PLAT_GICD_BASE
|
||||
#define IMX_GIC_SIZE U(0x200000)
|
||||
|
||||
#define WDOG_WSR U(0x2)
|
||||
#define WDOG_WCR_WDZST BIT(0)
|
||||
#define WDOG_WCR_WDBG BIT(1)
|
||||
#define WDOG_WCR_WDE BIT(2)
|
||||
#define WDOG_WCR_WDT BIT(3)
|
||||
#define WDOG_WCR_SRS BIT(4)
|
||||
#define WDOG_WCR_WDA BIT(5)
|
||||
#define WDOG_WCR_SRE BIT(6)
|
||||
#define WDOG_WCR_WDW BIT(7)
|
||||
|
||||
#define SRC_A53RCR0 U(0x4)
|
||||
#define SRC_A53RCR1 U(0x8)
|
||||
#define SRC_OTG1PHY_SCR U(0x20)
|
||||
#define SRC_GPR1_OFFSET U(0x74)
|
||||
|
||||
#define SNVS_LPCR U(0x38)
|
||||
#define SNVS_LPCR_SRTC_ENV BIT(0)
|
||||
#define SNVS_LPCR_DP_EN BIT(5)
|
||||
#define SNVS_LPCR_TOP BIT(6)
|
||||
|
||||
#define IOMUXC_GPR10 U(0x28)
|
||||
#define GPR_TZASC_EN BIT(0)
|
||||
#define GPR_TZASC_EN_LOCK BIT(16)
|
||||
|
||||
#define ANAMIX_MISC_CTL U(0x124)
|
||||
#define DRAM_PLL_CTRL (IMX_ANAMIX_BASE + 0x50)
|
||||
|
||||
#define MAX_CSU_NUM U(64)
|
||||
|
||||
#define OCRAM_S_BASE U(0x00180000)
|
||||
#define OCRAM_S_SIZE U(0x8000)
|
||||
#define OCRAM_S_LIMIT (OCRAM_S_BASE + OCRAM_S_SIZE)
|
||||
#define SAVED_DRAM_TIMING_BASE OCRAM_S_BASE
|
||||
|
||||
#define COUNTER_FREQUENCY 8000000 /* 8MHz */
|
||||
|
||||
#define IMX_WDOG_B_RESET
|
||||
|
||||
#define GIC_MAP MAP_REGION_FLAT(IMX_GIC_BASE, IMX_GIC_SIZE, MT_DEVICE | MT_RW)
|
||||
#define AIPS_MAP MAP_REGION_FLAT(IMX_AIPS_BASE, IMX_AIPS_SIZE, MT_DEVICE | MT_RW) /* AIPS map */
|
||||
#define OCRAM_S_MAP MAP_REGION_FLAT(OCRAM_S_BASE, OCRAM_S_SIZE, MT_DEVICE | MT_RW) /* OCRAM_S */
|
||||
#define DDRC_MAP MAP_REGION_FLAT(IMX_DDRPHY_BASE, IMX_DDR_IPS_SIZE, MT_DEVICE | MT_RW) /* DDRMIX */
|
||||
|
||||
#endif /* platform_def.h */
|
56
plat/imx/imx8m/imx8mn/platform.mk
Normal file
56
plat/imx/imx8m/imx8mn/platform.mk
Normal file
|
@ -0,0 +1,56 @@
|
|||
#
|
||||
# Copyright 2019-2020 NXP
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-3-Clause
|
||||
#
|
||||
|
||||
PLAT_INCLUDES := -Iplat/imx/common/include \
|
||||
-Iplat/imx/imx8m/include \
|
||||
-Iplat/imx/imx8m/imx8mn/include
|
||||
# Translation tables library
|
||||
include lib/xlat_tables_v2/xlat_tables.mk
|
||||
|
||||
# Include GICv3 driver files
|
||||
include drivers/arm/gic/v3/gicv3.mk
|
||||
|
||||
IMX_GIC_SOURCES := ${GICV3_SOURCES} \
|
||||
plat/common/plat_gicv3.c \
|
||||
plat/common/plat_psci_common.c \
|
||||
plat/imx/common/plat_imx8_gic.c
|
||||
|
||||
BL31_SOURCES += plat/imx/common/imx8_helpers.S \
|
||||
plat/imx/imx8m/gpc_common.c \
|
||||
plat/imx/imx8m/imx_aipstz.c \
|
||||
plat/imx/imx8m/imx_rdc.c \
|
||||
plat/imx/imx8m/imx8m_caam.c \
|
||||
plat/imx/imx8m/imx8m_psci_common.c \
|
||||
plat/imx/imx8m/imx8mn/imx8mn_bl31_setup.c \
|
||||
plat/imx/imx8m/imx8mn/imx8mn_psci.c \
|
||||
plat/imx/imx8m/imx8mn/gpc.c \
|
||||
plat/imx/common/imx8_topology.c \
|
||||
plat/imx/common/imx_sip_handler.c \
|
||||
plat/imx/common/imx_sip_svc.c \
|
||||
plat/imx/common/imx_uart_console.S \
|
||||
lib/cpus/aarch64/cortex_a53.S \
|
||||
drivers/arm/tzc/tzc380.c \
|
||||
drivers/delay_timer/delay_timer.c \
|
||||
drivers/delay_timer/generic_delay_timer.c \
|
||||
${IMX_GIC_SOURCES} \
|
||||
${XLAT_TABLES_LIB_SRCS}
|
||||
|
||||
USE_COHERENT_MEM := 1
|
||||
RESET_TO_BL31 := 1
|
||||
A53_DISABLE_NON_TEMPORAL_HINT := 0
|
||||
|
||||
ERRATA_A53_835769 := 1
|
||||
ERRATA_A53_843419 := 1
|
||||
ERRATA_A53_855873 := 1
|
||||
|
||||
BL32_BASE ?= 0xbe000000
|
||||
$(eval $(call add_define,BL32_BASE))
|
||||
|
||||
BL32_SIZE ?= 0x2000000
|
||||
$(eval $(call add_define,BL32_SIZE))
|
||||
|
||||
IMX_BOOT_UART_BASE ?= 0x30890000
|
||||
$(eval $(call add_define,IMX_BOOT_UART_BASE))
|
|
@ -39,6 +39,7 @@
|
|||
#define IRQ_SRC_C0 BIT(28)
|
||||
#define IRQ_SRC_C3 BIT(23)
|
||||
#define IRQ_SRC_C2 BIT(22)
|
||||
#define CORE_WKUP_FROM_GIC (IRQ_SRC_C0 | IRQ_SRC_C1 | IRQ_SRC_C2 | IRQ_SRC_C3)
|
||||
#define CPU_CLOCK_ON_LPM BIT(14)
|
||||
#define A53_CLK_ON_LPM BIT(14)
|
||||
#define MASTER0_LPM_HSK BIT(6)
|
||||
|
@ -71,6 +72,10 @@
|
|||
#define MASTER1_MAPPING BIT(1)
|
||||
#define MASTER2_MAPPING BIT(2)
|
||||
|
||||
#define TMR_TCD2_SHIFT 0
|
||||
#define TMC_TMR_SHIFT 10
|
||||
#define TRC1_TMC_SHIFT 20
|
||||
|
||||
/* helper macro */
|
||||
#define A53_LPM_MASK U(0xF)
|
||||
#define A53_LPM_WAIT U(0x5)
|
||||
|
|
Loading…
Add table
Reference in a new issue