diff options
author | Madhukar Pappireddy <madhukar.pappireddy@arm.com> | 2020-07-16 14:40:13 +0000 |
---|---|---|
committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2020-07-16 14:40:13 +0000 |
commit | f4d5b6a78a4469b3835f254365ef1a4c37b7d79c (patch) | |
tree | 9a3870ac24e447b27458b5e150d1ca04f252a7f3 /drivers | |
parent | 88b882289a0f96add3eabc10b02cb02a43b83130 (diff) | |
parent | f564d439a957b96de24cc3c2e2bb5f2e8a052384 (diff) | |
download | trusted-firmware-a-f4d5b6a78a4469b3835f254365ef1a4c37b7d79c.tar.gz |
Merge "drivers/stm32mp_pmic: register PMIC resources as secure or not" into integration
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/st/pmic/stm32mp_pmic.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/st/pmic/stm32mp_pmic.c b/drivers/st/pmic/stm32mp_pmic.c index 9e9dddc4d0..b2bb482f9d 100644 --- a/drivers/st/pmic/stm32mp_pmic.c +++ b/drivers/st/pmic/stm32mp_pmic.c @@ -54,6 +54,15 @@ int dt_pmic_status(void) return fdt_get_status(node); } +static bool dt_pmic_is_secure(void) +{ + int status = dt_pmic_status(); + + return (status >= 0) && + (status == DT_SECURE) && + (i2c_handle.dt_status == DT_SECURE); +} + /* * Get PMIC and its I2C bus configuration from the device tree. * Return 0 on success, negative on error, 1 if no PMIC node is found. @@ -223,6 +232,19 @@ bool initialize_pmic_i2c(void) return true; } +static void register_pmic_shared_peripherals(void) +{ + uintptr_t i2c_base = i2c_handle.i2c_base_addr; + + if (dt_pmic_is_secure()) { + stm32mp_register_secure_periph_iomem(i2c_base); + } else { + if (i2c_base != 0U) { + stm32mp_register_non_secure_periph_iomem(i2c_base); + } + } +} + void initialize_pmic(void) { unsigned long pmic_version; @@ -232,6 +254,8 @@ void initialize_pmic(void) return; } + register_pmic_shared_peripherals(); + if (stpmic1_get_version(&pmic_version) != 0) { ERROR("Failed to access PMIC\n"); panic(); |