xref: /netbsd-src/sys/arch/m68k/include/pmap_coldfire.h (revision 15a670f8d801491abf6c2f8ac7c1c1c4779d1bf4)
1*15a670f8Sskrll /*	$NetBSD: pmap_coldfire.h,v 1.6 2023/09/28 06:34:22 skrll Exp $	*/
2cc2211c8Smatt /*-
3cc2211c8Smatt  * Copyright (c) 2013 The NetBSD Foundation, Inc.
4cc2211c8Smatt  * All rights reserved.
5cc2211c8Smatt  *
6cc2211c8Smatt  * This code is derived from software contributed to The NetBSD Foundation
7cc2211c8Smatt  * by Matt Thomas of 3am Software Foundry.
8cc2211c8Smatt  *
9cc2211c8Smatt  * Redistribution and use in source and binary forms, with or without
10cc2211c8Smatt  * modification, are permitted provided that the following conditions
11cc2211c8Smatt  * are met:
12cc2211c8Smatt  * 1. Redistributions of source code must retain the above copyright
13cc2211c8Smatt  *    notice, this list of conditions and the following disclaimer.
14cc2211c8Smatt  * 2. Redistributions in binary form must reproduce the above copyright
15cc2211c8Smatt  *    notice, this list of conditions and the following disclaimer in the
16cc2211c8Smatt  *    documentation and/or other materials provided with the distribution.
17cc2211c8Smatt  *
18cc2211c8Smatt  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19cc2211c8Smatt  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20cc2211c8Smatt  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21cc2211c8Smatt  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22cc2211c8Smatt  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23cc2211c8Smatt  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24cc2211c8Smatt  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25cc2211c8Smatt  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26cc2211c8Smatt  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27cc2211c8Smatt  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28cc2211c8Smatt  * POSSIBILITY OF SUCH DAMAGE.
29cc2211c8Smatt  */
30cc2211c8Smatt 
31cc2211c8Smatt #ifndef _M68K_PMAP_COLDFIRE_H_
32cc2211c8Smatt #define M68K_PMAP_COLDFIRE_H_
33cc2211c8Smatt 
34cc2211c8Smatt #ifdef _LOCORE
35cc2211c8Smatt #error use assym.h instead
36cc2211c8Smatt #endif
37cc2211c8Smatt 
38cc2211c8Smatt #if defined(_MODULE)
39cc2211c8Smatt #error this file should not be included by loadable kernel modules
40cc2211c8Smatt #endif
41cc2211c8Smatt 
42cc2211c8Smatt #ifdef _KERNEL_OPT
43cc2211c8Smatt #include "opt_pmap.h"
44cc2211c8Smatt #endif
45cc2211c8Smatt 
46cc2211c8Smatt #include <sys/cpu.h>
47cc2211c8Smatt #include <sys/kcore.h>
48cc2211c8Smatt #include <uvm/uvm_page.h>
49cc2211c8Smatt #ifdef __PMAP_PRIVATE
50cc2211c8Smatt #include <powerpc/booke/cpuvar.h>
51cc2211c8Smatt #include <powerpc/cpuset.h>
52cc2211c8Smatt #endif
53cc2211c8Smatt 
54cc2211c8Smatt #define	PMAP_NEED_PROCWR
55cc2211c8Smatt 
56cc2211c8Smatt #include <uvm/pmap/vmpagemd.h>
57cc2211c8Smatt 
58cc2211c8Smatt #include <m68k/pte_coldfire.h>
59cc2211c8Smatt 
60cc2211c8Smatt #define	NBSEG		(NBPG*NPTEPG)
61cc2211c8Smatt #define	SEGSHIFT	(PGSHIFT + PGSHIFT - 2)
62cc2211c8Smatt #define	SEGOFSET	((1 << SEGSHIFT) - 1)
63cc2211c8Smatt #define	PMAP_SEGTABSIZE	(1 << (32 - SEGSHIFT))
64cc2211c8Smatt #define	NPTEPG		(NBPG >> 2)
65cc2211c8Smatt 
66cc2211c8Smatt #define	KERNEL_PID	0
67cc2211c8Smatt 
68cc2211c8Smatt #define	PMAP_TLB_MAX			1
69cc2211c8Smatt #define	PMAP_TLB_NUM_PIDS		256
70cc2211c8Smatt #define	PMAP_INVALID_SEGTAB_ADDRESS	((pmap_segtab_t *)0xfeeddead)
71cc2211c8Smatt 
72cc2211c8Smatt #define	pmap_phys_address(x)		(x)
73cc2211c8Smatt 
74cc2211c8Smatt void	pmap_procwr(struct proc *, vaddr_t, size_t);
75cc2211c8Smatt #define	PMAP_NEED_PROCWR
76cc2211c8Smatt 
77cc2211c8Smatt #ifdef __PMAP_PRIVATE
78cc2211c8Smatt struct vm_page *
79cc2211c8Smatt 	pmap_md_alloc_poolpage(int flags);
80cc2211c8Smatt vaddr_t	pmap_md_map_poolpage(paddr_t, vsize_t);
81cc2211c8Smatt void	pmap_md_unmap_poolpage(vaddr_t, vsize_t);
82cc2211c8Smatt bool	pmap_md_direct_mapped_vaddr_p(vaddr_t);
83cc2211c8Smatt bool	pmap_md_io_vaddr_p(vaddr_t);
84cc2211c8Smatt paddr_t	pmap_md_direct_mapped_vaddr_to_paddr(vaddr_t);
85cc2211c8Smatt vaddr_t	pmap_md_direct_map_paddr(paddr_t);
86cc2211c8Smatt void	pmap_md_init(void);
87cc2211c8Smatt 
88cc2211c8Smatt bool	pmap_md_tlb_check_entry(void *, vaddr_t, tlb_asid_t, pt_entry_t);
89cc2211c8Smatt 
90cc2211c8Smatt #ifdef PMAP_MINIMALTLB
91cc2211c8Smatt vaddr_t	pmap_kvptefill(vaddr_t, vaddr_t, pt_entry_t);
92cc2211c8Smatt #endif
93cc2211c8Smatt #endif
94cc2211c8Smatt 
9531d27c36Sskrll void	pmap_md_page_syncicache(struct vm_page_md *, const kcpuset_t *);
96cc2211c8Smatt vaddr_t	pmap_bootstrap(vaddr_t, vaddr_t, phys_ram_seg_t *, size_t);
97cc2211c8Smatt bool	pmap_extract(struct pmap *, vaddr_t, paddr_t *);
98cc2211c8Smatt 
99cc2211c8Smatt static inline paddr_t vtophys(vaddr_t);
100cc2211c8Smatt 
101cc2211c8Smatt static inline paddr_t
vtophys(vaddr_t va)102cc2211c8Smatt vtophys(vaddr_t va)
103cc2211c8Smatt {
104cc2211c8Smatt 	paddr_t pa;
105cc2211c8Smatt 
106cc2211c8Smatt 	if (pmap_extract(pmap_kernel(), va, &pa))
107cc2211c8Smatt 		return pa;
108cc2211c8Smatt 	KASSERT(0);
109cc2211c8Smatt 	return (paddr_t) -1;
110cc2211c8Smatt }
111cc2211c8Smatt 
112cc2211c8Smatt #ifdef __PMAP_PRIVATE
113cc2211c8Smatt /*
114cc2211c8Smatt  * Virtual Cache Alias helper routines.  Not a problem for Booke CPUs.
115cc2211c8Smatt  */
116cc2211c8Smatt static inline bool
pmap_md_vca_add(struct vm_page_md * mdpg,vaddr_t va,pt_entry_t * nptep)11731d27c36Sskrll pmap_md_vca_add(struct vm_page_md *mdpg, vaddr_t va, pt_entry_t *nptep)
118cc2211c8Smatt {
119cc2211c8Smatt 	return false;
120cc2211c8Smatt }
121cc2211c8Smatt 
122cc2211c8Smatt static inline void
pmap_md_vca_remove(struct vm_page * pg,vaddr_t va)123cc2211c8Smatt pmap_md_vca_remove(struct vm_page *pg, vaddr_t va)
124cc2211c8Smatt {
125cc2211c8Smatt 
126cc2211c8Smatt }
127cc2211c8Smatt 
128cc2211c8Smatt static inline void
pmap_md_vca_clean(struct vm_page_md * mdpg,vaddr_t va,int op)12931d27c36Sskrll pmap_md_vca_clean(struct vm_page_md *mdpg, vaddr_t va, int op)
130cc2211c8Smatt {
131cc2211c8Smatt }
132cc2211c8Smatt 
133cc2211c8Smatt static inline size_t
pmap_md_tlb_asid_max(void)134cc2211c8Smatt pmap_md_tlb_asid_max(void)
135cc2211c8Smatt {
136cc2211c8Smatt 	return PMAP_TLB_NUM_PIDS - 1;
137cc2211c8Smatt }
138599fa058Sskrll 
139599fa058Sskrll static inline void
pmap_md_xtab_activate(struct pmap * pm,struct lwp * l)140599fa058Sskrll pmap_md_xtab_activate(struct pmap *pm, struct lwp *l)
141599fa058Sskrll {
142599fa058Sskrll 
143599fa058Sskrll 	/* nothing */
144599fa058Sskrll }
145599fa058Sskrll 
146599fa058Sskrll static inline void
pmap_md_xtab_deactivate(struct pmap * pm)147599fa058Sskrll pmap_md_xtab_deactivate(struct pmap *pm)
148599fa058Sskrll {
149599fa058Sskrll 
150599fa058Sskrll 	/* nothing */
151599fa058Sskrll }
152cc2211c8Smatt #endif
153cc2211c8Smatt 
154cc2211c8Smatt #define	POOL_VTOPHYS(va)	((paddr_t)(vaddr_t)(va))
155cc2211c8Smatt #define	POOL_PHYSTOV(pa)	((vaddr_t)(paddr_t)(pa))
156cc2211c8Smatt 
157cc2211c8Smatt #include <uvm/pmap/pmap.h>
158cc2211c8Smatt 
159cc2211c8Smatt #endif /* !_M68K_PMAP_COLDFIRE_H_ */
160