From db0b9bfc31cd9e4414127a51d656a88f9bd239e1 Mon Sep 17 00:00:00 2001 From: Joshua Yeong Date: Thu, 25 Jul 2024 17:58:30 +0800 Subject: [PATCH] service group: Combine return format as array Combine return format as single array. Signed-off-by: Joshua Yeong --- src/srvgrp-clock.adoc | 67 +++++++++++---------- src/srvgrp-performance.adoc | 108 +++++++++++++++++----------------- src/srvgrp-voltage.adoc | 114 ++++++++++++++++-------------------- 3 files changed, 138 insertions(+), 151 deletions(-) diff --git a/src/srvgrp-clock.adoc b/src/srvgrp-clock.adoc index eb37b7d..839a15b 100644 --- a/src/srvgrp-clock.adoc +++ b/src/srvgrp-clock.adoc @@ -10,7 +10,7 @@ ifndef::rootpath[] endif::rootpath[] === Service Group - *CLOCK* (servicegroup_id: 0x00007) -This service group is for the management of system clocks. Services defined in +This service group is for the management of system clocks. Services defined in this group are used to enable or disable clocks, and to set/get clock rates. Each clock in the system is identified by the clock ID, which is an integer @@ -30,6 +30,20 @@ through supported hardware description mechanisms. Each clock rate is a tuple of two `32 bits` values `(uint32, uint32)` represented as `(clock_rate_low, clock_rate_high)` and packed in the same order where `clock_rate_low` is at the lower index than the `clock_rate_high`. +[#table_clock_rate] +.CLOCK rate +[cols="1,1,5" width=100%, align="center"] +|=== +3+| *Discrete Format* +| *Word* | *Name* | *Description* +| 0 | volt_uV | Fixed Voltage (uV) +3+| +3+| *Linear Format* +| *Word* | *Name* | *Description* +| 0 | min_Hz | lowest physical rate +| 1 | max_Hz | highest physical rate +| 2 | step_Hz | Step between two successive rates +|=== Below table lists the services in this group: [#table_clock_services] @@ -57,13 +71,13 @@ The platform can optionally support notifications of events which might occur in the platform. The PuC can send these notification messages to AP if they are implemented and the AP has subscribed to these. The supported events are described in <>. - + [#table_clock_ennotification_request_data] .Request Data [cols="1, 2, 1, 7", width=100%, align="center", options="header"] |=== | Word | Name | Type | Description -| 0 | EVENT_ID | uint32 | Event to be subscribed for +| 0 | EVENT_ID | uint32 | Event to be subscribed for notification. |=== @@ -141,21 +155,14 @@ the future, as needed. ! RPMI_ERROR_NOT_FOUND ! Clock not found !=== - Other errors <> -| 1 | FLAGS | uint32 | +| 1 | FLAGS | uint32 | [cols="2,5a"] !=== ! *Bits* ! *Description* -! [31:30] ! CLOCK_FORMAT +! [31:30] ! CLOCK_FORMAT (Refer to <>) ---- 0b00: Discrete Format -Each element in the CLOCK_RATE array is a supported discrete clock rate value packed in ascending order. Each rate is in Hertz. - 0b01: Linear Range -The CLOCK_RATE array contains the triplet (min_Hz, max_Hz, step_Hz). -Each item in the triplet is a clock rate value. -CLOCK_RATE[0] = min_Hz (lowest physical rate that the clock can synthesize) -CLOCK_RATE[1] = max_Hz (highest physical rate that the clock can synthesize) -CLOCK_RATE[2] = step_Hz (Step between two successive rates) ---- ! [29:0] ! _Reserved_ !=== @@ -165,24 +172,24 @@ CLOCK_RATE[2] = step_Hz (Step between two successive rates) |=== ==== Service: *CLK_GET_SUPPORTED_RATES* -Each domain may support multiple clock rate values which are allowed by the +Each domain may support multiple clock rate values which are allowed by the domain to operate. Message can also pass the `CLOCK_RATE_INDEX` which is the index -to the first rate value to be described in the return rate array. If all -supported rate values are required then this index value can be `0`. +to the first rate value to be described in the return rate array. If all +supported rate values are required then this index value can be `0`. -If the CLOCK_FORMAT is discrete then the clock rate in the received data is an +If the CLOCK_FORMAT is discrete then the clock rate in the received data is an array of supported discrete rate values packed in ascending order starting from -the lower index in the CLOCK_RATE field. If the CLOCK_FORMAT is a linear range, +the lower index in the CLOCK_RATE field. If the CLOCK_FORMAT is a linear range, then the CLOCK_RATE array contains a triplet of `(min_Hz, max_Hz, step_Hz)` where -each item in the triplet is a clock rate value. +each item in the triplet is a clock rate value. -Total words required for the number of clock rates according to the format in -one message cannot exceed the total words available in one message DATA field. +Total words required for the number of clock rates according to the format in +one message cannot exceed the total words available in one message DATA field. If they exceed then the PuC will return the number of clock rates which can be accommodated in one message and set the REMAINING field accordingly. The AP, when REMAINING field is not `0` must call this service again with appropriate -CLOCK_RATE_INDEX set to get the remaining clock rates. It's possible that -multiple service calls may be required to get all the clock rates. +CLOCK_RATE_INDEX set to get the remaining clock rates. It's possible that +multiple service calls may be required to get all the clock rates. In case the CLOCK_FORMAT is a linear range the RETURNED field will be set to `3`. [#table_clock_getsupprates_request_data] @@ -208,12 +215,10 @@ In case the CLOCK_FORMAT is a linear range the RETURNED field will be set to `3` ! RPMI_ERROR_INVALID_PARAMETER ! CLOCK_RATE_INDEX is not in valid range. !=== - Other errors <> -| 1 | FLAGS | uint32 | _Reserved_ and must be `0`. -| 2 | REMAINING | uint32 | Remaining number of clock rates. -| 3 | RETURNED | uint32 | Number of clock rates returned in this request. -| 4 | CLOCK_RATE[0] | (uint32, uint32) | Clock rate value. -| 5 | CLOCK_RATE[1] | (uint32, uint32) | Clock rate value. -| ... | CLOCK_RATE[N-1] | (uint32, uint32) | Clock rate value. +| 1 | FLAGS | uint32 | _Reserved_ and must be `0`. +| 2 | REMAINING | uint32 | Remaining number of clock rates. +| 3 | RETURNED | uint32 | Number of clock rates returned in this request. +| 4 | CLOCK_RATE[N] | struct | Clock rate. (<>) |=== ==== Service: *CLK_SET_CONFIG* @@ -230,7 +235,7 @@ Set clock config, enable or disable the clock. !=== ! *Bits* ! *Description* ! [31:1] ! _Reserved_ -! [0] ! +! [0] ! 0b0: Disable clock 0b1: Enable clock @@ -282,7 +287,7 @@ Get the current status of a clock, if it's enabled or disabled. [cols="2,5a"] !=== ! *Value* ! *Description* -! 0x0 ! Disabled +! 0x0 ! Disabled ! 0x1 ! Enabled !=== |=== @@ -307,7 +312,7 @@ Set clock rate. 0b10: Auto. Platform autonomously choose rate closest to the requested rate. ---- -! [29:0] ! _Reserved_ +! [29:0] ! _Reserved_ !=== | 2 | CLOCK_RATE_LOW | uint32 | Lower 32 bits of the clock rate in Hertz. | 3 | CLOCK_RATE_HIGH | uint32 | Upper 32 bits of the clock rate in Hertz. diff --git a/src/srvgrp-performance.adoc b/src/srvgrp-performance.adoc index 2c02dc2..a6604c3 100644 --- a/src/srvgrp-performance.adoc +++ b/src/srvgrp-performance.adoc @@ -15,10 +15,10 @@ group of devices or Application Processors that operate in the same performance domain. Unlike legacy performance control mechanisms where the OS was responsible to directly control the voltage and clocks this mechanism instead operates on an metric less integer performance scale. Each integer value on this -scale represents a performance operating point. What this scale represents and -the metric is completely platform dependent. Values on this scale are discrete -and the platform is given complete control over mapping these performance -operating points to performance states which eventually gets converted into +scale represents a performance operating point. What this scale represents and +the metric is completely platform dependent. Values on this scale are discrete +and the platform is given complete control over mapping these performance +operating points to performance states which eventually gets converted into hardware parameters such as voltage and frequency, etc. The mapping between levels and frequencies can be as simple as using a multiplication factor of 1000. @@ -27,12 +27,23 @@ for the Application Processors. This service group is primarily intended for devices such as GPUs, accelerators, etc but can also be used for Application Processors. -It is important to note that performance domains should not be confused with -power domains. A performance domain is defined as a set of devices that must -always run at the same performance level, while a power domain is defined as a -set of devices that can be turned on or off together for power management +It is important to note that performance domains should not be confused with +power domains. A performance domain is defined as a set of devices that must +always run at the same performance level, while a power domain is defined as a +set of devices that can be turned on or off together for power management purposes. +*Performance Level Format*:: +[#table_performance_level] +.PERFORMANCE level +[cols="1,1,5" width=100%, align="center"] +|=== +| *Word* | *Name* | *Description* +| 0 | Clock frequency | Clock frequency (in kHz) +| 1 | Power Cost | Power Cost (in uW) +| 2 | Transition Latency | Latency (in us) +|=== + [#table_perf_services] .PERFORMANCE Services [cols="1, 3, 2", width=100%, align="center", options="header"] @@ -51,9 +62,9 @@ purposes. [#performance-notifications] ==== Notifications -When a client registers for performance change notifications, the platform will -send notification to the client whenever there is a change in the performance -level, performance limit or the performance power of a specific performance +When a client registers for performance change notifications, the platform will +send notification to the client whenever there is a change in the performance +level, performance limit or the performance power of a specific performance domain. This notification is typically sent by the Platform Microcontroller to inform clients in the system about changes in the performance domain. @@ -62,33 +73,33 @@ inform clients in the system about changes in the performance domain. [cols="1, 3, 5a, 2", width=100%, align="center", options="header"] |=== | Event ID | Name | Event Data | Description -| 0x001 | PERF_POWER_CHANGE | +| 0x001 | PERF_POWER_CHANGE | [cols="2,2,5"] !=== ! *Word* ! Type ! *Description* ! 0 ! uint32 ! Performance domain ID whose power changed. ! 1 ! uint32 ! New power value (uW) -!=== +!=== | Performance power changed notification. -| 0x002 | PERF_LIMIT_CHANGE | +| 0x002 | PERF_LIMIT_CHANGE | [cols="2,2,5"] !=== ! *Word* ! Type ! *Description* -! 0 ! uint32 ! Performance domain ID whose performance limit +! 0 ! uint32 ! Performance domain ID whose performance limit changed. ! 1 ! uint32 ! New maximum performance level. ! 2 ! uint32 ! New minimum performance level. -!=== +!=== | Performance limit changed notification. -| 0x003 | PERF_LEVEL_CHANGE | +| 0x003 | PERF_LEVEL_CHANGE | [cols="2,2,5"] !=== ! *Word* ! Type ! *Description* ! 0 ! uint32 ! Performance domain ID whose performance level changed. ! 1 ! uint32 ! New performance level. -!=== +!=== | Performance level changed notification. |=== @@ -142,7 +153,7 @@ The Fast-channel currently supports only the following Performance services: ==== Service: *PERF_ENABLE_NOTIFICATION* This service is to enable or disable the performance changed notification event. The notification is sent from the PuC when the performance level, performance -limit or performance power of a performance domain has changed. This allows the +limit or performance power of a performance domain has changed. This allows the system to adjust its behavior in response to performance changes and ensure that it is operating within its desired performance level. The supported events are described in <>. @@ -152,7 +163,7 @@ described in <>. [cols="1, 2, 1, 7", width=100%, align="center", options="header"] |=== | Word | Name | Type | Description -| 0 | EVENT_ID | uint32 | Event to be subscribed for +| 0 | EVENT_ID | uint32 | Event to be subscribed for notification. |=== @@ -175,11 +186,11 @@ notification. ==== Service: *PERF_GET_NUM_DOMAINS* This service returns the number of performance domains supported by the system. -The number of performance domains can vary depending on the hardware platform -and implementation. In general, performance domains are used to group related -hardware components, such as CPUs, GPUs, memory, and peripherals, into separate -domains that can be independently controlled and managed. This allows for more -fine-grained control over the performance of specific components, which can be +The number of performance domains can vary depending on the hardware platform +and implementation. In general, performance domains are used to group related +hardware components, such as CPUs, GPUs, memory, and peripherals, into separate +domains that can be independently controlled and managed. This allows for more +fine-grained control over the performance of specific components, which can be important for optimizing system performance and power consumption. [#table_perf_getdomains_request_data] @@ -203,9 +214,9 @@ important for optimizing system performance and power consumption. ==== Service: *PERF_GET_ATTRIBUTES* -This service is used to retrieve the attributes of a specific performance -domain. These attributes provide information about the performance capabilities -and constraints of the domain, such as the performance limit and performance +This service is used to retrieve the attributes of a specific performance +domain. These attributes provide information about the performance capabilities +and constraints of the domain, such as the performance limit and performance level. [#table_perf_getattrs_request_data] @@ -234,13 +245,13 @@ level. !=== ! *Bits* ! *Description* ! [31] ! PERF_LIMIT_SETTING + -This attribute indicates whether the platform allows software to set the +This attribute indicates whether the platform allows software to set the performance limit/range for a specific performance domain. 0b0: Performance limit change not allowed. 0b1: Performance limit change allowed. ! [30] ! PERF_LEVEL_SETTING + -This attribute indicates whether the platform allows software to set the +This attribute indicates whether the platform allows software to set the performance level for a specific performance domain. 0b0: Performance level change not allowed. @@ -255,7 +266,7 @@ channels for performance domain management. Total number of performance levels supported. ! [20:0] ! _Reserved_ !=== -| 2 | RATE_LIMIT_US | uint32 | Minimum amount of time that needs to +| 2 | RATE_LIMIT_US | uint32 | Minimum amount of time that needs to pass between two consecutive requests, in microseconds (us). | 3:6 | PERF_DOMAIN_NAME | uint8[16] | Performance domain name, a NULL-terminated ASCII string up to 16-bytes. |=== @@ -312,8 +323,8 @@ service calls may be required to get all the levels. [cols="1, 3, 1, 7", width=100%, align="center", options="header"] |=== | Word | Name | Type | Description -| 0 | DOMAIN_ID | uint32 | Performance Domain ID. This field -specifies the identifier of the performance domain whose OPPs are being +| 0 | DOMAIN_ID | uint32 | Performance Domain ID. This field +specifies the identifier of the performance domain whose OPPs are being described. | 1 | PERF_LEVEL_INDEX | uint32 | Start array index to read. First index starts from zero. @@ -333,23 +344,10 @@ First index starts from zero. ! RPMI_ERROR_INVALID_PARAMETER ! PERF_LEVEL_INDEX is invalid. !=== - Other errors <> -| 1 | FLAGS | uint32 | _Reserved_ and must be `0`. -| 2 | REMAINING | uint32 | Remaining number of levels. -| 3 | RETURNED | uint32 | Number of levels returned. Each level -compromises of three 32-bit words. -| 4 | LEVEL[0] | uint32[3] | Performance level -[cols="1,5"] -!=== -! *Word* ! *Description* -! 0 ! Performance level representing clock frequency in kilohertz (kHz) and -should be unique within this performance domain ID. -! 1 ! Power Cost in microwatt (uW). This is an optional parameter. -Set to value of zero to indicate that power cost is not returned by the -platform. -! 2 ! Transition latency, in microseconds (us). -!=== -| 7 | LEVEL[1] | uint32[3] | Performance level -| ... | LEVEL[N-1] | uint32[3] | Performance level +| 1 | FLAGS | uint32 | _Reserved_ and must be `0`. +| 2 | REMAINING | uint32 | Remaining number of levels (in format array). +| 3 | RETURNED | uint32 | Number of levels returned. (in format array) +| 4 | LEVEL[N] | struct | Performance level (<>) |=== @@ -383,7 +381,7 @@ performance domain in the system. ==== Service: *PERF_SET_LEVEL* -This service is used to set the current performance level of a specific +This service is used to set the current performance level of a specific performance domain in the system. [#table_perf_setlevel_request_data] @@ -417,7 +415,7 @@ performance level. ==== Service: *PERF_GET_LIMIT* -This service is used to obtain the current performance limit of a specific +This service is used to obtain the current performance limit of a specific performance domain in the system. [#table_perf_getlimit_request_data] @@ -447,7 +445,7 @@ performance domain in the system. ==== Service: *PERF_SET_LIMIT* -This service is used to set the current performance limit of a specific +This service is used to set the current performance limit of a specific performance domain in the system. [#table_perf_setlimit_request_data] @@ -507,7 +505,7 @@ This service allows clients to query attributes of the Fast-channel for a specif ! RPMI_ERROR_NOT_SUPPORTED ! Fast-channel not implemented !=== - Other errors <> -| 1 | FLAGS | uint32 | +| 1 | FLAGS | uint32 | [cols="2,5a"] !=== ! *Bits* ! *Description* @@ -538,7 +536,7 @@ doorbell is not supported. mask to apply for this service before ring the doorbell. This field is unused if doorbell is not supported. | 9 |DB_PRESERVED_HIGH | uint32 | An upper `32 bits` doorbell preserved -mask to apply for this service before ring the doorbell. This field is only +mask to apply for this service before ring the doorbell. This field is only valid if the doorbell register width is 64 bits. This field is unused if doorbell is not supported. |=== diff --git a/src/srvgrp-voltage.adoc b/src/srvgrp-voltage.adoc index 5c7329d..67174a7 100644 --- a/src/srvgrp-voltage.adoc +++ b/src/srvgrp-voltage.adoc @@ -17,6 +17,35 @@ voltage source, thereby influencing either the individual device or the collecti group of devices sharing the same voltage source. Each domain is identified by `DOMAIN_ID` which is a `32 bits` integer starting from `0`. +*Voltage Levels Format*:: +There are 4 types of voltage level formats supported in the voltage service +group. The voltage levels are represented as a group. +[#table_voltage_level] +.VOLTAGE Levels +[cols="1,1,5" width=100%, align="center"] +|=== +3+| *Fixed Voltage Format* +| *Word* | *Name* | *Description* +| 0 | volt_uV | Fixed Voltage (uV) +3+| +3+| *Simple Linear Format* +| *Word* | *Name* | *Description* +| 0 | min_uV | Lower boundary of voltage level (uV) +| 1 | max_uV | Upper boundary of voltage level (uV) +| 2 | step_uV | Step size (uV) +3+| +3+| *Multi-Linear Format* +| *Word* | *Name* | *Description* +| 0 | min_uV | Lower boundary of voltage level (uV) +| 1 | min_sel | Lowest selector for range +| 2 | max_sel | Highest selector for range +| 3 | step_uV | Step size (uV) +3+| +3+| *Discrete Format* +| *Word* | *Name* | *Description* +| 0 | volt_uV | Discrete voltage level (uV) +|=== + Below table lists the services in this group: [#table_voltage_services] .VOLTAGE Services @@ -43,14 +72,14 @@ The platform can optionally support notifications of events which might occur in the platform. The PuC can send these notification messages to the AP if they are implemented and the AP has subscribed to them. The supported events are described in <>. - + [#table_voltage_ennotification_request_data] .Request Data [cols="1, 2, 1, 7", width=100%, align="center", options="header"] |=== | Word | Name | Type | Description -| 0 | EVENT_ID | uint32 | Event to be subscribed for +| 0 | EVENT_ID | uint32 | Event to be subscribed for notification. |=== @@ -124,20 +153,16 @@ formats. Additional voltage formats can be accommodated in the future if require ! RPMI_ERROR_NOT_FOUND ! Voltage DOMAIN_ID not found !=== - Other errors <> -| 1 | FLAGS | uint32 | +| 1 | FLAGS | uint32 | [cols="2,5a"] !=== ! *Bits* ! *Description* -! [31:29] ! VOLTAGE_FORMAT +! [31:29] ! VOLTAGE_FORMAT (Refer to <>) ---- 0b000: Fixed voltage - -0b001: Simple-linear range containing single triplet (min_uV, max_uV, step_uV). - -0b010: Multi-linear range containing multiple linear ranges where each range contains (min_uV, min_sel, max_sel, step_uV). - +0b001: Simple-linear. +0b010: Multi-linear. 0b011: Discrete range. - 0b100 - 0b111: Reserved. ---- ! [28:1] ! _Reserved_ @@ -146,24 +171,20 @@ formats. Additional voltage formats can be accommodated in the future if require 0b0: Voltage domain can be enabled/disabled. 0b1: Voltage domain is always-on, voltage value can be changed in the supported voltage range. !=== -| 2 |NUM_LEVELS | uint32 | Number of voltage levels (word-size) -supported by the domain. Values are dependent on the VOLTAGE_FORMAT. Get the -voltage levels with VOLT_GET_SUPPORTED_LEVELS. +| 2 |NUM_LEVELS | uint32 | Number of voltage levels (in array) +supported by the domain. Get the voltage levels with VOLT_GET_SUPPORTED_LEVELS. [cols="2,5a"] !=== ! *Value* ! *Description* -! 1 ! When VOLTAGE_FORMAT=`0x0` -! 3 ! When VOLTAGE_FORMAT=`0x1` -! 4N ! When VOLTAGE_FORMAT=`0x2` (Multiple of 4 voltage level words) -! N ! When VOLTAGE_FORMAT=`0x3` (NUM_LEVELS is the number of -discrete voltage levels) +! 1 ! Fixed voltage format only +! N ! Simple-linear, Multi-linear and Discrete Range !=== | 3 | TRANSITION_LATENCY | uint32 | Transition latency, in microsecond (us). | 4:7 | VOLTAGE_DOMAIN_NAME | uint8[16] | Voltage domain name, a NULL-terminated ASCII string up to 16-bytes. |=== ==== Service: *VOLT_GET_SUPPORTED_LEVELS* -Each domain may support multiple voltage levels which are allowed by the domain +Each domain may support multiple voltage levels which are allowed by the domain to operate. Depending on the hardware, the voltage levels can be either discrete or stepwise range. In a discrete voltage range, the voltages will be arranged in sequence, starting @@ -203,56 +224,19 @@ all the voltage levels. ! RPMI_ERROR_INVALID_PARAMETER ! VOLTAGE_LEVEL_INDEX is not valid !=== - Other errors <> -| 1 | FLAGS | uint32 | _Reserved_ and must be `0`. -| 2 | REMAINING | uint32 | Remaining number of voltage levels (in word). -| 3 | RETURNED | uint32 | Number of voltage levels (in word) returned in this request. -| 4 | VOLTAGE | int32[N] | Voltage level - -[cols="1,1,5"] -!=== -3+! *Format: Fixed Voltage (VOLT_GET_ATTRIBUTES.FLAGS[31:29]: 0)* -! *Word* ! *Name* ! *Description* -! 0 ! volt_uV ! Fixed Voltage (uV) -!=== - -[cols="1,1,5"] -!=== -3+! *Format: Simple Linear (VOLT_GET_ATTRIBUTES.FLAGS[31:29]: 1)* -! *Word* ! *Name* ! *Description* -! 0 ! min_uV ! Lower boundary of voltage level (uV) -! 1 ! max_uV ! Upper boundary of voltage level (uV) -! 2 ! step_uV ! Step size (uV) -!=== - -[cols="1,1,5"] -!=== -3+! *Format: Multi-Linear (VOLT_GET_ATTRIBUTES.FLAGS[31:29]: 2)* -! *Word* ! *Name* ! *Description* -! 0 ! min_uV ! Lower boundary of voltage level (uV) -! 1 ! min_sel ! Lowest selector for range -! 2 ! max_sel ! Highest selector for range -! 3 ! step_uV ! Step size (uV) -!=== - -[cols="1,1,5"] -!=== -3+! *Format: Discrete (VOLT_GET_ATTRIBUTES.FLAGS[31:29]: 3)* -! *Word* ! *Name* ! *Description* -! 0 ! volt_uV ! Discrete voltage level (uV) -! 1 ! volt_uV ! Discrete voltage level (uV) -3+! ... -! N ! volt_uV ! Discrete voltage level (uV) -!=== - +| 1 | FLAGS | uint32 | _Reserved_ and must be `0`. +| 2 | REMAINING | uint32 | Remaining number of voltage levels (in array). +| 3 | RETURNED | uint32 | Number of voltage levels (in array) returned in this request. +| 4 | VOLTAGE_LEVEL[N] | struct | Voltage level. (<>) |=== ==== Service: *VOLT_SET_CONFIG* Set voltage config message enable or disable any voltage domain. Enabling the voltage means applying the domain with the voltage level to operate normally. The AP can -enable the voltage to any domain without knowing the actual voltage levels. +enable the voltage to any domain without knowing the actual voltage levels. Disabling the voltage level means disabling the voltage supply to the domain. -CONFIG field encodes these discrete settings which do not require AP to know +CONFIG field encodes these discrete settings which do not require AP to know the voltage level [#table_voltage_setdomainconfig_request_data] .Request Data @@ -265,7 +249,7 @@ the voltage level !=== ! *Bits* ! *Description* ! [31:1] ! _Reserved_ -! [0] ! +! [0] ! 0b0: Disable voltage for domain 0b1: Enable voltage for domain @@ -290,7 +274,7 @@ specified voltage domain. |=== ==== Service: *VOLT_GET_CONFIG* -Get voltage config message request for the configuration of the voltage domain +Get voltage config message request for the configuration of the voltage domain currently set. [#table_voltage_getdomainconfig_request_data] .Request Data @@ -317,7 +301,7 @@ currently set. [cols="2,5a"] !=== ! *Value* ! *Description* -! 0x0 ! Disabled +! 0x0 ! Disabled ! 0x1 ! Enabled !=== |===