aboutsummaryrefslogtreecommitdiff
path: root/sys/powerpc
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2026-04-23 17:05:53 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2026-04-23 17:05:53 +0000
commitdfb804eb57f1e50f5c84060007e3b1e9c1edf253 (patch)
tree75cebfcb62d887ac238dcbf7fc9ece79203b4409 /sys/powerpc
parentef159bdd54cada6db8b0af6380fa9269d0f26a04 (diff)
Diffstat (limited to 'sys/powerpc')
-rw-r--r--sys/powerpc/aim/mmu_radix.c24
-rw-r--r--sys/powerpc/booke/pmap.c7
-rw-r--r--sys/powerpc/include/mmuvar.h2
-rw-r--r--sys/powerpc/include/pmap.h2
-rw-r--r--sys/powerpc/powerpc/pmap_dispatch.c2
5 files changed, 19 insertions, 18 deletions
diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c
index eaf9b39dde8f..214878c08669 100644
--- a/sys/powerpc/aim/mmu_radix.c
+++ b/sys/powerpc/aim/mmu_radix.c
@@ -466,7 +466,7 @@ void mmu_radix_sync_icache(pmap_t pm, vm_offset_t va, vm_size_t sz);
void mmu_radix_unwire(pmap_t, vm_offset_t, vm_offset_t);
void mmu_radix_zero_page(vm_page_t);
void mmu_radix_zero_page_area(vm_page_t, int, int);
-int mmu_radix_change_attr(vm_offset_t, vm_size_t, vm_memattr_t);
+int mmu_radix_change_attr(void *, vm_size_t, vm_memattr_t);
void mmu_radix_page_array_startup(long pages);
#include "mmu_oea64.h"
@@ -606,7 +606,7 @@ static bool pmap_unwire_ptp(pmap_t pmap, vm_offset_t va, vm_page_t m, struct spg
static void pmap_invalidate_page(pmap_t pmap, vm_offset_t start);
static void pmap_invalidate_all(pmap_t pmap);
-static int pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush);
+static int pmap_change_attr_locked(void *va, vm_size_t size, int mode, bool flush);
static void pmap_fill_ptp(pt_entry_t *firstpte, pt_entry_t newpte);
/*
@@ -5948,7 +5948,7 @@ mmu_radix_page_set_memattr(vm_page_t m, vm_memattr_t ma)
* required for data coherence.
*/
if ((m->flags & PG_FICTITIOUS) == 0 &&
- mmu_radix_change_attr(PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)),
+ mmu_radix_change_attr((void *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(m)),
PAGE_SIZE, m->md.mdpg_cache_attrs))
panic("memory attribute change on the direct map failed");
}
@@ -6202,12 +6202,11 @@ pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva)
}
int
-mmu_radix_change_attr(vm_offset_t va, vm_size_t size,
- vm_memattr_t mode)
+mmu_radix_change_attr(void *va, vm_size_t size, vm_memattr_t mode)
{
int error;
- CTR4(KTR_PMAP, "%s(%#x, %#zx, %d)", __func__, va, size, mode);
+ CTR4(KTR_PMAP, "%s(%p, %#zx, %d)", __func__, va, size, mode);
PMAP_LOCK(kernel_pmap);
error = pmap_change_attr_locked(va, size, mode, true);
PMAP_UNLOCK(kernel_pmap);
@@ -6215,9 +6214,9 @@ mmu_radix_change_attr(vm_offset_t va, vm_size_t size,
}
static int
-pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
+pmap_change_attr_locked(void *addr, vm_size_t size, int mode, bool flush)
{
- vm_offset_t base, offset, tmpva;
+ vm_offset_t base, offset, tmpva, va;
vm_paddr_t pa_start, pa_end, pa_end1;
pml2_entry_t *l2e;
pml3_entry_t *l3e;
@@ -6226,6 +6225,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
bool changed;
PMAP_LOCK_ASSERT(kernel_pmap, MA_OWNED);
+ va = (vm_offset_t)addr;
base = trunc_page(va);
offset = va & PAGE_MASK;
size = round_page(offset + size);
@@ -6332,7 +6332,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
else {
/* Run ended, update direct map. */
error = pmap_change_attr_locked(
- PHYS_TO_DMAP(pa_start),
+ (void *)PHYS_TO_DMAP(pa_start),
pa_end - pa_start, mode, flush);
if (error != 0)
break;
@@ -6362,7 +6362,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
else {
/* Run ended, update direct map. */
error = pmap_change_attr_locked(
- PHYS_TO_DMAP(pa_start),
+ (void *)PHYS_TO_DMAP(pa_start),
pa_end - pa_start, mode, flush);
if (error != 0)
break;
@@ -6390,7 +6390,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
else {
/* Run ended, update direct map. */
error = pmap_change_attr_locked(
- PHYS_TO_DMAP(pa_start),
+ (void *)PHYS_TO_DMAP(pa_start),
pa_end - pa_start, mode, flush);
if (error != 0)
break;
@@ -6405,7 +6405,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode, bool flush)
if (error == 0 && pa_start != pa_end && pa_start < dmaplimit) {
pa_end1 = MIN(pa_end, dmaplimit);
if (pa_start != pa_end1)
- error = pmap_change_attr_locked(PHYS_TO_DMAP(pa_start),
+ error = pmap_change_attr_locked((void *)PHYS_TO_DMAP(pa_start),
pa_end1 - pa_start, mode, flush);
}
diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c
index fcc98df25b38..e7942a53ea63 100644
--- a/sys/powerpc/booke/pmap.c
+++ b/sys/powerpc/booke/pmap.c
@@ -349,7 +349,7 @@ static void mmu_booke_dumpsys_unmap(vm_paddr_t pa, size_t,
static void mmu_booke_scan_init(void);
static void *mmu_booke_quick_enter_page(vm_page_t m);
static void mmu_booke_quick_remove_page(void *addr);
-static int mmu_booke_change_attr(vm_offset_t addr,
+static int mmu_booke_change_attr(void *addr,
vm_size_t sz, vm_memattr_t mode);
static int mmu_booke_decode_kernel_ptr(vm_offset_t addr,
int *is_user, vm_offset_t *decoded_addr);
@@ -2372,13 +2372,14 @@ mmu_booke_mincore(pmap_t pmap, vm_offset_t addr, vm_paddr_t *pap)
}
static int
-mmu_booke_change_attr(vm_offset_t addr, vm_size_t sz, vm_memattr_t mode)
+mmu_booke_change_attr(void *sva, vm_size_t sz, vm_memattr_t mode)
{
- vm_offset_t va;
+ vm_offset_t addr, va;
pte_t *pte;
int i, j;
tlb_entry_t e;
+ addr = (vm_offset_t)sva;
addr = trunc_page(addr);
/* Only allow changes to mapped kernel addresses. This includes:
diff --git a/sys/powerpc/include/mmuvar.h b/sys/powerpc/include/mmuvar.h
index d1e6f8f4b6d9..534a8f381107 100644
--- a/sys/powerpc/include/mmuvar.h
+++ b/sys/powerpc/include/mmuvar.h
@@ -38,7 +38,7 @@ typedef void *(*pmap_mapdev_t)(vm_paddr_t, vm_size_t);
typedef void *(*pmap_mapdev_attr_t)(vm_paddr_t, vm_size_t, vm_memattr_t);
typedef void (*pmap_unmapdev_t)(void *, vm_size_t);
typedef void (*pmap_page_set_memattr_t)(vm_page_t, vm_memattr_t);
-typedef int (*pmap_change_attr_t)(vm_offset_t, vm_size_t, vm_memattr_t);
+typedef int (*pmap_change_attr_t)(void *, vm_size_t, vm_memattr_t);
typedef int (*pmap_map_user_ptr_t)(pmap_t, volatile const void *,
void **, size_t, size_t *);
typedef int (*pmap_decode_kernel_ptr_t)(vm_offset_t, int *, vm_offset_t *);
diff --git a/sys/powerpc/include/pmap.h b/sys/powerpc/include/pmap.h
index df07858ff7e3..ff9be075d22d 100644
--- a/sys/powerpc/include/pmap.h
+++ b/sys/powerpc/include/pmap.h
@@ -310,7 +310,7 @@ void *pmap_mapdev(vm_paddr_t, vm_size_t);
void *pmap_mapdev_attr(vm_paddr_t, vm_size_t, vm_memattr_t);
void pmap_unmapdev(void *, vm_size_t);
void pmap_page_set_memattr(vm_page_t, vm_memattr_t);
-int pmap_change_attr(vm_offset_t, vm_size_t, vm_memattr_t);
+int pmap_change_attr(void *, vm_size_t, vm_memattr_t);
int pmap_map_user_ptr(pmap_t pm, volatile const void *uaddr,
void **kaddr, size_t ulen, size_t *klen);
int pmap_decode_kernel_ptr(vm_offset_t addr, int *is_user,
diff --git a/sys/powerpc/powerpc/pmap_dispatch.c b/sys/powerpc/powerpc/pmap_dispatch.c
index 676e0d4d4c78..96a07976d3da 100644
--- a/sys/powerpc/powerpc/pmap_dispatch.c
+++ b/sys/powerpc/powerpc/pmap_dispatch.c
@@ -185,7 +185,7 @@ DEFINE_PMAP_IFUNC(int, map_user_ptr,
DEFINE_PMAP_IFUNC(int, decode_kernel_ptr, (vm_offset_t, int *, vm_offset_t *));
DEFINE_PMAP_IFUNC(int, dev_direct_mapped, (vm_paddr_t, vm_size_t));
DEFINE_PMAP_IFUNC(void, sync_icache, (pmap_t, vm_offset_t, vm_size_t));
-DEFINE_PMAP_IFUNC(int, change_attr, (vm_offset_t, vm_size_t, vm_memattr_t));
+DEFINE_PMAP_IFUNC(int, change_attr, (void *, vm_size_t, vm_memattr_t));
DEFINE_PMAP_IFUNC(void, page_array_startup, (long));
DEFINE_PMAP_IFUNC(void, tlbie_all, (void));