soc: mimx8m: set the UART devices RDC permission

Add SoC initialization to set the UART RDC permission in the early
phase, so that the it can be used by Zephyr on Cortex-A cores.

Signed-off-by: Hou Zhiqiang <Zhiqiang.Hou@nxp.com>
This commit is contained in:
Hou Zhiqiang 2024-01-21 21:58:31 +08:00 committed by David Leach
parent 657e7edd96
commit 5062c51c49
3 changed files with 50 additions and 0 deletions

View file

@ -32,6 +32,7 @@ if(CONFIG_SOC_MIMX8ML8_A53 OR CONFIG_SOC_MIMX8MM6_A53 OR CONFIG_SOC_MIMX8MN6_A53
zephyr_sources(
a53/pinctrl_soc.h
a53/soc.c
)
zephyr_sources_ifdef(CONFIG_ARM_MMU a53/mmu_regions.c)

View file

@ -8,6 +8,7 @@ config SOC_MIMX8MM6_A53
select HAS_MCUX if CLOCK_CONTROL
select HAS_MCUX_CCM if CLOCK_CONTROL
select HAS_MCUX_IOMUXC if PINCTRL
select HAS_MCUX_RDC
config SOC_MIMX8MM6_M4
select ARM
@ -27,6 +28,7 @@ config SOC_MIMX8ML8_A53
select HAS_MCUX if CLOCK_CONTROL
select HAS_MCUX_CCM if CLOCK_CONTROL
select HAS_MCUX_IOMUXC if PINCTRL
select HAS_MCUX_RDC
config SOC_MIMX8MN6_A53
select ARM64
@ -35,6 +37,7 @@ config SOC_MIMX8MN6_A53
select HAS_MCUX if CLOCK_CONTROL
select HAS_MCUX_CCM if CLOCK_CONTROL
select HAS_MCUX_IOMUXC if PINCTRL
select HAS_MCUX_RDC
config SOC_MIMX8MP_ADSP
select XTENSA

View file

@ -0,0 +1,46 @@
/*
* Copyright 2024 NXP
*
* SPDX-License-Identifier: Apache-2.0
*/
#include <stdio.h>
#include <zephyr/init.h>
#include <zephyr/kernel.h>
#include <zephyr/device.h>
#include <zephyr/dt-bindings/rdc/imx_rdc.h>
#include <fsl_common.h>
#include <fsl_rdc.h>
/* set RDC permission for peripherals */
static void soc_rdc_init(void)
{
rdc_domain_assignment_t assignment = {0};
rdc_periph_access_config_t periphConfig;
RDC_Init(RDC);
assignment.domainId = A53_DOMAIN_ID;
RDC_SetMasterDomainAssignment(RDC, kRDC_Master_A53, &assignment);
RDC_GetDefaultPeriphAccessConfig(&periphConfig);
#if DT_NODE_HAS_STATUS(DT_NODELABEL(uart2), okay) && DT_NODE_HAS_PROP(DT_NODELABEL(uart2), rdc)
periphConfig.periph = kRDC_Periph_UART2;
periphConfig.policy = RDC_DT_VAL(uart2);
RDC_SetPeriphAccessConfig(RDC, &periphConfig);
#endif
#if DT_NODE_HAS_STATUS(DT_NODELABEL(uart4), okay) && DT_NODE_HAS_PROP(DT_NODELABEL(uart4), rdc)
periphConfig.periph = kRDC_Periph_UART4;
periphConfig.policy = RDC_DT_VAL(uart4);
RDC_SetPeriphAccessConfig(RDC, &periphConfig);
#endif
}
static int soc_init(void)
{
soc_rdc_init();
return 0;
}
SYS_INIT(soc_init, EARLY, 1);