aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorMadhukar Pappireddy <madhukar.pappireddy@arm.com>2020-07-16 14:40:13 +0000
committerTrustedFirmware Code Review <review@review.trustedfirmware.org>2020-07-16 14:40:13 +0000
commitf4d5b6a78a4469b3835f254365ef1a4c37b7d79c (patch)
tree9a3870ac24e447b27458b5e150d1ca04f252a7f3 /drivers
parent88b882289a0f96add3eabc10b02cb02a43b83130 (diff)
parentf564d439a957b96de24cc3c2e2bb5f2e8a052384 (diff)
downloadtrusted-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.c24
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();