2022-01-04 23:44:38

by Qu Wenruo

[permalink] [raw]
Subject: How to get the supported page sizes of aarch64? (and possible other architectures)

Hi,

Recently I'm trying to boot a kernel with 16K page size, but edk2
firmware failed to load the kernel on my CM4, with unsupported message:

Failed to execute Archlinux ARM (\Image-custom): Unsupported

While 4K and 64K page sized kernels are fine to boot.

A quick search shows that Cortex A processors support 4K and 64K page
size, and 16K page size is not a mandatory requirement.

On the other hand, other aarch64 processors, like Apple M1 only supports
4K and 16K page size, no 64K page size support.


Although ARM documents show ID_AA64MMFR0_EL1 would report such info, is
there any user space tool or kernel messages to show an
end-user-friendly output about what page sizes are support?

Thanks,
Qu


2022-01-07 12:02:25

by Alex Bennée

[permalink] [raw]
Subject: Re: How to get the supported page sizes of aarch64? (and possible other architectures)


Qu Wenruo <[email protected]> writes:

> Hi,
>
> Recently I'm trying to boot a kernel with 16K page size, but edk2
> firmware failed to load the kernel on my CM4, with unsupported message:
>
> Failed to execute Archlinux ARM (\Image-custom): Unsupported
>
> While 4K and 64K page sized kernels are fine to boot.
>
> A quick search shows that Cortex A processors support 4K and 64K page
> size, and 16K page size is not a mandatory requirement.
>
> On the other hand, other aarch64 processors, like Apple M1 only supports
> 4K and 16K page size, no 64K page size support.
>
>
> Although ARM documents show ID_AA64MMFR0_EL1 would report such info, is
> there any user space tool or kernel messages to show an
> end-user-friendly output about what page sizes are support?

Not that I'm aware of but a chunk of the ID registers are exposed to
user space to read (although some bits are masked). I think the kernel
hides the translation granules support and I think only exposes the page
size the kernel has booted into.

I guess you could hack the kernel to dump the real ID register value in
dmesg or something like that?

>
> Thanks,
> Qu


--
Alex Bennée