riscv: Helper to parse hart index
authorVladimir Kondratiev <vladimir.kondratiev@mobileye.com>
Thu, 12 Jun 2025 14:39:05 +0000 (17:39 +0300)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 26 Jun 2025 14:06:40 +0000 (16:06 +0200)
commit5fe331cdcfba5b2c2dd8211127dadefcaaa97dec
tree3ac2fe135f2cbaa47cf8ab869919db667efe58dd
parent2250db8628a0d8293ad2e0671138b848a185fba1
riscv: Helper to parse hart index

RISC-V APLIC specification defines "hart index" in [1]. Similar definitions
can be found for ACLINT in [2]

Quote from the APLIC specification:

Within a given interrupt domain, each of the domain’s harts has a unique
index number in the range 0 to 2^14 − 1 (= 16,383). The index number a
domain associates with a hart may or may not have any relationship to the
unique hart identifier (“hart ID”) that the RISC-V Privileged
Architecture assigns to the hart. Two different interrupt domains may
employ entirely different index numbers for the same set of harts.

Further, it says in "4.5 Memory-mapped control region for an interrupt
domain":

The array of IDC structures may include some for potential hart index
numbers that are not actual hart index numbers in the domain.  For example,
the first IDC structure is always for hart index 0, but 0 is not
necessarily a valid index number for any hart in the domain.

Support arbitrary hart indices specified in an optional property
"riscv,hart-indexes" which is specified as an array of u32 elements, one
per interrupt target, listing hart indexes in the same order as in
"interrupts-extended".

If this property is not specified, fall back to use logical hart indices
within the domain.

Signed-off-by: Vladimir Kondratiev <vladimir.kondratiev@mobileye.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20250612143911.3224046-2-vladimir.kondratiev@mobileye.com
Link: https://github.com/riscv/riscv-aia
Link: https://github.com/riscvarchive/riscv-aclint
arch/riscv/include/asm/irq.h
arch/riscv/kernel/irq.c