12. 自制操作系统: risc-v ACLINT
ACLINT全稱: Advanced Core Local?Interruptor
1.介紹
這個RISC-V ACLINT規范定義了一組內存映射設備,這些設備在一個多HART RISC-V平臺上為每個HART提供處理器間中斷(IPI)和定時器功能。這些hart級的IPI和定時器功能是在多hart RISC-V平臺上運行的操作系統、引導加載程序和固件所必需的。
SiFive核心本地中斷器(CLINT)在RISC-V世界中被廣泛采用,以提供機器級IPI和定時器功能。不幸的是,SiFive CLINT對于IPI和定時器功能都有一個統一的寄存器映射,并且它沒有提供supervisor-level的IPI功能。
通過為IPI和定時器功能定義單獨的內存映射設備,RISC-V ACLINT規范采用了一種更模塊化的方法。當平臺有替代機制時,這種模塊化允許RISC-V平臺省略一些RISC-V ACLINT設備。除了模塊化,RISC-V ACLINT規范還為管理級api定義了一個專用的內存映射設備。下面的表1顯示了由RISC-V ACLINT規范定義的設備列表。
1.1?與SiFive CLINT向后兼容
RISC-V ACLINT規范被定義為向后兼容SiFive CLINT規范。MTIMER和MSWI設備的寄存器定義和寄存器偏移量與SiFive CLINT規范定義的定時器和IPI寄存器兼容。RISC-V平臺上的SiFive CLINT設備在邏輯上可以被看作是一個MSWI設備和一個MTIMER設備,它們并排放置在內存地址空間中,如下表2所示
2.MTIMER
MTIMER全稱Machine-level Timer Device
MTIMER設備為RISC-V平臺上的一組hart提供機器級定時器功能。它有一個單一的固定頻率單調時間計數器(MTIME)寄存器和一個時間比較寄存器(MTIMECMP)為每個HART連接到MTIMER設備。一個沒有連接到HART的MTIMER設備應該只有MTIME寄存器,沒有mtimeecmp寄存器。
在具有多個MTIMER設備的RISC-V平臺上:
-
每個 MTIMER 設備為不同(或不相交)的 HARTs提供機器級計時器功能。 MTIMER 設備為與其關聯的每個 HART 分配一個從零開始的 HART 索引。 MTIMER 設備分配給 HART 的 HART 索引可能與 RISC-V 特權架構分配給 HART 的唯一 HART identifier(hart ID)有關系,也可能沒有任何關系
-
兩個或多個MTIMER設備可以共享相同的物理MTIME寄存器,同時擁有各自的mtimeecmp寄存器
-
MTIMER設備的MTIMECMP寄存器只能與同一MTIMER設備的MTIME寄存器進行比較,以產生machine-level定時器中斷
單個MTIMER設備支持的HARTs的最大數量是4095,這相當于MTIMECMP寄存器的最大數量。
2.1 Register Map
一個MTIMER設備有兩個獨立的基地址:MTIME寄存器的基地址和MTIMECMP寄存器的基地址。單個 MTIMER 設備的獨立基地址允許多個 MTIMER 設備共享同一個物理 MTIME 寄存器。
下面的表 3 顯示了 MTIME 寄存器的映射,而下面的表 4 顯示了 MTIMECMP 寄存器相對于單獨基地址的映射
2.2.? MTIME Register (Offset: 0x00000000)
MTIME寄存器是一個64位讀寫寄存器,包含基于固定參考頻率計算的周期數。
當MTIMER設備復位時,MTIME寄存器將被清除為零。
2.3. MTIMECMP Registers (Offsets: 0x00000000 -?0x00007FF0)
MTIMECMP 寄存器是 per-HART 的 64 位讀寫寄存器。 它包含 MTIME 寄存器值,其將為相應的 HART 觸發機器級定時器中斷。
當MTIME大于或等于相應寄存器MTIMECMP的值時,HART的機器級定時器中斷就掛起,當MTIME小于相應的MTIMECMP寄存器值時,HART被清除。機器級定時器中斷反映在mip CSR的MTIP位上。
當MTIMER設備復位時,MTIMECMP寄存器處于未知狀態。
2.4. Synchronizing Multiple MTIME Registers
RISC-V平臺可以將多個hart分組到分層拓撲組(例如clusters、nodes或sockets)中,其中每個拓撲組都有自己的MTIMER設備。此外,此類 RISC-V 平臺還可以允許在運行時對拓撲組(包括 MTIMER 設備)進行clock-gating或powering off。
在具有多個 MTIMER 設備駐留在同一裸片上的 RISC-V 平臺上,每個設備必須滿足所有 MTIME 寄存器相互關聯的 RISC-V 架構要求,并且所有 per-HART time CSR 彼此相關,都在一個 MTIME 滴答周期內同步。 例如,如果 MTIME 滴答周期為 10ns,則 MTIME 寄存器及其相關的time CSR 應分別同步在 10ns 以內。
在不同裸片上具有多個 MTIMER 設備的 RISC-V 平臺上,不同裸片上的 MTIME 寄存器(及其關聯的time CSR)可能僅在彼此之間大于 MTIME 滴答周期的指定間隔內同步。 平臺可以定義最大允許間隔。
為了滿足上述MTIME同步要求:
-
所有MTIME寄存器應該具有相同的輸入時鐘,以避免在不同的MTIME寄存器(及其相關的time CSRs)之間的運行時漂移。
-
當系統復位時,硬件必須初始化和同步所有的MTIME寄存器為零。
-
一個MTIMER設備由于電源管理操作而停止和重新啟動時,軟件應該將這個MTIME寄存器與所有其他MTIME寄存器重新同步。
當軟件更新一個、多個或所有 MTIME 寄存器時,它必須保持前面的同步要求(通過測量并考慮對不同MTIME寄存器執行讀寫的不同延遲)。
例如,軟件可以使用以下 RISC-V 64 位匯編序列來同步一個 MTIME 寄存器與另一個 MTIME 寄存器。
清單1-在RISC-V 64位平臺上同步MTIME寄存器
/* * unsigned long aclint_mtime_sync(unsigned long target_mtime_address, * unsigned long reference_mtime_address) */ .globl aclint_mtime_sync aclint_mtime_sync:/*A. 讀取target MTIME寄存器的值到T0寄存器*/ld t0, (a0)fence i, i/* 讀取reference MTIME寄存器到T1寄存器*/ld t1, (a1)fence i, i/* 讀取target MTIME寄存器到T2寄存器*/ld t2, (a0)fence i, i/** B.計算target MTIME 調整后存入T3寄存器* T3 = T1 - ((T0 + T2) / 2)*/srli t0, t0, 1srli t2, t2, 1add t3, t0, t2sub t3, t1, t3/* * C.t4 = t3+ t4* D.更新 target MTIME 寄存器*/ld t4, (a0)add t4, t4, t3sd t4, (a0)/* 返回MTIME調整后的值*/add a0, t3, zeroret注意:在某些 RISC-V 平臺上,MTIME 同步序列(即上面的 aclint_mtime_sync() 函數)將需要重復幾次,直到target MTIME 寄存器和reference MTIME 寄存器之間的增量為零(或非常接近于零)。
為何不直接用ref MTIME寄存器的值賦值給target MTIME?
3. MSWI
全稱: Machine-level Software?Interrupt Device
MSWI 設備為 RISC-V 平臺上的一組 HART 提供機器級 IPI 功能。 它為連接到 MSWI 設備的每個 HART 提供一個 IPI 寄存器 (MSIP)。
在具有多個 MSWI 設備的 RISC-V 平臺上,每個 MSWI 設備為不同(或不相交)的 HARTs提供機器級 IPI 功能。 MSWI 設備為與其關聯的每個 HART 分配一個從零開始的 HART 索引。 MSWI 設備分配給 HART 的 HART 索引可能與 RISC-V 特權架構分配給 HART 的唯一 HART 標識符(hart ID)有關系,也可能沒有關系。
單個MSWI設備支持的最大HARTs數量為4095,這相當于MSIP寄存器的最大數量。
3.1 Register Map
3.2. MSIP Registers (Offsets: 0x00000000 -?0x00003FF8)
每個 MSIP 寄存器都是一個 32 位寬的 WARL 寄存器,其中高 31 位被連線為零。 最低有效位反映在 mip CSR 的 MSIP 中。 通過分別向相應的 MSIP 寄存器寫入 1 或 0 來等待或清除 HART 的機器級軟件中斷。
在MSWI設備復位時,每個MSIP寄存器被清除為零。
4.SSWI
全稱: Supervisor-level Software?Interrupt Device
SSWI 設備為 RISC-V 平臺上的一組 HARTs 提供supervisor-level IPI 功能。 它提供了一個寄存器來為連接到 SSWI 設備的每個 HART 設置一個 IPI (SETSSIP)。
在具有多個 SSWI 設備的 RISC-V 平臺上,每個 SSWI 設備為不同(或不相交)的 HART 集提供管理級 IPI 功能。 SSWI 設備為與其關聯的per-HART 分配一個從零開始的 HART 索引。 SSWI 設備分配給 HART 的 HART 索引可能與 RISC-V 特權架構分配給 HART 的唯一 HART 標識符(hart ID)有關系,也可能沒有任何關系。
單個ssi設備支持的最大HARTs數量為4095,這相當于SETSSIP寄存器的最大數量。
4.1. Register Map
4.2. SETSSIP Registers (Offsets: 0x00000000 -?0x00003FF8)
每個 SETSSIP 寄存器都是一個 32 位寬的 WARL 寄存器,其中高 31 位被連線為零。 SETSSIP 寄存器的最低有效位始終讀取 0。將 0 寫入SETSSIP 寄存器不起作用,而將 1 寫入最低有效位會向相應的 HART 發送edge-sensitive中斷信號,從而導致 HART 在 mip CSR 中設置 SSIP。 對 SETSSIP 寄存器的寫入保證會體現在相應 HART 的 SSIP 中,但不一定立即體現。
注意:?在RISC-V特權架構中,SSIP定義在mip和sip CSRs中作為可寫的比特位。因此M-mode和S-mode軟件能直接清除SSIP位的。
總結
以上是生活随笔為你收集整理的12. 自制操作系统: risc-v ACLINT的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用unity时VS无报错
- 下一篇: Hive正则表达式对数据过滤