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) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Copyright 2003 PathScale Inc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * Derived from include/asm-i386/pgtable.h
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) #ifndef __UM_PGTABLE_3LEVEL_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #define __UM_PGTABLE_3LEVEL_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #include <asm-generic/pgtable-nopud.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) /* PGDIR_SHIFT determines what a third-level page table entry can map */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) #ifdef CONFIG_64BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) #define PGDIR_SHIFT	30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) #define PGDIR_SHIFT	31
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) #define PGDIR_SIZE	(1UL << PGDIR_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) #define PGDIR_MASK	(~(PGDIR_SIZE-1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) /* PMD_SHIFT determines the size of the area a second-level page table can
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23)  * map
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define PMD_SHIFT	21
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) #define PMD_SIZE	(1UL << PMD_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define PMD_MASK	(~(PMD_SIZE-1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31)  * entries per page directory level
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) #define PTRS_PER_PTE 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) #ifdef CONFIG_64BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) #define PTRS_PER_PMD 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define PTRS_PER_PGD 512
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) #define PTRS_PER_PMD 1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) #define PTRS_PER_PGD 1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) #define USER_PTRS_PER_PGD ((TASK_SIZE + (PGDIR_SIZE - 1)) / PGDIR_SIZE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) #define FIRST_USER_ADDRESS	0UL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) #define pte_ERROR(e) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47)         printk("%s:%d: bad pte %p(%016lx).\n", __FILE__, __LINE__, &(e), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	       pte_val(e))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) #define pmd_ERROR(e) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50)         printk("%s:%d: bad pmd %p(%016lx).\n", __FILE__, __LINE__, &(e), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	       pmd_val(e))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) #define pgd_ERROR(e) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53)         printk("%s:%d: bad pgd %p(%016lx).\n", __FILE__, __LINE__, &(e), \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	       pgd_val(e))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) #define pud_none(x)	(!(pud_val(x) & ~_PAGE_NEWPAGE))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) #define	pud_bad(x)	((pud_val(x) & (~PAGE_MASK & ~_PAGE_USER)) != _KERNPG_TABLE)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) #define pud_present(x)	(pud_val(x) & _PAGE_PRESENT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) #define pud_populate(mm, pud, pmd) \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 	set_pud(pud, __pud(_PAGE_TABLE + __pa(pmd)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) #ifdef CONFIG_64BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) #define set_pud(pudptr, pudval) set_64bit((u64 *) (pudptr), pud_val(pudval))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) #define set_pud(pudptr, pudval) (*(pudptr) = (pudval))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) static inline int pgd_newpage(pgd_t pgd)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	return(pgd_val(pgd) & _PAGE_NEWPAGE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) static inline void pgd_mkuptodate(pgd_t pgd) { pgd_val(pgd) &= ~_PAGE_NEWPAGE; }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) #ifdef CONFIG_64BIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) #define set_pmd(pmdptr, pmdval) set_64bit((u64 *) (pmdptr), pmd_val(pmdval))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) #else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) #define set_pmd(pmdptr, pmdval) (*(pmdptr) = (pmdval))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) static inline void pud_clear (pud_t *pud)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	set_pud(pud, __pud(_PAGE_NEWPAGE));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) #define pud_page(pud) phys_to_page(pud_val(pud) & PAGE_MASK)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define pud_page_vaddr(pud) ((unsigned long) __va(pud_val(pud) & PAGE_MASK))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) static inline unsigned long pte_pfn(pte_t pte)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 	return phys_to_pfn(pte_val(pte));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) static inline pte_t pfn_pte(unsigned long page_nr, pgprot_t pgprot)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	pte_t pte;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	phys_t phys = pfn_to_phys(page_nr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	pte_set_val(pte, phys, pgprot);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	return pte;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) static inline pmd_t pfn_pmd(unsigned long page_nr, pgprot_t pgprot)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	return __pmd((page_nr << PAGE_SHIFT) | pgprot_val(pgprot));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109)