The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/contrib/device-tree/Bindings/interrupt-controller/riscv,cpu-intc.txt

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 RISC-V Hart-Level Interrupt Controller (HLIC)
    2 ---------------------------------------------
    3 
    4 RISC-V cores include Control Status Registers (CSRs) which are local to each
    5 CPU core (HART in RISC-V terminology) and can be read or written by software.
    6 Some of these CSRs are used to control local interrupts connected to the core.
    7 Every interrupt is ultimately routed through a hart's HLIC before it
    8 interrupts that hart.
    9 
   10 The RISC-V supervisor ISA manual specifies three interrupt sources that are
   11 attached to every HLIC: software interrupts, the timer interrupt, and external
   12 interrupts.  Software interrupts are used to send IPIs between cores.  The
   13 timer interrupt comes from an architecturally mandated real-time timer that is
   14 controlled via Supervisor Binary Interface (SBI) calls and CSR reads.  External
   15 interrupts connect all other device interrupts to the HLIC, which are routed
   16 via the platform-level interrupt controller (PLIC).
   17 
   18 All RISC-V systems that conform to the supervisor ISA specification are
   19 required to have a HLIC with these three interrupt sources present.  Since the
   20 interrupt map is defined by the ISA it's not listed in the HLIC's device tree
   21 entry, though external interrupt controllers (like the PLIC, for example) will
   22 need to define how their interrupts map to the relevant HLICs.  This means
   23 a PLIC interrupt property will typically list the HLICs for all present HARTs
   24 in the system.
   25 
   26 Required properties:
   27 - compatible : "riscv,cpu-intc"
   28 - #interrupt-cells : should be <1>.  The interrupt sources are defined by the
   29   RISC-V supervisor ISA manual, with only the following three interrupts being
   30   defined for supervisor mode:
   31     - Source 1 is the supervisor software interrupt, which can be sent by an SBI
   32       call and is reserved for use by software.
   33     - Source 5 is the supervisor timer interrupt, which can be configured by
   34       SBI calls and implements a one-shot timer.
   35     - Source 9 is the supervisor external interrupt, which chains to all other
   36       device interrupts.
   37 - interrupt-controller : Identifies the node as an interrupt controller
   38 
   39 Furthermore, this interrupt-controller MUST be embedded inside the cpu
   40 definition of the hart whose CSRs control these local interrupts.
   41 
   42 An example device tree entry for a HLIC is show below.
   43 
   44         cpu1: cpu@1 {
   45                 compatible = "riscv";
   46                 ...
   47                 cpu1-intc: interrupt-controller {
   48                         #interrupt-cells = <1>;
   49                         compatible = "sifive,fu540-c000-cpu-intc", "riscv,cpu-intc";
   50                         interrupt-controller;
   51                 };
   52         };

Cache object: 21fcb2cd8edd849de212715dab1f5506


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.