]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
arm: mach-k3: common: don't reconfigure background firewalls
authorManorit Chawdhry <m-chawdhry@ti.com>
Thu, 20 Apr 2023 11:46:24 +0000 (17:16 +0530)
committerTom Rini <trini@konsulko.com>
Tue, 2 May 2023 18:24:36 +0000 (14:24 -0400)
K3 devices have some firewalls set up by ROM that we usually remove so
that the development is easy in HS devices.

While removing the firewalls disabling a background region before
disabling the foreground regions keeps the firewall in a state where all
the transactions will be blacklisted until all the regions are disabled.
This causes a race for some other entity trying to access that memory
region before all the firewalls are disabled and causes an exception.

Since the background regions configured by ROM are in such a manner
that they allow all transactions, don't touch the background regions at
all.

Signed-off-by: Manorit Chawdhry <m-chawdhry@ti.com>
Reviewed-by: Kamlesh Gurudasani <kamlesh@ti.com>
arch/arm/mach-k3/common.c
arch/arm/mach-k3/common.h

index b40e930b615d91742f15b27f8b5735f399de6601..3c85caee579d9612baa2936d0ffa5e0d879d6788 100644 (file)
@@ -580,7 +580,10 @@ void remove_fwl_configs(struct fwl_data *fwl_data, size_t fwl_data_size)
 
                        fwl_ops->get_fwl_region(ti_sci, &region);
 
-                       if (region.control != 0) {
+                       /* Don't disable the background regions */
+                       if (region.control != 0 &&
+                           ((region.control & K3_BACKGROUND_FIREWALL_BIT) ==
+                            0)) {
                                pr_debug("Attempting to disable firewall %5d (%25s)\n",
                                         region.fwl_id, fwl_data[i].name);
                                region.control = 0;
index 130f5021123aceca4d1060dde57df25920450c73..e7e59f533b7008097697270558442e853ba3bfcf 100644 (file)
@@ -9,6 +9,10 @@
 #include <asm/armv7_mpu.h>
 #include <asm/hardware.h>
 
+#define J721E  0xbb64
+#define J7200  0xbb6d
+#define K3_BACKGROUND_FIREWALL_BIT BIT(8)
+
 struct fwl_data {
        const char *name;
        u16 fwl_id;