]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
Merge tag 'xtensa-20200206' of git://github.com/jcmvbkbc/linux-xtensa
authorLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Feb 2020 20:22:29 +0000 (12:22 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 7 Feb 2020 20:22:29 +0000 (12:22 -0800)
Pull xtensa updates from Max Filippov:

 - reorganize exception vectors placement

 - small cleanups (drop unused functions/headers/defconfig entries,
   spelling fixes)

* tag 'xtensa-20200206' of git://github.com/jcmvbkbc/linux-xtensa:
  xtensa: ISS: improve simcall assembly
  xtensa: reorganize vectors placement
  xtensa: separate SMP and XIP support
  xtensa: move fast exception handlers close to vectors
  arch/xtensa: fix Kconfig typos for HAVE_SMP
  xtensa: clean up optional XCHAL_* definitions
  xtensa: drop unused function fast_coprocessor_double
  xtensa: drop empty platform_* functions from platforms
  xtensa: clean up platform headers
  xtensa: drop set_except_vector declaration
  xtensa: configs: Cleanup old Kconfig IO scheduler options

23 files changed:
arch/xtensa/Kconfig
arch/xtensa/configs/audio_kc705_defconfig
arch/xtensa/configs/cadence_csp_defconfig
arch/xtensa/configs/generic_kc705_defconfig
arch/xtensa/configs/iss_defconfig
arch/xtensa/configs/nommu_kc705_defconfig
arch/xtensa/configs/smp_lx200_defconfig
arch/xtensa/configs/virt_defconfig
arch/xtensa/include/asm/asmmacro.h
arch/xtensa/include/asm/core.h
arch/xtensa/include/asm/platform.h
arch/xtensa/include/asm/processor.h
arch/xtensa/include/asm/vectors.h
arch/xtensa/include/uapi/asm/setup.h
arch/xtensa/kernel/coprocessor.S
arch/xtensa/kernel/entry.S
arch/xtensa/kernel/platform.c
arch/xtensa/kernel/setup.c
arch/xtensa/kernel/vectors.S
arch/xtensa/kernel/vmlinux.lds.S
arch/xtensa/platforms/iss/include/platform/simcall.h
arch/xtensa/platforms/iss/setup.c
arch/xtensa/platforms/xtfpga/setup.c

index 1c645172b4b53f14791a9d4949c8665316772088..32ee759a3fdad56826ad551316051f8b94df5e16 100644 (file)
@@ -180,11 +180,11 @@ config HAVE_SMP
        depends on XTENSA_VARIANT_CUSTOM
        select XTENSA_MX
        help
-         This option is use to indicate that the system-on-a-chip (SOC)
+         This option is used to indicate that the system-on-a-chip (SOC)
          supports Multiprocessing. Multiprocessor support implemented above
          the CPU core definition and currently needs to be selected manually.
 
-         Multiprocessor support in implemented with external cache and
+         Multiprocessor support is implemented with external cache and
          interrupt controllers.
 
          The MX interrupt distributer adds Interprocessor Interrupts
@@ -572,15 +572,41 @@ config KERNEL_LOAD_ADDRESS
 
          If unsure, leave the default value here.
 
-config VECTORS_OFFSET
-       hex "Kernel vectors offset"
-       default 0x00003000
-       depends on !XIP_KERNEL
+choice
+       prompt "Relocatable vectors location"
+       default XTENSA_VECTORS_IN_TEXT
        help
-         This is the offset of the kernel image from the relocatable vectors
-         base.
+         Choose whether relocatable vectors are merged into the kernel .text
+         or placed separately at runtime. This option does not affect
+         configurations without VECBASE register where vectors are always
+         placed at their hardware-defined locations.
 
-         If unsure, leave the default value here.
+config XTENSA_VECTORS_IN_TEXT
+       bool "Merge relocatable vectors into kernel text"
+       depends on !MTD_XIP
+       help
+         This option puts relocatable vectors into the kernel .text section
+         with proper alignment.
+         This is a safe choice for most configurations.
+
+config XTENSA_VECTORS_SEPARATE
+       bool "Put relocatable vectors at fixed address"
+       help
+         This option puts relocatable vectors at specific virtual address.
+         Vectors are merged with the .init data in the kernel image and
+         are copied into their designated location during kernel startup.
+         Use it to put vectors into IRAM or out of FLASH on kernels with
+         XIP-aware MTD support.
+
+endchoice
+
+config VECTORS_ADDR
+       hex "Kernel vectors virtual address"
+       default 0x00000000
+       depends on XTENSA_VECTORS_SEPARATE
+       help
+         This is the virtual address of the (relocatable) vectors base.
+         It must be within KSEG if MMU is used.
 
 config XIP_DATA_ADDR
        hex "XIP kernel data virtual address"
index b6367af71d65cb60883af4ed56ebc4b9c0053fac..eeb4c5383c83cdea3d149a2a80403ca5ea182a8c 100644 (file)
@@ -21,8 +21,6 @@ CONFIG_PROFILING=y
 CONFIG_OPROFILE=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
 CONFIG_XTENSA_VARIANT_CUSTOM=y
 CONFIG_XTENSA_VARIANT_CUSTOM_NAME="test_kc705_hifi"
 CONFIG_XTENSA_UNALIGNED_USER=y
index f4eef6decd2ad9f0752bbb4b0f56f7da1f9cbefc..fc240737b14de920e5e42157db61fa7116e948a6 100644 (file)
@@ -27,8 +27,6 @@ CONFIG_MODULES=y
 CONFIG_MODULE_FORCE_LOAD=y
 CONFIG_MODULE_UNLOAD=y
 CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
 CONFIG_XTENSA_VARIANT_CUSTOM=y
 CONFIG_XTENSA_VARIANT_CUSTOM_NAME="csp"
 CONFIG_XTENSA_UNALIGNED_USER=y
index c925165cf760e1f9fb9b5fb46bf69d1dee85aa35..412f611033cca2364ce343e886f63656244297dc 100644 (file)
@@ -21,8 +21,6 @@ CONFIG_PROFILING=y
 CONFIG_OPROFILE=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
 CONFIG_XTENSA_VARIANT_DC233C=y
 CONFIG_XTENSA_UNALIGNED_USER=y
 CONFIG_PREEMPT=y
index d1c01742baf4f7fe1051f84f8c169ee921354388..32ce8fb068f0669a94845472459c31f2c72f576f 100644 (file)
@@ -1,8 +1,6 @@
 CONFIG_SYSVIPC=y
 CONFIG_LOG_BUF_SHIFT=14
 CONFIG_EXPERT=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
 # CONFIG_PCI is not set
 CONFIG_CMDLINE_BOOL=y
 CONFIG_CMDLINE="console=ttyS0,38400 eth0=tuntap,,tap0 ip=192.168.168.5:192.168.168.1 root=nfs nfsroot=192.168.168.1:/opt/montavista/pro/devkit/xtensa/linux_be/target memmap=128M@0"
index 380e366730d53bd4140e4632333e7216b188103d..88b2e222d4bffd7c1c01ffbe79c686f778024c2f 100644 (file)
@@ -25,8 +25,6 @@ CONFIG_KALLSYMS_ALL=y
 CONFIG_PERF_EVENTS=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
 CONFIG_XTENSA_VARIANT_CUSTOM=y
 CONFIG_XTENSA_VARIANT_CUSTOM_NAME="de212"
 # CONFIG_XTENSA_VARIANT_MMU is not set
index d46b58f340986d3178a18e6b4e1a666e1cc19d5f..4f1c7998b03050cc56febcd0693ac03c750b4d7d 100644 (file)
@@ -21,8 +21,6 @@ CONFIG_PROFILING=y
 CONFIG_OPROFILE=y
 CONFIG_MODULES=y
 CONFIG_MODULE_UNLOAD=y
-# CONFIG_IOSCHED_DEADLINE is not set
-# CONFIG_IOSCHED_CFQ is not set
 CONFIG_XTENSA_VARIANT_CUSTOM=y
 CONFIG_XTENSA_VARIANT_CUSTOM_NAME="test_mmuhifi_c3"
 CONFIG_XTENSA_UNALIGNED_USER=y
@@ -32,7 +30,6 @@ CONFIG_SMP=y
 CONFIG_HOTPLUG_CPU=y
 # CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX is not set
 # CONFIG_PCI is not set
-CONFIG_VECTORS_OFFSET=0x00002000
 CONFIG_XTENSA_PLATFORM_XTFPGA=y
 CONFIG_CMDLINE_BOOL=y
 CONFIG_CMDLINE="earlycon=uart8250,mmio32native,0xfd050020,115200n8 console=ttyS0,115200n8 ip=dhcp root=/dev/nfs rw debug memmap=96M@0"
index 4fddd8512350e69b410b09694597b416697caa18..6d1387dfa96fcd1d4aa91b6f70773cf162b706e2 100644 (file)
@@ -19,7 +19,6 @@ CONFIG_KALLSYMS_ALL=y
 CONFIG_PERF_EVENTS=y
 CONFIG_XTENSA_VARIANT_DC233C=y
 CONFIG_XTENSA_UNALIGNED_USER=y
-CONFIG_VECTORS_OFFSET=0x00002000
 CONFIG_XTENSA_KSEG_512M=y
 CONFIG_HIGHMEM=y
 CONFIG_CMDLINE_BOOL=y
index 71a7e846bc1f9b21cf14a0d42a8be3c5e440ef11..bfc89e11f4698ee5f7dee1de89d6d89dd6e16358 100644 (file)
 #error Unsupported Xtensa ABI
 #endif
 
+#define __XTENSA_HANDLER       .section ".exception.text", "ax"
+
 #endif /* _XTENSA_ASMMACRO_H */
index 5b4acb7d1c0738774f8b3b2a1c306bc5277a665f..5590b0f688376cd75acbaaed5d991110c909257d 100644 (file)
 #define XCHAL_HAVE_EXCLUSIVE 0
 #endif
 
+#ifndef XCHAL_HAVE_EXTERN_REGS
+#define XCHAL_HAVE_EXTERN_REGS 0
+#endif
+
 #ifndef XCHAL_HAVE_MPU
 #define XCHAL_HAVE_MPU 0
 #endif
 
+#ifndef XCHAL_HAVE_VECBASE
+#define XCHAL_HAVE_VECBASE 0
+#endif
+
 #ifndef XCHAL_SPANNING_WAY
 #define XCHAL_SPANNING_WAY 0
 #endif
index f2c48522c5a135bea04e2b70fe90370f22468055..354ca942de405b4a62730a788e4d05fe70937955 100644 (file)
@@ -12,8 +12,6 @@
 #define _XTENSA_PLATFORM_H
 
 #include <linux/types.h>
-#include <linux/pci.h>
-
 #include <asm/bootparam.h>
 
 /*
index 6fa903daf2a2eb1e458c9b76433df8fa7a85176c..7f63aca6a0d340632646ccceb9f31ae63b878402 100644 (file)
@@ -237,10 +237,6 @@ extern unsigned long get_wchan(struct task_struct *p);
         v; \
         })
 
-#ifndef XCHAL_HAVE_EXTERN_REGS
-#define XCHAL_HAVE_EXTERN_REGS 0
-#endif
-
 #if XCHAL_HAVE_EXTERN_REGS
 
 static inline void set_er(unsigned long value, unsigned long addr)
index fd99b25037a7520813df4dd4e151ab8d172840d6..704286c35640618f8875bf20e2cf9573f599efcc 100644 (file)
 #endif
 
 #define RESET_VECTOR1_VADDR            (XCHAL_RESET_VECTOR1_VADDR)
-#ifdef CONFIG_VECTORS_OFFSET
-#define VECBASE_VADDR                  (KERNELOFFSET - CONFIG_VECTORS_OFFSET)
+#ifdef CONFIG_VECTORS_ADDR
+#define VECBASE_VADDR                  (CONFIG_VECTORS_ADDR)
 #else
 #define VECBASE_VADDR                  _vecbase
 #endif
 
-#if defined(XCHAL_HAVE_VECBASE) && XCHAL_HAVE_VECBASE
+#if XCHAL_HAVE_VECBASE
 
 #define VECTOR_VADDR(offset)           (VECBASE_VADDR + offset)
 
index 57e6c210e84f524ed46677c91c30087095f27d68..5356a5fd4d17370f5ef45d85882e1383e232599c 100644 (file)
@@ -14,6 +14,4 @@
 
 #define COMMAND_LINE_SIZE      256
 
-extern void set_except_vector(int n, void *addr);
-
 #endif
index bb8e499b99008e6398eb04a89fccce0ed1f0935f..c426b846beefbcbd6a6d9ed6439506f92e9ec070 100644 (file)
@@ -58,6 +58,8 @@
        .endif;                                                         \
        .long THREAD_XTREGS_CP##x
 
+       __XTENSA_HANDLER
+
        SAVE_CP_REGS(0)
        SAVE_CP_REGS(1)
        SAVE_CP_REGS(2)
@@ -76,7 +78,6 @@
        LOAD_CP_REGS(6)
        LOAD_CP_REGS(7)
 
-       .section ".rodata", "a"
        .align 4
 .Lsave_cp_regs_jump_table:
        SAVE_CP_REGS_TAB(0)
@@ -98,8 +99,6 @@
        LOAD_CP_REGS_TAB(6)
        LOAD_CP_REGS_TAB(7)
 
-       .previous
-
 /*
  * coprocessor_flush(struct thread_info*, index)
  *                             a2        a3
@@ -145,13 +144,6 @@ ENDPROC(coprocessor_flush)
  *          <  VALID_DOUBLE_EXCEPTION_ADDRESS: regular exception
  */
 
-ENTRY(fast_coprocessor_double)
-
-       wsr     a0, excsave1
-       call0   unrecoverable_exception
-
-ENDPROC(fast_coprocessor_double)
-
 ENTRY(fast_coprocessor)
 
        /* Save remaining registers a1-a3 and SAR */
index 2c9e48566e483cc359cf3a071dd26215d0f82dea..06fbb0a171f1e8c67b7f70e9637426b5bc97e108 100644 (file)
@@ -939,6 +939,9 @@ ENDPROC(unrecoverable_exception)
 
 /* -------------------------- FAST EXCEPTION HANDLERS ----------------------- */
 
+       __XTENSA_HANDLER
+       .literal_position
+
 /*
  * Fast-handler for alloca exceptions
  *
@@ -1024,7 +1027,7 @@ ENDPROC(fast_alloca)
 ENTRY(fast_illegal_instruction_user)
 
        rsr     a0, ps
-       bbsi.l  a0, PS_WOE_BIT, user_exception
+       bbsi.l  a0, PS_WOE_BIT, 1f
        s32i    a3, a2, PT_AREG3
        movi    a3, PS_WOE_MASK
        or      a0, a0, a3
@@ -1033,6 +1036,8 @@ ENTRY(fast_illegal_instruction_user)
        l32i    a0, a2, PT_AREG0
        rsr     a2, depc
        rfe
+1:
+       call0   user_exception
 
 ENDPROC(fast_illegal_instruction_user)
 #endif
@@ -1071,7 +1076,7 @@ ENTRY(fast_syscall_user)
        _beqz   a0, fast_syscall_spill_registers
        _beqi   a0, __NR_xtensa, fast_syscall_xtensa
 
-       j       user_exception
+       call0   user_exception
 
 ENDPROC(fast_syscall_user)
 
@@ -1762,8 +1767,8 @@ ENTRY(fast_second_level_miss)
 
        rsr     a2, ps
        bbsi.l  a2, PS_UM_BIT, 1f
-       j       _kernel_exception
-1:     j       _user_exception
+       call0   _kernel_exception
+1:     call0   _user_exception
 
 ENDPROC(fast_second_level_miss)
 
@@ -1859,13 +1864,14 @@ ENTRY(fast_store_prohibited)
 
        rsr     a2, ps
        bbsi.l  a2, PS_UM_BIT, 1f
-       j       _kernel_exception
-1:     j       _user_exception
+       call0   _kernel_exception
+1:     call0   _user_exception
 
 ENDPROC(fast_store_prohibited)
 
 #endif /* CONFIG_MMU */
 
+       .text
 /*
  * System Calls.
  *
index a95ba05b0abe36724e1717432483c66e2f487966..ac1e0e566995037a653f15d9c35ef417ff1c1a40 100644 (file)
  * Chris Zankel <chris@zankel.net>
  */
 
+#include <linux/printk.h>
 #include <linux/types.h>
-#include <linux/pci.h>
-#include <linux/time.h>
 #include <asm/platform.h>
 #include <asm/timex.h>
-#include <asm/param.h>         /* HZ */
 
 #define _F(r,f,a,b)                                                    \
        r __platform_##f a b;                                           \
@@ -28,6 +26,7 @@
  * (Please, refer to include/asm-xtensa/platform.h for more information)
  */
 
+_F(void, init, (bp_tag_t *first), { });
 _F(void, setup, (char** cmd), { });
 _F(void, restart, (void), { while(1); });
 _F(void, halt, (void), { while(1); });
index adead45debe893908c321c75d5f0dc30863df197..3880c765d44898f8c8f2d2dc400d1f1ac5269294 100644 (file)
@@ -284,6 +284,8 @@ extern char _UserExceptionVector_text_start;
 extern char _UserExceptionVector_text_end;
 extern char _DoubleExceptionVector_text_start;
 extern char _DoubleExceptionVector_text_end;
+extern char _exception_text_start;
+extern char _exception_text_end;
 #if XCHAL_EXCM_LEVEL >= 2
 extern char _Level2InterruptVector_text_start;
 extern char _Level2InterruptVector_text_end;
@@ -347,7 +349,7 @@ void __init setup_arch(char **cmdline_p)
        mem_reserve(__pa(_xip_start), __pa(_xip_end));
 #endif
 
-#ifdef CONFIG_VECTORS_OFFSET
+#ifdef CONFIG_VECTORS_ADDR
        mem_reserve(__pa(&_WindowVectors_text_start),
                    __pa(&_WindowVectors_text_end));
 
@@ -363,6 +365,8 @@ void __init setup_arch(char **cmdline_p)
        mem_reserve(__pa(&_DoubleExceptionVector_text_start),
                    __pa(&_DoubleExceptionVector_text_end));
 
+       mem_reserve(__pa(&_exception_text_start),
+                   __pa(&_exception_text_end));
 #if XCHAL_EXCM_LEVEL >= 2
        mem_reserve(__pa(&_Level2InterruptVector_text_start),
                    __pa(&_Level2InterruptVector_text_end));
@@ -384,7 +388,7 @@ void __init setup_arch(char **cmdline_p)
                    __pa(&_Level6InterruptVector_text_end));
 #endif
 
