Source-Changes-HG archive

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

[src/trunk]: src/sys/arch Change ap_mpstart to return non-zero value if any/a...



details:   https://anonhg.NetBSD.org/src/rev/8c850a9c557d
branches:  trunk
changeset: 448367:8c850a9c557d
user:      skrll <skrll%NetBSD.org@localhost>
date:      Thu Jan 31 13:06:10 2019 +0000

description:
Change ap_mpstart to return non-zero value if any/all APs don't start.

diffstat:

 sys/arch/arm/altera/cycv_platform.c       |  16 ++++++++++++----
 sys/arch/arm/amlogic/meson_platform.c     |  14 ++++++++------
 sys/arch/arm/fdt/arm_fdtvar.h             |   6 +++---
 sys/arch/arm/fdt/cpu_fdt.c                |  15 ++++++++++-----
 sys/arch/arm/nvidia/soc_tegra124.c        |  16 ++++++++++++----
 sys/arch/arm/nvidia/tegra_var.h           |   7 ++-----
 sys/arch/arm/samsung/exynos_platform.c    |  24 +++++++++++++++---------
 sys/arch/arm/vexpress/vexpress_platform.c |  15 +++++++++++----
 sys/arch/evbarm/zynq/zynq_machdep.c       |   9 ++++++---
 9 files changed, 79 insertions(+), 43 deletions(-)

diffs (truncated from 447 to 300 lines):

diff -r 383d7079b751 -r 8c850a9c557d sys/arch/arm/altera/cycv_platform.c
--- a/sys/arch/arm/altera/cycv_platform.c       Thu Jan 31 12:31:50 2019 +0000
+++ b/sys/arch/arm/altera/cycv_platform.c       Thu Jan 31 13:06:10 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: cycv_platform.c,v 1.9 2018/11/02 18:13:11 aymeric Exp $ */
+/* $NetBSD: cycv_platform.c,v 1.10 2019/01/31 13:06:10 skrll Exp $ */
 
 /* This file is in the public domain. */
 
@@ -7,7 +7,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cycv_platform.c,v 1.9 2018/11/02 18:13:11 aymeric Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cycv_platform.c,v 1.10 2019/01/31 13:06:10 skrll Exp $");
 
 #define        _ARM32_BUS_DMA_PRIVATE
 #include <sys/param.h>
@@ -76,12 +76,13 @@
        arm_fdt_cpu_bootstrap();
 }
 
-static void
+static int
 cycv_mpstart(void)
 {
        bus_space_tag_t bst = &armv7_generic_bs_tag;
        bus_space_handle_t bsh_rst;
        bus_space_handle_t bsh_scu;
+       int ret = 0;
 
        bus_space_map(bst, CYCV_RSTMGR_BASE, CYCV_RSTMGR_SIZE, 0, &bsh_rst);
        bus_space_map(bst, CYCV_SCU_BASE, CYCV_SCU_SIZE, 0, &bsh_scu);
@@ -110,11 +111,18 @@
                        ~CYCV_RSTMGR_MPUMODRST_CPU1);
 
        /* Wait for secondary processor to start */
-       for (int i = 0x10000000; i > 0; i--) {
+       int i;
+       for (i = 0x10000000; i > 0; i--) {
                membar_consumer();
                if (arm_cpu_hatched == (1 << 1))
                        break;
        }
+       if (i == 0) {
+               aprint_error("cpu%d: WARNING: AP failed to start\n", 1);
+               ret++;
+       }
+
+       return ret;
 }
 
 static void
