]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
fix(allwinner): check RSB availability in DT on H6
authorAndre Przywara <andre.przywara@arm.com>
Wed, 1 Feb 2023 22:28:37 +0000 (22:28 +0000)
committerAndre Przywara <andre.przywara@arm.com>
Fri, 3 Feb 2023 13:31:28 +0000 (13:31 +0000)
At the moment we access the RSB bus on all Allwinner H6 boards
unconditionally, even though some boards do not have any PMIC at all,
while others have some I2C devices connected to the same pins.
The latter case is just fragile, but the first case leads to a hang on
at least one board, as reported by Jernej.

Scan the devicetree, to check for the availability of the RSB bus node.
Proceed only if the RSB DT node is actually enabled.

Change-Id: Iea7dcfe3e085e173334d098ec4ddcb6c4b085771
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
Reported-by: Jernej Skrabec <jernej.skrabec@gmail.com>
plat/allwinner/sun50i_h6/sunxi_power.c

index d298e6b8adafedf0c6ef52519da18f1f4f856155..1257076dfd1ba28f49472342b672e3befde6572e 100644 (file)
@@ -8,8 +8,10 @@
 #include <errno.h>
 
 #include <common/debug.h>
+#include <common/fdt_wrappers.h>
 #include <drivers/allwinner/axp.h>
 #include <drivers/allwinner/sunxi_rsb.h>
+#include <libfdt.h>
 #include <lib/mmio.h>
 
 #include <sunxi_cpucfg.h>
@@ -63,7 +65,12 @@ static int rsb_init(void)
 
 int sunxi_pmic_setup(uint16_t socid, const void *fdt)
 {
-       int ret;
+       int node, ret;
+
+       node = fdt_node_offset_by_compatible(fdt, 0, "allwinner,sun8i-a23-rsb");
+       if ((node < 0) || !fdt_node_is_enabled(fdt, node)) {
+               return -ENODEV;
+       }
 
        INFO("PMIC: Probing AXP805 on RSB\n");