-#endif /* CONFIG_VECTORS_OFFSET */
+#endif /* CONFIG_VECTORS_ADDR */
 
 #ifdef CONFIG_SMP
        mem_reserve(__pa(&_SecondaryResetVector_text_start),
index 841503d3307cb590ec3ad380aeeb2434d6e53d30..95ad1e7739912520516350441dec98abf006d225 100644 (file)
@@ -43,6 +43,7 @@
  */
 
 #include <linux/linkage.h>
+#include <asm/asmmacro.h>
 #include <asm/ptrace.h>
 #include <asm/current.h>
 #include <asm/asm-offsets.h>
@@ -477,7 +478,6 @@ _DoubleExceptionVector_handle_exception:
 
 ENDPROC(_DoubleExceptionVector)
 
-       .text
 /*
  * Fixup handler for TLB miss in double exception handler for window owerflow.
  * We get here with windowbase set to the window that was being spilled and
@@ -505,6 +505,7 @@ ENDPROC(_DoubleExceptionVector)
  * a3: exctable, original value in excsave1
  */
 
+       __XTENSA_HANDLER
        .literal_position
 
 ENTRY(window_overflow_restore_a0_fixup)
index 409c05cac15e485e20ecdc8d5e9674c662b2b3ec..d23a6e38f06253d0d21970c92f9da821627eac77 100644 (file)
@@ -47,15 +47,20 @@ jiffies = jiffies_64;
        LONG(sym ## _end);                      \
        LONG(LOADADDR(section))
 
+#if !defined(CONFIG_VECTORS_ADDR) && XCHAL_HAVE_VECBASE
+#define MERGED_VECTORS 1
+#else
+#define MERGED_VECTORS 0
+#endif
+
 /*
- * Macro to define a section for a vector. When CONFIG_VECTORS_OFFSET is
- * defined code for every vector is located with other init data. At startup
+ * Macro to define a section for a vector. When MERGED_VECTORS is 0
+ * code for every vector is located with other init data. At startup
  * time head.S copies code for every vector to its final position according
  * to description recorded in the corresponding RELOCATE_ENTRY.
  */
 
-#ifdef CONFIG_VECTORS_OFFSET
-#define SECTION_VECTOR(sym, section, addr, prevsec)                         \
+#define SECTION_VECTOR4(sym, section, addr, prevsec)                       \
   section addr : AT(((LOADADDR(prevsec) + SIZEOF(prevsec)) + 3) & ~ 3)      \
   {                                                                        \
     . = ALIGN(4);                                                          \
@@ -63,11 +68,10 @@ jiffies = jiffies_64;
     *(section)                                                             \
     sym ## _end = ABSOLUTE(.);                                             \
   }
-#else
-#define SECTION_VECTOR(section, addr)                                      \
+
+#define SECTION_VECTOR2(section, addr)                                     \
   . = addr;                                                                \
   *(section)
-#endif
 
 /*
  *  Mapping of input sections to output sections when linking.
@@ -86,30 +90,32 @@ SECTIONS
     /* The HEAD_TEXT section must be the first section! */
     HEAD_TEXT
 
-#ifndef CONFIG_VECTORS_OFFSET
-  . = ALIGN(PAGE_SIZE);
-  _vecbase = .;
+#if MERGED_VECTORS
+    . = ALIGN(PAGE_SIZE);
+    _vecbase = .;
 
-  SECTION_VECTOR (.WindowVectors.text, WINDOW_VECTORS_VADDR)
+    SECTION_VECTOR2 (.WindowVectors.text, WINDOW_VECTORS_VADDR)
 #if XCHAL_EXCM_LEVEL >= 2
-  SECTION_VECTOR (.Level2InterruptVector.text, INTLEVEL2_VECTOR_VADDR)
+    SECTION_VECTOR2 (.Level2InterruptVector.text, INTLEVEL2_VECTOR_VADDR)
 #endif
 #if XCHAL_EXCM_LEVEL >= 3
-  SECTION_VECTOR (.Level3InterruptVector.text, INTLEVEL3_VECTOR_VADDR)
+    SECTION_VECTOR2 (.Level3InterruptVector.text, INTLEVEL3_VECTOR_VADDR)
 #endif
 #if XCHAL_EXCM_LEVEL >= 4
-  SECTION_VECTOR (.Level4InterruptVector.text, INTLEVEL4_VECTOR_VADDR)
+    SECTION_VECTOR2 (.Level4InterruptVector.text, INTLEVEL4_VECTOR_VADDR)
 #endif
 #if XCHAL_EXCM_LEVEL >= 5
-  SECTION_VECTOR (.Level5InterruptVector.text, INTLEVEL5_VECTOR_VADDR)
+    SECTION_VECTOR2 (.Level5InterruptVector.text, INTLEVEL5_VECTOR_VADDR)
 #endif
 #if XCHAL_EXCM_LEVEL >= 6
-  SECTION_VECTOR (.Level6InterruptVector.text, INTLEVEL6_VECTOR_VADDR)
+    SECTION_VECTOR2 (.Level6InterruptVector.text, INTLEVEL6_VECTOR_VADDR)
 #endif
-  SECTION_VECTOR (.DebugInterruptVector.text, DEBUG_VECTOR_VADDR)
-  SECTION_VECTOR (.KernelExceptionVector.text, KERNEL_VECTOR_VADDR)
-  SECTION_VECTOR (.UserExceptionVector.text, USER_VECTOR_VADDR)
-  SECTION_VECTOR (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
+    SECTION_VECTOR2 (.DebugInterruptVector.text, DEBUG_VECTOR_VADDR)
+    SECTION_VECTOR2 (.KernelExceptionVector.text, KERNEL_VECTOR_VADDR)
+    SECTION_VECTOR2 (.UserExceptionVector.text, USER_VECTOR_VADDR)
+    SECTION_VECTOR2 (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
+
+    *(.exception.text)
 #endif
 
     IRQENTRY_TEXT
@@ -159,7 +165,7 @@ SECTIONS
     . = ALIGN(16);
     __boot_reloc_table_start = ABSOLUTE(.);
 
-#ifdef CONFIG_VECTORS_OFFSET
+#if !MERGED_VECTORS
     RELOCATE_ENTRY(_WindowVectors_text,
                   .WindowVectors.text);
 #if XCHAL_EXCM_LEVEL >= 2
@@ -190,15 +196,16 @@ SECTIONS
                   .DoubleExceptionVector.text);
     RELOCATE_ENTRY(_DebugInterruptVector_text,
                   .DebugInterruptVector.text);
+    RELOCATE_ENTRY(_exception_text,
+                  .exception.text);
 #endif
 #ifdef CONFIG_XIP_KERNEL
     RELOCATE_ENTRY(_xip_data, .data);
     RELOCATE_ENTRY(_xip_init_data, .init.data);
-#else
+#endif
 #if defined(CONFIG_SMP)
     RELOCATE_ENTRY(_SecondaryResetVector_text,
                   .SecondaryResetVector.text);
-#endif
 #endif
 
     __boot_reloc_table_end = ABSOLUTE(.) ;
@@ -216,21 +223,24 @@ SECTIONS
   . = ALIGN(4);
   .dummy : { LONG(0) }
 
-#ifdef CONFIG_VECTORS_OFFSET
+#undef LAST
+#define LAST   .dummy
+
+#if !MERGED_VECTORS
   /* The vectors are relocated to the real position at startup time */
 
-  SECTION_VECTOR (_WindowVectors_text,
+  SECTION_VECTOR4 (_WindowVectors_text,
                  .WindowVectors.text,
                  WINDOW_VECTORS_VADDR,
                  .dummy)
-  SECTION_VECTOR (_DebugInterruptVector_text,
+  SECTION_VECTOR4 (_DebugInterruptVector_text,
                  .DebugInterruptVector.text,
                  DEBUG_VECTOR_VADDR,
                  .WindowVectors.text)
 #undef LAST
 #define LAST   .DebugInterruptVector.text
 #if XCHAL_EXCM_LEVEL >= 2
-  SECTION_VECTOR (_Level2InterruptVector_text,
+  SECTION_VECTOR4 (_Level2InterruptVector_text,
                  .Level2InterruptVector.text,
                  INTLEVEL2_VECTOR_VADDR,
                  LAST)
@@ -238,7 +248,7 @@ SECTIONS
 # define LAST  .Level2InterruptVector.text
 #endif
 #if XCHAL_EXCM_LEVEL >= 3
-  SECTION_VECTOR (_Level3InterruptVector_text,
+  SECTION_VECTOR4 (_Level3InterruptVector_text,
                  .Level3InterruptVector.text,
                  INTLEVEL3_VECTOR_VADDR,
                  LAST)
@@ -246,7 +256,7 @@ SECTIONS
 # define LAST  .Level3InterruptVector.text
 #endif
 #if XCHAL_EXCM_LEVEL >= 4
-  SECTION_VECTOR (_Level4InterruptVector_text,
+  SECTION_VECTOR4 (_Level4InterruptVector_text,
                  .Level4InterruptVector.text,
                  INTLEVEL4_VECTOR_VADDR,
                  LAST)
@@ -254,7 +264,7 @@ SECTIONS
 # define LAST  .Level4InterruptVector.text
 #endif
 #if XCHAL_EXCM_LEVEL >= 5
-  SECTION_VECTOR (_Level5InterruptVector_text,
+  SECTION_VECTOR4 (_Level5InterruptVector_text,
                  .Level5InterruptVector.text,
                  INTLEVEL5_VECTOR_VADDR,
                  LAST)
@@ -262,41 +272,51 @@ SECTIONS
 # define LAST  .Level5InterruptVector.text
 #endif
 #if XCHAL_EXCM_LEVEL >= 6
-  SECTION_VECTOR (_Level6InterruptVector_text,
+  SECTION_VECTOR4 (_Level6InterruptVector_text,
                  .Level6InterruptVector.text,
                  INTLEVEL6_VECTOR_VADDR,
                  LAST)
 # undef LAST
 # define LAST  .Level6InterruptVector.text
 #endif
-  SECTION_VECTOR (_KernelExceptionVector_text,
+  SECTION_VECTOR4 (_KernelExceptionVector_text,
                  .KernelExceptionVector.text,
                  KERNEL_VECTOR_VADDR,
                  LAST)
 #undef LAST
-  SECTION_VECTOR (_UserExceptionVector_text,
+  SECTION_VECTOR4 (_UserExceptionVector_text,
                  .UserExceptionVector.text,
                  USER_VECTOR_VADDR,
                  .KernelExceptionVector.text)
-  SECTION_VECTOR (_DoubleExceptionVector_text,
+  SECTION_VECTOR4 (_DoubleExceptionVector_text,
                  .DoubleExceptionVector.text,
                  DOUBLEEXC_VECTOR_VADDR,
                  .UserExceptionVector.text)
-
-  . = (LOADADDR( .DoubleExceptionVector.text ) + SIZEOF( .DoubleExceptionVector.text ) + 3) & ~ 3;
+#define LAST .DoubleExceptionVector.text
 
 #endif
-#if !defined(CONFIG_XIP_KERNEL) && defined(CONFIG_SMP)
+#if defined(CONFIG_SMP)
 
-  SECTION_VECTOR (_SecondaryResetVector_text,
+  SECTION_VECTOR4 (_SecondaryResetVector_text,
                  .SecondaryResetVector.text,
                  RESET_VECTOR1_VADDR,
-                 .DoubleExceptionVector.text)
+                 LAST)
+#undef LAST
+#define LAST .SecondaryResetVector.text
 
-  . = LOADADDR(.SecondaryResetVector.text)+SIZEOF(.SecondaryResetVector.text);
+#endif
+#if !MERGED_VECTORS
+  SECTION_VECTOR4 (_exception_text,
+                 .exception.text,
+                 ,
+                 LAST)
+#undef LAST
+#define LAST .exception.text
 
 #endif
+  . = (LOADADDR(LAST) + SIZEOF(LAST) + 3) & ~ 3;
 
+  .dummy1 : AT(ADDR(.dummy1)) { LONG(0) }
   . = ALIGN(PAGE_SIZE);
 
 #ifndef CONFIG_XIP_KERNEL
@@ -314,7 +334,7 @@ SECTIONS
 
 #undef LOAD_OFFSET
 #define LOAD_OFFSET \
-  (CONFIG_XIP_DATA_ADDR - (LOADADDR(.dummy) + SIZEOF(.dummy) + 3) & ~ 3)
+  (CONFIG_XIP_DATA_ADDR - (LOADADDR(.dummy1) + SIZEOF(.dummy1) + 3) & ~ 3)
 
   _xip_data_start = .;
   _sdata = .;
index 4e2a48380dbf657b0d71e463069516a1168ab622..f42870ab551b3a272b8eb4c062cf33d39f59545b 100644 (file)
@@ -66,19 +66,17 @@ static int errno;
 
 static inline int __simc(int a, int b, int c, int d)
 {
-       int ret;
        register int a1 asm("a2") = a;
        register int b1 asm("a3") = b;
        register int c1 asm("a4") = c;
        register int d1 asm("a5") = d;
        __asm__ __volatile__ (
                        "simcall\n"
-                       "mov %0, a2\n"
-                       "mov %1, a3\n"
-                       : "=a" (ret), "=a" (errno), "+r"(a1), "+r"(b1)
+                       : "+r"(a1), "+r"(b1)
                        : "r"(c1), "r"(d1)
                        : "memory");
-       return ret;
+       errno = b1;
+       return a1;
 }
 
 static inline int simc_exit(int exit_code)
index e28dd53d7df52f6edc796a70e97b5362936bff7e..ed519aee0ec8b25527d8793625c02161539824ff 100644 (file)
  * Copyright 2001 - 2005 Tensilica Inc.
  * Copyright 2017 Cadence Design Systems Inc.
  */
-#include <linux/memblock.h>
-#include <linux/stddef.h>
-#include <linux/kernel.h>
 #include <linux/init.h>
-#include <linux/errno.h>
-#include <linux/reboot.h>
-#include <linux/kdev_t.h>
-#include <linux/types.h>
-#include <linux/major.h>
-#include <linux/blkdev.h>
-#include <linux/console.h>
-#include <linux/delay.h>
-#include <linux/stringify.h>
+#include <linux/kernel.h>
 #include <linux/notifier.h>
+#include <linux/printk.h>
+#include <linux/string.h>
 
 #include <asm/platform.h>
-#include <asm/bootparam.h>
 #include <asm/setup.h>
 
 #include <platform/simcall.h>
 
 
-void __init platform_init(bp_tag_t* bootparam)
-{
-}
-
 void platform_halt(void)
 {
        pr_info(" ** Called platform_halt() **\n");
@@ -48,6 +34,7 @@ void platform_power_off(void)
        pr_info(" ** Called platform_power_off() **\n");
        simc_exit(0);
 }
+
 void platform_restart(void)
 {
        /* Flush and reset the mmu, simulate a processor reset, and
@@ -56,10 +43,6 @@ void platform_restart(void)
        /* control never gets here */
 }
 
-void platform_heartbeat(void)
-{
-}
-
 static int
 iss_panic_event(struct notifier_block *this, unsigned long event, void *ptr)
 {
index 829115bb381f81c577621ea63f75b15712757a11..4f7d6142d41fa4c0847b8a68bf82e7067a95fce8 100644 (file)
@@ -24,6 +24,7 @@
 #include <linux/of.h>
 #include <linux/clk-provider.h>
 #include <linux/of_address.h>
+#include <linux/slab.h>
 
 #include <asm/timex.h>
 #include <asm/processor.h>
@@ -56,22 +57,6 @@ void platform_restart(void)
        /* control never gets here */
 }
 
-void __init platform_setup(char **cmdline)
-{
-}
-
-/* early initialization */
-
-void __init platform_init(bp_tag_t *first)
-{
-}
-
-/* Heartbeat. */
-
-void platform_heartbeat(void)
-{
-}
-
 #ifdef CONFIG_XTENSA_CALIBRATE_CCOUNT
 
 void __init platform_calibrate_ccount(void)