diff -r 383d7079b751 -r 8c850a9c557d sys/arch/arm/amlogic/meson_platform.c
--- a/sys/arch/arm/amlogic/meson_platform.c     Thu Jan 31 12:31:50 2019 +0000
+++ b/sys/arch/arm/amlogic/meson_platform.c     Thu Jan 31 13:06:10 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: meson_platform.c,v 1.3 2019/01/21 16:27:48 jmcneill Exp $ */
+/* $NetBSD: meson_platform.c,v 1.4 2019/01/31 13:06:10 skrll Exp $ */
 
 /*-
  * Copyright (c) 2019 Jared McNeill <jmcneill%invisible.ca@localhost>
@@ -33,7 +33,7 @@
 #include "arml2cc.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: meson_platform.c,v 1.3 2019/01/21 16:27:48 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: meson_platform.c,v 1.4 2019/01/31 13:06:10 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -397,15 +397,16 @@
 ARM_CPU_METHOD(meson8b, "amlogic,meson8b-smp", cpu_enable_meson8b);
 #endif
 
-static void
+static int
 meson_mpstart(void)
 {
+       int ret = 0;
 #ifdef MULTIPROCESSOR
        const bus_addr_t cbar = armreg_cbar_read();
        bus_space_tag_t bst = &arm_generic_bs_tag;
 
        if (cbar == 0)
-               return;
+               return ret;
 
        const bus_space_handle_t scu_bsh =
            cbar - MESON8B_ARM_PBASE + MESON8B_ARM_VBASE;
@@ -414,7 +415,7 @@
        const u_int ncpus = (scu_cfg & SCU_CFG_CPUMAX) + 1;
 
        if (ncpus < 2)
-               return;
+               return ret;
 
        /*
         * Invalidate all SCU cache tags. That is, for all cores (0-3)
@@ -427,8 +428,9 @@
 
        armv7_dcache_wbinv_all();
 
-       arm_fdt_cpu_mpstart();
+       ret = arm_fdt_cpu_mpstart();
 #endif
+       return ret;
 }
 
 
diff -r 383d7079b751 -r 8c850a9c557d sys/arch/arm/fdt/arm_fdtvar.h
--- a/sys/arch/arm/fdt/arm_fdtvar.h     Thu Jan 31 12:31:50 2019 +0000
+++ b/sys/arch/arm/fdt/arm_fdtvar.h     Thu Jan 31 13:06:10 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: arm_fdtvar.h,v 1.14 2019/01/03 12:54:25 jmcneill Exp $ */
+/* $NetBSD: arm_fdtvar.h,v 1.15 2019/01/31 13:06:10 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -38,7 +38,7 @@
 struct arm_platform {
        const struct pmap_devmap * (*ap_devmap)(void);
        void                    (*ap_bootstrap)(void);
-       void                    (*ap_mpstart)(void);
+       int                     (*ap_mpstart)(void);
        void                    (*ap_startup)(void);
        void                    (*ap_init_attach_args)(struct fdt_attach_args *);
        void                    (*ap_device_register)(device_t, void *);
@@ -84,7 +84,7 @@
 _ARM_CPU_METHOD_REGISTER(_name)
 
 void   arm_fdt_cpu_bootstrap(void);
-void   arm_fdt_cpu_mpstart(void);
+int    arm_fdt_cpu_mpstart(void);
 void    arm_fdt_cpu_hatch_register(void *, void (*)(void *, struct cpu_info *));
 void    arm_fdt_cpu_hatch(struct cpu_info *);
 
diff -r 383d7079b751 -r 8c850a9c557d sys/arch/arm/fdt/cpu_fdt.c
--- a/sys/arch/arm/fdt/cpu_fdt.c        Thu Jan 31 12:31:50 2019 +0000
+++ b/sys/arch/arm/fdt/cpu_fdt.c        Thu Jan 31 13:06:10 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: cpu_fdt.c,v 1.21 2019/01/19 20:56:03 jmcneill Exp $ */
+/* $NetBSD: cpu_fdt.c,v 1.22 2019/01/31 13:06:10 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared McNeill <jmcneill%invisible.ca@localhost>
@@ -30,7 +30,7 @@
 #include "psci_fdt.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu_fdt.c,v 1.21 2019/01/19 20:56:03 jmcneill Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu_fdt.c,v 1.22 2019/01/31 13:06:10 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -272,9 +272,10 @@
 }
 #endif
 
-void
+int
 arm_fdt_cpu_mpstart(void)
 {
+       int ret = 0;
 #ifdef MULTIPROCESSOR
        uint64_t mpidr, bp_mpidr;
        u_int cpuindex, i;
@@ -284,7 +285,7 @@
        const int cpus = OF_finddevice("/cpus");
        if (cpus == -1) {
                aprint_error("%s: no /cpus node found\n", __func__);
-               return;
+               return 0;
        }
 
        /* MPIDR affinity levels of boot processor. */
@@ -323,12 +324,16 @@
                        if (arm_cpu_hatched & __BIT(cpuindex))
                                break;
                }
-               if (i == 0)
+
+               if (i == 0) {
+                       ret++;
                        aprint_error("cpu%d: WARNING: AP failed to start\n", cpuindex);
+               }
 
                cpuindex++;
        }
 #endif /* MULTIPROCESSOR */
+       return ret;
 }
 
 static int
