diff options
author | Etienne Carriere <etienne.carriere@st.com> | 2020-05-13 10:19:50 +0200 |
---|---|---|
committer | Etienne Carriere <etienne.carriere@st.com> | 2020-07-08 12:56:09 +0200 |
commit | ec8f4212ac68da5b60bf9e180b5ace42482d4e39 (patch) | |
tree | 6f2b18f955a3c0fce19620e96c13b7b8c5ed70e1 /plat/st | |
parent | 0651b5b77ab3dcf526f6979ec631eb7781d4dad5 (diff) | |
download | trusted-firmware-a-ec8f4212ac68da5b60bf9e180b5ace42482d4e39.tar.gz |
stm32mp1: register shared resource per GPIO bank/pin
Introduce helper functions stm32mp_register_secure_gpio() and
stm32mp_register_non_secure_gpio() for drivers to register a
GPIO pin as secure or non-secure.
These functions are stubbed when shared resource driver is not
embedded in the BL image so that drivers do not bother whether they
shall register or not their resources.
Change-Id: I1fe98576c072ae31f75427c9ac5c9f6c4f1b6ed1
Signed-off-by: Etienne Carriere <etienne.carriere@st.com>
Diffstat (limited to 'plat/st')
-rw-r--r-- | plat/st/common/include/stm32mp_shared_resources.h | 14 | ||||
-rw-r--r-- | plat/st/stm32mp1/stm32mp1_shared_resources.c | 23 |
2 files changed, 37 insertions, 0 deletions
diff --git a/plat/st/common/include/stm32mp_shared_resources.h b/plat/st/common/include/stm32mp_shared_resources.h index 3160db0dc2..13f4b137a9 100644 --- a/plat/st/common/include/stm32mp_shared_resources.h +++ b/plat/st/common/include/stm32mp_shared_resources.h @@ -29,6 +29,10 @@ void stm32mp_register_non_secure_periph(enum stm32mp_shres id); void stm32mp_register_secure_periph_iomem(uintptr_t base); void stm32mp_register_non_secure_periph_iomem(uintptr_t base); +/* Register a GPIO as secure or non-secure based on its bank and pin numbers */ +void stm32mp_register_secure_gpio(unsigned int bank, unsigned int pin); +void stm32mp_register_non_secure_gpio(unsigned int bank, unsigned int pin); + /* Consolidate peripheral states and lock against new peripheral registering */ void stm32mp_lock_periph_registering(void); #else @@ -40,5 +44,15 @@ static inline void stm32mp_register_non_secure_periph_iomem(uintptr_t base __unused) { } + +static inline void stm32mp_register_secure_gpio(unsigned int bank __unused, + unsigned int pin __unused) +{ +} + +static inline void stm32mp_register_non_secure_gpio(unsigned int bank __unused, + unsigned int pin __unused) +{ +} #endif /* STM32MP_SHARED_RESOURCES */ #endif /* STM32MP_SHARED_RESOURCES_H */ diff --git a/plat/st/stm32mp1/stm32mp1_shared_resources.c b/plat/st/stm32mp1/stm32mp1_shared_resources.c index 32e61d9cda..208e34a8b0 100644 --- a/plat/st/stm32mp1/stm32mp1_shared_resources.c +++ b/plat/st/stm32mp1/stm32mp1_shared_resources.c @@ -311,6 +311,29 @@ void stm32mp_register_non_secure_periph_iomem(uintptr_t base) register_periph_iomem(base, SHRES_NON_SECURE); } +void stm32mp_register_secure_gpio(unsigned int bank, unsigned int pin) +{ + switch (bank) { + case GPIO_BANK_Z: + register_periph(STM32MP1_SHRES_GPIOZ(pin), SHRES_SECURE); + break; + default: + ERROR("GPIO bank %u cannot be secured\n", bank); + panic(); + } +} + +void stm32mp_register_non_secure_gpio(unsigned int bank, unsigned int pin) +{ + switch (bank) { + case GPIO_BANK_Z: + register_periph(STM32MP1_SHRES_GPIOZ(pin), SHRES_NON_SECURE); + break; + default: + break; + } +} + static bool stm32mp_gpio_bank_is_non_secure(unsigned int bank) { unsigned int non_secure = 0U; |