ARC: add helpers to sanitize config options
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>
This commit is contained in:

committed by
Vineet Gupta

parent
f61f530c5a
commit
240c84b1c2
24
arch/arc/include/asm/asserts.h
Normal file
24
arch/arc/include/asm/asserts.h
Normal file
@@ -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 */
|
@@ -19,6 +19,7 @@
|
|||||||
#include <uapi/linux/mount.h>
|
#include <uapi/linux/mount.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/arcregs.h>
|
#include <asm/arcregs.h>
|
||||||
|
#include <asm/asserts.h>
|
||||||
#include <asm/tlb.h>
|
#include <asm/tlb.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
@@ -389,11 +390,18 @@ static char *arc_extn_mumbojumbo(int cpu_id, char *buf, int len)
|
|||||||
return buf;
|
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)
|
static void arc_chk_core_config(void)
|
||||||
{
|
{
|
||||||
struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()];
|
struct cpuinfo_arc *cpu = &cpuinfo_arc700[smp_processor_id()];
|
||||||
int saved = 0, present = 0;
|
int present = 0;
|
||||||
char *opt_nm = NULL;
|
|
||||||
|
|
||||||
if (!cpu->extn.timer0)
|
if (!cpu->extn.timer0)
|
||||||
panic("Timer0 is not present!\n");
|
panic("Timer0 is not present!\n");
|
||||||
@@ -425,23 +433,14 @@ static void arc_chk_core_config(void)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
if (is_isa_arcompact()) {
|
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 */
|
/* only DPDP checked since SP has no arch visible regs */
|
||||||
present = cpu->extn.fpu_dp;
|
present = cpu->extn.fpu_dp;
|
||||||
|
CHK_OPT_STRICT(CONFIG_ARC_FPU_SAVE_RESTORE, present);
|
||||||
} else {
|
} 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 */
|
/* 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;
|
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Reference in New Issue
Block a user