Date
1 - 2 of 2
[PATCH v4 2/2] Add HSM hart suspend function
We extend SBI HSM extenstion by adding hart suspend function. This hart
hart suspend function provide a standard interface for platform specific suspend (or low power) states and it can be used by supervisor software for CPU idle power managment. Signed-off-by: Anup Patel <anup.patel@...> --- riscv-sbi-hsm.ditaa | 40 +++++++----- riscv-sbi-hsm.png | Bin 16836 -> 31264 bytes riscv-sbi.adoc | 145 ++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 159 insertions(+), 26 deletions(-) diff --git a/riscv-sbi-hsm.ditaa b/riscv-sbi-hsm.ditaa index 72b6312..bd73993 100644 --- a/riscv-sbi-hsm.ditaa +++ b/riscv-sbi-hsm.ditaa @@ -1,19 +1,31 @@ - +-----------------+ - | | - /---------->|cF78 STOPPED |-----------\ - | | | | - | +-----------------+ |sbi_hart_start() -SBI implementation| |called by some + +-------------------+ + | | + /--------->|cF78 STOPPED |----------\ + | | | |sbi_hart_start() +SBI implementation| +-------------------+ |called by some stopping hart| |other hart | v - +-----------------------+ +-----------------------+ - |cCCC STOP_PENDING | |cCCC START_PENDING | - +-----------------------+ +-----------------------+ ++ +-------------------------+ +-------------------------+ ++ |cCCC STOP_PENDING | |cCCC START_PENDING | ++ +-------------------------+ +-------------------------+ ^ | sbi_hart_stop()| |SBI implementation called by| |starting hart - hart itself| +-----------------+ | - | | | | - \-----------|c0DB STARTED |<----------/ - | | - +-----------------+ + hart itself| +-------------------+ | + \----------| |<---------/ + |c0DB STARTED | + /--------->| |----------\ + | +-------------------+ |sbi_hart_suspend() +SBI implementation| |called by + resuming hart| |hart itself + | v + +-------------------------+ +-------------------------+ + |cCCC RESUME_PENDING | |cCCC SUSPEND_PENDING | + +-------------------------+ +-------------------------+ + ^ | + Hart recieved| |SBI implementation + an interrupt or| +-------------------+ |suspending hart + platform event| | | | + \----------|c1CF SUSPENDED |<---------/ + | | + +-------------------+ diff --git a/riscv-sbi-hsm.png b/riscv-sbi-hsm.png index 033a0b785af2aba03cdcc8e814fd8f883eccc4fb..14aca4f0b54941f3027b7a4d5605f4e2652b9e86 100644 GIT binary patch literal 31264 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 A>;M1& literal 16836 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 Bm-zqy diff --git a/riscv-sbi.adoc b/riscv-sbi.adoc index a4c3be3..53b4df0 100644 --- a/riscv-sbi.adoc +++ b/riscv-sbi.adoc @@ -33,6 +33,7 @@ https://creativecommons.org/licenses/by/4.0/. * Added SBI system reset extension * Improved SBI introduction secion * Improved documentation of SBI hart state managment extension +* Added suspend function to SBI hart state managment extension === Version 0.2 @@ -691,6 +692,18 @@ along with a unique **HSM state id** for each state: itself from the **STARTED** state and the SBI implementation is still working to get the hart in the **STOPPED** state. +| 4 | SUSPENDED | This hart is in a platform specific suspend + (or low power) state. +| 5 | SUSPEND_PENDING | The hart has requestd to put itself in a + platform specific low power state from the + **STARTED** state and the SBI implementation + is still working to get the hart in the + platform specific **SUSPENDED** state. +| 6 | RESUME_PENDING | An interrupt or platform specific hardware + event has caused the hart to resume normal + execution from the **SUSPENDED** state and + the SBI implementation is still working to + get the hart in the **STARTED** state. |=== At any point in time, a hart should be in one of the above mentioned hart @@ -701,12 +714,32 @@ the state machine shown below in the <<figure_hsm>>. .SBI HSM State Machine image::riscv-sbi-hsm.png[] -A platform can have multiple harts grouped into a cluster with separate power -and clock. The HSM states are only hart level states and does not imply any -thing about the cluster level states. The SBI implementation can incorporate -a plaform specific cluster level state transitions but SBI implementation -must ensure that there is no impact on hart level state transition latency -due to implicit cluster level state transitions. +A platform can have multiple harts grouped into a hierarchical topology +groups (namely cores, clusters, nodes, etc) with separate platform specific +low-power states for each hierarchical group. These platform specific +low-power states of hierarchial topology groups can be represented as +platform specific suspend states of a hart. A SBI implementation can +utilize the suspend states of higher topology groups using one of the +following approaches: + +. *Platform-coordinated:* In this approach, when a hart becomes idle the + supervisor-mode power-managment software will request deepest suspend + state for the hart and higher topology groups. A SBI implementation + should choose a suspend state at higher topology group which is: +.. Not deeper than the specified suspend state +.. Wake-up latency is not higher than the wake-up latency of the + specified suspend state +. *OS-inititated:* In this approach, the supervisor-mode power-managment + software will directly request a suspend state for higher topology group + after the last hart in that group becomes idle. When a hart becomes idle, + the supervisor-mode power-managment software will always select suspend + state for the hart itself but it will select a suspend state for a higher + topology group only if the hart is the last running hart in the group. + A SBI implementation should: +.. Never choose a suspend state for higher topology group different from + the specified suspend state +.. Always prefer most recent suspend state requested for higher topology + group === Function: HART start (FID #0) @@ -738,8 +771,8 @@ This call is asynchronous -- more specifically, the `sbi_hart_start()` may return before target hart starts executing as long as the SBI implemenation is capable of ensuring the return code is accurate. It is recommended that if the SBI implementation is a platform runtime firmware executing in -machine-mode (M-mode) then it MUST configure PMP and other the M-mode -state before executing in supervisor-mode. +machine-mode (M-mode) then it MUST configure PMP and other M-mode state +before executing in supervisor-mode. The `hartid` parameter specifies the target hart which is to be started. @@ -804,7 +837,8 @@ struct sbiret sbi_hart_get_status(unsigned long hartid) Get the current status (or HSM state id) of the given hart in `sbiret.value`, or an error through `sbiret.error`. -The `hartid` parameter specifies the target hart which is to be started. +The `hartid` parameter specifies the target hart for which status is +required. The possible status (or HSM state id) values returned in `sbiret.value` are described in <<table_hsm_states>>. @@ -821,9 +855,95 @@ The possible error codes returned in `sbiret.error` are shown in the |=== The harts may transition HSM states at any time due to any concurrent -`sbi_hart_start()` or `sbi_hart_stop()` calls, the return value from this -function may not represent the actual state of the hart at the time of -return value verification. +`sbi_hart_start()` or `sbi_hart_stop()` or `sbi_hart_suspend()` calls, +the return value from this function may not represent the actual state +of the hart at the time of return value verification. + +=== Function: HART suspend (FID #3) + +[source, C] +---- +struct sbiret sbi_hart_suspend(uint32_t suspend_type, + unsigned long resume_addr, + unsigned long opaque) +---- + +Request the SBI implementation to put the calling hart in a platform specfic +suspend (or low power) state specified by the `suspend_type` parameter. The +hart will automatically come out of suspended state and resume normal +execution when it recieves an interrupt or platform specific hardware event. + +The platform specific suspend states for a hart can be either retentive +or non-rententive in nature. A retentive suspend state will preserve hart +register and CSR values for all privilege modes whereas a non-retentive +suspend state will not preserve hart register and CSR values. + +Resuming from a retentive suspend state is straight forward and the +supervisor-mode software will see SBI suspend call return without any +failures. + +Resuming from a non-retentive suspend state is relatively more involved and +requires software to restore various hart registers and CSRs for all privilege +modes. Upon resuming from non-retentive suspend state, the hart will jump to +supervisor-mode at address specified by `resume_addr` with specific registers +values described in the <<table_hsm_hart_resume_regs>> below. + +[#table_hsm_hart_resume_regs] +.HSM Hart Resume Register State +[cols=",", width=80%, align="center", options="header"] +|=== +|Register Name | Register Value +|satp | 0 +|sstatus.SIE | 0 +|a0 | hartid +|a1 | `opaque` parameter +2+|All other registers remain in an undefined state. +|=== + +The `suspend_type` parameter is 32 bits wide and the possible values are +shown in <<table_hsm_hart_suspend_types>> below. + +[#table_hsm_hart_suspend_types] +.HSM Hart Suspend Types +[cols="1,2", width=90%, align="center", options="header"] +|=== +| Value | Description +| 0x00000000 | Default retentive suspend +| 0x00000001 - 0x0FFFFFFF | Reserved for future use +| 0x10000000 - 0x7FFFFFFF | Platform specific retentive suspend +| 0x80000000 | Default non-retentive suspend +| 0x80000001 - 0x8FFFFFFF | Reserved for future use +| 0x90000000 - 0xFFFFFFFF | Platform specific non-retentive suspend +| > 0xFFFFFFFF | Reserved (and non-existent on RV32) +|=== + +The `resume_addr` parameter points to a runtime-specified physical address, +where the hart can resume execution in supervisor-mode after a non-retentive +suspend. + +The `opaque` parameter is a XLEN-bit value which will be set in the `a1` +register when the hart resumes exectution at `resume_addr` after a +non-retentive suspend. + +The possible error codes returned in `sbiret.error` are shown in the +<<table_hsm_hart_suspend_errors>> below. + +[#table_hsm_hart_suspend_errors] +.HSM Hart Suspend Errors +[cols="1,2", width=100%, align="center", options="header"] +|=== +| Error code | Description +| SBI_SUCCESS | Hart has suspended and resumed back successfully + from a retentive suspend state. +| SBI_ERR_INVALID_PARAM | `suspend_type` is not valid. +| SBI_ERR_NOT_SUPPORTED | `suspend_type` is valid but not implemented. +| SBI_ERR_INVALID_ADDRESS | `resume_addr` is not valid possibly due to + following reasons: + + * It is not a valid physical address. + + * The address is prohibited by PMP to run in + supervisor mode. +| SBI_ERR_FAILED | The suspend request failed for unknown reasons. +|=== === Function Listing @@ -835,6 +955,7 @@ return value verification. | sbi_hart_start | 0.2 | 0 | 0x48534D | sbi_hart_stop | 0.2 | 1 | 0x48534D | sbi_hart_get_status | 0.2 | 2 | 0x48534D +| sbi_hart_suspend | 0.3 | 3 | 0x48534D |=== == System Reset Extension (EID #0x53525354 "SRST") -- 2.25.1 |
|
atishp@...
On Wed, 2021-02-24 at 11:53 +0530, Anup Patel wrote:
We extend SBI HSM extenstion by adding hart suspend function. ThisReviewed-by: Atish Patra <atish.patra@...> -- Regards, Atish |
|