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-only */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  2) /**************************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  3)  * Copyright (c) 2007-2011, Intel Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  4)  * All Rights Reserved.
^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) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  8) #ifndef __MMU_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  9) #define __MMU_H
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) struct psb_mmu_driver {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) 	/* protects driver- and pd structures. Always take in read mode
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) 	 * before taking the page table spinlock.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) 	struct rw_semaphore sem;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) 	/* protects page tables, directory tables and pt tables.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) 	 * and pt structures.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) 	spinlock_t lock;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) 	atomic_t needs_tlbflush;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) 	atomic_t *msvdx_mmu_invaldc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) 	struct psb_mmu_pd *default_pd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) 	uint32_t bif_ctrl;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) 	int has_clflush;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) 	int clflush_add;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) 	unsigned long clflush_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) 	struct drm_device *dev;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) struct psb_mmu_pd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) struct psb_mmu_pt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) 	struct psb_mmu_pd *pd;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) 	uint32_t index;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) 	uint32_t count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) 	struct page *p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) 	uint32_t *v;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) struct psb_mmu_pd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) 	struct psb_mmu_driver *driver;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) 	int hw_context;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) 	struct psb_mmu_pt **tables;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) 	struct page *p;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) 	struct page *dummy_pt;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) 	struct page *dummy_page;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) 	uint32_t pd_mask;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) 	uint32_t invalid_pde;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 	uint32_t invalid_pte;
^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) extern struct psb_mmu_driver *psb_mmu_driver_init(struct drm_device *dev,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) 						  int trap_pagefaults,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) 						  int invalid_type,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) 						  atomic_t *msvdx_mmu_invaldc);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) extern void psb_mmu_driver_takedown(struct psb_mmu_driver *driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) extern struct psb_mmu_pd *psb_mmu_get_default_pd(struct psb_mmu_driver
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) 						 *driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) extern struct psb_mmu_pd *psb_mmu_alloc_pd(struct psb_mmu_driver *driver,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 					   int trap_pagefaults,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) 					   int invalid_type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) extern void psb_mmu_free_pagedir(struct psb_mmu_pd *pd);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) extern void psb_mmu_flush(struct psb_mmu_driver *driver);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) extern void psb_mmu_remove_pfn_sequence(struct psb_mmu_pd *pd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) 					unsigned long address,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) 					uint32_t num_pages);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) extern int psb_mmu_insert_pfn_sequence(struct psb_mmu_pd *pd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) 				       uint32_t start_pfn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) 				       unsigned long address,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) 				       uint32_t num_pages, int type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) extern int psb_mmu_virtual_to_pfn(struct psb_mmu_pd *pd, uint32_t virtual,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) 				  unsigned long *pfn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) extern void psb_mmu_set_pd_context(struct psb_mmu_pd *pd, int hw_context);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) extern int psb_mmu_insert_pages(struct psb_mmu_pd *pd, struct page **pages,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) 				unsigned long address, uint32_t num_pages,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) 				uint32_t desired_tile_stride,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) 				uint32_t hw_tile_stride, int type);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) extern void psb_mmu_remove_pages(struct psb_mmu_pd *pd,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) 				 unsigned long address, uint32_t num_pages,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) 				 uint32_t desired_tile_stride,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) 				 uint32_t hw_tile_stride);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) #endif