[PATCH 1/3] Remove old & redundant sections.
atishp@...
The platform and profile specification mean different things now.
All the points specified in supervisor.adoc are already described in the new revamped platform spec. Remove these old specifications. Signed-off-by: Atish Patra <atish.patra@...> --- Makefile | 2 +- profiles.adoc | 10 ---------- supervisor-level.adoc | 26 -------------------------- 3 files changed, 1 insertion(+), 37 deletions(-) delete mode 100644 profiles.adoc delete mode 100644 supervisor-level.adoc diff --git a/Makefile b/Makefile index de5e0b0309e9..eab98e413b99 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,7 @@ ASCIIDOCTOR = asciidoctor PLATFORM_SPEC = riscv-platform-spec PANDOC = pandoc PARTS = changelog.adoc contributors.adoc introduction.adoc licensing.adoc \ - profiles.adoc supervisor-level.adoc user-level.adoc + user-level.adoc # Build the platform spec in several formats all: $(PLATFORM_SPEC).md $(PLATFORM_SPEC).pdf $(PLATFORM_SPEC).html diff --git a/profiles.adoc b/profiles.adoc deleted file mode 100644 index fdd7fc0f63cc..000000000000 --- a/profiles.adoc +++ /dev/null @@ -1,10 +0,0 @@ -// SPDX-License-Indentifer: CC-BY-4.0 -// -// profiles.adoc: original Profiles content -// -// This is material from the very first draft of the spec. -// - -## Profiles - -* Portable UNIX Platform Profile diff --git a/supervisor-level.adoc b/supervisor-level.adoc deleted file mode 100644 index 325614a05d32..000000000000 --- a/supervisor-level.adoc +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Indentifer: CC-BY-4.0 -// -// supervisor-level.adoc: original Supervisor Level Platform content -// -// This is material from the very first draft of the spec. -// - -## Supervisor-Level Platform - -* Supervisor-mode environments must implement at least version 0.2.0 of the - RISC-V SBI specification, which can be found at - https://github.com/riscv/riscv-sbi-doc/blob/v0.2.0/riscv-sbi.adoc -* Supervisor-mode environments must implement the Sv39 page-based - virtual-memory scheme. Systems that support Sv48 must support Sv39, systems - that support Sv57 must support Sv48, and so forth. -* Unless otherwise specified by a given I/O device, I/O regions are at least - point-to-point strongly ordered. All devices attached to a given PCIe root - complex are on the same ordered channel (numbered 2 or above), though - different root complexes might not be on the same ordering channel. -* On RV64I-based Unix-class systems the negative virtual addresses are reserved - for the kernel. -* External devices (DMA engines, the debug unit, non RISC-V cores, etc) that - are visible to RISC-V harts must appear as coherent agents, just like any - RISC-V hart would. If additional ordering constraints are necessary for a - device to function, those will be provided by a device-specific mechanism. - -- 2.31.1 |
|
Re: [PATCH v3 1/1] server extension: PCIe requirements
Greg Favor
On Fri, Jul 9, 2021 at 12:58 PM Atish Patra <atish.patra@...> wrote: On Fri, 2021-07-09 at 23:04 +0530, Mayuresh Chitale wrote: Yes, this updated/improved text should be used in place of the version in the patch. (Among other things, this avoids the above double-negative and addresses a concern against using "No_snoop" - which isn't universally used.) Whether we use "No_snoop" (like ARM does) or "No Snoop" (like other people use), or use "No_Snoop", I don't have a strong leaning. Maybe "No_Snoop" is a reasonable middle ground? Greg |
|
Re: [PATCH v3 1/1] server extension: PCIe requirements
atishp@...
On Fri, 2021-07-09 at 23:04 +0530, Mayuresh Chitale wrote:
This patch adds requirements for PCIe support for the serverGreg had few suggestion to change this statement. "PCIe transactions that are marked with a No Snoop bit of zero and access memory.." +cacheable by harts, as well as accesses to memory that is-- Regards, Atish |
|
[PATCH v3 1/1] server extension: PCIe requirements
Mayuresh Chitale
This patch adds requirements for PCIe support for the server extension
Signed-off-by: Mayuresh Chitale <mchitale@...> --- Makefile | 18 +++-- pcie-topology.ditaa | 28 ++++++++ riscv-platform-spec.adoc | 149 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 187 insertions(+), 8 deletions(-) create mode 100644 pcie-topology.ditaa diff --git a/Makefile b/Makefile index de5e0b0..06796f3 100644 --- a/Makefile +++ b/Makefile @@ -3,13 +3,19 @@ # ASCIIDOCTOR = asciidoctor +DITAA = ditaa +IMAGES = pcie-topology.png PLATFORM_SPEC = riscv-platform-spec PANDOC = pandoc PARTS = changelog.adoc contributors.adoc introduction.adoc licensing.adoc \ profiles.adoc supervisor-level.adoc user-level.adoc # Build the platform spec in several formats -all: $(PLATFORM_SPEC).md $(PLATFORM_SPEC).pdf $(PLATFORM_SPEC).html +all: $(IMAGES) $(PLATFORM_SPEC).md $(PLATFORM_SPEC).pdf $(PLATFORM_SPEC).html + +%.png: %.ditaa + rm -f $@ + $(DITAA) $< $(PLATFORM_SPEC).md: $(PLATFORM_SPEC).xml $(PANDOC) -f docbook -t markdown_strict $< -o $@ @@ -17,10 +23,10 @@ $(PLATFORM_SPEC).md: $(PLATFORM_SPEC).xml $(PLATFORM_SPEC).xml: $(PLATFORM_SPEC).adoc $(ASCIIDOCTOR) -d book -b docbook $< -$(PLATFORM_SPEC).pdf: $(PLATFORM_SPEC).adoc +$(PLATFORM_SPEC).pdf: $(PLATFORM_SPEC).adoc $(IMAGES) $(ASCIIDOCTOR) -d book -r asciidoctor-pdf -b pdf $< -$(PLATFORM_SPEC).html: $(PLATFORM_SPEC).adoc +$(PLATFORM_SPEC).html: $(PLATFORM_SPEC).adoc $(IMAGES) $(ASCIIDOCTOR) -d book -b html $< $(PLATFORM_SPEC).adoc: $(PARTS) @@ -31,11 +37,11 @@ clean: rm -f $(PLATFORM_SPEC).md rm -f $(PLATFORM_SPEC).pdf rm -f $(PLATFORM_SPEC).html + rm -f $(IMAGES) # handy shortcuts for installing necessary packages: YMMV install-debs: - sudo apt-get install pandoc asciidoctor ruby-asciidoctor-pdf + sudo apt-get install pandoc asciidoctor ditaa ruby-asciidoctor-pdf install-rpms: - sudo dnf install pandoc rubygem-asciidoctor rubygem-asciidoctor-pdf - + sudo dnf install ditaa pandoc rubygem-asciidoctor rubygem-asciidoctor-pdf diff --git a/pcie-topology.ditaa b/pcie-topology.ditaa new file mode 100644 index 0000000..7180035 --- /dev/null +++ b/pcie-topology.ditaa @@ -0,0 +1,28 @@ + +----------+ +----------+ + | CPU | | CPU | + +-----+----+ +-----+----+ + | | + | | + | | + +-------------+------------+ +-------------+------------+ + | | | | + | Root Complex | | Root Complex | + | | | | + | +--------------+ | | +--------------+ | + | | Host Bridge | | | | Host Bridge | | + | +------+-------+ | | +------+-------+ | + | | | | | | + | | | | | Bus 0 | + | +-------+------+ | | +-----+-------+ | + | | Bus 0 | | | | Root Port | | + | | | | | +-----+-------+ | + | +---+---+ +---+---+ | | | | + | | RCiEP | | RCEC | | | | PCIe Link | + | +-------+ +-------+ | | | | + | | | Bus 1 | | + | | | | | + +--------------------------+ +--------------------------+ + + + RCiEP : Root complex integrated endpoint + RCEC : Root complex event collector diff --git a/riscv-platform-spec.adoc b/riscv-platform-spec.adoc index 4418788..24be2d2 100644 --- a/riscv-platform-spec.adoc +++ b/riscv-platform-spec.adoc @@ -47,7 +47,20 @@ include::profiles.adoc[] |RVA22 | RISC-V Application 2022 |EE | Execution Environment |RV32GC | RISC-V 32-bit general purpose ISA described as RV32IMAFDC. -|RV64GC | RISC-V 64-bit general purpose ISA described as RV64IMAFDC. +|RV64GC | RISC-V 64-bit general purpose ISA described as RV64IMAFDC. +|PCIe | PCI Express +|ECAM | Enhanced Configuration Access Mechanism +|BAR | Base Address Register +|AER | Advanced Error Reporting +|CRS | Configuration Request Retry Status +|TLP | Transaction Layer Packet +|RCiEP | Root Complex Integrated Endpoint +|RCEC | Root Complex Event Collector +|PME | Power Management Event +|MSI | Message Signaled Interrupts +|MSI-X | Enhanced Message Signaled Interrupts +|INTx | PCIe Legacy Interrupts +|PMA | Physical Memory Attributes |=== === Specifications @@ -363,7 +376,139 @@ https://lists.riscv.org/g/tech-privileged/message/404[Sstc] extension. ** Platforms are required to delegate the supervisor timer interrupt to 'S' mode. If the 'H' extension is implemented then the platforms are required to delegate the virtual supervisor timer interrupt to 'VS' mode. -* PCI-E + +===== PCIe +Platforms are required to support at least PCIe Base Specification Revision 1.1 +footnote:[https://pcisig.com/specifications]. + +====== PCIe Config Space +* Platforms shall support access to the PCIe config space via ECAM as described +in the PCIe Base specification. +* The entire config space for a single PCIe domain should be accessible via a +single ECAM I/O region. +* Platform firmware should implement the MCFG table as listed in the ACPI System +Description Tables above to allow the operating systems to discover the supported +PCIe domains and map the ECAM I/O region for each domain. +* Platform software shall configure ECAM I/O regions such that the effective +memory attributes are that of a PMA I/O region (i.e. strongly-ordered, +non-cacheable, non-idempotent). + +====== PCIe Memory Space +Platforms are required to map PCIe address space directly in the system address +space and not have any address translation for outbound accesses from harts or +for inbound accesses to any component in the system address space + +* PCIe Outbound Memory + +PCIe devices and bridges/switches frequently implement BARs which only support +32-bit addressing or support 64 bit addressing but do not support prefetchable +memory. To support mapping of such BARs, platforms are required to reserve +some space below 4G for each root port present in the system. + +[sidebar] +-- +[underline]*_Implementation Note_* + +Platform software would likely configure these per root port regions such that +their effective memory attributes are that of a PMA I/O region (i.e. +strongly-ordered, non-cacheable, non-idempotent). Platforms would likely also +reserve some space above 4G to map BARs that support 64 bit addressing and +prefetchable memory which could be configured by the platform software as either +I/O or memory. +-- + +* PCIe Inbound Memory + +For security reasons, platforms must provide a mechanism controlled by M-mode +software to restrict inbound PCIe accesses from accessing regions of address +space intended to be accessible only to M-mode software. + +[sidebar] +-- +[underline]*_Implementation Note_* + +Such an access control mechanism could be analogous to the per-hart PMP +as described in the RISC-V Privileged Architectures specification. +-- + +====== PCIe Interrupts +* Platforms shall support both INTx and MSI/MSI-x interrupts. +* Integration with AIA + +TBD + +====== PCIe cache coherency +PCIe transactions that are not marked as No_snoop and access memory that is +cacheable by harts, as well as accesses to memory that is noncacheable by +harts, are I/O Coherent and no software coherency management is needed. +In contrast, PCIe transactions that are marked as No_snoop and access memory +that is cacheable by harts, must have coherency managed by software. + +====== PCIe Topology +Platforms are required to implement at least one of the following topologies +and the components required in that topology. + +[#fig_intro1] +.PCIe Topologies +image::pcie-topology.png[width=524,height=218] + +* Host Bridge + +Following are the requirements for host bridges: + +** Any read or write access by a hart to an ECAM I/O region shall be converted +by the host bridge into the corresponding PCIe config read or config write +request. +** Any read or write access by a hart to a PCIe outbound region shall be +forwarded by the host bridge to a BAR or prefetch/non-prefetch memory window, +if the address falls within the region claimed by the BAR or prefetch/ +non-prefetch memory window. Otherwise the host bridge shall return an error. + +** Host bridge shall return all 1s in the following cases: +*** Config read to non existent functions and devices on root bus. +*** Config reads that receive Unsupported Request response from functions and +devices on the root bus. +* Root ports + +Following are the requirements for root ports. +** Root ports shall appear as PCI-PCI bridge to software. +** Root ports shall implement all registers of Type 1 header. +** Root ports shall implement all capabilities specified in the PCIe Base +specification for a root port. +** Root ports shall forward type 1 configuration access when the bus number in +the TLP is greater than the root port's secondary bus number and less than or +equal to the root port's subordinate bus number. +** Root ports shall convert type 1 configuration access to a type 0 +configuration access when bus number in the TLP is equal to the root port's +secondary bus number. +** Root ports shall respond to any type 0 configuration accesses it receives. +** Root ports shall forward memory accesses targeting its prefetch/non-prefetch +memory windows to downstream components. If address of the transaction does not +fall within the regions claimed by prefetch/non-prefetch memory windows then +the root port shall generate a Unsupported Request. +** Root port requester id or completer id shall be formed using the bdf of the +root port. +** The root ports shall support the CRS software visibility. +** The root port shall implement the AER capability. +** Root ports shall return all 1s in the following cases: +*** Config read to non existent functions and devices on secondary bus. +*** Config reads that receive Unsupported Request from downstream components. +*** Config read when root port's link is down. + +* RCiEP + +All the requirements for RCiEP in the PCIe Base specification shall be +implemented. +In addition the following requirements shall be met: +** If RCiEP is implemented then RCEC shall be implemented as well. All +requirements for RCEC specified in the PCIe Base specification shall be +implemented. RCEC is required to terminate the AER and PME messages from RCiEP. +** If both the topologies mentioned above are supported then RCiEP and RCEC +shall be implemented in a separate PCIe domain and shall be addressable via a +separate ECAM I/O region. + +===== PCIe Device Firmware Requirement +PCI expansion ROM code type 3 (UEFI) image must be provided by PCIe device for +OS/A server extension platform according to +https://pcisig.com/specifications/conventional/pci_firmware[PCI Firmware Specification Revision 3.3] +if that PCIe device is utilized during UEFI firmware boot process. The image +stored in PCI expansion ROM is an UEFI driver that must be compliant with +https://uefi.org/specifications[UEFI specification 2.9] 14.4.2 PCI Option ROMs. + +====== PCIe peer to peer transactions + +TBD ==== Secure Boot * TEE -- 2.17.1 |
|
[PATCH v3 0/1] System peripherals - PCIe
Mayuresh Chitale
V3:
- Replaced references to PMA+PBMT by PMA - Moved the PCIe topology diagram to a separate adoc to enable it's inclusion into PDF V2: - Fixed abbreviation for root complex integrated endpoint - Added section for PCIe device firmware requirement. V1: - Initial patch. Mayuresh Chitale (1): server extension: PCIe requirements Makefile | 18 +++-- pcie-topology.ditaa | 28 ++++++++ riscv-platform-spec.adoc | 149 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 187 insertions(+), 8 deletions(-) create mode 100644 pcie-topology.ditaa -- 2.17.1 |
|
Re: [PATCH v1] System Peripherals - watchdog timer
Greg Favor
On Thu, Jul 8, 2021 at 10:04 PM Abner Chang <renba.chang@...> wrote:
Yes.
The thought thus far has very much been the latter. Greg |
|
Re: [PATCH v1] System Peripherals - watchdog timer
Greg Favor <gfavor@...> 於 2021年7月9日 週五 下午12:40寫道:
ah, got it. thanks. I thought that "a second period" refers to one second.
Then what I was referring to would be another dedicated watchdog timer (secure one) managed by the secure software (management mode software) running in RISC-V TEE, right? Shall we define that secure watchdog timer for the server extension now? Or just wait until we have a clear picture of TEE and OpenSBI support for TEE? Abner
|
|
Re: [PATCH v1] System Peripherals - watchdog timer
Mayuresh Chitale
On Fri, Jul 9, 2021 at 8:54 AM Abner Chang <renba.chang@...> wrote:
No, actually it just means that if the watchdog timer is never refreshed after the first stage timeout then a second stage timeout would occur. The mechanism to configure the timeout value is not specified in this patch but will be specified in the watchdog timer appendix which is TBD.
|
|
Re: [PATCH v1] System Peripherals - watchdog timer
Greg Favor
On Thu, Jul 8, 2021 at 8:24 PM Abner Chang <renba.chang@...> wrote:
What the sentence is actually referring to is the following: The first watchdog timeout is based on a first programmable timeout period, and the second watchdog timeout is based on a second (separately) programmable timeout period.
Note that we're spec'ing similar behaviors to what others, like SBSA, spec. Also note that, in SBSA for example, there are both non-secure and secure watchdogs. The above watchdog is equivalent to a non-secure watchdog. Whereas I think what you're thinking of corresponds to a secure watchdog timer - which is controlled by secure software (analogous to M-mode software). Whereas the non-secure watchdog is controlled by non-secure software, i.e. the OS or hypervisor. Greg |
|
Re: [PATCH v1] System Peripherals - watchdog timer
Mayuresh Chitale <mchitale@...> 於 2021年7月7日 週三 上午1:42寫道: This patch describes requirements for the watchdog timer Does it mean the second-stage watchdog timer would be timeout 1 second after the first-stage watchdog timer has not been updated? On the server platform, firmware usually updates the watchdog timer in the background even under OS in runtime. When the watchdog interrupt is triggered, the firmware takes over, sends the log to BMC, and asks BMC to either shutdown or reset the system according to scenarios. We don't like to see OS or hypervisor in the middle to delay the system recovery, for example, OS or processor is somehow halted and the temperature in the box goes pretty high rapidly. Is 1 second too long for the crisis recovery? Should the first-stage watchdog timer be able to configure as either M or S mode interrupt? So firmware can handle the crisis immediately. Abner + + |
|
SBI v0.3.0 released
atishp@...
We have released SBI specification v0.3.0[1]. It's been month since the
release candidate (v.0.3-rc1). There were only includes few typo fixes and license update patches after that. That's why, we think the current version is good enough to be tagged as a official release. To summarize v0.3.0 includes few new extensions and cosmetic changes through out the entire specification. Here are few notable changes: - New extensions: - SBI PMU extension - SBI System reset extension - Updated extensions: - Hart Suspend function added to HSM extension - Overall specification reorganization and style update Thank you for your contributions! [1] https://github.com/riscv/riscv-sbi-doc/releases/tag/v0.3.0 -- Regards, Atish |
|
Re: [PATCH v2 1/1] server extension: PCIe requirements
Mayuresh Chitale
On Sat, Jul 3, 2021 at 8:33 PM Atish Patra <Atish.Patra@...> wrote: On Thu, 2021-07-01 at 22:20 +0530, Mayuresh Chitale wrote: Actually it is present in the 'Required ACPI System Description Tables'. I can add a pointer to that table in the text above.
I will rephrase all instances of this as Greg mentioned in his latest email. > +====== PCIe Memory Space PCIe spec does refer to it as No Snoop but ARM BSA refers to it as No_snoop. I thought the latter was slightly better as it might be easier to understand it as a single attribute or flag :) > +cacheable by harts, as well as accesses to memory that is |
|
[PATCH v1] System Peripherals - watchdog timer
Mayuresh Chitale
This patch describes requirements for the watchdog timer
for the server extension. Signed-off-by: Greg Favor <gfavor@...> Signed-off-by: Mayuresh Chitale <mchitale@...> --- riscv-platform-spec.adoc | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/riscv-platform-spec.adoc b/riscv-platform-spec.adoc index 87ab7f8..3b5728a 100644 --- a/riscv-platform-spec.adoc +++ b/riscv-platform-spec.adoc @@ -470,6 +470,28 @@ https://lists.riscv.org/g/tech-privileged/message/404[Sstc] extension. ** Platforms are required to delegate the supervisor timer interrupt to 'S' mode. If the 'H' extension is implemented then the platforms are required to delegate the virtual supervisor timer interrupt to 'VS' mode. + +===== Watchdog Timers +Implementation of a two-stage watchdog timer, as defined in the WatchDog Timer +appendix footnote:[Watchdog Timer Appendix (TBD)] ,is required. Software must +periodically refresh the watchdog timer, otherwise a first-stage watchdog +timeout occurs. If the watchdog timer remains un-refreshed for a second period, +then a second-stage watchdog timeout occurs. + +If a first-stage watchdog timeout occurs, a Supervisor-level interrupt request +is generated and sent to the system interrupt controller, targeting a specific +hart. + +If a second-stage watchdog timeout occurs, a system-level interrupt request is +generated and sent to a system component more privileged than Supervisor-mode +such as: + +- The system interrupt controller, with a Machine-level interrupt request +targeting a specific hart +- A platform management processor +- Dedicated reset control logic + +The resultant action taken is platform-specific. * PCI-E ==== Secure Boot -- 2.17.1 |
|
Re: [PATCH v2 1/1] server extension: PCIe requirements
Greg Favor
On Sat, Jul 3, 2021 at 8:03 AM Atish Patra <atish.patra@...> wrote: > +* Platform software shall configure ECAM I/O regions such that the The proposed RISC-V name for this memory type is "IO", but it is up in the air for the moment as to whether the the memory types supported by Svpbmt will have acronym names (i.e. IO and NC), or just use thier longer descriptive names, e.g. Non-cacheable, non-idempotent, strongly-ordered I/O memory for "IO". Overall it is probably better to make the above statement in a somewhat more generic manner terminology-wise. For example:
This implicitly allows for systems that do and don't support Svpbmt. > +Platform software would likely configure these per root port regions Same suggestion as above. > +====== PCIe cache coherency ARM uses "No_snoop", but others will use No-snoop and No Snoop. Avoiding the last form avoids any ambiguity when not using it followed by "bit", i.e. "No Snoop bit" is pretty clear, whereas referring to just "No Snoop" as a transaction attribute to some might be ambiguous as to whether "Snoop" or "No Snoop" is the attribute. Myself, I don't have a significant leaning, but one alternative to the above sentence could be:
or ...
I maybe lean a little bit towards that last option. That also avoids use of the linguistic double negative. Greg |
|
[PATCH V2 2/2] contributors: Add Abner as contributor
From: Abner Chang <abner.chang@...>
Signed-off-by: Abner Chang <abner.chang@...> --- contributors.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contributors.adoc b/contributors.adoc index a1ea5ef..5b150eb 100644 --- a/contributors.adoc +++ b/contributors.adoc @@ -29,7 +29,8 @@ Alistair Francis, Sunil V L, Rahul Pathak, Mayuresh Chitale, -Paul Donahue +Paul Donahue, +Abner Chang If you have contributed and are not listed, do let us know. We haven't forgotten you, but we may have forgotten to edit this list. -- 2.19.0.windows.1 |
|
[PATCH V2 1/2] riscv-platform-spec: Real-time Clock to server extension
From: Abner Chang <abner.chang@...>
In V2: Change the section to System Real-time and rephrase the content. In V1: Real-time clock is the server basic system peripheral to provide the real date/time information for server to manage the system date, time and time zones settings for different regions through the local POST time firmware utility, NTP or the remote management such as Redfish. Signed-off-by: Abner Chang <abner.chang@...> --- riscv-platform-spec.adoc | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/riscv-platform-spec.adoc b/riscv-platform-spec.adoc index 87ab7f8..4774987 100644 --- a/riscv-platform-spec.adoc +++ b/riscv-platform-spec.adoc @@ -443,13 +443,16 @@ The UEFI run time services listed below are required to be implemented. |SetVariable | 8.2 | A dedicated storage for firmware is required so that there is no conflict in access by both firmware and the OS. |QueryVariableInfo | 8.2 | -|GetTime | 8.3 | RTC Access by the OS -|SetTime | 8.3 | If it is not possible to set the RTC, -the SetTime() can return an error. +|GetTime | 8.3 | System Real-time accessed by the +OS and firmware.<<SystemRealTime,(Refer to System Real-time section)>> +|SetTime | 8.3 | System Real-time set by the +OS and firmware.<<SystemRealTime,(Refer to System Real-time section)>> |GetWakeupTime | 8.3 | Interface is required to be -implemented but it can return EFI_UNSUPPORTED. +implemented but it can return EFI_UNSUPPORTED.<<SystemRealTime,(Refer to +System Real-time section)>> |SetWakeupTime | 8.3 | Interface is required to be -implemented but it can return EFI_UNSUPPORTED. +implemented but it can return EFI_UNSUPPORTED.<<SystemRealTime,(Refer to +System Real-time section)>> |SetVirtualAddressMap | 8.4 | |ConvertPointer | 8.4 | |GetNextHighMonotonicCount | 8.5 | @@ -463,13 +466,36 @@ implemented but it can return EFI_UNSUPPORTED. |=== ==== System Peripherals -* Clock and Timers +===== Clock and Timers ** Platforms are required to implement the time CSR. ** Platforms are required to implement the https://lists.riscv.org/g/tech-privileged/message/404[Sstc] extension. ** Platforms are required to delegate the supervisor timer interrupt to 'S' mode. If the 'H' extension is implemented then the platforms are required to delegate the virtual supervisor timer interrupt to 'VS' mode. + +===== System Real-time[[SystemRealTime]] +In order to facilitate server manageability, server extension platform is +required to provide the mechanism to maintain system date and time. The +mechanism could be the Real-time clock on platform as it mentioned in UEFI +spec, or other implementations that can provide the date and time information +to UEFI runtime Time service. + +The GetTime()and SetTime() UEFI runtime service +must be implemented by firmware to incorporate with the underlying system +Real-time mechanism, however the SetTime() is allowed to be unsupported if the +platform doesn’t require the feature to set date and time or the system +Real-time mechanism doesn’t have capability to set time. UEFI GetWakeupTime() +and SetWakeupTime() runtime services are also required to be implemented on +server extension platform. However, those two runtime services can return +EFI_UNSUPPORTED to the caller if the wake up from time is not supported by the +platform. + +Timezone and Daylight Saving Time (DST) are also defined in UEFI runtime Time +service, however the system Real-time mechanism may not have the capability +to maintain this information. Firmware can always return the local time without +timezone and DST information, or firmware incorporates with other facilities +such as BMC, UEFI variable or boot time system configuration utility to +maintain this information with the system Real-time mechanism. + * PCI-E ==== Secure Boot -- 2.19.0.windows.1 |
|
Re: [PATCH 1/1] Initial commit of PLIC
Atish Patra <Atish.Patra@...> 於 2021年7月2日 週五 上午2:40寫道: On Sun, 2021-06-20 at 21:32 +0800, Abner Chang wrote: Added to spec.
Merged to riscv-plic-spec with Atish and Alistair's Reviewed-by. Abner
|
|
[PATCH v2 2/2] contributors: Add Abner as contributor
From: Abner Chang <abner.chang@...>
Signed-off-by: Abner Chang <renba.chang@...> Signed-off-by: Abner Chang <abner.chang@...> --- contributors.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/contributors.adoc b/contributors.adoc index a1ea5ef..5b150eb 100644 --- a/contributors.adoc +++ b/contributors.adoc @@ -29,7 +29,8 @@ Alistair Francis, Sunil V L, Rahul Pathak, Mayuresh Chitale, -Paul Donahue +Paul Donahue, +Abner Chang If you have contributed and are not listed, do let us know. We haven't forgotten you, but we may have forgotten to edit this list. -- 2.19.0.windows.1 |
|
[PATCH v2 1/2] riscv-platform-spec: Interrupt Controller
From: Abner Chang <abner.chang@...>
Initial version of Interrupt Controller, Software Interrupt, and Timer Requirements. This patch combines the text sent out by Kumar and the patch Abner sent previously. Signed-off-by: Abner Chang <renba.chang@...> Cc: Kumar Sankaran <ksankaran@...> Cc: Anup Patel <anup.patel@...> Signed-off-by: Abner Chang <abner.chang@...> --- riscv-platform-spec.adoc | 125 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 120 insertions(+), 5 deletions(-) diff --git a/riscv-platform-spec.adoc b/riscv-platform-spec.adoc index 87ab7f8..b59dacf 100644 --- a/riscv-platform-spec.adoc +++ b/riscv-platform-spec.adoc @@ -64,8 +64,14 @@ The M platform has the following extensions: |EE | Execution Environment |OSPM | Operating System Power Management |RV32GC | RISC-V 32-bit general purpose ISA described as RV32IMAFDC. -|RV64GC | RISC-V 64-bit general purpose ISA described as RV64IMAFDC. +|RV64GC | RISC-V 64-bit general purpose ISA described as RV64IMAFDC. |RAS | Reliability, Availability, and Serviceability +|CLINT | Legacy Core-Local Interrupt Controller +|ACLINT | Advanced CLINT +|PLIC | Legacy Platform-Level Interrupt Controller +|APLIC | Advanced PLIC +|AIA | Advanced Interrupt Architecture +|IMSIC | Incomning MSI Controller |=== === Specifications @@ -179,10 +185,114 @@ each must be 1 The default should allow code that's sensitive to these requirements to be debugged. -==== Interrupt Controller -* AIA -* PLIC + CLINT -* Interrupt Assignments +==== Interrupt Controller, Software Interrupt, and Timer Requirements +In the following requirements, +https://github.com/riscv/riscv-aia[*AIA*] refers to the Advanced Interrupt Architecture, https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc[*ACLINT*] +refers to the Advanced *CLINT*. AIA comprises two separate components: `IMSICs` and `APLICs`. +If supported, there is an `IMSIC` device associated with each hart. +If supported, *APLIC* devices are global to all harts, and there may be one or +multiple in a system. *ACLINT* comprises three separate components: `MTIMER` for +Timer support, and `MSWI` and `SSWI` for Machine-level and Supervisor-level +Software Interrupt (IPI) support. + +https://github.com/riscv/riscv-plic-spec/blob/master/riscv-plic.adoc[*PLIC*] +refers to the legacy Platform-Level Interrupt Controller that provides +facilities to route external interrupts to a hart context with a given privilege +mode. The number of non-local interrupt sources supported by PLIC and how does +each of them connect to the hart context is PLIC core implementation-specific. + +*CLINT* is a legacy Core-Local Interrupt Controller that is a compatible subset of +ACLINT which provides facilities to trigger Software (IPI) and Timer interrupts to +hart. + +.The following table summarizes what features are supported for four classes of OS/A platforms. +[width="100%",cols="^,^,^,^,^,^,^,^,^,^,^,^,^"] +|======= +.2+|*OS-A Platform* 3+|*MSIs* 3+|*Wired Interrupts* 3+|*IPIs* 3+|*Timer* +|M-level|S-level|VS-level|M-level|S-level|VS-level|M-level|S-level|VS-level|M-level|S-level|VS-level +|Existing|NA|NA|NA|PLIC|PLIC|PLIC + +_(Trap and emulate)_|MSWI + +https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc[`*ACLINT*`]| +SBI IPI + +https://github.com/riscv/riscv-sbi-doc[`*SBI*`]|SBI IPI + +https://github.com/riscv/riscv-sbi-doc[`*SBI*`]|MTIMER + +https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc[`*ACLINT*`]|SBI Timer + +https://github.com/riscv/riscv-sbi-doc[`*SBI*`]|SBI Timer + +https://github.com/riscv/riscv-sbi-doc[`*SBI*`] +|Only Wired IRQs|NA|NA|NA|APLIC M-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC S-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC S-level + +_(Trap and emulate)_ + +https://github.com/riscv/riscv-aia[`*AIA*`]|MSWI + +https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc[`*ACLINT*`]| +SSWI + +https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc[`*ACLINT*`]| +SBI IPI + +https://github.com/riscv/riscv-sbi-doc[`*SBI*`]|MTIMER + +https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc[`*ACLINT*`]| +Priv Sstc + +https://github.com/riscv/riscv-isa-manual/releases[`*Priv Spec*`]| +Priv Sstc + +https://github.com/riscv/riscv-isa-manual/releases[`*Priv Spec*`] +|MSIs and Wired IRQs|IMSIC M-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|IMSIC S-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC S-level + +_(Trap and emulate)_ + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC M-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC S-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC S-level + +_(Trap and emulate)_ + +https://github.com/riscv/riscv-aia[`*AIA*`]|IMSIC M-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|IMSIC S-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|SBI IPI + +https://github.com/riscv/riscv-sbi-doc[`*SBI*`]|MTIMER + +https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc[`*ACLINT*`]| +Priv Sstc + +https://github.com/riscv/riscv-isa-manual/releases[`*Priv Spec*`]| +Priv Sstc + +https://github.com/riscv/riscv-isa-manual/releases[`*Priv Spec*`] +|MSIs, Virtual MSIs and Wired IRQs|IMSIC M-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|IMSIC S-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC VS-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC M-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC S-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|APLIC S-level + +_(Trap and emulate)_ + +https://github.com/riscv/riscv-aia[`*AIA*`]|IMSIC M-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|IMSIC S-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|IMSIC VS-level + +https://github.com/riscv/riscv-aia[`*AIA*`]|MTIMER + +https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc[`*ACLINT*`]| +Priv Sstc + +https://github.com/riscv/riscv-isa-manual/releases[`*Priv Spec*`]| +Priv Sstc + +https://github.com/riscv/riscv-isa-manual/releases[`*Priv Spec*`] +|======= + +* For Timer support, one or more ACLINT MTIMER devices are Required for OS-A platform. +One MTIMER may be used for all harts, or multiple MTIMERs may be used with +multiple topological groups of harts. The base address of MTIMER memory map registers +is platform implementation-specific, however, the format of MTIMER operation parameters +(`mtime` and `mtimecmp` registers) must be compliant with +https://github.com/riscv/riscv-aclint/blob/main/riscv-aclint.adoc#21-register-map[ACLINT MTIMER Register Map] + +* For Interrupt Controller and Software Interrupt support, one of the following three +choices below is Required + ** PLIC plus one or more ACLINT MSWI devices - DEPRECATED + *** One MSWI may be used for all harts, or multiple MSWIs may be used with +multiple topological groups of harts + *** Only wired interrupts and M-mode IPIs are supported + *** Virtualization is not supported + *** This compatibly supports legacy PLIC + CLINT designs + ** One or more AIA APLIC devices plus one or more pairs of ACLINT MSWI and ACLINT SSWI devices + *** One MSWI/SSWI pair may be used for all harts, or multiple MSWI/SSWI +pairs may be used with multiple topological groups of harts + *** Only wired interrupts are supported + *** Both M-mode and S-mode IPIs are supported + *** Virtualization is not supported + ** Zero, one, or more AIA APLIC devices plus per-hart AIA IMSIC devices + *** Both wired and MSI external interrupts are supported + *** Both M-mode and S-mode IPIs are supported via IMSICs + *** Virtualization is supported + *** Zero APLICs if there are no wired interrupts and only MSIs ==== System Peripherals * UART/Serial Console @@ -513,6 +623,11 @@ in the physical RV processor. + * Logging and/or reporting of errors can be masked. + * PCIe AER capability is required. + +==== Interrupt Controller, Software Interrupt, and Timer Requirements + * For Timer support, ACLINT MTIMER devices is/are Required + * For Interrupt Controller and Software Interrupt support, the following one choice is Required + - Zero, one, or more AIA APLIC devices plus per-hart AIA IMSIC devices + // M Platform == M Platform -- 2.19.0.windows.1 |
|
[PATCH v2 0/2] Interrupt Controller Spec
From: Abner Chang <abner.chang@...>
In V2: - Update Interrupt Controller table in platform spec. - Add comma before Abner Chang in the contributors list. In V1: Initial version of Interrupt Controller, Software Interrupt, and Timer Requirements. This patch combines the text sent out by Kumar and the patch Abner sent previously. Abner Chang (2): riscv-platform-spec: Interrupt Controller contributors: Add Abner as contributor contributors.adoc | 3 +- riscv-platform-spec.adoc | 125 +++++++++++++++++++++++++++++++++++++-- 2 files changed, 122 insertions(+), 6 deletions(-) -- 2.19.0.windows.1 |
|