Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  1) =================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) Kernel Memory Layout on ARM Linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) =================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) 		Russell King <rmk@arm.linux.org.uk>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) 		     November 17, 2005 (2.6.15)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) This document describes the virtual memory layout which the Linux
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) kernel uses for ARM processors.  It indicates which regions are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) free for platforms to use, and which are used by generic code.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) The ARM CPU is capable of addressing a maximum of 4GB virtual memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) space, and this must be shared between user space processes, the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) kernel, and hardware devices.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) As the ARM architecture matures, it becomes necessary to reserve
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) certain regions of VM space for use for new facilities; therefore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) this document may reserve more VM space over time.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) =============== =============== ===============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) Start		End		Use
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) =============== =============== ===============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) ffff8000	ffffffff	copy_user_page / clear_user_page use.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 				For SA11xx and Xscale, this is used to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 				setup a minicache mapping.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) ffff4000	ffffffff	cache aliasing on ARMv6 and later CPUs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) ffff1000	ffff7fff	Reserved.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) 				Platforms must not use this address range.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) ffff0000	ffff0fff	CPU vector page.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 				The CPU vectors are mapped here if the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) 				CPU supports vector relocation (control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 				register V bit.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) fffe0000	fffeffff	XScale cache flush area.  This is used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 				in proc-xscale.S to flush the whole data
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 				cache. (XScale does not have TCM.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) fffe8000	fffeffff	DTCM mapping area for platforms with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) 				DTCM mounted inside the CPU.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) fffe0000	fffe7fff	ITCM mapping area for platforms with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 				ITCM mounted inside the CPU.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) ffc80000	ffefffff	Fixmap mapping region.  Addresses provided
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 				by fix_to_virt() will be located here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) ffc00000	ffc7ffff	Guard region
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) ff800000	ffbfffff	Permanent, fixed read-only mapping of the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 				firmware provided DT blob
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) fee00000	feffffff	Mapping of PCI I/O space. This is a static
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 				mapping within the vmalloc space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) VMALLOC_START	VMALLOC_END-1	vmalloc() / ioremap() space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) 				Memory returned by vmalloc/ioremap will
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 				be dynamically placed in this region.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) 				Machine specific static mappings are also
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 				located here through iotable_init().
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 				VMALLOC_START is based upon the value
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) 				of the high_memory variable, and VMALLOC_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) 				is equal to 0xff800000.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) PAGE_OFFSET	high_memory-1	Kernel direct-mapped RAM region.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 				This maps the platforms RAM, and typically
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) 				maps all platform RAM in a 1:1 relationship.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) PKMAP_BASE	PAGE_OFFSET-1	Permanent kernel mappings
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 				One way of mapping HIGHMEM pages into kernel
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) 				space.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) MODULES_VADDR	MODULES_END-1	Kernel module space
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) 				Kernel modules inserted via insmod are
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 				placed here using dynamic mappings.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) 00001000	TASK_SIZE-1	User space mappings
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) 				Per-thread mappings are placed here via
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 				the mmap() system call.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) 00000000	00000fff	CPU vector page / null pointer trap
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) 				CPUs which do not support vector remapping
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) 				place their vector page here.  NULL pointer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) 				dereferences by both the kernel and user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) 				space are also caught via this mapping.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) =============== =============== ===============================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) Please note that mappings which collide with the above areas may result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) in a non-bootable kernel, or may cause the kernel to (eventually) panic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) at run time.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) Since future CPUs may impact the kernel mapping layout, user programs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) must not access any memory which is not mapped inside their 0x0001000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) to TASK_SIZE address range.  If they wish to access these areas, they
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) must set up their own mappings using open() and mmap().