Commit 23460839 authored by Marek Vasut's avatar Marek Vasut Committed by Ley Foon Tan
Browse files

nios2: Add BMX support



Add support for the BMX Bit Manipulation Extensions present in
Nios II R2 . This introduces three new instructions, EXTRACT,
INSERT and MERGE.

Signed-off-by: default avatarMarek Vasut <marex@denx.de>
Cc: Ley Foon Tan <lftan@altera.com>
parent a89988a6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ KBUILD_CFLAGS += -march=r$(CONFIG_NIOS2_ARCH_REVISION)
KBUILD_CFLAGS += $(if $(CONFIG_NIOS2_HW_MUL_SUPPORT),-mhw-mul,-mno-hw-mul)
KBUILD_CFLAGS += $(if $(CONFIG_NIOS2_HW_MULX_SUPPORT),-mhw-mulx,-mno-hw-mulx)
KBUILD_CFLAGS += $(if $(CONFIG_NIOS2_HW_DIV_SUPPORT),-mhw-div,-mno-hw-div)
KBUILD_CFLAGS += $(if $(CONFIG_NIOS2_BMX_SUPPORT),-mbmx,-mno-bmx)
KBUILD_CFLAGS += $(if $(CONFIG_NIOS2_FPU_SUPPORT),-mcustom-fpu-cfg=60-1,)

KBUILD_CFLAGS += -fno-optimize-sibling-calls
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ struct cpuinfo {
	bool has_div;
	bool has_mul;
	bool has_mulx;
	bool has_bmx;

	/* CPU caches */
	u32 icache_line_size;
+8 −2
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@ void __init setup_cpuinfo(void)
	cpuinfo.has_div = of_property_read_bool(cpu, "altr,has-div");
	cpuinfo.has_mul = of_property_read_bool(cpu, "altr,has-mul");
	cpuinfo.has_mulx = of_property_read_bool(cpu, "altr,has-mulx");
	cpuinfo.has_bmx = of_property_read_bool(cpu, "altr,has-bmx");
	cpuinfo.mmu = of_property_read_bool(cpu, "altr,has-mmu");

	if (IS_ENABLED(CONFIG_NIOS2_HW_DIV_SUPPORT) && !cpuinfo.has_div)
@@ -78,6 +79,9 @@ void __init setup_cpuinfo(void)
	if (IS_ENABLED(CONFIG_NIOS2_HW_MULX_SUPPORT) && !cpuinfo.has_mulx)
		err_cpu("MULX");

	if (IS_ENABLED(CONFIG_NIOS2_BMX_SUPPORT) && !cpuinfo.has_bmx)
		err_cpu("BMX");

	cpuinfo.tlb_num_ways = fcpu(cpu, "altr,tlb-num-ways");
	if (!cpuinfo.tlb_num_ways)
		panic("altr,tlb-num-ways can't be 0. Please check your hardware "
@@ -143,10 +147,12 @@ static int show_cpuinfo(struct seq_file *m, void *v)
		   "HW:\n"
		   " MUL:\t\t%s\n"
		   " MULX:\t\t%s\n"
		   " DIV:\t\t%s\n",
		   " DIV:\t\t%s\n"
		   " BMX:\t\t%s\n",
		   cpuinfo.has_mul ? "yes" : "no",
		   cpuinfo.has_mulx ? "yes" : "no",
		   cpuinfo.has_div ? "yes" : "no");
		   cpuinfo.has_div ? "yes" : "no",
		   cpuinfo.has_bmx ? "yes" : "no");

	seq_printf(m,
		   "Icache:\t\t%ukB, line length: %u\n",
+9 −0
Original line number Diff line number Diff line
@@ -81,6 +81,15 @@ config NIOS2_HW_DIV_SUPPORT
	  Set to true if you configured the Nios II to include the DIV
	  instruction.  Enables the -mhw-div compiler flag.

config NIOS2_BMX_SUPPORT
	bool "Enable BMX instructions"
	depends on NIOS2_ARCH_REVISION = 2
	default n
	help
	  Set to true if you configured the Nios II R2 to include
	  the BMX Bit Manipulation Extension instructions. Enables
	  the -mbmx compiler flag.

config NIOS2_FPU_SUPPORT
	bool "Custom floating point instr support"
	default n