1 /* SPDX-License-Identifier: BSD-2-Clause */ 2 /* 3 * Copyright (c) 2024, STMicroelectronics 4 */ 5 6 #ifndef __STM32_SYSCONF_H__ 7 #define __STM32_SYSCONF_H__ 8 9 #include <stdbool.h> 10 #include <stdint.h> 11 #include <util.h> 12 13 /* syscon banks */ 14 enum syscon_banks { 15 SYSCON_SYSCFG, 16 SYSCON_A35SSC, 17 SYSCON_NB_BANKS 18 }; 19 20 #define SYSCON_ID(bank, offset) (((bank) << 16) | \ 21 ((offset) & GENMASK_32(15, 0))) 22 23 /* 24 * SYSCFG register offsets (base relative) 25 */ 26 #define SYSCFG_VDERAMCR SYSCON_ID(SYSCON_SYSCFG, 0x1800) 27 28 /* 29 * SYSCFG_VDERAMCR register offsets 30 */ 31 #define VDERAMCR_VDERAM_EN BIT(0) 32 #define VDERAMCR_MASK BIT(0) 33 34 /* 35 * A35SSC register offsets (base relative) 36 */ 37 #define A35SS_SSC_CHGCLKREQ SYSCON_ID(SYSCON_A35SSC, 0x0) 38 #define A35SS_SSC_PLL_FREQ1 SYSCON_ID(SYSCON_A35SSC, 0x80) 39 #define A35SS_SSC_PLL_FREQ2 SYSCON_ID(SYSCON_A35SSC, 0x90) 40 #define A35SS_SSC_PLL_EN SYSCON_ID(SYSCON_A35SSC, 0xA0) 41 42 #define A35SSC_M33CFG_ACCESS_CR SYSCON_ID(SYSCON_A35SSC, 0x2088) 43 #define A35SSC_M33_TZEN_CR SYSCON_ID(SYSCON_A35SSC, 0x20A0) 44 #define A35SSC_M33_INITSVTOR_CR SYSCON_ID(SYSCON_A35SSC, 0x20A4) 45 #define A35SSC_M33_INITNSVTOR_CR SYSCON_ID(SYSCON_A35SSC, 0x20A8) 46 47 /* 48 * A35SSC M33CFG_ACCESS_CR register 49 */ 50 #define A35SSC_M33_TZEN_CR_M33CFG_SEC BIT(0) 51 #define A35SSC_M33_TZEN_CR_M33CFG_PRIV BIT(1) 52 53 /* 54 * A35SSC M33_TZEN_CR register 55 */ 56 #define A35SSC_M33_TZEN_CR_CFG_SECEXT BIT(0) 57 58 /* 59 * A35SSC A35SS_SSC_CHGCLKREQ register 60 */ 61 #define A35SS_SSC_CHGCLKREQ_ARM_CHGCLKREQ_EN BIT(0) 62 #define A35SS_SSC_CHGCLKREQ_ARM_CHGCLKREQ_MASK BIT(0) 63 64 #define A35SS_SSC_CHGCLKREQ_ARM_CHGCLKACK_MASK BIT(1) 65 #define A35SS_SSC_CHGCLKREQ_ARM_CHGCLKACK_SHIFT U(1) 66 67 #define A35SS_SSC_CHGCLKREQ_ARM_DIVSEL BIT(16) 68 #define A35SS_SSC_CHGCLKREQ_ARM_DIVSELACK BIT(17) 69 70 /* 71 * A35SSC A35SS_SSC_PLL_FREQ1 register 72 */ 73 #define A35SS_SSC_PLL_FREQ1_FBDIV_MASK GENMASK_32(11, 0) 74 #define A35SS_SSC_PLL_FREQ1_FBDIV_SHIFT U(0) 75 76 #define A35SS_SSC_PLL_FREQ1_REFDIV_MASK GENMASK_32(21, 16) 77 #define A35SS_SSC_PLL_FREQ1_REFDIV_SHIFT U(16) 78 79 #define A35SS_SSC_PLL_FREQ1_MASK (A35SS_SSC_PLL_FREQ1_REFDIV_MASK | \ 80 A35SS_SSC_PLL_FREQ1_FBDIV_MASK) 81 82 /* 83 * A35SSC A35SS_SSC_PLL_FREQ2 register 84 */ 85 #define A35SS_SSC_PLL_FREQ2_POSTDIV1_MASK GENMASK_32(2, 0) 86 #define A35SS_SSC_PLL_FREQ2_POSTDIV1_SHIFT U(0) 87 88 #define A35SS_SSC_PLL_FREQ2_POSTDIV2_MASK GENMASK_32(5, 3) 89 #define A35SS_SSC_PLL_FREQ2_POSTDIV2_SHIFT U(3) 90 91 #define A35SS_SSC_PLL_FREQ2_MASK GENMASK_32(5, 0) 92 93 /* 94 * A35SSC A35SS_SSC_PLL_EN register 95 */ 96 #define A35SS_SSC_PLL_ENABLE_PD_EN BIT(0) 97 #define A35SS_SSC_PLL_ENABLE_PD_MASK BIT(0) 98 99 #define A35SS_SSC_PLL_ENABLE_LOCKP_MASK BIT(1) 100 101 #define A35SS_SSC_PLL_ENABLE_NRESET_SWPLL_FF_EN BIT(2) 102 #define A35SS_SSC_PLL_ENABLE_NRESET_SWPLL_FF_MASK BIT(2) 103 104 /* 105 * Write masked value is SYSCONF register 106 * @id: SYSCONF register ID, processed with SYSCON_ID() macro 107 * @value: Value to be written 108 * @bitmsk: Bit mask applied to @value 109 */ 110 void stm32mp_syscfg_write(uint32_t id, uint32_t value, uint32_t bitmsk); 111 112 /* 113 * Read SYSCONF reagister 114 * @id: SYSCONF register ID, processed with SYSCON_ID() macro 115 */ 116 uint32_t stm32mp_syscfg_read(uint32_t id); 117 118 /* 119 * Set safe reset state 120 * @status: True to enable safe reset, false to disable safe reset 121 */ 122 void stm32mp25_syscfg_set_safe_reset(bool status); 123 124 /* 125 * Manage OSPI address mapping 126 * @mm1_size: Size of memory addressed by the OSPI1 peripheral 127 * @mm2_size: Size of memory addressed by the OSPI2 peripheral 128 */ 129 void stm32mp25_syscfg_set_amcr(size_t mm1_size, size_t mm2_size); 130 131 #endif /*__STM32_SYSCONF_H__*/ 132