Skip to content

Commit d671021

Browse files
committed
Add a PMBM_F_RO flag to allow machine_bootmap[] to create read-only
mappings. mac68k uses this to map the Mac ROMs.
1 parent 38b8f5f commit d671021

2 files changed

Lines changed: 20 additions & 7 deletions

File tree

sys/arch/m68k/include/pmap_68k.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $NetBSD: pmap_68k.h,v 1.9 2025/11/30 23:42:56 thorpej Exp $ */
1+
/* $NetBSD: pmap_68k.h,v 1.10 2025/12/02 02:53:08 thorpej Exp $ */
22

33
/*-
44
* Copyright (c) 2025 The NetBSD Foundation, Inc.
@@ -211,6 +211,7 @@ struct pmap_bootmap {
211211
#define PMBM_F_FIXEDVA __BIT(1)
212212
#define PMBM_F_KEEPOUT __BIT(2)
213213
#define PMBM_F_CI __BIT(3) /* cache-inhibited mapping */
214+
#define PMBM_F_RO __BIT(4) /* read-only mapping */
214215

215216
/*
216217
* Abstract definitions for PTE bits / fields. C code will compile-time-

sys/arch/m68k/m68k/pmap_68k.c

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* $NetBSD: pmap_68k.c,v 1.44 2025/12/01 17:47:13 thorpej Exp $ */
1+
/* $NetBSD: pmap_68k.c,v 1.45 2025/12/02 02:53:08 thorpej Exp $ */
22

33
/*-
44
* Copyright (c) 2025 The NetBSD Foundation, Inc.
@@ -218,7 +218,7 @@
218218
#include "opt_m68k_arch.h"
219219

220220
#include <sys/cdefs.h>
221-
__KERNEL_RCSID(0, "$NetBSD: pmap_68k.c,v 1.44 2025/12/01 17:47:13 thorpej Exp $");
221+
__KERNEL_RCSID(0, "$NetBSD: pmap_68k.c,v 1.45 2025/12/02 02:53:08 thorpej Exp $");
222222

223223
#include <sys/param.h>
224224
#include <sys/systm.h>
@@ -4023,8 +4023,6 @@ pmap_bootstrap1(paddr_t nextpa, paddr_t reloff)
40234023
*/
40244024
#ifndef PMAP_BOOTSTRAP_TEXT_PROTO_PTE
40254025
#define PMAP_BOOTSTRAP_TEXT_PROTO_PTE proto_ro_pte
4026-
#else
4027-
__USE(proto_ro_pte);
40284026
#endif
40294027
pa = PMAP_BOOTSTRAP_VA_TO_PA(m68k_trunc_page(&kernel_text));
40304028
pte = VA_PTE_BASE(&kernel_text, var);
@@ -4085,6 +4083,8 @@ pmap_bootstrap1(paddr_t nextpa, paddr_t reloff)
40854083
pmbm = (const struct pmap_bootmap *)
40864084
PMAP_BOOTSTRAP_RELOC_GLOB(machine_bootmap);
40874085
for (; pmbm->pmbm_vaddr != (vaddr_t)-1; pmbm++) {
4086+
pt_entry_t proto;
4087+
40884088
if (pmbm->pmbm_size == 0 ||
40894089
(pmbm->pmbm_flags & (PMBM_F_VAONLY | PMBM_F_KEEPOUT))) {
40904090
continue;
@@ -4103,8 +4103,20 @@ pmap_bootstrap1(paddr_t nextpa, paddr_t reloff)
41034103
}
41044104
pa = pmbm->pmbm_paddr;
41054105
pte = VA_PTE_BASE(va, var);
4106-
pt_entry_t proto = (pmbm->pmbm_flags & PMBM_F_CI) ?
4107-
proto_rw_ci_pte : proto_rw_pte;
4106+
switch (pmbm->pmbm_flags & (PMBM_F_CI|PMBM_F_RO)) {
4107+
case PMBM_F_CI|PMBM_F_RO:
4108+
proto = proto_rw_ci_pte | PTE_WP;
4109+
break;
4110+
case PMBM_F_CI:
4111+
proto = proto_rw_ci_pte;
4112+
break;
4113+
case PMBM_F_RO:
4114+
proto = proto_ro_pte;
4115+
break;
4116+
default:
4117+
proto = proto_rw_pte;
4118+
break;
4119+
}
41084120
for (vsize_t size = m68k_round_page(pmbm->pmbm_size);
41094121
size != 0;
41104122
va += PAGE_SIZE, pa += PAGE_SIZE, size -= PAGE_SIZE) {

0 commit comments

Comments
 (0)