Files
BPI-CM9-Linux/build/patch/kernel/archive/meson-6.12/0033-soc-amlogic-meson-mx-socinfo-Add-support-for-the-Tru.patch

69 lines
2.2 KiB
Diff

From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Martin Blumenstingl <[email protected]>
Date: Sun, 16 May 2021 19:48:54 +0200
Subject: soc: amlogic: meson-mx-socinfo: Add support for the TrustZone
firmware
When the TrustZone firmware is enabled the SoC is configured so the boot
ROM cannot be read from the (untrusted) Linux kernel. Instead a firmware
call needs to be used to get the SoC's "misc" version.
Add support for the firmware call to retrieve the SoC's misc version if
the TrustZone firmware is loaded.
Signed-off-by: Martin Blumenstingl <[email protected]>
---
drivers/soc/amlogic/meson-mx-socinfo.c | 23 ++++++----
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/drivers/soc/amlogic/meson-mx-socinfo.c b/drivers/soc/amlogic/meson-mx-socinfo.c
index 111111111111..222222222222 100644
--- a/drivers/soc/amlogic/meson-mx-socinfo.c
+++ b/drivers/soc/amlogic/meson-mx-socinfo.c
@@ -4,6 +4,7 @@
* SPDX-License-Identifier: GPL-2.0+
*/
+#include <linux/firmware/meson/meson_mx_trustzone.h>
#include <linux/io.h>
#include <linux/of.h>
#include <linux/of_address.h>
@@ -118,10 +119,12 @@ static int __init meson_mx_socinfo_init(void)
if (IS_ERR(assist_regmap))
return PTR_ERR(assist_regmap);
- bootrom_regmap =
- syscon_regmap_lookup_by_compatible("amlogic,meson-mx-bootrom");
- if (IS_ERR(bootrom_regmap))
- return PTR_ERR(bootrom_regmap);
+ if (!meson_mx_trustzone_firmware_available()) {
+ bootrom_regmap =
+ syscon_regmap_lookup_by_compatible("amlogic,meson-mx-bootrom");
+ if (IS_ERR(bootrom_regmap))
+ return PTR_ERR(bootrom_regmap);
+ }
np = of_find_matching_node(NULL, meson_mx_socinfo_analog_top_ids);
if (np) {
@@ -141,10 +144,14 @@ static int __init meson_mx_socinfo_init(void)
if (ret < 0)
return ret;
- ret = regmap_read(bootrom_regmap, MESON_MX_BOOTROM_MISC_VER,
- &misc_ver);
- if (ret < 0)
- return ret;
+ if (meson_mx_trustzone_firmware_available()) {
+ misc_ver = meson_mx_trustzone_read_soc_rev1();
+ } else {
+ ret = regmap_read(bootrom_regmap, MESON_MX_BOOTROM_MISC_VER,
+ &misc_ver);
+ if (ret < 0)
+ return ret;
+ }
soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
if (!soc_dev_attr)
--
Armbian