From bd03883744d49598dbb6755632e25469159906cc Mon Sep 17 00:00:00 2001 From: Jiafei Pan Date: Mon, 26 Aug 2024 19:12:31 +0800 Subject: [PATCH] soc: imx8m: change RDC configuration based on device tree Can disable RDC configuration if RDC node is disabled. Signed-off-by: Jiafei Pan --- soc/nxp/imx/imx8m/a53/soc.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/soc/nxp/imx/imx8m/a53/soc.c b/soc/nxp/imx/imx8m/a53/soc.c index 002b884daa0444..c5eaa312370949 100644 --- a/soc/nxp/imx/imx8m/a53/soc.c +++ b/soc/nxp/imx/imx8m/a53/soc.c @@ -12,40 +12,50 @@ #include #include +#if DT_NODE_HAS_STATUS(DT_NODELABEL(rdc), okay) + +#define rdc_inst ((RDC_Type *)DT_REG_ADDR(DT_NODELABEL(rdc))) + /* 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); + RDC_Init(rdc_inst); assignment.domainId = A53_DOMAIN_ID; - RDC_SetMasterDomainAssignment(RDC, kRDC_Master_A53, &assignment); + RDC_SetMasterDomainAssignment(rdc_inst, 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); + RDC_SetPeriphAccessConfig(rdc_inst, &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); + RDC_SetPeriphAccessConfig(rdc_inst, &periphConfig); #endif #if DT_NODE_HAS_STATUS(DT_NODELABEL(enet), okay) && DT_NODE_HAS_PROP(DT_NODELABEL(enet), rdc) periphConfig.periph = kRDC_Periph_ENET1; periphConfig.policy = RDC_DT_VAL(enet); - RDC_SetPeriphAccessConfig(RDC, &periphConfig); + RDC_SetPeriphAccessConfig(rdc_inst, &periphConfig); #endif } +#else + +#define soc_rdc_init() do { } while (false) + +#endif static int soc_init(void) { soc_rdc_init(); + return 0; }