ARC: add helpers to sanitize config options
authorEugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Thu, 5 Mar 2020 20:02:49 +0000 (23:02 +0300)
committerVineet Gupta <vgupta@synopsys.com>
Mon, 16 Mar 2020 17:23:25 +0000 (10:23 -0700)
We'll use this macro in coming patches extensively.

Reviewed-by: Vineet Gupta <vgupta@synopsys.com>
Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
arch/arc/include/asm/asserts.h [new file with mode: 0644]
arch/arc/kernel/setup.c

diff --git a/arch/arc/include/asm/asserts.h b/arch/arc/include/asm/asserts.h
new file mode 100644 (file)
index 0000000..3314efb
--- /dev/null
@@ -0,0 +1,24 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (C) 2020 Synopsys, Inc. (www.synopsys.com)
+ *
+ * Author: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
+ */
+#ifndef __ASM_ARC_ASSERTS_H
+#define __ASM_ARC_ASSERTS_H
+
+/* Helpers to sanitize config options. */
+
+void chk_opt_strict(char *opt_name, bool hw_exists, bool opt_ena);
+
+/*
+ * Check required config option:
+ *  - panic in case of OPT enabled but corresponding HW absent.
+ *  - warn in case of OPT disabled but corresponding HW exists.
+*/
+#define CHK_OPT_STRICT(opt_name, hw_exists)                            \
+({                                                                     \
+       chk_opt_strict(#opt_name, hw_exists, IS_ENABLED(opt_name));     \
+})
+
+#endif /* __ASM_ARC_ASSERTS_H */
index aa41af6..820c0cf 100644 (file)
@@ -19,6 +19,7 @@
 #include <uapi/linux/mount.h>
 #include <asm/sections.h>
 #include <asm/arcregs.h>
+#include <asm/asserts.h>
 #include <asm/tlb.h>
 #include <asm/setup.h>
 #include <asm/page.h>
@@ -389,11 +390,18 @@ static char *arc_extn_mumbojumbo(int cpu_id, char *buf, int len)
        return buf;
 }
 
+void chk_opt_strict(char *opt_name, bool hw_exists, bool opt_ena)
+{
+       if (hw_exists && !opt_ena)
+               pr_warn(" ! Enable %s for working apps\n", opt_name);
+       else if (!hw_exists && opt_ena)
+               panic("Disable %s, hardware NOT present\n", opt_name);
+}
+
 static void arc_chk_core_config(void)
 {
        struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()];
-       int saved = 0, present = 0;
-       char *opt_nm = NULL;
+       int present = 0;
 
        if (!cpu->extn.timer0)
                panic("Timer0 is not present!\n");
@@ -425,23 +433,14 @@ static void arc_chk_core_config(void)
         */
 
        if (is_isa_arcompact()) {
-               opt_nm = "CONFIG_ARC_FPU_SAVE_RESTORE";
-               saved = IS_ENABLED(CONFIG_ARC_FPU_SAVE_RESTORE);
-
                /* only DPDP checked since SP has no arch visible regs */
                present = cpu->extn.fpu_dp;
+               CHK_OPT_STRICT(CONFIG_ARC_FPU_SAVE_RESTORE, present);
        } else {
-               opt_nm = "CONFIG_ARC_HAS_ACCL_REGS";
-               saved = IS_ENABLED(CONFIG_ARC_HAS_ACCL_REGS);
-
                /* Accumulator Low:High pair (r58:59) present if DSP MPY or FPU */
                present = cpu->extn_mpy.dsp | cpu->extn.fpu_sp | cpu->extn.fpu_dp;
+               CHK_OPT_STRICT(CONFIG_ARC_HAS_ACCL_REGS, present);
        }
-
-       if (present && !saved)
-               pr_warn("Enable %s for working apps\n", opt_nm);
-       else if (!present && saved)
-               panic("Disable %s, hardware NOT present\n", opt_nm);
 }
 
 /*