Intel(R) ME Firmware ICC Tools User Guide
Intel(R) ME Firmware ICC Tools User Guide
March 2019
Revision 1.0
Intel Confidential
You may not use or facilitate the use of this document in connection with any infringement or other legal analysis concerning
Intel products described herein. You agree to grant Intel a non-exclusive, royalty-free license to any patent claim thereafter
drafted which includes subject matter disclosed herein.
No license (express or implied, by estoppel or otherwise) to any intellectual property rights is granted by this document.
Intel technologies’ features and benefits depend on system configuration and may require enabled hardware, software or service
activation. Learn more at Intel.com, or from the OEM or retailer.
No computer system can be absolutely secure. Intel does not assume any liability for lost or stolen data or systems or any
damages resulting from such losses.
The products described may contain design defects or errors known as errata which may cause the product to deviate from
published specifications. Current characterized errata are available on request.
Intel disclaims all express and implied warranties, including without limitation, the implied warranties of merchantability, fitness
for a particular purpose, and non-infringement, as well as any warranty arising from course of performance, course of dealing, or
usage in trade.
Intel technologies’ features and benefits depend on system configuration and may require enabled hardware, software or service
activation. Learn more at intel.com, or from the OEM or retailer.
All information provided here is subject to change without notice. Contact your Intel representative to obtain the latest Intel
product specifications and roadmaps.
Copies of documents which have an order number and are referenced in this document may be obtained by calling 1-800-548-
4725 or visit www.intel.com/design/literature.htm.
By using this document, in addition to any agreements you have with Intel, you accept the terms set forth below.
Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.
Intel and the Intel logo are trademarks of Intel Corporation in the U.S. and other countries.
*Other names and brands may be claimed as the property of others.
Copyright © 2018, Intel Corporation. All rights reserved.
0.9 • Added new command to read from Chipset Init file June 2018
§§
1 Introduction
The purpose of the document is to provide guidance on the usage of the tools
provided for Intel® Converged Security Engine (Intel® CSE) Firmware Integrated
Clock Controller (ICC) included within the Intel firmware kit.
This document covers the usage of the CCT tool available in the
Tools\System_Tools\ICC Tools\CCT directory And the ICC SDK available in the
Tools\System_Tools\ICC Tools\ICC SDK directory within the Intel® CSE FW kit.
1.1 Terminology
Acronym or
Definition
Term
FW Firmware
UOB Update on Boot. A record of ICC registers setting that is applied on the
next platform boot.
Lake Field Platform Controller Hub (LKF PCH) SPI Programming FW release kit
Guide
Lake Field Platform Controller Hub (LKF PCH) Intel® FW release kit
Management Engine Firmware Bring Up Guide
Lake Field Platform Controller Hub (LKF PCH) External Design CDI#:
Specification (EDS) Vol 1 & Vol 2 Vol 1 574211
Vol 2 575200
The command syntax for the CCT tool is CCT [-Verbose options] -command
[-arguments].
CTT Commands
? Or h Help Menu
Note: Refer the next section to get detail of usage, syntax and supported/expected
argument options with each command.
Syntax:
CCT.exe –? OR CCT.exe –h
Arguments:
No Arguments.
Syntax:
CCT.exe -gcc
Arguments:
No arguments.
Syntax:
CCT.exe -gp
Arguments:
No arguments
This command will not work after the BIOS sends the End of Post Intel® MEI message.
Syntax:
Arguments:
Syntax:
Arguments:
• [Clock ID] – specifies clock for which ICC settings should be displayed.
• [Setting type] – specifies which ICC record to be used to display clock settings
mentioned by clock ID.
Syntax:
CCT.exe –sc -clock [clock ID] –freq [frequency] -ssc [ssc percent] -set-type
[setting type]
Arguments:
• [clock ID] – specifies clock for which ICC settings should be changed.
This command will not work after the BIOS sends the End of Post Intel® MEI message
Syntax:
CCT.exe -rm –offest [start register offset] –length [end register offset] –file
[mphy file name]
Arguments:
This command will not work after the BIOS sends the End of Post Intel® MEI message
Syntax:
Arguments:
[inputFile.bin]- In
Syntax:
Arguments:
Example of application that may call Intel® Integrated Clock Controller Service:
• Intel® Extreme Tuning Utility (Intel® XTU). This application can overclock or
underclock platform BCLK (Processor clock).
typedef enum
{
ICC_HECI_PCIE_CLOCK_ID = 0,
ICC_HECI_BCLK_CLOCK_ID = 1,
ICC_HECI_WMPHY_CLOCK_ID = 2
}ICC_HECI_CLOCK_ID;
Name Description
The returned values are represented in UINT32 the following function is required to
parse the values into char type:
const char* GetErrorStringByCode(const UINT32 errorCode);
UINT16 SupportFlags;
} ICC_GET_CLOCK_SETTINGSEx;
It is assumed that an application would only configure ICC clocks that “belong” to it.
There is no provision in the library to lock a specific clock from a specific application.
Each API in the following section provides detail about Input and Output parameters
for each API, as well as function prototype. For this guide, example in the following
programming language will be provided: IDL and C++. Other programming languages
are supported by the API, but an example will not be provided by this SDK user guide.
Note: Please note that Intel MEI Driver installation is required.Figure 1. Intel®
Integrated Clock Controller Service Architecture
Definition:
UINT32 IccLibGetCurrentClockSettingsWrapper(const ICC_HECI_CLOCK_ID
clockId, ICC_GET_CLOCK_SETTINGSEx * const clockSettings);
For host application (with Admin level) call, the request will be verified against the ICC
Clock Range Definition Record.
For host application (with user level) call, the request will be verified against the ICC
enhanced SKU Clock Range definition.
Note: If the requested frequency is not supported by the HW, it will be automatically
rounded by Intel® Integrated Clock Controller Service to the nearest valid frequency.
If there are two nearest valid frequencies (up and down), the lower value will be
chosen.
Definition:
UINT32 IccLibSetCurrentClockSettingsWrapper(const ICC_HECI_CLOCK_ID
clockId, ICC_SET_CLOCK_SETTINGSEx * clockSettings);
// {C2E625A9-8693-4dea-BAC4-B15CA98F9EE9}
DEFINE_GUID(GUID_DEVINTERFACE_ICCWDT,
0xc2e625a9, 0x8693, 0x4dea, 0xba, 0xc4, 0xb1, 0x5c, 0xa9, 0x8f, 0x9e, 0xe9);
IOCTL Description
Input None
communicates to the driver that the current application is done with its needs for the
Intel WDT Driver and that it can be allocated to another application if necessary.
Input ULONG Key – Intel Watchdog Timer Driver Acquiring key, retrieved
from ICCWDT_AQUIRE_WDT
Output None
Output None
Input ULONG Key – Intel Watchdog Timer Driver Acquiring key, retrieved
from ICCWDT_AQUIRE_WDT
Output None
Input ULONG Key – Intel Watchdog Timer Driver Acquiring key, retrieved
from ICCWDT_AQUIRE_WDT
It is required that any application which requests the Intel WDT Driver be started
during the next OS load must automatically load during the next OS boot and call the
Check Intel Watchdog Timer Driver Status IOCTL and handle the result appropriately.
}ICCWDT_START_WDT_ON_NEXT_OSBOOT_DATA,PICCWD
T_START_WDT_ON_NEXT_OSBOOT_DATA;
ULONG Key - Watchdog Acquiring key, retrieved from
ICCWDT_AQUIRE_WDT
UINT16 TimeoutValue - Watchdog Timer Timeout Value
Output None
Note: Intel Watchdog Timer Driver Debug Driver will reload and start the timer every
0.5 seconds after the first ReloadAndStart command from the User.
Note: Development’ mode driver should only be used in development, and not in
production.
#include <windows.h>
#include “ICCWDT_Interface.h”
…
ULONG key = 0;
void MyIccWdtThread()
{
// Boilerplate code from MSFT to getting the Device Path from Device Interface.
string devicePath = GetDevicePath(GUID_DEVINTERFACE_ICCWDT);
// Acquire Timer
DeviceControl(deviceHandle, ICCWDT_AQUIRE_WDT, NULL, key);
while(!MyApp_Stop)
{
ICCWDT_RELOADANDSTART_DATA data;
data.key = key;
data.CountdownVal = MY_WDT_VALUE;
// Stop Timer
DeviceControl(deviceHandle, ICCWDT_STOP_WDT, key, NULL);
// Release Timer
DeviceControl(deviceHandle, ICCWDT_RELEASE_WDT ,key, NULL);
CloseHandle(deviceHandle);
}
ULONG key = 0;
void StartOnNextBoot()
{
// Boilerplate code from MSFT to getting the Device Path from Device Interface.
string devicePath = GetDevicePath(GUID_DEVINTERFACE_ICCWDT);
ULONG key;
ICCWDT_START_WDT_ON_NEXT_OSBOOT_DATA data;
data.key = key;
data.TimeoutValue= MY_WDT_VALUE;
CloseHandle(deviceHandle);