You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'xtensa-next-20141215' of git://github.com/czankel/xtensa-linux
Pull Xtensa fixes from Chris Zankel: - fix nommu support - remove s6000 variant and s6105 platform - fix permissions for kmapped pages so that copy_to_user_page works with them - add power management menu to Kconfig to allow use of runtime PM - disable linker optimizations because of a linker bug - fix sparse error * tag 'xtensa-next-20141215' of git://github.com/czankel/xtensa-linux: xtensa: disable link optimization xtensa/uaccess: fix sparse errors xtensa: fix kmap_prot definition xtensa: add power management menu to Kconfig xtensa: remove s6000 variant and s6105 platform xtensa: make PLATFORM_DEFAULT_MEM parameters configurable xtensa: nommu: clean up memory map dump xtensa: nommu: reserve memory below PLATFORM_DEFAULT_MEM_START xtensa: nommu: set up cache and atomctl in initialize_mmu xtensa: move vecbase SR initialization to _startup xtensa: nommu: fix uImage load address xtensa: nommu: fix load address definitions xtensa: nommu: fix Image.elf reset code and ld script xtensa: nommu: add MMU dependency to DEBUG_TLB_SANITY xtensa: nommu: don't build most of the cache flushing code xtensa: nommu: don't provide arch_get_unmapped_area xtensa: nommu: provide MAP_UNINITIALIZED definition xtensa: nommu: provide _PAGE_CHG_MASK definition xtensa: nommu: provide __invalidate_dcache_page_alias stub xtensa: nommu: move init_mmu stub to nommu_context.h
This commit is contained in:
+42
-14
@@ -98,12 +98,6 @@ config XTENSA_VARIANT_DC233C
|
|||||||
help
|
help
|
||||||
This variant refers to Tensilica's Diamond 233L Standard core Rev.C (LE).
|
This variant refers to Tensilica's Diamond 233L Standard core Rev.C (LE).
|
||||||
|
|
||||||
config XTENSA_VARIANT_S6000
|
|
||||||
bool "s6000 - Stretch software configurable processor"
|
|
||||||
select VARIANT_IRQ_SWITCH
|
|
||||||
select ARCH_REQUIRE_GPIOLIB
|
|
||||||
select XTENSA_CALIBRATE_CCOUNT
|
|
||||||
|
|
||||||
config XTENSA_VARIANT_CUSTOM
|
config XTENSA_VARIANT_CUSTOM
|
||||||
bool "Custom Xtensa processor configuration"
|
bool "Custom Xtensa processor configuration"
|
||||||
select MAY_HAVE_SMP
|
select MAY_HAVE_SMP
|
||||||
@@ -126,7 +120,6 @@ config XTENSA_VARIANT_NAME
|
|||||||
default "dc232b" if XTENSA_VARIANT_DC232B
|
default "dc232b" if XTENSA_VARIANT_DC232B
|
||||||
default "dc233c" if XTENSA_VARIANT_DC233C
|
default "dc233c" if XTENSA_VARIANT_DC233C
|
||||||
default "fsf" if XTENSA_VARIANT_FSF
|
default "fsf" if XTENSA_VARIANT_FSF
|
||||||
default "s6000" if XTENSA_VARIANT_S6000
|
|
||||||
default XTENSA_VARIANT_CUSTOM_NAME if XTENSA_VARIANT_CUSTOM
|
default XTENSA_VARIANT_CUSTOM_NAME if XTENSA_VARIANT_CUSTOM
|
||||||
|
|
||||||
config XTENSA_VARIANT_MMU
|
config XTENSA_VARIANT_MMU
|
||||||
@@ -191,7 +184,6 @@ config HOTPLUG_CPU
|
|||||||
|
|
||||||
config INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
|
config INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
|
||||||
bool "Initialize Xtensa MMU inside the Linux kernel code"
|
bool "Initialize Xtensa MMU inside the Linux kernel code"
|
||||||
depends on MMU
|
|
||||||
default y
|
default y
|
||||||
help
|
help
|
||||||
Earlier version initialized the MMU in the exception vector
|
Earlier version initialized the MMU in the exception vector
|
||||||
@@ -311,15 +303,10 @@ config XTENSA_PLATFORM_XT2000
|
|||||||
XT2000 is the name of Tensilica's feature-rich emulation platform.
|
XT2000 is the name of Tensilica's feature-rich emulation platform.
|
||||||
This hardware is capable of running a full Linux distribution.
|
This hardware is capable of running a full Linux distribution.
|
||||||
|
|
||||||
config XTENSA_PLATFORM_S6105
|
|
||||||
bool "S6105"
|
|
||||||
select HAVE_IDE
|
|
||||||
select SERIAL_CONSOLE
|
|
||||||
select NO_IOPORT_MAP
|
|
||||||
|
|
||||||
config XTENSA_PLATFORM_XTFPGA
|
config XTENSA_PLATFORM_XTFPGA
|
||||||
bool "XTFPGA"
|
bool "XTFPGA"
|
||||||
select ETHOC if ETHERNET
|
select ETHOC if ETHERNET
|
||||||
|
select PLATFORM_WANT_DEFAULT_MEM
|
||||||
select SERIAL_CONSOLE
|
select SERIAL_CONSOLE
|
||||||
select XTENSA_CALIBRATE_CCOUNT
|
select XTENSA_CALIBRATE_CCOUNT
|
||||||
help
|
help
|
||||||
@@ -406,6 +393,41 @@ source "drivers/pcmcia/Kconfig"
|
|||||||
|
|
||||||
source "drivers/pci/hotplug/Kconfig"
|
source "drivers/pci/hotplug/Kconfig"
|
||||||
|
|
||||||
|
config PLATFORM_WANT_DEFAULT_MEM
|
||||||
|
def_bool n
|
||||||
|
|
||||||
|
config DEFAULT_MEM_START
|
||||||
|
hex "Physical address of the default memory area start"
|
||||||
|
depends on PLATFORM_WANT_DEFAULT_MEM
|
||||||
|
default 0x00000000 if MMU
|
||||||
|
default 0x40000000 if !MMU
|
||||||
|
help
|
||||||
|
This is a fallback start address of the default memory area, it is
|
||||||
|
used when no physical memory size is passed through DTB or through
|
||||||
|
boot parameter from bootloader.
|
||||||
|
|
||||||
|
In noMMU configuration the following parameters are derived from it:
|
||||||
|
- kernel load address;
|
||||||
|
- kernel entry point address;
|
||||||
|
- relocatable vectors base address;
|
||||||
|
- uBoot load address;
|
||||||
|
- TASK_SIZE.
|
||||||
|
|
||||||
|
If unsure, leave the default value here.
|
||||||
|
|
||||||
|
config DEFAULT_MEM_SIZE
|
||||||
|
hex "Maximal size of the default memory area"
|
||||||
|
depends on PLATFORM_WANT_DEFAULT_MEM
|
||||||
|
default 0x04000000
|
||||||
|
help
|
||||||
|
This is a fallback size of the default memory area, it is used when
|
||||||
|
no physical memory size is passed through DTB or through boot
|
||||||
|
parameter from bootloader.
|
||||||
|
|
||||||
|
It's also used for TASK_SIZE calculation in noMMU configuration.
|
||||||
|
|
||||||
|
If unsure, leave the default value here.
|
||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
menu "Executable file formats"
|
menu "Executable file formats"
|
||||||
@@ -414,6 +436,12 @@ source "fs/Kconfig.binfmt"
|
|||||||
|
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
|
menu "Power management options"
|
||||||
|
|
||||||
|
source "kernel/power/Kconfig"
|
||||||
|
|
||||||
|
endmenu
|
||||||
|
|
||||||
source "net/Kconfig"
|
source "net/Kconfig"
|
||||||
|
|
||||||
source "drivers/Kconfig"
|
source "drivers/Kconfig"
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ source "lib/Kconfig.debug"
|
|||||||
|
|
||||||
config DEBUG_TLB_SANITY
|
config DEBUG_TLB_SANITY
|
||||||
bool "Debug TLB sanity"
|
bool "Debug TLB sanity"
|
||||||
depends on DEBUG_KERNEL
|
depends on DEBUG_KERNEL && MMU
|
||||||
help
|
help
|
||||||
Enable this to turn on TLB sanity check on each entry to userspace.
|
Enable this to turn on TLB sanity check on each entry to userspace.
|
||||||
This check can spot missing TLB invalidation/wrong PTE permissions/
|
This check can spot missing TLB invalidation/wrong PTE permissions/
|
||||||
@@ -14,7 +14,7 @@ config DEBUG_TLB_SANITY
|
|||||||
|
|
||||||
config LD_NO_RELAX
|
config LD_NO_RELAX
|
||||||
bool "Disable linker relaxation"
|
bool "Disable linker relaxation"
|
||||||
default n
|
default y
|
||||||
help
|
help
|
||||||
Enable this function to disable link-time optimizations.
|
Enable this function to disable link-time optimizations.
|
||||||
The default linker behavior is to combine identical literal
|
The default linker behavior is to combine identical literal
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ endif
|
|||||||
|
|
||||||
platform-$(CONFIG_XTENSA_PLATFORM_XT2000) := xt2000
|
platform-$(CONFIG_XTENSA_PLATFORM_XT2000) := xt2000
|
||||||
platform-$(CONFIG_XTENSA_PLATFORM_ISS) := iss
|
platform-$(CONFIG_XTENSA_PLATFORM_ISS) := iss
|
||||||
platform-$(CONFIG_XTENSA_PLATFORM_S6105) := s6105
|
|
||||||
platform-$(CONFIG_XTENSA_PLATFORM_XTFPGA) := xtfpga
|
platform-$(CONFIG_XTENSA_PLATFORM_XTFPGA) := xtfpga
|
||||||
|
|
||||||
PLATFORM = $(platform-y)
|
PLATFORM = $(platform-y)
|
||||||
|
|||||||
@@ -41,6 +41,7 @@ SECTIONS
|
|||||||
__bss_end = .;
|
__bss_end = .;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_MMU
|
||||||
/*
|
/*
|
||||||
* This is a remapped copy of the Reset Vector Code.
|
* This is a remapped copy of the Reset Vector Code.
|
||||||
* It keeps gdb in sync with the PC after switching
|
* It keeps gdb in sync with the PC after switching
|
||||||
@@ -51,4 +52,5 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
*(.ResetVector.remapped_text)
|
*(.ResetVector.remapped_text)
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,6 +20,7 @@
|
|||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
#include <asm/cacheasm.h>
|
#include <asm/cacheasm.h>
|
||||||
#include <asm/initialize_mmu.h>
|
#include <asm/initialize_mmu.h>
|
||||||
|
#include <asm/vectors.h>
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
|
|
||||||
.section .ResetVector.text, "ax"
|
.section .ResetVector.text, "ax"
|
||||||
@@ -34,12 +35,7 @@ _ResetVector:
|
|||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
RomInitAddr:
|
RomInitAddr:
|
||||||
#if defined(CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX) && \
|
.word LOAD_MEMORY_ADDRESS
|
||||||
XCHAL_HAVE_PTP_MMU && XCHAL_HAVE_SPANNING_WAY
|
|
||||||
.word 0x00003000
|
|
||||||
#else
|
|
||||||
.word 0xd0003000
|
|
||||||
#endif
|
|
||||||
RomBootParam:
|
RomBootParam:
|
||||||
.word _bootparam
|
.word _bootparam
|
||||||
_bootparam:
|
_bootparam:
|
||||||
@@ -79,6 +75,7 @@ reset:
|
|||||||
movi a4, 0
|
movi a4, 0
|
||||||
jx a0
|
jx a0
|
||||||
|
|
||||||
|
#ifdef CONFIG_MMU
|
||||||
.align 4
|
.align 4
|
||||||
|
|
||||||
.section .ResetVector.remapped_text, "x"
|
.section .ResetVector.remapped_text, "x"
|
||||||
@@ -102,3 +99,4 @@ _RemappedSetupMMU:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
.end no-absolute-literals
|
.end no-absolute-literals
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -4,11 +4,15 @@
|
|||||||
# for more details.
|
# for more details.
|
||||||
#
|
#
|
||||||
|
|
||||||
|
ifdef CONFIG_MMU
|
||||||
ifdef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
|
ifdef CONFIG_INITIALIZE_XTENSA_MMU_INSIDE_VMLINUX
|
||||||
UIMAGE_LOADADDR = 0x00003000
|
UIMAGE_LOADADDR = 0x00003000
|
||||||
else
|
else
|
||||||
UIMAGE_LOADADDR = 0xd0003000
|
UIMAGE_LOADADDR = 0xd0003000
|
||||||
endif
|
endif
|
||||||
|
else
|
||||||
|
UIMAGE_LOADADDR = $(shell printf "0x%x" $$(( ${CONFIG_DEFAULT_MEM_START} + 0x3000 )) )
|
||||||
|
endif
|
||||||
UIMAGE_COMPRESSION = gzip
|
UIMAGE_COMPRESSION = gzip
|
||||||
|
|
||||||
$(obj)/../uImage: vmlinux.bin.gz FORCE
|
$(obj)/../uImage: vmlinux.bin.gz FORCE
|
||||||
|
|||||||
@@ -143,7 +143,6 @@ CONFIG_MMU=y
|
|||||||
#
|
#
|
||||||
CONFIG_XTENSA_VARIANT_FSF=y
|
CONFIG_XTENSA_VARIANT_FSF=y
|
||||||
# CONFIG_XTENSA_VARIANT_DC232B is not set
|
# CONFIG_XTENSA_VARIANT_DC232B is not set
|
||||||
# CONFIG_XTENSA_VARIANT_S6000 is not set
|
|
||||||
# CONFIG_XTENSA_UNALIGNED_USER is not set
|
# CONFIG_XTENSA_UNALIGNED_USER is not set
|
||||||
# CONFIG_PREEMPT is not set
|
# CONFIG_PREEMPT is not set
|
||||||
CONFIG_XTENSA_CALIBRATE_CCOUNT=y
|
CONFIG_XTENSA_CALIBRATE_CCOUNT=y
|
||||||
@@ -161,7 +160,6 @@ CONFIG_XTENSA_ISS_NETWORK=y
|
|||||||
#
|
#
|
||||||
CONFIG_XTENSA_PLATFORM_ISS=y
|
CONFIG_XTENSA_PLATFORM_ISS=y
|
||||||
# CONFIG_XTENSA_PLATFORM_XT2000 is not set
|
# CONFIG_XTENSA_PLATFORM_XT2000 is not set
|
||||||
# CONFIG_XTENSA_PLATFORM_S6105 is not set
|
|
||||||
# CONFIG_GENERIC_CALIBRATE_DELAY is not set
|
# CONFIG_GENERIC_CALIBRATE_DELAY is not set
|
||||||
CONFIG_CMDLINE_BOOL=y
|
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"
|
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"
|
||||||
@@ -759,3 +757,4 @@ CONFIG_GENERIC_FIND_LAST_BIT=y
|
|||||||
CONFIG_HAS_IOMEM=y
|
CONFIG_HAS_IOMEM=y
|
||||||
CONFIG_HAS_DMA=y
|
CONFIG_HAS_DMA=y
|
||||||
CONFIG_NLATTR=y
|
CONFIG_NLATTR=y
|
||||||
|
CONFIG_LD_NO_RELAX=y
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -67,6 +67,8 @@ extern void __invalidate_dcache_page_alias(unsigned long, unsigned long);
|
|||||||
#else
|
#else
|
||||||
static inline void __flush_invalidate_dcache_page_alias(unsigned long virt,
|
static inline void __flush_invalidate_dcache_page_alias(unsigned long virt,
|
||||||
unsigned long phys) { }
|
unsigned long phys) { }
|
||||||
|
static inline void __invalidate_dcache_page_alias(unsigned long virt,
|
||||||
|
unsigned long phys) { }
|
||||||
#endif
|
#endif
|
||||||
#if defined(CONFIG_MMU) && (ICACHE_WAY_SIZE > PAGE_SIZE)
|
#if defined(CONFIG_MMU) && (ICACHE_WAY_SIZE > PAGE_SIZE)
|
||||||
extern void __invalidate_icache_page_alias(unsigned long, unsigned long);
|
extern void __invalidate_icache_page_alias(unsigned long, unsigned long);
|
||||||
@@ -84,7 +86,8 @@ static inline void __invalidate_icache_page_alias(unsigned long virt,
|
|||||||
* (see also Documentation/cachetlb.txt)
|
* (see also Documentation/cachetlb.txt)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE) || defined(CONFIG_SMP)
|
#if defined(CONFIG_MMU) && \
|
||||||
|
((DCACHE_WAY_SIZE > PAGE_SIZE) || defined(CONFIG_SMP))
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
void flush_cache_all(void);
|
void flush_cache_all(void);
|
||||||
@@ -150,7 +153,7 @@ void local_flush_cache_page(struct vm_area_struct *vma,
|
|||||||
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
#define flush_dcache_mmap_lock(mapping) do { } while (0)
|
||||||
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
#define flush_dcache_mmap_unlock(mapping) do { } while (0)
|
||||||
|
|
||||||
#if (DCACHE_WAY_SIZE > PAGE_SIZE)
|
#if defined(CONFIG_MMU) && (DCACHE_WAY_SIZE > PAGE_SIZE)
|
||||||
|
|
||||||
extern void copy_to_user_page(struct vm_area_struct*, struct page*,
|
extern void copy_to_user_page(struct vm_area_struct*, struct page*,
|
||||||
unsigned long, void*, const void*, unsigned long);
|
unsigned long, void*, const void*, unsigned long);
|
||||||
|
|||||||
@@ -25,7 +25,7 @@
|
|||||||
#define PKMAP_NR(virt) (((virt) - PKMAP_BASE) >> PAGE_SHIFT)
|
#define PKMAP_NR(virt) (((virt) - PKMAP_BASE) >> PAGE_SHIFT)
|
||||||
#define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT))
|
#define PKMAP_ADDR(nr) (PKMAP_BASE + ((nr) << PAGE_SHIFT))
|
||||||
|
|
||||||
#define kmap_prot PAGE_KERNEL
|
#define kmap_prot PAGE_KERNEL_EXEC
|
||||||
|
|
||||||
#if DCACHE_WAY_SIZE > PAGE_SIZE
|
#if DCACHE_WAY_SIZE > PAGE_SIZE
|
||||||
#define get_pkmap_color get_pkmap_color
|
#define get_pkmap_color get_pkmap_color
|
||||||
|
|||||||
@@ -26,8 +26,16 @@
|
|||||||
#include <asm/pgtable.h>
|
#include <asm/pgtable.h>
|
||||||
#include <asm/vectors.h>
|
#include <asm/vectors.h>
|
||||||
|
|
||||||
|
#if XCHAL_HAVE_PTP_MMU
|
||||||
#define CA_BYPASS (_PAGE_CA_BYPASS | _PAGE_HW_WRITE | _PAGE_HW_EXEC)
|
#define CA_BYPASS (_PAGE_CA_BYPASS | _PAGE_HW_WRITE | _PAGE_HW_EXEC)
|
||||||
#define CA_WRITEBACK (_PAGE_CA_WB | _PAGE_HW_WRITE | _PAGE_HW_EXEC)
|
#define CA_WRITEBACK (_PAGE_CA_WB | _PAGE_HW_WRITE | _PAGE_HW_EXEC)
|
||||||
|
#else
|
||||||
|
#define CA_WRITEBACK (0x4)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef XCHAL_SPANNING_WAY
|
||||||
|
#define XCHAL_SPANNING_WAY 0
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __ASSEMBLY__
|
#ifdef __ASSEMBLY__
|
||||||
|
|
||||||
@@ -75,7 +83,7 @@
|
|||||||
|
|
||||||
/* Step 1: invalidate mapping at 0x40000000..0x5FFFFFFF. */
|
/* Step 1: invalidate mapping at 0x40000000..0x5FFFFFFF. */
|
||||||
|
|
||||||
movi a2, 0x40000006
|
movi a2, 0x40000000 | XCHAL_SPANNING_WAY
|
||||||
idtlb a2
|
idtlb a2
|
||||||
iitlb a2
|
iitlb a2
|
||||||
isync
|
isync
|
||||||
@@ -141,9 +149,6 @@
|
|||||||
jx a4
|
jx a4
|
||||||
|
|
||||||
1:
|
1:
|
||||||
movi a2, VECBASE_RESET_VADDR
|
|
||||||
wsr a2, vecbase
|
|
||||||
|
|
||||||
/* Step 5: remove temporary mapping. */
|
/* Step 5: remove temporary mapping. */
|
||||||
idtlb a7
|
idtlb a7
|
||||||
iitlb a7
|
iitlb a7
|
||||||
@@ -156,6 +161,33 @@
|
|||||||
#endif /* defined(CONFIG_MMU) && XCHAL_HAVE_PTP_MMU &&
|
#endif /* defined(CONFIG_MMU) && XCHAL_HAVE_PTP_MMU &&
|
||||||
XCHAL_HAVE_SPANNING_WAY */
|
XCHAL_HAVE_SPANNING_WAY */
|
||||||
|
|
||||||
|
#if !defined(CONFIG_MMU) && XCHAL_HAVE_TLBS
|
||||||
|
/* Enable data and instruction cache in the DEFAULT_MEMORY region
|
||||||
|
* if the processor has DTLB and ITLB.
|
||||||
|
*/
|
||||||
|
|
||||||
|
movi a5, PLATFORM_DEFAULT_MEM_START | XCHAL_SPANNING_WAY
|
||||||
|
movi a6, ~_PAGE_ATTRIB_MASK
|
||||||
|
movi a7, CA_WRITEBACK
|
||||||
|
movi a8, 0x20000000
|
||||||
|
movi a9, PLATFORM_DEFAULT_MEM_SIZE
|
||||||
|
j 2f
|
||||||
|
1:
|
||||||
|
sub a9, a9, a8
|
||||||
|
2:
|
||||||
|
rdtlb1 a3, a5
|
||||||
|
ritlb1 a4, a5
|
||||||
|
and a3, a3, a6
|
||||||
|
and a4, a4, a6
|
||||||
|
or a3, a3, a7
|
||||||
|
or a4, a4, a7
|
||||||
|
wdtlb a3, a5
|
||||||
|
witlb a4, a5
|
||||||
|
add a5, a5, a8
|
||||||
|
bltu a8, a9, 1b
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#endif /*__ASSEMBLY__*/
|
#endif /*__ASSEMBLY__*/
|
||||||
|
|||||||
@@ -50,11 +50,7 @@ DECLARE_PER_CPU(unsigned long, asid_cache);
|
|||||||
#define ASID_MASK ((1 << XCHAL_MMU_ASID_BITS) - 1)
|
#define ASID_MASK ((1 << XCHAL_MMU_ASID_BITS) - 1)
|
||||||
#define ASID_INSERT(x) (0x03020001 | (((x) & ASID_MASK) << 8))
|
#define ASID_INSERT(x) (0x03020001 | (((x) & ASID_MASK) << 8))
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
|
||||||
void init_mmu(void);
|
void init_mmu(void);
|
||||||
#else
|
|
||||||
static inline void init_mmu(void) { }
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static inline void set_rasid_register (unsigned long val)
|
static inline void set_rasid_register (unsigned long val)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
static inline void init_mmu(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
static inline void enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,10 +20,10 @@
|
|||||||
* Fixed TLB translations in the processor.
|
* Fixed TLB translations in the processor.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define XCHAL_KSEG_CACHED_VADDR 0xd0000000
|
#define XCHAL_KSEG_CACHED_VADDR __XTENSA_UL_CONST(0xd0000000)
|
||||||
#define XCHAL_KSEG_BYPASS_VADDR 0xd8000000
|
#define XCHAL_KSEG_BYPASS_VADDR __XTENSA_UL_CONST(0xd8000000)
|
||||||
#define XCHAL_KSEG_PADDR 0x00000000
|
#define XCHAL_KSEG_PADDR __XTENSA_UL_CONST(0x00000000)
|
||||||
#define XCHAL_KSEG_SIZE 0x08000000
|
#define XCHAL_KSEG_SIZE __XTENSA_UL_CONST(0x08000000)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* PAGE_SHIFT determines the page size
|
* PAGE_SHIFT determines the page size
|
||||||
@@ -37,7 +37,7 @@
|
|||||||
#define PAGE_OFFSET XCHAL_KSEG_CACHED_VADDR
|
#define PAGE_OFFSET XCHAL_KSEG_CACHED_VADDR
|
||||||
#define MAX_MEM_PFN XCHAL_KSEG_SIZE
|
#define MAX_MEM_PFN XCHAL_KSEG_SIZE
|
||||||
#else
|
#else
|
||||||
#define PAGE_OFFSET 0
|
#define PAGE_OFFSET __XTENSA_UL_CONST(0)
|
||||||
#define MAX_MEM_PFN (PLATFORM_DEFAULT_MEM_START + PLATFORM_DEFAULT_MEM_SIZE)
|
#define MAX_MEM_PFN (PLATFORM_DEFAULT_MEM_START + PLATFORM_DEFAULT_MEM_SIZE)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -145,7 +145,7 @@ extern void copy_page(void *to, void *from);
|
|||||||
* some extra work
|
* some extra work
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#if DCACHE_WAY_SIZE > PAGE_SIZE
|
#if defined(CONFIG_MMU) && DCACHE_WAY_SIZE > PAGE_SIZE
|
||||||
extern void clear_page_alias(void *vaddr, unsigned long paddr);
|
extern void clear_page_alias(void *vaddr, unsigned long paddr);
|
||||||
extern void copy_page_alias(void *to, void *from,
|
extern void copy_page_alias(void *to, void *from,
|
||||||
unsigned long to_paddr, unsigned long from_paddr);
|
unsigned long to_paddr, unsigned long from_paddr);
|
||||||
|
|||||||
@@ -178,6 +178,7 @@
|
|||||||
|
|
||||||
#else /* no mmu */
|
#else /* no mmu */
|
||||||
|
|
||||||
|
# define _PAGE_CHG_MASK (PAGE_MASK | _PAGE_ACCESSED | _PAGE_DIRTY)
|
||||||
# define PAGE_NONE __pgprot(0)
|
# define PAGE_NONE __pgprot(0)
|
||||||
# define PAGE_SHARED __pgprot(0)
|
# define PAGE_SHARED __pgprot(0)
|
||||||
# define PAGE_COPY __pgprot(0)
|
# define PAGE_COPY __pgprot(0)
|
||||||
|
|||||||
@@ -320,7 +320,7 @@ __asm__ __volatile__( \
|
|||||||
({ \
|
({ \
|
||||||
long __gu_err, __gu_val; \
|
long __gu_err, __gu_val; \
|
||||||
__get_user_size(__gu_val,(ptr),(size),__gu_err); \
|
__get_user_size(__gu_val,(ptr),(size),__gu_err); \
|
||||||
(x) = (__typeof__(*(ptr)))__gu_val; \
|
(x) = (__force __typeof__(*(ptr)))__gu_val; \
|
||||||
__gu_err; \
|
__gu_err; \
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -330,7 +330,7 @@ __asm__ __volatile__( \
|
|||||||
const __typeof__(*(ptr)) *__gu_addr = (ptr); \
|
const __typeof__(*(ptr)) *__gu_addr = (ptr); \
|
||||||
if (access_ok(VERIFY_READ,__gu_addr,size)) \
|
if (access_ok(VERIFY_READ,__gu_addr,size)) \
|
||||||
__get_user_size(__gu_val,__gu_addr,(size),__gu_err); \
|
__get_user_size(__gu_val,__gu_addr,(size),__gu_err); \
|
||||||
(x) = (__typeof__(*(ptr)))__gu_val; \
|
(x) = (__force __typeof__(*(ptr)))__gu_val; \
|
||||||
__gu_err; \
|
__gu_err; \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,7 @@
|
|||||||
#define _XTENSA_VECTORS_H
|
#define _XTENSA_VECTORS_H
|
||||||
|
|
||||||
#include <variant/core.h>
|
#include <variant/core.h>
|
||||||
|
#include <platform/hardware.h>
|
||||||
|
|
||||||
#define XCHAL_KIO_CACHED_VADDR 0xe0000000
|
#define XCHAL_KIO_CACHED_VADDR 0xe0000000
|
||||||
#define XCHAL_KIO_BYPASS_VADDR 0xf0000000
|
#define XCHAL_KIO_BYPASS_VADDR 0xf0000000
|
||||||
@@ -51,13 +52,13 @@
|
|||||||
/* MMU Not being used - Virtual == Physical */
|
/* MMU Not being used - Virtual == Physical */
|
||||||
|
|
||||||
/* VECBASE */
|
/* VECBASE */
|
||||||
#define VIRTUAL_MEMORY_ADDRESS 0x00002000
|
#define VIRTUAL_MEMORY_ADDRESS (PLATFORM_DEFAULT_MEM_START + 0x2000)
|
||||||
|
|
||||||
/* Location of the start of the kernel text, _start */
|
/* Location of the start of the kernel text, _start */
|
||||||
#define KERNELOFFSET 0x00003000
|
#define KERNELOFFSET (PLATFORM_DEFAULT_MEM_START + 0x3000)
|
||||||
|
|
||||||
/* Loaded just above possibly live vectors */
|
/* Loaded just above possibly live vectors */
|
||||||
#define LOAD_MEMORY_ADDRESS 0x00003000
|
#define LOAD_MEMORY_ADDRESS (PLATFORM_DEFAULT_MEM_START + 0x3000)
|
||||||
|
|
||||||
#endif /* CONFIG_MMU */
|
#endif /* CONFIG_MMU */
|
||||||
|
|
||||||
|
|||||||
@@ -55,6 +55,12 @@
|
|||||||
#define MAP_NONBLOCK 0x20000 /* do not block on IO */
|
#define MAP_NONBLOCK 0x20000 /* do not block on IO */
|
||||||
#define MAP_STACK 0x40000 /* give out an address that is best suited for process/thread stacks */
|
#define MAP_STACK 0x40000 /* give out an address that is best suited for process/thread stacks */
|
||||||
#define MAP_HUGETLB 0x80000 /* create a huge page mapping */
|
#define MAP_HUGETLB 0x80000 /* create a huge page mapping */
|
||||||
|
#ifdef CONFIG_MMAP_ALLOW_UNINITIALIZED
|
||||||
|
# define MAP_UNINITIALIZED 0x4000000 /* For anonymous mmap, memory could be
|
||||||
|
* uninitialized */
|
||||||
|
#else
|
||||||
|
# define MAP_UNINITIALIZED 0x0 /* Don't support this flag */
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Flags for msync
|
* Flags for msync
|
||||||
|
|||||||
@@ -112,6 +112,11 @@ ENTRY(_startup)
|
|||||||
|
|
||||||
movi a0, 0
|
movi a0, 0
|
||||||
|
|
||||||
|
#if XCHAL_HAVE_VECBASE
|
||||||
|
movi a2, VECBASE_RESET_VADDR
|
||||||
|
wsr a2, vecbase
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Clear debugging registers. */
|
/* Clear debugging registers. */
|
||||||
|
|
||||||
#if XCHAL_HAVE_DEBUG
|
#if XCHAL_HAVE_DEBUG
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ asmlinkage long xtensa_fadvise64_64(int fd, int advice,
|
|||||||
return sys_fadvise64_64(fd, offset, len, advice);
|
return sys_fadvise64_64(fd, offset, len, advice);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_MMU
|
||||||
unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
|
unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
|
||||||
unsigned long len, unsigned long pgoff, unsigned long flags)
|
unsigned long len, unsigned long pgoff, unsigned long flags)
|
||||||
{
|
{
|
||||||
@@ -93,3 +94,4 @@ unsigned long arch_get_unmapped_area(struct file *filp, unsigned long addr,
|
|||||||
addr = COLOUR_ALIGN(addr, pgoff);
|
addr = COLOUR_ALIGN(addr, pgoff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user