diff --git a/ArmPkg/Drivers/ArmScmiDxe/ScmiClockProtocol.c b/ArmPkg/Drivers/ArmScmiDxe/ScmiClockProtocol.c index c66c414385..5c06e31bda 100644 --- a/ArmPkg/Drivers/ArmScmiDxe/ScmiClockProtocol.c +++ b/ArmPkg/Drivers/ArmScmiDxe/ScmiClockProtocol.c @@ -255,22 +255,26 @@ ClockDescribeRates ( for (RateNo = 0; RateNo < NUM_RATES (DescribeRates->NumRatesFlags); RateNo++) { Rate = &DescribeRates->Rates[RateOffset++]; // Non-linear discrete rates. - RateArray[RateIndex++].Rate = ConvertTo64Bit (Rate->Low, Rate->High); + RateArray[RateIndex++].DiscreteRate.Rate = + ConvertTo64Bit (Rate->Low, Rate->High); } } else { for (RateNo = 0; RateNo < NUM_RATES (DescribeRates->NumRatesFlags); RateNo++) { // Linear clock rates from minimum to maximum in steps // Minimum clock rate. Rate = &DescribeRates->Rates[RateOffset++]; - RateArray[RateIndex].Min = ConvertTo64Bit (Rate->Low, Rate->High); + RateArray[RateIndex].ContinuousRate.Min = + ConvertTo64Bit (Rate->Low, Rate->High); Rate = &DescribeRates->Rates[RateOffset++]; // Maximum clock rate. - RateArray[RateIndex].Max = ConvertTo64Bit (Rate->Low, Rate->High); + RateArray[RateIndex].ContinuousRate.Max = + ConvertTo64Bit (Rate->Low, Rate->High); Rate = &DescribeRates->Rates[RateOffset++]; // Step. - RateArray[RateIndex++].Step = ConvertTo64Bit (Rate->Low, Rate->High); + RateArray[RateIndex++].ContinuousRate.Step = + ConvertTo64Bit (Rate->Low, Rate->High); } } } while (NUM_REMAIN_RATES (DescribeRates->NumRatesFlags) != 0); diff --git a/ArmPkg/Include/Protocol/ArmScmiClockProtocol.h b/ArmPkg/Include/Protocol/ArmScmiClockProtocol.h index b4d970dee3..85b5b8d1e7 100644 --- a/ArmPkg/Include/Protocol/ArmScmiClockProtocol.h +++ b/ArmPkg/Include/Protocol/ArmScmiClockProtocol.h @@ -1,6 +1,6 @@ /** @file - Copyright (c) 2017-2018, Arm Limited. All rights reserved. + Copyright (c) 2017-2021, Arm Limited. All rights reserved. SPDX-License-Identifier: BSD-2-Clause-Patent @@ -57,12 +57,18 @@ typedef enum { either Rate or Min/Max/Step triplet is valid. */ typedef struct { - union { UINT64 Min; - UINT64 Rate; - }; UINT64 Max; UINT64 Step; +} SCMI_CLOCK_RATE_CONTINUOUS; + +typedef struct { + UINT64 Rate; +} SCMI_CLOCK_RATE_DISCRETE; + +typedef union { + SCMI_CLOCK_RATE_CONTINUOUS ContinuousRate; + SCMI_CLOCK_RATE_DISCRETE DiscreteRate; } SCMI_CLOCK_RATE; #pragma pack()