]> git.baikalelectronics.ru Git - arm-tf.git/commitdiff
feat(allwinner): add function to detect H616 die variant
authorAndre Przywara <andre.przywara@arm.com>
Mon, 3 Apr 2023 20:33:45 +0000 (21:33 +0100)
committerAndre Przywara <andre.przywara@arm.com>
Wed, 26 Apr 2023 16:45:29 +0000 (17:45 +0100)
Allwinner provides a number of SoCs that use the same die as the H616.
Some of those chips apparently use a slight variation of that die, that
differs in the way the CPU cores' power and reset controls are handled.
This die variation can be detected by reading the SRAM version register.

Provide a predicate function that returns false if that die variant is
used. Since the CPU power control code is shared for all supported SoCs,
we provide an instance of this function for each SoC, as a static
inline, and return true on all other SoCs. This allows to always use
this function, and still let the compiler optimise away the unneeded
branch for those older SoCs.

This function is unused for now, but is needed in the next patch.

Change-Id: I49e014b895b7e2f55b4e7dc2b3d8aa31cee711b5
Signed-off-by: Andre Przywara <andre.przywara@arm.com>
plat/allwinner/common/include/sunxi_cpucfg_ncat2.h
plat/allwinner/common/include/sunxi_def.h
plat/allwinner/common/sunxi_common.c
plat/allwinner/sun50i_a64/include/sunxi_cpucfg.h
plat/allwinner/sun50i_h6/include/sunxi_cpucfg.h
plat/allwinner/sun50i_h616/include/sunxi_cpucfg.h

index 9478f321a20bdd7a5bf70404002d1853805f36de..d4aec1932915056e66b4453aab7157eb58dd8b28 100644 (file)
@@ -28,4 +28,9 @@
 #define SUNXI_AA64nAA32_REG            SUNXI_CPUCFG_GEN_CTRL_REG0
 #define SUNXI_AA64nAA32_OFFSET         4
 
+static inline bool sunxi_cpucfg_has_per_cluster_regs(void)
+{
+       return true;
+}
+
 #endif /* SUNXI_CPUCFG_H */
index c17ef9529300870054c35bf9184e71e7e1c55eb6..20f6c49860a6b9beff0d85a786ff804c488535c4 100644 (file)
@@ -20,6 +20,7 @@
 #define SUNXI_SOC_H616                 0x1823
 #define SUNXI_SOC_R329                 0x1851
 
+#define SUNXI_VER_BITS_MASK            0xffU
 #define JEDEC_ALLWINNER_BKID           9U
 #define JEDEC_ALLWINNER_MFID           0x9eU
 
index 092659c0beb5fa6bc47d036ca0d0f4634f300343..62f4fcbd9e4fb2a696d3d8bee97a725bf73be4f5 100644 (file)
@@ -183,5 +183,5 @@ int32_t plat_get_soc_revision(void)
 {
        uint32_t reg = mmio_read_32(SRAM_VER_REG);
 
-       return reg & GENMASK_32(7, 0);
+       return reg & SUNXI_VER_BITS_MASK;
 }
index aed358572fe1d74061d49821f81618939050db46..ddd53baabf0ade5edcf89045abe1e42d1637fcea 100644 (file)
@@ -36,4 +36,9 @@
 #define SUNXI_AA64nAA32_REG            SUNXI_CPUCFG_CLS_CTRL_REG0
 #define SUNXI_AA64nAA32_OFFSET         24
 
+static inline bool sunxi_cpucfg_has_per_cluster_regs(void)
+{
+       return true;
+}
+
 #endif /* SUNXI_CPUCFG_H */
index 58abfaa58dff47626d1945f1e1064e86a04c1e39..585c51b073aa1a4f354689fb7d5a5f1506bbd56f 100644 (file)
@@ -1 +1,6 @@
 #include <sunxi_cpucfg_ncat.h>
+
+static inline bool sunxi_cpucfg_has_per_cluster_regs(void)
+{
+       return true;
+}
index 58abfaa58dff47626d1945f1e1064e86a04c1e39..5c590e48b68f38c09c116aec7c8ea28308ebd383 100644 (file)
@@ -1 +1,8 @@
+#include <plat/common/platform.h>
+
 #include <sunxi_cpucfg_ncat.h>
+
+static inline bool sunxi_cpucfg_has_per_cluster_regs(void)
+{
+       return (plat_get_soc_revision() != 2);
+}