STRUCT PVR_PAGE_TABLE_L0_ENTRY_RAW(9)
π struct pvr_page_table_l0_entry_raw(9) π
okay so you clicked into struct pvr_p...l0_entry_raw(9) β yes bestie, that truncation is literally just how the header renders it, and yes, this is section 9, the Kernel API Manual. buckle up, we're looking at exactly one (1) 64-bit page table entry and honestly? it's giving main character energy. β¨
πΈ NAME
struct pvr_page_table_l0_entry_raw β a single entry in a level 0 page table. that's it. that's the whole vibe. π
β¨ SYNOPSIS
struct pvr_page_table_l0_entry_raw {
u64 val;
};
look at her. one member. flawless. π
π«Ά MEMBERS
valβ the raw value of this entry. the actual bits. the whole personality lives in here. π₯
π§ DESCRIPTION
so this type is a structure that exists for type-checking purposes β at compile time, its size gets checked against ROGUE_MMUCTRL_ENTRY_SIZE_PT_VALUE. it's not doing tricks, it's holding the compiler accountable. periodt. π
the value stored in this structure can be decoded using the following bitmap π
π FLAT-TABLE
(fun fact: the original lays this out as a flat-table with :widths: 1 5 and :stub-columns: 1 β we're translating it into vibes for you π¦)
- 63 β (reserved). don't touch. not yours. π
- 62 β PM/FW Protect: indicates a protected region which only the Parameter Manager (PM) or firmware processor can write to. everyone else? blocked. π
- 61..40 β VP Page (High): virtual-physical page used for Parameter Manager (PM) memory. this field is only used if the additional level of PB virtualization is enabled. the VP Page field is needed by the PM in order to correctly reconstitute the free lists after render completion. this (High) field holds bits 39..18 of the value; the Low field holds bits 17..12. bits 11..0 are always zero because the value is always aligned to the 4KiB page size. she's precise, she's aligned, we stan. π
- 39..12 β Physical Page Address: the way this value is interpreted depends on the page size. bits not specified in the table below (e.g. bits 20..12 for page size 2MiB) should be considered reserved. β
this table shows the bits used in an L0 page table entry to represent the Physical Page Address for a given page size (as defined in the associated L1 page table entry). (another flat-table in the source: :widths: 1 1, :header-rows: 1, :stub-columns: 1 β here it is, cute and flat:)
- Page size: 4KiB β Physical address bits: 39..12
- Page size: 16KiB β Physical address bits: 39..14
- Page size: 64KiB β Physical address bits: 39..16
- Page size: 256KiB β Physical address bits: 39..18
- Page size: 1MiB β Physical address bits: 39..20
- Page size: 2MiB β Physical address bits: 39..21
- 11..6 β VP Page (Low): continuation of VP Page (High). the sequel. the part two. π
- 5 β Pending: when the valid bit is not set, indicates that a valid entry is pending and the MMU should wait for the driver to map the entry. this is used to support page demand mapping of memory. yes, the MMU is literally waiting on you. no pressure. π
- 4 β PM Src: set on Parameter Manager (PM) allocated page table entries when indicated by the PM. note that this bit will only be set by the PM, not by the device driver. read that again β only the PM. not the driver. not you. π«Ά
- 3 β SLC Bypass Control: specifies requests to this page should bypass the System Level Cache (SLC), if enabled in SLC configuration. straight past the cache, no detours. π¦
- 2 β Cache Coherency: indicates that the page is coherent (i.e. it does not require a cache flush between operations on the CPU and the device). lowkey the most relaxing bit on the whole entry. π
- 1 β Read Only: if set, this bit indicates that the page is read only. an attempted write to this page would result in a write-protection fault. look with your eyes, not with your writes. π
- 0 β Valid: indicates that the entry contains a valid page. if the valid bit is not set, then an attempted use of the page would result in a page fault. this is the bit. the one that matters. π
π¦ SEE ALSO
the kernel file lives at ./drivers/gpu/drm/imagination/pvr_mmu.c β and here's the full friend group, every single one of them, no cap:
pvr_mmu_set_flush_flags(9),pvr_mmu_flush_request_all(9),pvr_mmu_flush_exec(9)PowerVR Virtual Memory Handling(9),PowerVR Virtual Memory Handling (constants)(9)MMU backing pages(9),MMU backing pages (constants)(9)struct pvr_mmu_backing_page(9),pvr_mmu_backing_page_init(9),pvr_mmu_backing_page_fini(9),pvr_mmu_backing_page_sync(9)Raw page tables(9)struct pvr_page_table_l2_entry_raw(9),pvr_page_table_l2_entry_raw_set(9)struct pvr_page_table_l1_entry_raw(9),pvr_page_table_l1_entry_raw_set(9)struct pvr_page_flags_raw(9),pvr_page_table_l0_entry_raw_set(9),pvr_page_flags_raw_create(9)struct pvr_page_table_l2_raw(9),struct pvr_page_table_l1_raw(9),struct pvr_page_table_l0_raw(9)Mirror page tables(9)struct pvr_page_table_l2(9),pvr_page_table_l2_init(9),pvr_page_table_l2_fini(9),pvr_page_table_l2_sync(9),pvr_page_table_l2_get_raw(9),pvr_page_table_l2_get_entry_raw(9),pvr_page_table_l2_entry_is_valid(9)struct pvr_page_table_l1(9),pvr_page_table_l1_init(9),pvr_page_table_l1_free(9),pvr_page_table_l1_sync(9),pvr_page_table_l1_get_raw(9),pvr_page_table_l1_get_entry_raw(9),pvr_page_table_l1_entry_is_valid(9)struct pvr_page_table_l0(9),pvr_page_table_l0_init(9),pvr_page_table_l0_free(9),pvr_page_table_l0_sync(9),pvr_page_table_l0_get_raw(9),pvr_page_table_l0_get_entry_raw(9),pvr_page_table_l0_entry_is_valid(9)struct pvr_mmu_context(9),struct pvr_page_table_ptr(9),struct pvr_mmu_op_context(9)pvr_page_table_l2_insert(9),pvr_page_table_l2_remove(9),pvr_page_table_l1_insert(9),pvr_page_table_l1_remove(9),pvr_page_table_l0_insert(9),pvr_page_table_l0_remove(9)Page table index utilities(9),pvr_page_table_l2_idx(9),pvr_page_table_l1_idx(9),pvr_page_table_l0_idx(9)High-level page table operations(9),pvr_page_table_l1_get_or_insert(9),pvr_page_table_l0_get_or_insert(9),pvr_mmu_context_create(9),pvr_mmu_context_destroy(9),pvr_mmu_get_root_table_dma_addr(9),pvr_page_table_l1_alloc(9),pvr_page_table_l0_alloc(9)pvr_mmu_op_context_require_sync(9),pvr_mmu_op_context_sync_manual(9),pvr_mmu_op_context_sync_partial(9),pvr_mmu_op_context_sync(9),pvr_mmu_op_context_load_tables(9),pvr_mmu_op_context_set_curr_page(9),pvr_mmu_op_context_next_page(9)Single page operations(9),pvr_page_create(9),pvr_page_destroy(9),pvr_mmu_op_context_destroy(9),pvr_mmu_op_context_create(9),pvr_mmu_op_context_unmap_curr_page(9),pvr_mmu_unmap(9),pvr_mmu_map_sgl(9),pvr_mmu_map(9)
ngl bestie, if you're poking at these bits by hand, double-check your page size first β misreading the Physical Page Address field is a one-way ticket to a fault, and the reserved bits are reserved for a reason. π«Ά
that's the whole page! source and version: ./drivers/gpu/drm/imagination, dated October 2026. go forth and decode your 64 bits responsibly, ily, bye ππβ¨
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms