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) #ifndef _PGTABLE_NOPUD_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3) #define _PGTABLE_NOPUD_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  5) #ifndef __ASSEMBLY__
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  6) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  7) #include <asm-generic/pgtable-nop4d.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) #define __PAGETABLE_PUD_FOLDED 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12)  * Having the pud type consist of a p4d gets the size right, and allows
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)  * us to conceptually access the p4d entry that this pud is folded into
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14)  * without casting.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) typedef struct { p4d_t p4d; } pud_t;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) #define PUD_SHIFT	P4D_SHIFT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) #define PTRS_PER_PUD	1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) #define PUD_SIZE  	(1UL << PUD_SHIFT)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) #define PUD_MASK  	(~(PUD_SIZE-1))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24)  * The "p4d_xxx()" functions here are trivial for a folded two-level
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)  * setup: the pud is never bad, and a pud always exists (as it's folded
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26)  * into the p4d entry)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) static inline int p4d_none(p4d_t p4d)		{ return 0; }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) static inline int p4d_bad(p4d_t p4d)		{ return 0; }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) static inline int p4d_present(p4d_t p4d)	{ return 1; }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) static inline void p4d_clear(p4d_t *p4d)	{ }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) #define pud_ERROR(pud)				(p4d_ERROR((pud).p4d))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) #define p4d_populate(mm, p4d, pud)		do { } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) #define p4d_populate_safe(mm, p4d, pud)		do { } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37)  * (puds are folded into p4ds so this doesn't get actually called,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38)  * but the define is needed for a generic inline function.)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) #define set_p4d(p4dptr, p4dval)	set_pud((pud_t *)(p4dptr), (pud_t) { p4dval })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	return (pud_t *)p4d;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) #define pud_offset pud_offset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #define pud_val(x)				(p4d_val((x).p4d))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #define __pud(x)				((pud_t) { __p4d(x) })
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) #define p4d_page(p4d)				(pud_page((pud_t){ p4d }))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) #define p4d_page_vaddr(p4d)			(pud_page_vaddr((pud_t){ p4d }))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)  * allocating and freeing a pud is trivial: the 1-entry pud is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)  * inside the p4d, so has no extra memory associated with it.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) #define pud_alloc_one(mm, address)		NULL
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) #define pud_free(mm, x)				do { } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) #define pud_free_tlb(tlb, x, a)		        do { } while (0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) #undef  pud_addr_end
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) #define pud_addr_end(addr, end)			(end)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) #endif /* __ASSEMBLY__ */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) #endif /* _PGTABLE_NOPUD_H */