diff -r 383d7079b751 -r 8c850a9c557d sys/arch/arm/nvidia/soc_tegra124.c
--- a/sys/arch/arm/nvidia/soc_tegra124.c        Thu Jan 31 12:31:50 2019 +0000
+++ b/sys/arch/arm/nvidia/soc_tegra124.c        Thu Jan 31 13:06:10 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: soc_tegra124.c,v 1.19 2018/10/18 09:01:53 skrll Exp $ */
+/* $NetBSD: soc_tegra124.c,v 1.20 2019/01/31 13:06:10 skrll Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -30,7 +30,7 @@
 #include "opt_multiprocessor.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: soc_tegra124.c,v 1.19 2018/10/18 09:01:53 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: soc_tegra124.c,v 1.20 2019/01/31 13:06:10 skrll Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -51,9 +51,11 @@
 
 #define EVP_RESET_VECTOR_0_REG 0x100
 
-void
+int
 tegra124_mpstart(void)
 {
+       int ret = 0;
+
 #if defined(MULTIPROCESSOR)
        bus_space_tag_t bst = &arm_generic_bs_tag;
        bus_space_handle_t bsh;
@@ -74,10 +76,16 @@
        tegra_pmc_power(PMC_PARTID_CPU2, true); started |= __BIT(2);
        tegra_pmc_power(PMC_PARTID_CPU3, true); started |= __BIT(3);
 
-       for (u_int i = 0x10000000; i > 0; i--) {
+       u_int i;
+       for (i = 0x10000000; i > 0; i--) {
                arm_dmb();
                if (arm_cpu_hatched == started)
                        break;
        }
+       if (i == 0) {
+               ret++;
+               aprint_error("cpu%d: WARNING: AP failed to start\n", i;
+       }
 #endif
+       return ret;
 }
diff -r 383d7079b751 -r 8c850a9c557d sys/arch/arm/nvidia/tegra_var.h
--- a/sys/arch/arm/nvidia/tegra_var.h   Thu Jan 31 12:31:50 2019 +0000
+++ b/sys/arch/arm/nvidia/tegra_var.h   Thu Jan 31 13:06:10 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: tegra_var.h,v 1.45 2018/12/14 12:29:22 skrll Exp $ */
+/* $NetBSD: tegra_var.h,v 1.46 2019/01/31 13:06:10 skrll Exp $ */
 
 /*-
  * Copyright (c) 2015 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -77,10 +77,7 @@
 void   tegra_cpufreq_register(const struct tegra_cpufreq_func *);
 
 #if defined(SOC_TEGRA124)
-void   tegra124_mpstart(void);
-#endif
-#if defined(SOC_TEGRA210)
-void   tegra210_mpstart(void);
+int    tegra124_mpstart(void);
 #endif
 
 static void inline
diff -r 383d7079b751 -r 8c850a9c557d sys/arch/arm/samsung/exynos_platform.c
--- a/sys/arch/arm/samsung/exynos_platform.c    Thu Jan 31 12:31:50 2019 +0000
+++ b/sys/arch/arm/samsung/exynos_platform.c    Thu Jan 31 13:06:10 2019 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: exynos_platform.c,v 1.24 2019/01/27 04:53:59 dholland Exp $ */
+/* $NetBSD: exynos_platform.c,v 1.25 2019/01/31 13:06:10 skrll Exp $ */
 
 /*-
  * Copyright (c) 2017 Jared D. McNeill <jmcneill%invisible.ca@localhost>
@@ -35,7 +35,7 @@
 #include "ukbd.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: exynos_platform.c,v 1.24 2019/01/27 04:53:59 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: exynos_platform.c,v 1.25 2019/01/31 13:06:10 skrll Exp $");
 
 /* XXXJDM
  * Booting a CA7 core on Exynos5422 is currently broken, disable starting CA7 secondaries.
@@ -91,9 +91,10 @@
 #define        EXYNOS5800_SYSRAM_SIZE          0x1000
 #define         EXYNOS5800_SYSRAM_HOTPLUG              0x001c
 
-static void
+static int
 exynos5800_mpstart(void)
 {
+       int ret = 0;
 #if defined(MULTIPROCESSOR)
        bus_space_tag_t bst = &armv7_generic_bs_tag;
        bus_space_handle_t pmu_bsh, sysram_bsh;
@@ -108,7 +109,7 @@
        const int cpus = OF_finddevice("/cpus");
        if (cpus == -1) {
                aprint_error("%s: no /cpus node found\n", __func__);
-               return;
+               return ret;



Home | Main Index | Thread Index | Old Index