ENUM RISCV_IOMMU_FQ_CAUSES(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– NAME πŸ’–

enum riscv_iommu_fq_causes β€” so this is the Kernel API Manual entry for it, and bestie, it's literally the fault/event cause values 🫢 like every possible reason the RISC-V IOMMU can slide into your fault queue and be like "girl, something happened."


✨ SYNOPSIS ✨

okay so here's the whole enum, exactly as it lives, no edits, no cap:

enum riscv_iommu_fq_causes {
    RISCV_IOMMU_FQ_CAUSE_INST_FAULT ,
    RISCV_IOMMU_FQ_CAUSE_RD_ADDR_MISALIGNED ,
    RISCV_IOMMU_FQ_CAUSE_RD_FAULT ,
    RISCV_IOMMU_FQ_CAUSE_WR_ADDR_MISALIGNED ,
    RISCV_IOMMU_FQ_CAUSE_WR_FAULT ,
    RISCV_IOMMU_FQ_CAUSE_INST_FAULT_S ,
    RISCV_IOMMU_FQ_CAUSE_RD_FAULT_S ,
    RISCV_IOMMU_FQ_CAUSE_WR_FAULT_S ,
    RISCV_IOMMU_FQ_CAUSE_INST_FAULT_VS ,
    RISCV_IOMMU_FQ_CAUSE_RD_FAULT_VS ,
    RISCV_IOMMU_FQ_CAUSE_WR_FAULT_VS ,
    RISCV_IOMMU_FQ_CAUSE_DMA_DISABLED ,
    RISCV_IOMMU_FQ_CAUSE_DDT_LOAD_FAULT ,
    RISCV_IOMMU_FQ_CAUSE_DDT_INVALID ,
    RISCV_IOMMU_FQ_CAUSE_DDT_MISCONFIGURED ,
    RISCV_IOMMU_FQ_CAUSE_TTYP_BLOCKED ,
    RISCV_IOMMU_FQ_CAUSE_MSI_LOAD_FAULT ,
    RISCV_IOMMU_FQ_CAUSE_MSI_INVALID ,
    RISCV_IOMMU_FQ_CAUSE_MSI_MISCONFIGURED ,
    RISCV_IOMMU_FQ_CAUSE_MRIF_FAULT ,
    RISCV_IOMMU_FQ_CAUSE_PDT_LOAD_FAULT ,
    RISCV_IOMMU_FQ_CAUSE_PDT_INVALID ,
    RISCV_IOMMU_FQ_CAUSE_PDT_MISCONFIGURED ,
    RISCV_IOMMU_FQ_CAUSE_DDT_CORRUPTED ,
    RISCV_IOMMU_FQ_CAUSE_PDT_CORRUPTED ,
    RISCV_IOMMU_FQ_CAUSE_MSI_PT_CORRUPTED ,
    RISCV_IOMMU_FQ_CAUSE_MRIF_CORRUIPTED ,
    RISCV_IOMMU_FQ_CAUSE_INTERNAL_DP_ERROR ,
    RISCV_IOMMU_FQ_CAUSE_MSI_WR_FAULT ,
    RISCV_IOMMU_FQ_CAUSE_PT_CORRUPTED

};

(yes RISCV_IOMMU_FQ_CAUSE_MRIF_CORRUIPTED is spelled like that in the source, I'm not fixing it, she's iconic and she stays πŸ’…)


πŸŽ€ Constants πŸŽ€

thirty of them, one per vibe, let's go:

  • RISCV_IOMMU_FQ_CAUSE_INST_FAULT β€” instruction access fault, oop πŸ‘€
  • RISCV_IOMMU_FQ_CAUSE_RD_ADDR_MISALIGNED β€” read address misaligned, the address did NOT line up bestie
  • RISCV_IOMMU_FQ_CAUSE_RD_FAULT β€” read load fault
  • RISCV_IOMMU_FQ_CAUSE_WR_ADDR_MISALIGNED β€” write/AMO address misaligned
  • RISCV_IOMMU_FQ_CAUSE_WR_FAULT β€” write/AMO access fault
  • RISCV_IOMMU_FQ_CAUSE_INST_FAULT_S β€” instruction page fault
  • RISCV_IOMMU_FQ_CAUSE_RD_FAULT_S β€” read page fault
  • RISCV_IOMMU_FQ_CAUSE_WR_FAULT_S β€” write/AMO page fault
  • RISCV_IOMMU_FQ_CAUSE_INST_FAULT_VS β€” instruction guest page fault 🧚
  • RISCV_IOMMU_FQ_CAUSE_RD_FAULT_VS β€” read guest page fault
  • RISCV_IOMMU_FQ_CAUSE_WR_FAULT_VS β€” write/AMO guest page fault
  • RISCV_IOMMU_FQ_CAUSE_DMA_DISABLED β€” all inbound transactions disallowed, straight up banned πŸ’€
  • RISCV_IOMMU_FQ_CAUSE_DDT_LOAD_FAULT β€” DDT entry load access fault
  • RISCV_IOMMU_FQ_CAUSE_DDT_INVALID β€” DDT entry invalid
  • RISCV_IOMMU_FQ_CAUSE_DDT_MISCONFIGURED β€” DDT entry misconfigured, she was set up wrong 😭
  • RISCV_IOMMU_FQ_CAUSE_TTYP_BLOCKED β€” transaction type disallowed
  • RISCV_IOMMU_FQ_CAUSE_MSI_LOAD_FAULT β€” MSI PTE load access fault
  • RISCV_IOMMU_FQ_CAUSE_MSI_INVALID β€” MSI PTE invalid
  • RISCV_IOMMU_FQ_CAUSE_MSI_MISCONFIGURED β€” MSI PTE misconfigured
  • RISCV_IOMMU_FQ_CAUSE_MRIF_FAULT β€” MRIF access fault
  • RISCV_IOMMU_FQ_CAUSE_PDT_LOAD_FAULT β€” PDT entry load access fault
  • RISCV_IOMMU_FQ_CAUSE_PDT_INVALID β€” PDT entry invalid
  • RISCV_IOMMU_FQ_CAUSE_PDT_MISCONFIGURED β€” PDT entry misconfigured
  • RISCV_IOMMU_FQ_CAUSE_DDT_CORRUPTED β€” DDT data corruption 🫠
  • RISCV_IOMMU_FQ_CAUSE_PDT_CORRUPTED β€” PDT data corruption
  • RISCV_IOMMU_FQ_CAUSE_MSI_PT_CORRUPTED β€” MSI page table data corruption
  • RISCV_IOMMU_FQ_CAUSE_MRIF_CORRUIPTED β€” MRIF data corruption (again: her spelling, not mine πŸ’…)
  • RISCV_IOMMU_FQ_CAUSE_INTERNAL_DP_ERROR β€” internal data path error, the IOMMU is going through it internally
  • RISCV_IOMMU_FQ_CAUSE_MSI_WR_FAULT β€” IOMMU MSI write access fault
  • RISCV_IOMMU_FQ_CAUSE_PT_CORRUPTED β€” first/second stage page table data corruption

πŸ¦‹ Description πŸ¦‹

okay so the deets: these values are on table 11 of the spec. And the encoding ranges? Listen up because this is the iykyk part:

  • encodings 275 - 2047 are reserved for standard use
  • encodings 2048 - 4095 are reserved for custom use
don't go squatting in the wrong range, bestie, the spec will find out 🌸

πŸ’œ SEE ALSO πŸ’œ

kernel file ./drivers/iommu/riscv/iommu-bits.h enum, plus the whole friend group:

riscv_iommu_igs_settings(9), enum riscv_iommu_ddtp_modes(9), enum riscv_iommu_hpmevent_id(9), struct riscv_iommu_dc(9), enum riscv_iommu_dc_iohgatp_modes(9), enum riscv_iommu_dc_fsc_atp_modes(9), struct riscv_iommu_pc(9), struct riscv_iommu_command(9), struct riscv_iommu_fq_record(9), enum riscv_iommu_fq_ttypes(9), struct riscv_iommu_pq_record(9), struct riscv_iommu_msipte(9)


okay that's the whole page, go read the header file, ily 🫢✨

from ./drivers/iommu/riscv, dated October 2026 β€” enum riscv_iommu_fq_causes(9), that's a wrap, periodt πŸ‘‘πŸŽ€
πŸ“¦ where this page comes from