From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out-184.mta0.migadu.com (out-184.mta0.migadu.com [91.218.175.184]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 651F2349B0F for ; Fri, 13 Feb 2026 09:38:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.184 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770975525; cv=none; b=qhkGcASsilF+5cJytoVdI2myHR5f/d5075MK9kRekWBby/VK8cjXn/qES4hafoIjNHE4FyEfwEtGiZXxcQtxtdLb3cVj21vidwgAlrnl83tcVAj1TxusiGsW41Zj48oee8DqU0pYXjyqxNJF7EuLEcWb+EhdYDi/h1lMa7Y3weg= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770975525; c=relaxed/simple; bh=Ktuz2M62LJHL0a0GRa6CeSVUWX6XX0YrD9Zf/VVESBg=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=kYHdq6vs7yFE2wQPMkhxtiNf3Khg21SQQ1LK5ch+56xIGp+RT4/+Px8KzMaugjKYOj0rRWgn+ot4Pp8YV7740EwpUioemGceQ7v4kX9lBnBMmIQURjYx9ZxYyo6rTJtRteVLGVGPUgOz5GLttxZLGMF1P3RCnuG96QDkAi8NFsg= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=njxXf7eN; arc=none smtp.client-ip=91.218.175.184 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="njxXf7eN" Message-ID: DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1770975519; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=d+6JXMOBGKkwziRhe+U/1Eoa0NlKFn4w7ph9/iJYG3Q=; b=njxXf7eNd5AaJwUDQo0dlZC0O+J0anGYUrmqce68QsUNg7mZwJmAnZgvsGB0ZOlmcb1SsJ JDutijlw3Gf2iN6Dmv9CGdOOS3yNyYiK0vde9eEeLbJVeiYNknqtKQXQWf/cH1XySmM7rS oYkgZKingDrKRdZ9RBwfSwP3ZmUUP3k= Date: Fri, 13 Feb 2026 17:37:45 +0800 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Subject: Re: [PATCH] riscv: Remove support for XIP kernel To: Nam Cao , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, Zhouyi Zhou , "Kunwu.Chan" Cc: Frederik Haxel , Vitaly Wool References: <20260202115403.2119218-1-namcao@linutronix.de> Content-Language: en-US X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Kunwu Chan In-Reply-To: <20260202115403.2119218-1-namcao@linutronix.de> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT Hi, Please don't remove CONFIG_XIP_KERNEL. Zhouyi Zhou zhouzhouyi@gmail.com and I are willing to take over maintainership and keep it build-tested and maintained going forward. We will send a MAINTAINERS patch shortly. Thanx,  Kunwu On 2/2/26 19:54, Nam Cao wrote: > XIP has a history of being broken for long periods of time. In 2023, it was > broken for 18 months before getting fixed [1]. In 2024 it was 4 months [2]. > > And now it is broken again since commit a44fb5722199 ("riscv: Add runtime > constant support"), 10 months ago. > > These are clear signs that XIP feature is not being used. > > I occasionally looked after XIP, but mostly because I was bored and had > nothing better to do. > > Remove XIP support. Revert is possible if someone shows up complaining. > > Link: https://lore.kernel.org/linux-riscv/20231212-customary-hardcover-e19462bf8e75@wendy/ [1] > Link: https://lore.kernel.org/linux-riscv/20240526110104.470429-1-namcao@linutronix.de/ [2] > Signed-off-by: Nam Cao > Cc: Frederik Haxel > Cc: Vitaly Wool > --- > arch/riscv/Kconfig | 86 ++++++--------------- > arch/riscv/Kconfig.socs | 8 +- > arch/riscv/Makefile | 3 - > arch/riscv/boot/Makefile | 11 --- > arch/riscv/include/asm/page.h | 29 -------- > arch/riscv/include/asm/pgtable.h | 20 ----- > arch/riscv/include/asm/scs.h | 1 - > arch/riscv/include/asm/set_memory.h | 2 +- > arch/riscv/include/asm/xip_fixup.h | 49 ------------ > arch/riscv/kernel/head.S | 41 ---------- > arch/riscv/kernel/head.h | 3 - > arch/riscv/kernel/setup.c | 6 +- > arch/riscv/kernel/suspend_entry.S | 2 - > arch/riscv/kernel/traps.c | 4 - > arch/riscv/kernel/vmcore_info.c | 7 -- > arch/riscv/kernel/vmlinux.lds.S | 5 -- > arch/riscv/mm/init.c | 111 ++-------------------------- > 17 files changed, 37 insertions(+), 351 deletions(-) > delete mode 100644 arch/riscv/include/asm/xip_fixup.h > > diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig > index 7e76b6316425..e8ac6c61e27d 100644 > --- a/arch/riscv/Kconfig > +++ b/arch/riscv/Kconfig > @@ -48,8 +48,8 @@ config RISCV > select ARCH_HAS_PTE_SPECIAL > select ARCH_HAS_SET_DIRECT_MAP if MMU > select ARCH_HAS_SET_MEMORY if MMU > - select ARCH_HAS_STRICT_KERNEL_RWX if MMU && !XIP_KERNEL > - select ARCH_HAS_STRICT_MODULE_RWX if MMU && !XIP_KERNEL > + select ARCH_HAS_STRICT_KERNEL_RWX if MMU > + select ARCH_HAS_STRICT_MODULE_RWX if MMU > select ARCH_HAS_SYNC_CORE_BEFORE_USERMODE > select ARCH_HAS_SYSCALL_WRAPPER > select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST > @@ -85,7 +85,7 @@ config RISCV > select ARCH_WANT_FRAME_POINTERS > select ARCH_WANT_GENERAL_HUGETLB if !RISCV_ISA_SVNAPOT > select ARCH_WANT_HUGE_PMD_SHARE if 64BIT > - select ARCH_WANT_LD_ORPHAN_WARN if !XIP_KERNEL > + select ARCH_WANT_LD_ORPHAN_WARN > select ARCH_WANT_OPTIMIZE_DAX_VMEMMAP > select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP > select ARCH_WANTS_NO_INSTR > @@ -130,13 +130,13 @@ config RISCV > select HAVE_ARCH_AUDITSYSCALL > select HAVE_ARCH_HUGE_VMALLOC if HAVE_ARCH_HUGE_VMAP > select HAVE_ARCH_HUGE_VMAP if MMU && 64BIT > - select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL > - select HAVE_ARCH_JUMP_LABEL_RELATIVE if !XIP_KERNEL > + select HAVE_ARCH_JUMP_LABEL > + select HAVE_ARCH_JUMP_LABEL_RELATIVE > select HAVE_ARCH_KASAN if MMU && 64BIT > select HAVE_ARCH_KASAN_VMALLOC if MMU && 64BIT > select HAVE_ARCH_KFENCE if MMU && 64BIT > select HAVE_ARCH_KSTACK_ERASE > - select HAVE_ARCH_KGDB if !XIP_KERNEL > + select HAVE_ARCH_KGDB > select HAVE_ARCH_KGDB_QXFER_PKT > select HAVE_ARCH_MMAP_RND_BITS if MMU > select HAVE_ARCH_MMAP_RND_COMPAT_BITS if COMPAT > @@ -154,7 +154,7 @@ config RISCV > select HAVE_CONTEXT_TRACKING_USER > select HAVE_DEBUG_KMEMLEAK > select HAVE_DMA_CONTIGUOUS if MMU > - select HAVE_DYNAMIC_FTRACE if !XIP_KERNEL && MMU && (CLANG_SUPPORTS_DYNAMIC_FTRACE || GCC_SUPPORTS_DYNAMIC_FTRACE) > + select HAVE_DYNAMIC_FTRACE if MMU && (CLANG_SUPPORTS_DYNAMIC_FTRACE || GCC_SUPPORTS_DYNAMIC_FTRACE) > select FUNCTION_ALIGNMENT_4B if HAVE_DYNAMIC_FTRACE && RISCV_ISA_C > select HAVE_DYNAMIC_FTRACE_WITH_DIRECT_CALLS if HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS > select HAVE_DYNAMIC_FTRACE_WITH_CALL_OPS if (DYNAMIC_FTRACE_WITH_ARGS && !CFI) > @@ -162,7 +162,7 @@ config RISCV > select HAVE_FTRACE_GRAPH_FUNC > select HAVE_FUNCTION_GRAPH_TRACER if HAVE_DYNAMIC_FTRACE_WITH_ARGS > select HAVE_FUNCTION_GRAPH_FREGS > - select HAVE_FUNCTION_TRACER if !XIP_KERNEL && HAVE_DYNAMIC_FTRACE > + select HAVE_FUNCTION_TRACER if HAVE_DYNAMIC_FTRACE > select HAVE_EBPF_JIT if MMU > select HAVE_GENERIC_TIF_BITS > select HAVE_GUP_FAST if MMU > @@ -171,16 +171,16 @@ config RISCV > select HAVE_GCC_PLUGINS > select HAVE_GENERIC_VDSO if MMU > select HAVE_IRQ_TIME_ACCOUNTING > - select HAVE_KERNEL_BZIP2 if !XIP_KERNEL && !EFI_ZBOOT > - select HAVE_KERNEL_GZIP if !XIP_KERNEL && !EFI_ZBOOT > - select HAVE_KERNEL_LZ4 if !XIP_KERNEL && !EFI_ZBOOT > - select HAVE_KERNEL_LZMA if !XIP_KERNEL && !EFI_ZBOOT > - select HAVE_KERNEL_LZO if !XIP_KERNEL && !EFI_ZBOOT > - select HAVE_KERNEL_UNCOMPRESSED if !XIP_KERNEL && !EFI_ZBOOT > - select HAVE_KERNEL_ZSTD if !XIP_KERNEL && !EFI_ZBOOT > - select HAVE_KERNEL_XZ if !XIP_KERNEL && !EFI_ZBOOT > - select HAVE_KPROBES if !XIP_KERNEL > - select HAVE_KRETPROBES if !XIP_KERNEL > + select HAVE_KERNEL_BZIP2 if !EFI_ZBOOT > + select HAVE_KERNEL_GZIP if !EFI_ZBOOT > + select HAVE_KERNEL_LZ4 if !EFI_ZBOOT > + select HAVE_KERNEL_LZMA if !EFI_ZBOOT > + select HAVE_KERNEL_LZO if !EFI_ZBOOT > + select HAVE_KERNEL_UNCOMPRESSED if !EFI_ZBOOT > + select HAVE_KERNEL_ZSTD if !EFI_ZBOOT > + select HAVE_KERNEL_XZ if !EFI_ZBOOT > + select HAVE_KPROBES > + select HAVE_KRETPROBES > # https://github.com/ClangBuiltLinux/linux/issues/1881 > select HAVE_LD_DEAD_CODE_DATA_ELIMINATION if !LD_IS_LLD > select HAVE_MOVE_PMD > @@ -191,9 +191,9 @@ config RISCV > select HAVE_PERF_REGS > select HAVE_PERF_USER_STACK_DUMP > select HAVE_POSIX_CPU_TIMERS_TASK_WORK > - select HAVE_PREEMPT_DYNAMIC_KEY if !XIP_KERNEL > + select HAVE_PREEMPT_DYNAMIC_KEY > select HAVE_REGS_AND_STACK_ACCESS_API > - select HAVE_RETHOOK if !XIP_KERNEL > + select HAVE_RETHOOK > select HAVE_RSEQ > select HAVE_RUST if RUSTC_SUPPORTS_RISCV && CC_IS_CLANG > select HAVE_SAMPLE_FTRACE_DIRECT > @@ -214,7 +214,7 @@ config RISCV > select PCI_ECAM if (ACPI && PCI) > select PCI_MSI if PCI > select RELOCATABLE if !MMU && !PHYS_RAM_BASE_FIXED > - select RISCV_ALTERNATIVE if !XIP_KERNEL > + select RISCV_ALTERNATIVE > select RISCV_APLIC > select RISCV_IMSIC > select RISCV_INTC > @@ -541,7 +541,6 @@ endchoice > > config RISCV_ALTERNATIVE > bool > - depends on !XIP_KERNEL > help > This Kconfig allows the kernel to automatically patch the > erratum or cpufeature required by the execution platform at run > @@ -1129,7 +1128,6 @@ config PARAVIRT_TIME_ACCOUNTING > > config RELOCATABLE > bool "Build a relocatable kernel" > - depends on !XIP_KERNEL > select MODULE_SECTIONS if MODULES > select ARCH_VMLINUX_NEEDS_RELOCS > help > @@ -1146,7 +1144,7 @@ config RELOCATABLE > config RANDOMIZE_BASE > bool "Randomize the address of the kernel image" > select RELOCATABLE > - depends on MMU && 64BIT && !XIP_KERNEL > + depends on MMU && 64BIT > help > Randomizes the virtual address at which the kernel image is > loaded, as a security feature that deters exploit attempts > @@ -1236,7 +1234,7 @@ config EFI_STUB > > config EFI > bool "UEFI runtime support" > - depends on OF && !XIP_KERNEL > + depends on OF > depends on MMU > default y > select ARCH_SUPPORTS_ACPI if 64BIT > @@ -1287,44 +1285,6 @@ config PHYS_RAM_BASE > explicitly specified to run early relocations of read-write data > from flash to RAM. > > -config XIP_KERNEL > - bool "Kernel Execute-In-Place from ROM" > - depends on MMU && SPARSEMEM && NONPORTABLE > - # This prevents XIP from being enabled by all{yes,mod}config, which > - # fail to build since XIP doesn't support large kernels. > - depends on !COMPILE_TEST > - select PHYS_RAM_BASE_FIXED > - help > - Execute-In-Place allows the kernel to run from non-volatile storage > - directly addressable by the CPU, such as NOR flash. This saves RAM > - space since the text section of the kernel is not loaded from flash > - to RAM. Read-write sections, such as the data section and stack, > - are still copied to RAM. The XIP kernel is not compressed since > - it has to run directly from flash, so it will take more space to > - store it. The flash address used to link the kernel object files, > - and for storing it, is configuration dependent. Therefore, if you > - say Y here, you must know the proper physical address where to > - store the kernel image depending on your own flash memory usage. > - > - Also note that the make target becomes "make xipImage" rather than > - "make zImage" or "make Image". The final kernel binary to put in > - ROM memory will be arch/riscv/boot/xipImage. > - > - SPARSEMEM is required because the kernel text and rodata that are > - flash resident are not backed by memmap, then any attempt to get > - a struct page on those regions will trigger a fault. > - > - If unsure, say N. > - > -config XIP_PHYS_ADDR > - hex "XIP Kernel Physical Location" > - depends on XIP_KERNEL > - default "0x21000000" > - help > - This is the physical address in your flash memory the kernel will > - be linked for and stored to. This address is dependent on your > - own flash usage. > - > config RISCV_ISA_FALLBACK > bool "Permit falling back to parsing riscv,isa for extension support by default" > default y > diff --git a/arch/riscv/Kconfig.socs b/arch/riscv/Kconfig.socs > index d621b85dd63b..c174ac0ec46b 100644 > --- a/arch/riscv/Kconfig.socs > +++ b/arch/riscv/Kconfig.socs > @@ -2,7 +2,7 @@ menu "SoC selection" > > config ARCH_ANDES > bool "Andes SoCs" > - depends on MMU && !XIP_KERNEL > + depends on MMU > select ERRATA_ANDES > help > This enables support for Andes SoC platform hardware. > @@ -33,7 +33,7 @@ config ARCH_RENESAS > > config ARCH_SIFIVE > bool "SiFive SoCs" > - select ERRATA_SIFIVE if !XIP_KERNEL > + select ERRATA_SIFIVE > help > This enables support for SiFive SoC platform hardware. > > @@ -61,7 +61,7 @@ config SOC_STARFIVE > > config ARCH_SUNXI > bool "Allwinner sun20i SoCs" > - depends on MMU && !XIP_KERNEL > + depends on MMU > select ERRATA_THEAD > select SUN4I_TIMER > help > @@ -78,7 +78,7 @@ config ARCH_TENSTORRENT > > config ARCH_THEAD > bool "T-HEAD RISC-V SoCs" > - depends on MMU && !XIP_KERNEL > + depends on MMU > select ERRATA_THEAD > select PM_GENERIC_DOMAINS if PM > help > diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile > index 371da75a47f9..2cda87a5aaf1 100644 > --- a/arch/riscv/Makefile > +++ b/arch/riscv/Makefile > @@ -150,7 +150,6 @@ ifdef CONFIG_RISCV_M_MODE > boot-image-$(CONFIG_SOC_CANAAN_K210) := loader.bin > endif > boot-image-$(CONFIG_EFI_ZBOOT) := vmlinuz.efi > -boot-image-$(CONFIG_XIP_KERNEL) := xipImage > KBUILD_IMAGE := $(boot)/$(boot-image-y) > > libs-y += arch/riscv/lib/ > @@ -218,8 +217,6 @@ define archhelp > echo ' Image.xz - Compressed kernel image (arch/riscv/boot/Image.xz)' > echo ' vmlinuz.efi - Compressed EFI kernel image (arch/riscv/boot/vmlinuz.efi)' > echo ' Default when CONFIG_EFI_ZBOOT=y' > - echo ' xipImage - Execute-in-place kernel image (arch/riscv/boot/xipImage)' > - echo ' Default when CONFIG_XIP_KERNEL=y' > echo ' install - Install kernel using (your) ~/bin/$(INSTALLKERNEL) or' > echo ' (distribution) /sbin/$(INSTALLKERNEL) or install to ' > echo ' $$(INSTALL_PATH)' > diff --git a/arch/riscv/boot/Makefile b/arch/riscv/boot/Makefile > index 5301adf5f3f5..fcfbe3f814d6 100644 > --- a/arch/riscv/boot/Makefile > +++ b/arch/riscv/boot/Makefile > @@ -20,17 +20,6 @@ OBJCOPYFLAGS_xipImage :=-O binary -R .note -R .note.gnu.build-id -R .comment -S > > targets := Image Image.* loader loader.o loader.lds loader.bin xipImage > > -ifeq ($(CONFIG_XIP_KERNEL),y) > - > -quiet_cmd_mkxip = $(quiet_cmd_objcopy) > -cmd_mkxip = $(cmd_objcopy) > - > -$(obj)/xipImage: vmlinux FORCE > - $(call if_changed,mkxip) > - @$(kecho) ' Physical Address of xipImage: $(CONFIG_XIP_PHYS_ADDR)' > - > -endif > - > $(obj)/Image: vmlinux FORCE > $(call if_changed,objcopy) > > diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h > index 3c517bc9eac5..9ccd80d57ffe 100644 > --- a/arch/riscv/include/asm/page.h > +++ b/arch/riscv/include/asm/page.h > @@ -29,11 +29,7 @@ > #define PAGE_OFFSET_L5 _AC(0xff60000000000000, UL) > #define PAGE_OFFSET_L4 _AC(0xffffaf8000000000, UL) > #define PAGE_OFFSET_L3 _AC(0xffffffd600000000, UL) > -#ifdef CONFIG_XIP_KERNEL > -#define PAGE_OFFSET PAGE_OFFSET_L3 > -#else > #define PAGE_OFFSET kernel_map.page_offset > -#endif /* CONFIG_XIP_KERNEL */ > #else > #define PAGE_OFFSET _AC(0xc0000000, UL) > #endif /* CONFIG_64BIT */ > @@ -105,15 +101,8 @@ struct kernel_mapping { > /* Offset between linear mapping virtual address and kernel load address */ > unsigned long va_pa_offset; > /* Offset between kernel mapping virtual address and kernel load address */ > -#ifdef CONFIG_XIP_KERNEL > - unsigned long va_kernel_xip_text_pa_offset; > - unsigned long va_kernel_xip_data_pa_offset; > - uintptr_t xiprom; > - uintptr_t xiprom_sz; > -#else > unsigned long page_offset; > unsigned long va_kernel_pa_offset; > -#endif > }; > > extern struct kernel_mapping kernel_map; > @@ -132,16 +121,7 @@ extern unsigned long vmemmap_start_pfn; > void *linear_mapping_pa_to_va(unsigned long x); > #endif > > -#ifdef CONFIG_XIP_KERNEL > -#define kernel_mapping_pa_to_va(y) ({ \ > - unsigned long _y = (unsigned long)(y); \ > - (_y < phys_ram_base) ? \ > - (void *)(_y + kernel_map.va_kernel_xip_text_pa_offset) : \ > - (void *)(_y + kernel_map.va_kernel_xip_data_pa_offset); \ > - }) > -#else > #define kernel_mapping_pa_to_va(y) ((void *)((unsigned long)(y) + kernel_map.va_kernel_pa_offset)) > -#endif > > #define __pa_to_va_nodebug(x) linear_mapping_pa_to_va(x) > > @@ -151,16 +131,7 @@ void *linear_mapping_pa_to_va(unsigned long x); > phys_addr_t linear_mapping_va_to_pa(unsigned long x); > #endif > > -#ifdef CONFIG_XIP_KERNEL > -#define kernel_mapping_va_to_pa(y) ({ \ > - unsigned long _y = (unsigned long)(y); \ > - (_y < kernel_map.virt_addr + kernel_map.xiprom_sz) ? \ > - (_y - kernel_map.va_kernel_xip_text_pa_offset) : \ > - (_y - kernel_map.va_kernel_xip_data_pa_offset); \ > - }) > -#else > #define kernel_mapping_va_to_pa(y) ((unsigned long)(y) - kernel_map.va_kernel_pa_offset) > -#endif > > #define __va_to_pa_nodebug(x) ({ \ > unsigned long _x = x; \ > diff --git a/arch/riscv/include/asm/pgtable.h b/arch/riscv/include/asm/pgtable.h > index 1340aa398a74..a18c0f62b452 100644 > --- a/arch/riscv/include/asm/pgtable.h > +++ b/arch/riscv/include/asm/pgtable.h > @@ -134,21 +134,6 @@ > > #include > > -#ifdef CONFIG_XIP_KERNEL > -#define XIP_FIXUP(addr) ({ \ > - extern char _sdata[], _start[], _end[]; \ > - uintptr_t __rom_start_data = CONFIG_XIP_PHYS_ADDR \ > - + (uintptr_t)&_sdata - (uintptr_t)&_start; \ > - uintptr_t __rom_end_data = CONFIG_XIP_PHYS_ADDR \ > - + (uintptr_t)&_end - (uintptr_t)&_start; \ > - uintptr_t __a = (uintptr_t)(addr); \ > - (__a >= __rom_start_data && __a < __rom_end_data) ? \ > - __a - __rom_start_data + CONFIG_PHYS_RAM_BASE : __a; \ > - }) > -#else > -#define XIP_FIXUP(addr) (addr) > -#endif /* CONFIG_XIP_KERNEL */ > - > struct pt_alloc_ops { > pte_t *(*get_pte_virt)(phys_addr_t pa); > phys_addr_t (*alloc_pte)(uintptr_t va); > @@ -1272,13 +1257,8 @@ static inline pte_t pte_swp_clear_exclusive(pte_t pte) > extern char _start[]; > extern void *_dtb_early_va; > extern uintptr_t _dtb_early_pa; > -#if defined(CONFIG_XIP_KERNEL) && defined(CONFIG_MMU) > -#define dtb_early_va (*(void **)XIP_FIXUP(&_dtb_early_va)) > -#define dtb_early_pa (*(uintptr_t *)XIP_FIXUP(&_dtb_early_pa)) > -#else > #define dtb_early_va _dtb_early_va > #define dtb_early_pa _dtb_early_pa > -#endif /* CONFIG_XIP_KERNEL */ > extern u64 satp_mode; > > void paging_init(void); > diff --git a/arch/riscv/include/asm/scs.h b/arch/riscv/include/asm/scs.h > index ab7714aa93bd..023a412fe38d 100644 > --- a/arch/riscv/include/asm/scs.h > +++ b/arch/riscv/include/asm/scs.h > @@ -10,7 +10,6 @@ > /* Load init_shadow_call_stack to gp. */ > .macro scs_load_init_stack > la gp, init_shadow_call_stack > - XIP_FIXUP_OFFSET gp > .endm > > /* Load the per-CPU IRQ shadow call stack to gp. */ > diff --git a/arch/riscv/include/asm/set_memory.h b/arch/riscv/include/asm/set_memory.h > index 87389e93325a..ef59e1716a2c 100644 > --- a/arch/riscv/include/asm/set_memory.h > +++ b/arch/riscv/include/asm/set_memory.h > @@ -47,7 +47,7 @@ bool kernel_page_present(struct page *page); > > #endif /* __ASSEMBLER__ */ > > -#if defined(CONFIG_STRICT_KERNEL_RWX) || defined(CONFIG_XIP_KERNEL) > +#if defined(CONFIG_STRICT_KERNEL_RWX) > #ifdef CONFIG_64BIT > #define SECTION_ALIGN (1 << 21) > #else > diff --git a/arch/riscv/include/asm/xip_fixup.h b/arch/riscv/include/asm/xip_fixup.h > deleted file mode 100644 > index f3d56299bc22..000000000000 > --- a/arch/riscv/include/asm/xip_fixup.h > +++ /dev/null > @@ -1,49 +0,0 @@ > -/* SPDX-License-Identifier: GPL-2.0-only */ > -/* > - * XIP fixup macros, only useful in assembly. > - */ > -#ifndef _ASM_RISCV_XIP_FIXUP_H > -#define _ASM_RISCV_XIP_FIXUP_H > - > -#include > - > -#ifdef CONFIG_XIP_KERNEL > -.macro XIP_FIXUP_OFFSET reg > - /* Fix-up address in Flash into address in RAM early during boot before > - * MMU is up. Because generated code "thinks" data is in Flash, but it > - * is actually in RAM (actually data is also in Flash, but Flash is > - * read-only, thus we need to use the data residing in RAM). > - * > - * The start of data in Flash is _sdata and the start of data in RAM is > - * CONFIG_PHYS_RAM_BASE. So this fix-up essentially does this: > - * reg += CONFIG_PHYS_RAM_BASE - _start > - */ > - li t0, CONFIG_PHYS_RAM_BASE > - add \reg, \reg, t0 > - la t0, _sdata > - sub \reg, \reg, t0 > -.endm > -.macro XIP_FIXUP_FLASH_OFFSET reg > - /* In linker script, at the transition from read-only section to > - * writable section, the VMA is increased while LMA remains the same. > - * (See in linker script how _sdata, __data_loc and LOAD_OFFSET is > - * changed) > - * > - * Consequently, early during boot before MMU is up, the generated code > - * reads the "writable" section at wrong addresses, because VMA is used > - * by compiler to generate code, but the data is located in Flash using > - * LMA. > - */ > - la t0, _sdata > - sub \reg, \reg, t0 > - la t0, __data_loc > - add \reg, \reg, t0 > -.endm > -#else > -.macro XIP_FIXUP_OFFSET reg > -.endm > -.macro XIP_FIXUP_FLASH_OFFSET reg > -.endm > -#endif /* CONFIG_XIP_KERNEL */ > - > -#endif > diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S > index 9c99c5ad6fe8..650399044368 100644 > --- a/arch/riscv/kernel/head.S > +++ b/arch/riscv/kernel/head.S > @@ -14,7 +14,6 @@ > #include > #include > #include > -#include > #include > #include "efi-header.S" > > @@ -75,7 +74,6 @@ pe_head_start: > relocate_enable_mmu: > /* Relocate return address */ > la a1, kernel_map > - XIP_FIXUP_OFFSET a1 > REG_L a1, KERNEL_MAP_VIRT_ADDR(a1) > la a2, _start > sub a1, a1, a2 > @@ -89,7 +87,6 @@ relocate_enable_mmu: > /* Compute satp for kernel page tables, but don't load it yet */ > srl a2, a0, PAGE_SHIFT > la a1, satp_mode > - XIP_FIXUP_OFFSET a1 > REG_L a1, 0(a1) > or a2, a2, a1 > > @@ -100,7 +97,6 @@ relocate_enable_mmu: > * to ensure the new translations are in use. > */ > la a0, trampoline_pg_dir > - XIP_FIXUP_OFFSET a0 > srl a0, a0, PAGE_SHIFT > or a0, a0, a1 > sfence.vma > @@ -154,11 +150,9 @@ secondary_start_sbi: > > /* a0 contains the hartid & a1 contains boot data */ > li a2, SBI_HART_BOOT_TASK_PTR_OFFSET > - XIP_FIXUP_OFFSET a2 > add a2, a2, a1 > REG_L tp, (a2) > li a3, SBI_HART_BOOT_STACK_PTR_OFFSET > - XIP_FIXUP_OFFSET a3 > add a3, a3, a1 > REG_L sp, (a3) > > @@ -167,7 +161,6 @@ secondary_start_sbi: > #ifdef CONFIG_MMU > /* Enable virtual memory and relocate to virtual address */ > la a0, swapper_pg_dir > - XIP_FIXUP_OFFSET a0 > call relocate_enable_mmu > #endif > call .Lsetup_trap_vector > @@ -269,40 +262,13 @@ SYM_CODE_START(_start_kernel) > .Lgood_cores: > > /* The lottery system is only required for spinwait booting method */ > -#ifndef CONFIG_XIP_KERNEL > /* Pick one hart to run the main boot sequence */ > la a3, hart_lottery > li a2, 1 > amoadd.w a3, a2, (a3) > bnez a3, .Lsecondary_start > - > -#else > - /* hart_lottery in flash contains a magic number */ > - la a3, hart_lottery > - mv a2, a3 > - XIP_FIXUP_OFFSET a2 > - XIP_FIXUP_FLASH_OFFSET a3 > - lw t1, (a3) > - amoswap.w t0, t1, (a2) > - /* first time here if hart_lottery in RAM is not set */ > - beq t0, t1, .Lsecondary_start > - > -#endif /* CONFIG_XIP */ > #endif /* CONFIG_RISCV_BOOT_SPINWAIT */ > > -#ifdef CONFIG_XIP_KERNEL > - la sp, _end + THREAD_SIZE > - XIP_FIXUP_OFFSET sp > - mv s0, a0 > - mv s1, a1 > - call __copy_data > - > - /* Restore a0 & a1 copy */ > - mv a0, s0 > - mv a1, s1 > -#endif > - > -#ifndef CONFIG_XIP_KERNEL > /* Clear BSS for flat non-ELF images */ > la a3, __bss_start > la a4, __bss_stop > @@ -312,20 +278,16 @@ SYM_CODE_START(_start_kernel) > add a3, a3, RISCV_SZPTR > blt a3, a4, .Lclear_bss > .Lclear_bss_done: > -#endif > la a2, boot_cpu_hartid > - XIP_FIXUP_OFFSET a2 > REG_S a0, (a2) > > /* Initialize page tables and relocate to virtual addresses */ > la tp, init_task > la sp, init_thread_union + THREAD_SIZE > - XIP_FIXUP_OFFSET sp > addi sp, sp, -PT_SIZE_ON_STACK > scs_load_init_stack > #ifdef CONFIG_BUILTIN_DTB > la a0, __dtb_start > - XIP_FIXUP_OFFSET a0 > #else > mv a0, a1 > #endif /* CONFIG_BUILTIN_DTB */ > @@ -335,7 +297,6 @@ SYM_CODE_START(_start_kernel) > call setup_vm > #ifdef CONFIG_MMU > la a0, early_pg_dir > - XIP_FIXUP_OFFSET a0 > call relocate_enable_mmu > #endif /* CONFIG_MMU */ > > @@ -374,9 +335,7 @@ SYM_CODE_START(_start_kernel) > > slli a3, a0, LGREG > la a1, __cpu_spinwait_stack_pointer > - XIP_FIXUP_OFFSET a1 > la a2, __cpu_spinwait_task_pointer > - XIP_FIXUP_OFFSET a2 > add a1, a3, a1 > add a2, a3, a2 > > diff --git a/arch/riscv/kernel/head.h b/arch/riscv/kernel/head.h > index a556fdaafed9..05a04bef442b 100644 > --- a/arch/riscv/kernel/head.h > +++ b/arch/riscv/kernel/head.h > @@ -11,9 +11,6 @@ > extern atomic_t hart_lottery; > > asmlinkage void __init setup_vm(uintptr_t dtb_pa); > -#ifdef CONFIG_XIP_KERNEL > -asmlinkage void __init __copy_data(void); > -#endif > > #ifdef CONFIG_RISCV_BOOT_SPINWAIT > extern void *__cpu_spinwait_stack_pointer[]; > diff --git a/arch/riscv/kernel/setup.c b/arch/riscv/kernel/setup.c > index b5bc5fc65cea..c89cc272440b 100644 > --- a/arch/riscv/kernel/setup.c > +++ b/arch/riscv/kernel/setup.c > @@ -46,11 +46,7 @@ > * This is used before the kernel initializes the BSS so it can't be in the > * BSS. > */ > -atomic_t hart_lottery __section(".sdata") > -#ifdef CONFIG_XIP_KERNEL > -= ATOMIC_INIT(0xC001BEEF) > -#endif > -; > +atomic_t hart_lottery __section(".sdata"); > unsigned long boot_cpu_hartid; > EXPORT_SYMBOL_GPL(boot_cpu_hartid); > > diff --git a/arch/riscv/kernel/suspend_entry.S b/arch/riscv/kernel/suspend_entry.S > index 2d54f309c140..d71b55fd6259 100644 > --- a/arch/riscv/kernel/suspend_entry.S > +++ b/arch/riscv/kernel/suspend_entry.S > @@ -10,7 +10,6 @@ > #include > #include > #include > -#include > > .text > .altmacro > @@ -70,7 +69,6 @@ SYM_TYPED_FUNC_START(__cpu_resume_enter) > > /* Enable MMU */ > la a0, swapper_pg_dir > - XIP_FIXUP_OFFSET a0 > call relocate_enable_mmu > > /* Restore A0 and A1 */ > diff --git a/arch/riscv/kernel/traps.c b/arch/riscv/kernel/traps.c > index 5fb57fad188a..bdec54d12b2a 100644 > --- a/arch/riscv/kernel/traps.c > +++ b/arch/riscv/kernel/traps.c > @@ -142,11 +142,7 @@ static void do_trap_error(struct pt_regs *regs, int signo, int code, > } > } > > -#if defined(CONFIG_XIP_KERNEL) && defined(CONFIG_RISCV_ALTERNATIVE) > -#define __trap_section __noinstr_section(".xip.traps") > -#else > #define __trap_section noinstr > -#endif > #define DO_ERROR_INFO(name, signo, code, str) \ > asmlinkage __visible __trap_section void name(struct pt_regs *regs) \ > { \ > diff --git a/arch/riscv/kernel/vmcore_info.c b/arch/riscv/kernel/vmcore_info.c > index d5e448aa90e7..6d7a22522d63 100644 > --- a/arch/riscv/kernel/vmcore_info.c > +++ b/arch/riscv/kernel/vmcore_info.c > @@ -19,13 +19,6 @@ void arch_crash_save_vmcoreinfo(void) > #endif > #endif > vmcoreinfo_append_str("NUMBER(KERNEL_LINK_ADDR)=0x%lx\n", KERNEL_LINK_ADDR); > -#ifdef CONFIG_XIP_KERNEL > - /* TODO: Communicate with crash-utility developers on the information to > - * export. The XIP case is more complicated, because the virtual-physical > - * address offset depends on whether the address is in ROM or in RAM. > - */ > -#else > vmcoreinfo_append_str("NUMBER(va_kernel_pa_offset)=0x%lx\n", > kernel_map.va_kernel_pa_offset); > -#endif > } > diff --git a/arch/riscv/kernel/vmlinux.lds.S b/arch/riscv/kernel/vmlinux.lds.S > index 61bd5ba6680a..3b5ffcf3216d 100644 > --- a/arch/riscv/kernel/vmlinux.lds.S > +++ b/arch/riscv/kernel/vmlinux.lds.S > @@ -7,10 +7,6 @@ > #define RO_EXCEPTION_TABLE_ALIGN 4 > #define RUNTIME_DISCARD_EXIT > > -#ifdef CONFIG_XIP_KERNEL > -#include "vmlinux-xip.lds.S" > -#else > - > #include > #define LOAD_OFFSET KERNEL_LINK_ADDR > > @@ -175,4 +171,3 @@ SECTIONS > > DISCARDS > } > -#endif /* CONFIG_XIP_KERNEL */ > diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c > index 25a8f693a765..c7ec6c0235e1 100644 > --- a/arch/riscv/mm/init.c > +++ b/arch/riscv/mm/init.c > @@ -41,20 +41,17 @@ u64 new_vmalloc[NR_CPUS / sizeof(u64) + 1]; > > struct kernel_mapping kernel_map __ro_after_init; > EXPORT_SYMBOL(kernel_map); > -#ifdef CONFIG_XIP_KERNEL > -#define kernel_map (*(struct kernel_mapping *)XIP_FIXUP(&kernel_map)) > -#endif > > #ifdef CONFIG_64BIT > -u64 satp_mode __ro_after_init = !IS_ENABLED(CONFIG_XIP_KERNEL) ? SATP_MODE_57 : SATP_MODE_39; > +u64 satp_mode __ro_after_init = SATP_MODE_57; > #else > u64 satp_mode __ro_after_init = SATP_MODE_32; > #endif > EXPORT_SYMBOL(satp_mode); > > #ifdef CONFIG_64BIT > -bool pgtable_l4_enabled __ro_after_init = !IS_ENABLED(CONFIG_XIP_KERNEL); > -bool pgtable_l5_enabled __ro_after_init = !IS_ENABLED(CONFIG_XIP_KERNEL); > +bool pgtable_l4_enabled __ro_after_init = true; > +bool pgtable_l5_enabled __ro_after_init = true; > EXPORT_SYMBOL(pgtable_l4_enabled); > EXPORT_SYMBOL(pgtable_l5_enabled); > #endif > @@ -197,9 +194,6 @@ void __init arch_mm_preinit(void) > > /* Limit the memory size via mem. */ > static phys_addr_t memory_limit; > -#ifdef CONFIG_XIP_KERNEL > -#define memory_limit (*(phys_addr_t *)XIP_FIXUP(&memory_limit)) > -#endif /* CONFIG_XIP_KERNEL */ > > static int __init early_mem(char *p) > { > @@ -223,10 +217,7 @@ static void __init setup_bootmem(void) > phys_addr_t max_mapped_addr; > phys_addr_t phys_ram_end, vmlinux_start; > > - if (IS_ENABLED(CONFIG_XIP_KERNEL)) > - vmlinux_start = __pa_symbol(&_sdata); > - else > - vmlinux_start = __pa_symbol(&_start); > + vmlinux_start = __pa_symbol(&_start); > > memblock_enforce_memory_limit(memory_limit); > > @@ -246,12 +237,10 @@ static void __init setup_bootmem(void) > * Make sure we align the start of the memory on a PMD boundary so that > * at worst, we map the linear mapping with PMD mappings. > */ > - if (!IS_ENABLED(CONFIG_XIP_KERNEL)) { > - phys_ram_base = memblock_start_of_DRAM() & PMD_MASK; > + phys_ram_base = memblock_start_of_DRAM() & PMD_MASK; > #ifdef CONFIG_SPARSEMEM_VMEMMAP > - vmemmap_start_pfn = round_down(phys_ram_base, VMEMMAP_ADDR_ALIGN) >> PAGE_SHIFT; > + vmemmap_start_pfn = round_down(phys_ram_base, VMEMMAP_ADDR_ALIGN) >> PAGE_SHIFT; > #endif > - } > > /* > * In 64-bit, any use of __va/__pa before this point is wrong as we > @@ -366,13 +355,6 @@ static pte_t fixmap_pte[PTRS_PER_PTE] __page_aligned_bss; > > pgd_t early_pg_dir[PTRS_PER_PGD] __initdata __aligned(PAGE_SIZE); > > -#ifdef CONFIG_XIP_KERNEL > -#define pt_ops (*(struct pt_alloc_ops *)XIP_FIXUP(&pt_ops)) > -#define trampoline_pg_dir ((pgd_t *)XIP_FIXUP(trampoline_pg_dir)) > -#define fixmap_pte ((pte_t *)XIP_FIXUP(fixmap_pte)) > -#define early_pg_dir ((pgd_t *)XIP_FIXUP(early_pg_dir)) > -#endif /* CONFIG_XIP_KERNEL */ > - > static const pgprot_t protection_map[16] = { > [VM_NONE] = PAGE_NONE, > [VM_READ] = PAGE_READ, > @@ -469,32 +451,14 @@ static pmd_t trampoline_pmd[PTRS_PER_PMD] __page_aligned_bss; > static pmd_t fixmap_pmd[PTRS_PER_PMD] __page_aligned_bss; > static pmd_t early_pmd[PTRS_PER_PMD] __initdata __aligned(PAGE_SIZE); > > -#ifdef CONFIG_XIP_KERNEL > -#define trampoline_pmd ((pmd_t *)XIP_FIXUP(trampoline_pmd)) > -#define fixmap_pmd ((pmd_t *)XIP_FIXUP(fixmap_pmd)) > -#define early_pmd ((pmd_t *)XIP_FIXUP(early_pmd)) > -#endif /* CONFIG_XIP_KERNEL */ > - > static p4d_t trampoline_p4d[PTRS_PER_P4D] __page_aligned_bss; > static p4d_t fixmap_p4d[PTRS_PER_P4D] __page_aligned_bss; > static p4d_t early_p4d[PTRS_PER_P4D] __initdata __aligned(PAGE_SIZE); > > -#ifdef CONFIG_XIP_KERNEL > -#define trampoline_p4d ((p4d_t *)XIP_FIXUP(trampoline_p4d)) > -#define fixmap_p4d ((p4d_t *)XIP_FIXUP(fixmap_p4d)) > -#define early_p4d ((p4d_t *)XIP_FIXUP(early_p4d)) > -#endif /* CONFIG_XIP_KERNEL */ > - > static pud_t trampoline_pud[PTRS_PER_PUD] __page_aligned_bss; > static pud_t fixmap_pud[PTRS_PER_PUD] __page_aligned_bss; > static pud_t early_pud[PTRS_PER_PUD] __initdata __aligned(PAGE_SIZE); > > -#ifdef CONFIG_XIP_KERNEL > -#define trampoline_pud ((pud_t *)XIP_FIXUP(trampoline_pud)) > -#define fixmap_pud ((pud_t *)XIP_FIXUP(fixmap_pud)) > -#define early_pud ((pud_t *)XIP_FIXUP(early_pud)) > -#endif /* CONFIG_XIP_KERNEL */ > - > static pmd_t *__init get_pmd_virt_early(phys_addr_t pa) > { > /* Before MMU is enabled */ > @@ -765,21 +729,6 @@ static uintptr_t __meminit best_map_size(phys_addr_t pa, uintptr_t va, phys_addr > return PAGE_SIZE; > } > > -#ifdef CONFIG_XIP_KERNEL > -#define phys_ram_base (*(phys_addr_t *)XIP_FIXUP(&phys_ram_base)) > -extern char _xiprom[], _exiprom[], __data_loc; > - > -/* called from head.S with MMU off */ > -asmlinkage void __init __copy_data(void) > -{ > - void *from = (void *)(&__data_loc); > - void *to = (void *)CONFIG_PHYS_RAM_BASE; > - size_t sz = (size_t)((uintptr_t)(&_end) - (uintptr_t)(&_sdata)); > - > - memcpy(to, from, sz); > -} > -#endif > - > #ifdef CONFIG_STRICT_KERNEL_RWX > static __meminit pgprot_t pgprot_from_va(uintptr_t va) > { > @@ -815,7 +764,7 @@ static __meminit pgprot_t pgprot_from_va(uintptr_t va) > } > #endif /* CONFIG_STRICT_KERNEL_RWX */ > > -#if defined(CONFIG_64BIT) && !defined(CONFIG_XIP_KERNEL) > +#if defined(CONFIG_64BIT) > u64 __pi_set_satp_mode_from_cmdline(uintptr_t dtb_pa); > u64 __pi_set_satp_mode_from_fdt(uintptr_t dtb_pa); > > @@ -940,28 +889,6 @@ static __init void set_satp_mode(uintptr_t dtb_pa) > #error "setup_vm() is called from head.S before relocate so it should not use absolute addressing." > #endif > > -#ifdef CONFIG_XIP_KERNEL > -static void __init create_kernel_page_table(pgd_t *pgdir, > - __always_unused bool early) > -{ > - uintptr_t va, start_va, end_va; > - > - /* Map the flash resident part */ > - end_va = kernel_map.virt_addr + kernel_map.xiprom_sz; > - for (va = kernel_map.virt_addr; va < end_va; va += PMD_SIZE) > - create_pgd_mapping(pgdir, va, > - kernel_map.xiprom + (va - kernel_map.virt_addr), > - PMD_SIZE, PAGE_KERNEL_EXEC); > - > - /* Map the data in RAM */ > - start_va = kernel_map.virt_addr + (uintptr_t)&_sdata - (uintptr_t)&_start; > - end_va = kernel_map.virt_addr + kernel_map.size; > - for (va = start_va; va < end_va; va += PMD_SIZE) > - create_pgd_mapping(pgdir, va, > - kernel_map.phys_addr + (va - start_va), > - PMD_SIZE, PAGE_KERNEL); > -} > -#else > static void __init create_kernel_page_table(pgd_t *pgdir, bool early) > { > uintptr_t va, end_va; > @@ -974,7 +901,6 @@ static void __init create_kernel_page_table(pgd_t *pgdir, bool early) > early ? > PAGE_KERNEL_EXEC : pgprot_from_va(va)); > } > -#endif > > /* > * Setup a 4MB mapping that encompasses the device tree: for 64-bit kernel, > @@ -1116,27 +1042,11 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa) > > kernel_map.virt_addr = KERNEL_LINK_ADDR + kernel_map.virt_offset; > > -#ifdef CONFIG_XIP_KERNEL > - kernel_map.xiprom = (uintptr_t)CONFIG_XIP_PHYS_ADDR; > - kernel_map.xiprom_sz = (uintptr_t)(&_exiprom) - (uintptr_t)(&_xiprom); > - > - phys_ram_base = CONFIG_PHYS_RAM_BASE; > -#ifdef CONFIG_SPARSEMEM_VMEMMAP > - vmemmap_start_pfn = round_down(phys_ram_base, VMEMMAP_ADDR_ALIGN) >> PAGE_SHIFT; > -#endif > - kernel_map.phys_addr = (uintptr_t)CONFIG_PHYS_RAM_BASE; > - kernel_map.size = (uintptr_t)(&_end) - (uintptr_t)(&_start); > - > - kernel_map.va_kernel_xip_text_pa_offset = kernel_map.virt_addr - kernel_map.xiprom; > - kernel_map.va_kernel_xip_data_pa_offset = kernel_map.virt_addr - kernel_map.phys_addr > - + (uintptr_t)&_sdata - (uintptr_t)&_start; > -#else > kernel_map.phys_addr = (uintptr_t)(&_start); > kernel_map.size = (uintptr_t)(&_end) - kernel_map.phys_addr; > kernel_map.va_kernel_pa_offset = kernel_map.virt_addr - kernel_map.phys_addr; > -#endif > > -#if defined(CONFIG_64BIT) && !defined(CONFIG_XIP_KERNEL) > +#if defined(CONFIG_64BIT) > set_satp_mode(dtb_pa); > set_mmap_rnd_bits_max(); > #endif > @@ -1209,13 +1119,8 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa) > if (pgtable_l4_enabled) > create_pud_mapping(trampoline_pud, kernel_map.virt_addr, > (uintptr_t)trampoline_pmd, PUD_SIZE, PAGE_TABLE); > -#ifdef CONFIG_XIP_KERNEL > - create_pmd_mapping(trampoline_pmd, kernel_map.virt_addr, > - kernel_map.xiprom, PMD_SIZE, PAGE_KERNEL_EXEC); > -#else > create_pmd_mapping(trampoline_pmd, kernel_map.virt_addr, > kernel_map.phys_addr, PMD_SIZE, PAGE_KERNEL_EXEC); > -#endif > #else > /* Setup trampoline PGD */ > create_pgd_mapping(trampoline_pg_dir, kernel_map.virt_addr, -- Thanx, Kunwu