From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=2607:f8b0:4864:20::12e; helo=mail-it1-x12e.google.com; envelope-from=ard.biesheuvel@linaro.org; receiver=edk2-devel@lists.01.org Received: from mail-it1-x12e.google.com (mail-it1-x12e.google.com [IPv6:2607:f8b0:4864:20::12e]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 9914F21959CB2 for ; Fri, 21 Dec 2018 09:31:37 -0800 (PST) Received: by mail-it1-x12e.google.com with SMTP id h193so7573352ita.5 for ; Fri, 21 Dec 2018 09:31:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=sRx5u36zkKC+CF6XbsO+rkXeTYtfDKsNJa8UEhwp1Vo=; b=TKijQ54wvN9T06J8Br5U8QMIU/AO7vBBMKx1mkoEfBhociAYADzuT/Q8jMbYr0Ag6R wtn3u2rclh51OtKK6zK86Drzuye+6NZw4ouSubllKrdDL9B+G7a0X1Al6fOXFd7S6oUn UCCpbiwwV3WBrAGjwdH6UAfWaDzAFbEFbXGRE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=sRx5u36zkKC+CF6XbsO+rkXeTYtfDKsNJa8UEhwp1Vo=; b=jfO/rziBxbrIef0CnMjcs/92uZBzwjGO8rfNIjIFYU2HoE0/w/XPhTu0ZitZ+jNVtJ EXOHM7DusFyIgEnTTwOaahPSJzNQ5HjbdWT7y5pTLeQ45+DTKLvEwpfmL3rQJoFRqz97 EYpbRhKLOkBALJ/7Vp4f/Mhxi2Kppo0a++JMKP/T81TUzJAY7i4ZaciFiO+vGC9lLrMB DfO81MSKY8agbQCgNnEram1i1fK/ih15atyxUvl3haLl7O8pBHv+HHtOD8ags4vqVHqg pI65dLfhxaibYnyM21GqGn29Y3YcWnnO/59Gelscegfk8ICF5CUa8dgDv4GXdGCP0trx MFCg== X-Gm-Message-State: AA+aEWZ59uqRdWzdicO36H4GPpVfSEnrkKuj48eLaauSESiQWzz7K7jj 38ynV8lLzI0UR24vrzn/BcfyHP2Og/Q8DfQDmYdd3g== X-Google-Smtp-Source: AFSGD/VtiQb6sDPubPBTl+rZUM1UN6j4oMhINxQXpWf9VDneu64Dwq3Q4q78dP9P+ebfb+FhNWF3kZpikQOFHevp9zQ= X-Received: by 2002:a24:edc4:: with SMTP id r187mr2822854ith.158.1545413496659; Fri, 21 Dec 2018 09:31:36 -0800 (PST) MIME-Version: 1.0 References: <76d15663dbbcc6e83813d86f6ca981b47791cdcf.1544744882.git.jbrasen@nvidia.com> In-Reply-To: From: Ard Biesheuvel Date: Fri, 21 Dec 2018 18:31:25 +0100 Message-ID: To: Girish Pathak Cc: Jeff Brasen , "edk2-devel@lists.01.org" , Leif Lindholm Subject: Re: [PATCH v3] ArmPkg/ArmScmiDxe: Add clock enable function X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 X-List-Received-Date: Fri, 21 Dec 2018 17:31:37 -0000 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, 21 Dec 2018 at 17:48, Girish Pathak wrote: > > Apart from some minor indentation errors in function parameter declaratio= ns in ArmScmiClock2Protocol.h , this looks fine. > Thanks Reviewed-by: Ard Biesheuvel I've cleaned it up a bit and pushed it as 9bba10eb4336..559a07d84e5a > > -----Original Message----- > From: Ard Biesheuvel > Sent: 21 December 2018 14:55 > To: Jeff Brasen ; Girish Pathak > Cc: edk2-devel@lists.01.org; Leif Lindholm > Subject: Re: [PATCH v3] ArmPkg/ArmScmiDxe: Add clock enable function > > On Fri, 14 Dec 2018 at 00:48, Jeff Brasen wrote: > > > > Add function to allow enabling and disabling of the clock using the > > SCMI interface. Add gArmScmiClock2ProtocolGuid to distinguish > > platforms that support new API from those that just have the older prot= ocol. > > > > SCMI_CLOCK2_PROTOCOL also adds a version parameter to allow for future > > changes. It is placed after the functions that are present in the > > existing protocol to allow SCMI_CLOCK2_PROTOCOL to be cast to > > SCMI_CLOCK_PROTOCOL so that only a single implementation of those > > function are needed. > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Jeff Brasen > > Cc: Ard Biesheuvel > > Cc: Leif Lindholm > > Cc: Grish Pathak > > I'd like to hear from Girish as well, since he contributed this code orig= inally. > > > --- > > ArmPkg/ArmPkg.dec | 1 + > > .../ArmScmiDxe/ArmScmiClockProtocolPrivate.h | 7 + > > ArmPkg/Drivers/ArmScmiDxe/ArmScmiDxe.inf | 1 + > > ArmPkg/Drivers/ArmScmiDxe/ScmiClockProtocol.c | 62 +++++++ > > ArmPkg/Include/Protocol/ArmScmiClock2Protocol.h | 198 +++++++++++++= ++++++++ > > 5 files changed, 269 insertions(+) > > create mode 100644 ArmPkg/Include/Protocol/ArmScmiClock2Protocol.h > > > > diff --git a/ArmPkg/ArmPkg.dec b/ArmPkg/ArmPkg.dec index > > d99eb67..2f5e5b3 100644 > > --- a/ArmPkg/ArmPkg.dec > > +++ b/ArmPkg/ArmPkg.dec > > @@ -59,6 +59,7 @@ > > ## Arm System Control and Management Interface(SCMI) Clock managemen= t protocol > > ## ArmPkg/Include/Protocol/ArmScmiClockProtocol.h > > gArmScmiClockProtocolGuid =3D { 0x91ce67a8, 0xe0aa, 0x4012, { 0xb9, > > 0x9f, 0xb6, 0xfc, 0xf3, 0x4, 0x8e, 0xaa } } > > + gArmScmiClock2ProtocolGuid =3D { 0xb8d8caf2, 0x9e94, 0x462c, { 0xa8, > > + 0x34, 0x6c, 0x99, 0xfc, 0x05, 0xef, 0xcf } } > > > > ## Arm System Control and Management Interface(SCMI) Clock managemen= t protocol > > ## ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h > > diff --git a/ArmPkg/Drivers/ArmScmiDxe/ArmScmiClockProtocolPrivate.h > > b/ArmPkg/Drivers/ArmScmiDxe/ArmScmiClockProtocolPrivate.h > > index 0d1ec6f..c135bac 100644 > > --- a/ArmPkg/Drivers/ArmScmiDxe/ArmScmiClockProtocolPrivate.h > > +++ b/ArmPkg/Drivers/ArmScmiDxe/ArmScmiClockProtocolPrivate.h > > @@ -59,6 +59,13 @@ typedef struct { > > CLOCK_RATE_DWORD Rate; > > } CLOCK_RATE_SET_ATTRIBUTES; > > > > + > > +// Message parameters for CLOCK_CONFIG_SET command. > > +typedef struct { > > + UINT32 ClockId; > > + UINT32 Attributes; > > +} CLOCK_CONFIG_SET_ATTRIBUTES; > > + > > // if ClockAttr Bit[0] is set then clock device is enabled. > > #define CLOCK_ENABLE_MASK 0x1 > > #define CLOCK_ENABLED(ClockAttr) ((ClockAttr & CLOCK_ENABLE_MASK) =3D= =3D > > 1) diff --git a/ArmPkg/Drivers/ArmScmiDxe/ArmScmiDxe.inf > > b/ArmPkg/Drivers/ArmScmiDxe/ArmScmiDxe.inf > > index 05ce9c0..9b29b9f 100644 > > --- a/ArmPkg/Drivers/ArmScmiDxe/ArmScmiDxe.inf > > +++ b/ArmPkg/Drivers/ArmScmiDxe/ArmScmiDxe.inf > > @@ -46,6 +46,7 @@ > > [Protocols] > > gArmScmiBaseProtocolGuid > > gArmScmiClockProtocolGuid > > + gArmScmiClock2ProtocolGuid > > gArmScmiPerformanceProtocolGuid > > > > [Depex] > > diff --git a/ArmPkg/Drivers/ArmScmiDxe/ScmiClockProtocol.c > > b/ArmPkg/Drivers/ArmScmiDxe/ScmiClockProtocol.c > > index 64d2afa..c7f27a3 100644 > > --- a/ArmPkg/Drivers/ArmScmiDxe/ScmiClockProtocol.c > > +++ b/ArmPkg/Drivers/ArmScmiDxe/ScmiClockProtocol.c > > @@ -19,6 +19,7 @@ > > #include > > #include > > #include > > +#include > > > > #include "ArmScmiClockProtocolPrivate.h" > > #include "ScmiPrivate.h" > > @@ -388,6 +389,53 @@ ClockRateSet ( > > return Status; > > } > > > > +/** Enable/Disable specified clock. > > + > > + @param[in] This A Pointer to SCMI_CLOCK_PROTOCOL Instance. > > + @param[in] ClockId Identifier for the clock device. > > + @param[in] Enable TRUE to enable, FALSE to disable. > > + > > + @retval EFI_SUCCESS Clock enable/disable successful. > > + @retval EFI_DEVICE_ERROR SCP returns an SCMI error. > > + @retval !(EFI_SUCCESS) Other errors. > > +**/ > > +STATIC > > +EFI_STATUS > > +ClockEnable ( > > + IN SCMI_CLOCK2_PROTOCOL *This, > > + IN UINT32 ClockId, > > + IN BOOLEAN Enable > > + ) > > +{ > > + EFI_STATUS Status; > > + CLOCK_CONFIG_SET_ATTRIBUTES *ClockConfigSetAttributes; > > + SCMI_COMMAND Cmd; > > + UINT32 PayloadLength; > > + > > + Status =3D ScmiCommandGetPayload > > + ((UINT32**)&ClockConfigSetAttributes); > > + if (EFI_ERROR (Status)) { > > + return Status; > > + } > > + > > + // Fill arguments for clock protocol command. > > + ClockConfigSetAttributes->ClockId =3D ClockId; > > + ClockConfigSetAttributes->Attributes =3D Enable ? BIT0 : 0; > > + > > + Cmd.ProtocolId =3D SCMI_PROTOCOL_ID_CLOCK; Cmd.MessageId =3D > > + SCMI_MESSAGE_ID_CLOCK_CONFIG_SET; > > + > > + PayloadLength =3D sizeof (CLOCK_CONFIG_SET_ATTRIBUTES); > > + > > + // Execute and wait for response on a SCMI channel. > > + Status =3D ScmiCommandExecute ( > > + &Cmd, > > + &PayloadLength, > > + NULL > > + ); > > + > > + return Status; > > +} > > + > > // Instance of the SCMI clock management protocol. > > STATIC CONST SCMI_CLOCK_PROTOCOL ScmiClockProtocol =3D { > > ClockGetVersion, > > @@ -398,6 +446,18 @@ STATIC CONST SCMI_CLOCK_PROTOCOL ScmiClockProtocol= =3D { > > ClockRateSet > > }; > > > > +// Instance of the SCMI clock management protocol. > > +STATIC CONST SCMI_CLOCK2_PROTOCOL ScmiClock2Protocol =3D { > > + (SCMI_CLOCK2_GET_VERSION)ClockGetVersion, > > + (SCMI_CLOCK2_GET_TOTAL_CLOCKS)ClockGetTotalClocks, > > + (SCMI_CLOCK2_GET_CLOCK_ATTRIBUTES)ClockGetClockAttributes, > > + (SCMI_CLOCK2_DESCRIBE_RATES)ClockDescribeRates, > > + (SCMI_CLOCK2_RATE_GET)ClockRateGet, > > + (SCMI_CLOCK2_RATE_SET)ClockRateSet, > > + SCMI_CLOCK2_PROTOCOL_VERSION, > > + ClockEnable > > + }; > > + > > /** Initialize clock management protocol and install protocol on a giv= en handle. > > > > @param[in] Handle Handle to install clock management pr= otocol. > > @@ -413,6 +473,8 @@ ScmiClockProtocolInit ( > > Handle, > > &gArmScmiClockProtocolGuid, > > &ScmiClockProtocol, > > + &gArmScmiClock2ProtocolGuid, > > + &ScmiClock2Protocol, > > NULL > > ); > > } > > diff --git a/ArmPkg/Include/Protocol/ArmScmiClock2Protocol.h > > b/ArmPkg/Include/Protocol/ArmScmiClock2Protocol.h > > new file mode 100644 > > index 0000000..f2c9670 > > --- /dev/null > > +++ b/ArmPkg/Include/Protocol/ArmScmiClock2Protocol.h > > @@ -0,0 +1,198 @@ > > +/** @file > > + > > + Copyright (c) 2017-2018, Arm Limited. All rights reserved. > > + > > + This program and the accompanying materials are licensed and made > > + available under the terms and conditions of the BSD License which > > + accompanies this distribution. The full text of the license may be > > + found at http://opensource.org/licenses/bsd-license.php > > + > > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > > + BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXP= RESS OR IMPLIED. > > + > > + System Control and Management Interface V1.0 > > + http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/ > > + DEN0056A_System_Control_and_Management_Interface.pdf > > +**/ > > + > > +#ifndef ARM_SCMI_CLOCK2_PROTOCOL_H_ > > +#define ARM_SCMI_CLOCK2_PROTOCOL_H_ > > + > > +#include > > +#include > > + > > +#define ARM_SCMI_CLOCK2_PROTOCOL_GUID { \ > > + 0xb8d8caf2, 0x9e94, 0x462c, { 0xa8, 0x34, 0x6c, 0x99, 0xfc, 0x05, > > +0xef, 0xcf } \ > > + } > > + > > +extern EFI_GUID gArmScmiClock2ProtocolGuid; > > + > > +#define SCMI_CLOCK2_PROTOCOL_VERSION 1 > > + > > +typedef struct _SCMI_CLOCK2_PROTOCOL SCMI_CLOCK2_PROTOCOL; > > + > > +// Protocol Interface functions. > > + > > +/** Return version of the clock management protocol supported by SCP f= irmware. > > + > > + @param[in] This A Pointer to SCMI_CLOCK2_PROTOCOL Instance. > > + > > + @param[out] Version Version of the supported SCMI Clock management = protocol. > > + > > + @retval EFI_SUCCESS The version is returned. > > + @retval EFI_DEVICE_ERROR SCP returns an SCMI error. > > + @retval !(EFI_SUCCESS) Other errors. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *SCMI_CLOCK2_GET_VERSION) ( > > + IN SCMI_CLOCK2_PROTOCOL *This, > > + OUT UINT32 *Version > > + ); > > + > > +/** Return total number of clock devices supported by the clock manage= ment > > + protocol. > > + > > + @param[in] This A Pointer to SCMI_CLOCK2_PROTOCOL Instance. > > + > > + @param[out] TotalClocks Total number of clocks supported. > > + > > + @retval EFI_SUCCESS Total number of clocks supported is return= ed. > > + @retval EFI_DEVICE_ERROR SCP returns an SCMI error. > > + @retval !(EFI_SUCCESS) Other errors. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *SCMI_CLOCK2_GET_TOTAL_CLOCKS) ( > > + IN SCMI_CLOCK2_PROTOCOL *This, > > + OUT UINT32 *TotalClocks > > + ); > > + > > +/** Return attributes of a clock device. > > + > > + @param[in] This A Pointer to SCMI_CLOCK2_PROTOCOL Instance. > > + @param[in] ClockId Identifier for the clock device. > > + > > + @param[out] Enabled If TRUE, the clock device is enabled. > > + @param[out] ClockAsciiName A NULL terminated ASCII string with the = clock > > + name, of up to 16 bytes. > > + > > + @retval EFI_SUCCESS Clock device attributes are returned. > > + @retval EFI_DEVICE_ERROR SCP returns an SCMI error. > > + @retval !(EFI_SUCCESS) Other errors. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *SCMI_CLOCK2_GET_CLOCK_ATTRIBUTES) ( > > + IN SCMI_CLOCK2_PROTOCOL *This, > > + IN UINT32 ClockId, > > + OUT BOOLEAN *Enabled, > > + OUT CHAR8 *ClockAsciiName > > + ); > > + > > +/** Return list of rates supported by a given clock device. > > + > > + @param[in] This A pointer to SCMI_CLOCK2_PROTOCOL Instance. > > + @param[in] ClockId Identifier for the clock device. > > + > > + @param[out] Format SCMI_CLOCK_RATE_FORMAT_DISCRETE: Clock devic= e > > + supports range of clock rates which are non-= linear. > > + > > + SCMI_CLOCK_RATE_FORMAT_LINEAR: Clock device = supports > > + range of linear clock rates from Min to Max = in steps. > > + > > + @param[out] TotalRates Total number of rates. > > + > > + @param[in,out] RateArraySize Size of the RateArray. > > + > > + @param[out] RateArray List of clock rates. > > + > > + @retval EFI_SUCCESS List of clock rates are returned. > > + @retval EFI_DEVICE_ERROR SCP returns an SCMI error. > > + @retval EFI_BUFFER_TOO_SMALL RateArraySize is too small for the resu= lt. > > + It has been updated to the size needed. > > + @retval !(EFI_SUCCESS) Other errors. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *SCMI_CLOCK2_DESCRIBE_RATES) ( > > + IN SCMI_CLOCK2_PROTOCOL *This, > > + IN UINT32 ClockId, > > + OUT SCMI_CLOCK_RATE_FORMAT *Format, > > + OUT UINT32 *TotalRates, > > + IN OUT UINT32 *RateArraySize, > > + OUT SCMI_CLOCK_RATE *RateArray > > + ); > > + > > +/** Get clock rate. > > + > > + @param[in] This A Pointer to SCMI_CLOCK2_PROTOCOL Instance. > > + @param[in] ClockId Identifier for the clock device. > > + > > + @param[out] Rate Clock rate. > > + > > + @retval EFI_SUCCESS Clock rate is returned. > > + @retval EFI_DEVICE_ERROR SCP returns an SCMI error. > > + @retval !(EFI_SUCCESS) Other errors. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *SCMI_CLOCK2_RATE_GET) ( > > + IN SCMI_CLOCK2_PROTOCOL *This, > > + IN UINT32 ClockId, > > + OUT UINT64 *Rate > > + ); > > + > > +/** Set clock rate. > > + > > + @param[in] This A Pointer to SCMI_CLOCK2_PROTOCOL Instance. > > + @param[in] ClockId Identifier for the clock device. > > + @param[in] Rate Clock rate. > > + > > + @retval EFI_SUCCESS Clock rate set success. > > + @retval EFI_DEVICE_ERROR SCP returns an SCMI error. > > + @retval !(EFI_SUCCESS) Other errors. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *SCMI_CLOCK2_RATE_SET) ( > > + IN SCMI_CLOCK2_PROTOCOL *This, > > + IN UINT32 ClockId, > > + IN UINT64 Rate > > + ); > > + > > +/** Enable/Disable specified clock. > > + Function is only available under gArmScmiClock2ProtocolGuid > > + > > + @param[in] This A Pointer to SCMI_CLOCK2_PROTOCOL Instance. > > + @param[in] ClockId Identifier for the clock device. > > + @param[in] Enable TRUE to enable, FALSE to disable. > > + > > + @retval EFI_SUCCESS Clock enable/disable successful. > > + @retval EFI_DEVICE_ERROR SCP returns an SCMI error. > > + @retval !(EFI_SUCCESS) Other errors. > > +**/ > > +typedef > > +EFI_STATUS > > +(EFIAPI *SCMI_CLOCK2_ENABLE) ( > > + IN SCMI_CLOCK2_PROTOCOL *This, > > + IN UINT32 ClockId, > > + IN BOOLEAN Enable > > + ); > > + > > +typedef struct _SCMI_CLOCK2_PROTOCOL { > > + SCMI_CLOCK2_GET_VERSION GetVersion; > > + SCMI_CLOCK2_GET_TOTAL_CLOCKS GetTotalClocks; > > + SCMI_CLOCK2_GET_CLOCK_ATTRIBUTES GetClockAttributes; > > + SCMI_CLOCK2_DESCRIBE_RATES DescribeRates; > > + SCMI_CLOCK2_RATE_GET RateGet; > > + SCMI_CLOCK2_RATE_SET RateSet; > > + > > + //Extention to original ClockProtocol, added here so > > +SCMI_CLOCK2_PROTOCOL > > + //can be cast to SCMI_CLOCK_PROTOCOL > > + UINTN Version; //For future expandability of protocol > > + SCMI_CLOCK2_ENABLE Enable; > > +} SCMI_CLOCK2_PROTOCOL; > > + > > +#endif /* ARM_SCMI_CLOCK2_PROTOCOL_H_ */ > > + > > -- > > 2.7.4 > > > IMPORTANT NOTICE: The contents of this email and any attachments are conf= idential and may also be privileged. If you are not the intended recipient,= please notify the sender immediately and do not disclose the contents to a= ny other person, use it for any purpose, or store or copy the information i= n any medium. Thank you.