diff options
| author | Eugeniy Paltsev <[email protected]> | 2020-03-05 23:02:49 +0300 | 
|---|---|---|
| committer | Vineet Gupta <[email protected]> | 2020-03-16 10:23:25 -0700 | 
| commit | 240c84b1c22c9912ed1c8a96251b44e85d2ca2ed (patch) | |
| tree | a38766aa21128a811ff6d2e88014c1156934a304 | |
| parent | f61f530c5a144ac548c5648c91441663b12437b8 (diff) | |
ARC: add helpers to sanitize config options
We'll use this macro in coming patches extensively.
Reviewed-by: Vineet Gupta <[email protected]>
Signed-off-by: Eugeniy Paltsev <[email protected]>
Signed-off-by: Vineet Gupta <[email protected]>
| -rw-r--r-- | arch/arc/include/asm/asserts.h | 24 | ||||
| -rw-r--r-- | arch/arc/kernel/setup.c | 25 | 
2 files changed, 36 insertions, 13 deletions
| diff --git a/arch/arc/include/asm/asserts.h b/arch/arc/include/asm/asserts.h new file mode 100644 index 000000000000..3314efbeb528 --- /dev/null +++ b/arch/arc/include/asm/asserts.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (C) 2020 Synopsys, Inc. (www.synopsys.com) + * + * Author: Eugeniy Paltsev <[email protected]> + */ +#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 */ diff --git a/arch/arc/kernel/setup.c b/arch/arc/kernel/setup.c index aa41af6ef4ac..820c0cfb0702 100644 --- a/arch/arc/kernel/setup.c +++ b/arch/arc/kernel/setup.c @@ -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);  }  /* |