File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -71,6 +71,9 @@ config ARCH_HAS_ILOG2_U32
7171config ARCH_HAS_ILOG2_U64
7272 def_bool n
7373
74+ config ARCH_MTD_XIP
75+ def_bool y
76+
7477config NO_IOPORT_MAP
7578 def_bool n
7679
Original file line number Diff line number Diff line change 5252#define XTENSA_STACK_ALIGNMENT 16
5353#endif
5454
55+ #ifndef XCHAL_HW_MIN_VERSION
56+ #if defined(XCHAL_HW_MIN_VERSION_MAJOR ) && defined(XCHAL_HW_MIN_VERSION_MINOR )
57+ #define XCHAL_HW_MIN_VERSION (XCHAL_HW_MIN_VERSION_MAJOR * 100 + \
58+ XCHAL_HW_MIN_VERSION_MINOR)
59+ #else
60+ #define XCHAL_HW_MIN_VERSION 0
61+ #endif
62+ #endif
63+
5564#endif
Original file line number Diff line number Diff line change 1+ /* SPDX-License-Identifier: GPL-2.0-only */
2+
3+ #ifndef _ASM_MTD_XIP_H
4+ #define _ASM_MTD_XIP_H
5+
6+ #include <asm/processor.h>
7+
8+ #define xip_irqpending () (xtensa_get_sr(interrupt) & xtensa_get_sr(intenable))
9+ #define xip_currtime () (xtensa_get_sr(ccount))
10+ #define xip_elapsed_since (x ) ((xtensa_get_sr(ccount) - (x)) / 1000) /* should work up to 1GHz */
11+ #define xip_cpu_idle () do { asm volatile ("waiti 0"); } while (0)
12+
13+ #endif /* _ASM_MTD_XIP_H */
14+
Original file line number Diff line number Diff line change @@ -34,6 +34,10 @@ extern char _SecondaryResetVector_text_start[];
3434extern char _SecondaryResetVector_text_end [];
3535#endif
3636#ifdef CONFIG_XIP_KERNEL
37+ #ifdef CONFIG_VECTORS_ADDR
38+ extern char _xip_text_start [];
39+ extern char _xip_text_end [];
40+ #endif
3741extern char _xip_start [];
3842extern char _xip_end [];
3943#endif
Original file line number Diff line number Diff line change 1313#include <linux/perf_event.h>
1414#include <linux/platform_device.h>
1515
16+ #include <asm/core.h>
1617#include <asm/processor.h>
1718#include <asm/stacktrace.h>
1819
20+ #define XTENSA_HWVERSION_RG_2015_0 260000
21+
22+ #if XCHAL_HW_MIN_VERSION >= XTENSA_HWVERSION_RG_2015_0
23+ #define XTENSA_PMU_ERI_BASE 0x00101000
24+ #else
25+ #define XTENSA_PMU_ERI_BASE 0x00001000
26+ #endif
27+
1928/* Global control/status for all perf counters */
20- #define XTENSA_PMU_PMG 0x1000
29+ #define XTENSA_PMU_PMG XTENSA_PMU_ERI_BASE
2130/* Perf counter values */
22- #define XTENSA_PMU_PM (i ) (0x1080 + (i) * 4)
31+ #define XTENSA_PMU_PM (i ) (XTENSA_PMU_ERI_BASE + 0x80 + (i) * 4)
2332/* Perf counter control registers */
24- #define XTENSA_PMU_PMCTRL (i ) (0x1100 + (i) * 4)
33+ #define XTENSA_PMU_PMCTRL (i ) (XTENSA_PMU_ERI_BASE + 0x100 + (i) * 4)
2534/* Perf counter status registers */
26- #define XTENSA_PMU_PMSTAT (i ) (0x1180 + (i) * 4)
35+ #define XTENSA_PMU_PMSTAT (i ) (XTENSA_PMU_ERI_BASE + 0x180 + (i) * 4)
2736
2837#define XTENSA_PMU_PMG_PMEN 0x1
2938
Original file line number Diff line number Diff line change @@ -311,6 +311,9 @@ void __init setup_arch(char **cmdline_p)
311311
312312 mem_reserve (__pa (_stext ), __pa (_end ));
313313#ifdef CONFIG_XIP_KERNEL
314+ #ifdef CONFIG_VECTORS_ADDR
315+ mem_reserve (__pa (_xip_text_start ), __pa (_xip_text_end ));
316+ #endif
314317 mem_reserve (__pa (_xip_start ), __pa (_xip_end ));
315318#endif
316319
Original file line number Diff line number Diff line change @@ -118,6 +118,7 @@ SECTIONS
118118 SECTION_VECTOR2 (.DoubleExceptionVector.text, DOUBLEEXC_VECTOR_VADDR)
119119
120120 *(.exception.text)
121+ *(.xiptext)
121122#endif
122123
123124 IRQENTRY_TEXT
@@ -201,6 +202,9 @@ SECTIONS
201202 .DebugInterruptVector.text);
202203 RELOCATE_ENTRY(_exception_text,
203204 .exception.text);
205+ #ifdef CONFIG_XIP_KERNEL
206+ RELOCATE_ENTRY(_xip_text, .xiptext);
207+ #endif
204208#endif
205209#ifdef CONFIG_XIP_KERNEL
206210 RELOCATE_ENTRY(_xip_data, .data );
@@ -319,7 +323,12 @@ SECTIONS
319323 LAST)
320324#undef LAST
321325#define LAST .exception.text
322-
326+ SECTION_VECTOR4 (_xip_text,
327+ .xiptext,
328+ ,
329+ LAST)
330+ #undef LAST
331+ #define LAST .xiptext
323332#endif
324333 . = (LOADADDR(LAST) + SIZEOF(LAST) + 3 ) & ~ 3 ;
325334
You can’t perform that action at this time.
0 commit comments