1 /* 2 * Copyright (c) 2019 Linaro Limited 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #include <zephyr/device.h> 8 #include <zephyr/init.h> 9 #include <zephyr/kernel.h> 10 #include <soc.h> 11 #include <zephyr/sys/sys_io.h> 12 13 #define IOMUX_MAIN_INSEL (0x68 >> 2) 14 #define IOMUX_MAIN_OUTSEL (0x70 >> 2) 15 #define IOMUX_MAIN_OENSEL (0x78 >> 2) 16 #define IOMUX_MAIN_DEFAULT_IN (0x80 >> 2) 17 #define IOMUX_ALTF1_INSEL (0x88 >> 2) 18 #define IOMUX_ALTF1_OUTSEL (0x90 >> 2) 19 #define IOMUX_ALTF1_OENSEL (0x98 >> 2) 20 #define IOMUX_ALTF1_DEFAULT_IN (0xA0 >> 2) 21 #define IOMUX_ALTF2_INSEL (0xA8 >> 2) 22 #define IOMUX_ALTF2_OUTSEL (0xB0 >> 2) 23 #define IOMUX_ALTF2_OENSEL (0xB8 >> 2) 24 #define IOMUX_ALTF2_DEFAULT_IN (0xC0 >> 2) 25 26 #ifdef CONFIG_TRUSTED_EXECUTION_NONSECURE arm_musca_b1_pinmux_defaults(void)27static void arm_musca_b1_pinmux_defaults(void) 28 { 29 } 30 #else 31 /* 32 * Only configure pins if we are secure. Otherwise secure violation will occur 33 */ arm_musca_b1_pinmux_defaults(void)34static void arm_musca_b1_pinmux_defaults(void) 35 { 36 volatile uint32_t *scc = (uint32_t *)DT_REG_ADDR(DT_INST(0, arm_scc)); 37 38 /* there is only altfunc1, so steer all alt funcs to use 1 */ 39 scc[IOMUX_ALTF1_INSEL] = 0xffff; 40 scc[IOMUX_ALTF1_OUTSEL] = 0xffff; 41 scc[IOMUX_ALTF1_OENSEL] = 0xffff; 42 43 #if DT_NODE_HAS_STATUS(DT_NODELABEL(uart0), okay) 44 /* clear bit 0/1 for GPIO0/1 to steer from ALTF1 */ 45 scc[IOMUX_MAIN_INSEL] &= ~(BIT(0) | BIT(1)); 46 scc[IOMUX_MAIN_OUTSEL] &= ~(BIT(0) | BIT(1)); 47 scc[IOMUX_MAIN_OENSEL] &= ~(BIT(0) | BIT(1)); 48 #endif 49 /* Enable PINs for LEDS */ 50 scc[IOMUX_ALTF1_OUTSEL] &= ~(BIT(2) | BIT(3) | BIT(4)); 51 scc[IOMUX_ALTF1_OENSEL] &= ~(BIT(2) | BIT(3) | BIT(4)); 52 scc[IOMUX_ALTF2_OUTSEL] &= ~(BIT(2) | BIT(3) | BIT(4)); 53 scc[IOMUX_ALTF2_OENSEL] &= ~(BIT(2) | BIT(3) | BIT(4)); 54 55 } 56 #endif 57 arm_musca_pinmux_init(void)58static int arm_musca_pinmux_init(void) 59 { 60 61 arm_musca_b1_pinmux_defaults(); 62 63 return 0; 64 } 65 66 SYS_INIT(arm_musca_pinmux_init, PRE_KERNEL_1, 67 CONFIG_KERNEL_INIT_PRIORITY_DEFAULT); 68