diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig index 12cf0970ca7..0bb64d3660e 100644 --- a/arch/arc/Kconfig +++ b/arch/arc/Kconfig @@ -39,6 +39,11 @@ config ISA_ARCV2 help v2 ISA for the ARC-HS & ARC-EM cores +config ISA_ARCV3 + bool "ARC ISA v3" + select USE_SWITCH + select USE_SWITCH_SUPPORTED + endchoice if ISA_ARCV2 @@ -83,6 +88,17 @@ config CPU_HS3X endif #ISA_ARCV2 +if ISA_ARCV3 + +config CPU_HS6X + bool + select CPU_ARCHS + select 64BIT + help + If y, the SoC uses an ARC HS6x CPU + +endif #ISA_ARCV3 + config FP_FPU_DA bool @@ -123,6 +139,7 @@ config RGF_NUM_BANKS config ARC_FIRQ bool "FIRQ enable" + depends on ISA_ARCV2 default y help Fast interrupts are supported (FIRQ). If FIRQ enabled, for interrupts @@ -147,6 +164,7 @@ config ARC_FIRQ_STACK_SIZE config ARC_HAS_STACK_CHECKING bool "ARC has STACK_CHECKING" + depends on ISA_ARCV2 default y help ARC is configured with STACK_CHECKING which is a mechanism for @@ -233,6 +251,7 @@ config ARC_HAS_ACCL_REGS config ARC_HAS_SECURE bool "ARC has SecureShield" + depends on ISA_ARCV2 select CPU_HAS_TEE select ARCH_HAS_TRUSTED_EXECUTION help diff --git a/cmake/gcc-m-cpu.cmake b/cmake/gcc-m-cpu.cmake index bd718bbe7a0..2952384ce73 100644 --- a/cmake/gcc-m-cpu.cmake +++ b/cmake/gcc-m-cpu.cmake @@ -56,6 +56,8 @@ elseif("${ARCH}" STREQUAL "arc") set(GCC_M_CPU em4_fpuda) elseif(CONFIG_CPU_HS3X) set(GCC_M_CPU hs) + elseif(CONFIG_CPU_HS6X) + set(GCC_M_CPU arc64) elseif(CONFIG_CPU_EM4) set(GCC_M_CPU arcem) elseif(CONFIG_CPU_EM6) diff --git a/include/linker/linker-tool-gcc.h b/include/linker/linker-tool-gcc.h index 1ea18ad217f..16acaa6b8e5 100644 --- a/include/linker/linker-tool-gcc.h +++ b/include/linker/linker-tool-gcc.h @@ -27,7 +27,11 @@ #elif defined(CONFIG_ARM64) OUTPUT_FORMAT("elf64-littleaarch64") #elif defined(CONFIG_ARC) - OUTPUT_FORMAT("elf32-littlearc", "elf32-bigarc", "elf32-littlearc") + #if defined(CONFIG_64BIT) + OUTPUT_FORMAT("elf64-littlearc") + #else + OUTPUT_FORMAT("elf32-littlearc", "elf32-bigarc", "elf32-littlearc") + #endif #elif defined(CONFIG_X86) #if defined(CONFIG_X86_64) OUTPUT_FORMAT("elf64-x86-64") diff --git a/lib/libc/minimal/include/sys/types.h b/lib/libc/minimal/include/sys/types.h index 13839c0e3a1..ecb06cd6763 100644 --- a/lib/libc/minimal/include/sys/types.h +++ b/lib/libc/minimal/include/sys/types.h @@ -25,7 +25,7 @@ typedef __SIZE_TYPE__ ssize_t; #if !defined(__off_t_defined) #define __off_t_defined -#if defined(__i386) || defined(__x86_64) +#if defined(__i386) || defined(__x86_64) || defined(__ARC64__) typedef long int off_t; /* "long" works for all of i386, X32 and true 64 bit */ #elif defined(__ARM_ARCH) typedef int off_t;