Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/netbsd-9]: src/sys/arch/arm/samsung Pull up following revision(s) (reque...



details:   https://anonhg.NetBSD.org/src/rev/a740fc4d2e46
branches:  netbsd-9
changeset: 963739:a740fc4d2e46
user:      martin <martin%NetBSD.org@localhost>
date:      Sat Mar 21 20:21:58 2020 +0000

description:
Pull up following revision(s) (requested by skrll in ticket #799):

        sys/arch/arm/samsung/exynos_platform.c: revision 1.28

Bring back EXYNOS5422_DISABLE_CA7_CLUSTER the bug is back

diffstat:

 sys/arch/arm/samsung/exynos_platform.c |  37 ++++++++++++++++++++++++++++++++-
 1 files changed, 35 insertions(+), 2 deletions(-)

diffs (65 lines):

diff -r ccf74486424a -r a740fc4d2e46 sys/arch/arm/samsung/exynos_platform.c
--- a/sys/arch/arm/samsung/exynos_platform.c    Sat Mar 21 20:20:02 2020 +0000
+++ b/sys/arch/arm/samsung/exynos_platform.c    Sat Mar 21 20:21:58 2020 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: exynos_platform.c,v 1.26 2019/04/09 07:37:16 skrll Exp $ */
+/* $NetBSD: exynos_platform.c,v 1.26.4.1 2020/03/21 20:21:58 martin Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -35,7 +35,14 @@
 #include "ukbd.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exynos_platform.c,v 1.26 2019/04/09 07:37:16 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exynos_platform.c,v 1.26.4.1 2020/03/21 20:21:58 martin Exp $");
+
+
+/*
+ * Booting a CA7 core on Exynos5422 is currently broken, disable starting CA7 secondaries.
+ */
+#define        EXYNOS5422_DISABLE_CA7_CLUSTER
+
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -143,6 +150,11 @@
                const u_int aff0 = __SHIFTOUT(mpidr, MPIDR_AFF0);
                const u_int cpu = cluster * 4 + aff0;
 
+#if defined(EXYNOS5422_DISABLE_CA7_CLUSTER)
+               if (cluster == 1)
+                       continue;
+#endif
+
                val = bus_space_read_4(bst, pmu_bsh, EXYNOS5800_PMU_CORE_STATUS(cpu));
                bus_space_write_4(bst, pmu_bsh, EXYNOS5800_PMU_CORE_CONFIG(cpu),
                    EXYNOS5800_PMU_CORE_POWER_EN);
@@ -327,6 +339,27 @@
 
        exynos_bootstrap(5);
 
+#if defined(MULTIPROCESSOR) && defined(EXYNOS5422_DISABLE_CA7_CLUSTER)
+       const struct of_compat_data *cd = of_search_compatible(OF_finddevice("/"), mp_compat_data);
+       if (cd && cd->data == (uintptr_t)exynos5800_mpstart) {
+               void *fdt_data = __UNCONST(fdtbus_get_data());
+               int cpu_off, cpus_off, len;
+
+               cpus_off = fdt_path_offset(fdt_data, "/cpus");
+               if (cpus_off < 0)
+                       return;
+
+               fdt_for_each_subnode(cpu_off, fdt_data, cpus_off) {
+                       const void *prop = fdt_getprop(fdt_data, cpu_off, "reg", &len);
+                       if (len != 4)
+                               continue;
+                       const uint32_t mpidr = be32dec(prop);
+                       if (mpidr != cpu_mpidr_aff_read() && __SHIFTOUT(mpidr, MPIDR_AFF1) == 1)
+                               fdt_setprop_string(fdt_data, cpu_off, "status", "fail");
+               }
+       }
+#endif
+
        arm_fdt_cpu_bootstrap();
 }
 



Home | Main Index | Thread Index | Old Index