mirror of
https://github.com/torvalds/linux.git
synced 2024-11-23 04:31:50 +00:00
xtensa: add XIP-aware MTD support
Add Kconfig symbol, asm/mtd-xip.h header and define related macros: xip_cpu_idle, xip_irqpending, xip_currtime and xip_elapsed_since. Append .xiptext to the vectors when separate vectors are configured because otherwise they are appended to the data and data may not even be executable in XIP configuration. Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
This commit is contained in:
parent
687eb3c42f
commit
03ce34cf8f
@ -70,6 +70,9 @@ config ARCH_HAS_ILOG2_U32
|
||||
config ARCH_HAS_ILOG2_U64
|
||||
def_bool n
|
||||
|
||||
config ARCH_MTD_XIP
|
||||
def_bool y
|
||||
|
||||
config NO_IOPORT_MAP
|
||||
def_bool n
|
||||
|
||||
|
14
arch/xtensa/include/asm/mtd-xip.h
Normal file
14
arch/xtensa/include/asm/mtd-xip.h
Normal file
@ -0,0 +1,14 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#ifndef _ASM_MTD_XIP_H
|
||||
#define _ASM_MTD_XIP_H
|
||||
|
||||
#include <asm/processor.h>
|
||||
|
||||
#define xip_irqpending() (xtensa_get_sr(interrupt) & xtensa_get_sr(intenable))
|
||||
#define xip_currtime() (xtensa_get_sr(ccount))
|
||||
#define xip_elapsed_since(x) ((xtensa_get_sr(ccount) - (x)) / 1000) /* should work up to 1GHz */
|
||||
#define xip_cpu_idle() do { asm volatile ("waiti 0"); } while (0)
|
||||
|
||||
#endif /* _ASM_MTD_XIP_H */
|
||||
|
@ -34,6 +34,10 @@ extern char _SecondaryResetVector_text_start[];
|
||||
extern char _SecondaryResetVector_text_end[];
|
||||
#endif
|
||||
#ifdef CONFIG_XIP_KERNEL
|
||||
#ifdef CONFIG_VECTORS_ADDR
|
||||
extern char _xip_text_start[];
|
||||
extern char _xip_text_end[];
|
||||
#endif
|
||||
extern char _xip_start[];
|
||||
extern char _xip_end[];
|
||||
#endif
|
||||
|
@ -311,6 +311,9 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
mem_reserve(__pa(_stext), __pa(_end));
|
||||
#ifdef CONFIG_XIP_KERNEL
|
||||
#ifdef CONFIG_VECTORS_ADDR
|
||||
mem_reserve(__pa(_xip_text_start), __pa(_xip_text_end));
|
||||
#endif
|
||||
mem_reserve(__pa(_xip_start), __pa(_xip_end));
|
||||
#endif
|
||||
|
||||
|
@ -118,6 +118,7 @@ SECTIONS
|
||||
SECTION_VECTOR2 (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
|
||||
|
||||
*(.exception.text)
|
||||
*(.xiptext)
|
||||
#endif
|
||||
|
||||
IRQENTRY_TEXT
|
||||
@ -201,6 +202,9 @@ SECTIONS
|
||||
.DebugInterruptVector.text);
|
||||
RELOCATE_ENTRY(_exception_text,
|
||||
.exception.text);
|
||||
#ifdef CONFIG_XIP_KERNEL
|
||||
RELOCATE_ENTRY(_xip_text, .xiptext);
|
||||
#endif
|
||||
#endif
|
||||
#ifdef CONFIG_XIP_KERNEL
|
||||
RELOCATE_ENTRY(_xip_data, .data);
|
||||
@ -319,7 +323,12 @@ SECTIONS
|
||||
LAST)
|
||||
#undef LAST
|
||||
#define LAST .exception.text
|
||||
|
||||
SECTION_VECTOR4 (_xip_text,
|
||||
.xiptext,
|
||||
,
|
||||
LAST)
|
||||
#undef LAST
|
||||
#define LAST .xiptext
|
||||
#endif
|
||||
. = (LOADADDR(LAST) + SIZEOF(LAST) + 3) & ~ 3;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user