/** @file
Copyright (c) 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _PCH_HSIO_H_
#define _PCH_HSIO_H_
#define PCH_HSIO_SKU_SKL 0x01
#define PCH_LANE_OWN_COMMON 0x10
#define PCH_LANE_BDCAST 0x11
#define PCH_HSIO_LANE_GROUP_NO 0x09
#define PCH_HSIO_LANE_GROUP_COMMON_LANE 0x00
#define PCH_HSIO_LANE_GROUP_PCIE 0x01
#define PCH_HSIO_LANE_GROUP_DMI 0x02
#define PCH_HSIO_LANE_GROUP_GBE 0x03
#define PCH_HSIO_LANE_GROUP_USB3 0x04
#define PCH_HSIO_LANE_GROUP_SATA 0x05
#define PCH_HSIO_LANE_GROUP_SSIC 0x06
#define PCH_MODPHY0_LP_LOS1_LANE_START 0x00
#define PCH_MODPHY0_LP_LOS1_LANE_END 0x05
#define PCH_MODPHY1_LP_LOS1_LANE_START 0x06
#define PCH_MODPHY1_LP_LOS1_LANE_END 0x07
#define PCH_MODPHY1_LP_LOS2_LANE_START 0x00
#define PCH_MODPHY1_LP_LOS2_LANE_END 0x01
#define PCH_MODPHY2_LP_LOS2_LANE_START 0x02
#define PCH_MODPHY2_LP_LOS2_LANE_END 0x07
#define PCH_MODPHY1_LOS1_LANE_START 0x00
#define PCH_MODPHY1_LOS1_LANE_END 0x07
#define PCH_MODPHY1_LOS2_LANE_START 0x00
#define PCH_MODPHY1_LOS2_LANE_END 0x01
#define PCH_MODPHY2_LOS2_LANE_START 0x02
#define PCH_MODPHY2_LOS2_LANE_END 0x07
#define PCH_MODPHY2_LOS3_LANE_START 0x00
#define PCH_MODPHY2_LOS3_LANE_END 0x07
#define PCH_MODPHY2_LOS4_LANE_START 0x00
#define PCH_MODPHY2_LOS4_LANE_END 0x01
/**
PCH SBI HSIO table data structure
**/
typedef struct {
UINT32 PortId;
UINT32 Value;
UINT16 Offset;
UINT8 LanePhyMode;
} PCH_SBI_HSIO_TABLE_STRUCT;
#define PMC_DATA_SBI_CMD_SIZE ((12/sizeof(UINT16))-1)
#define PMC_DATA_DELAY_CMD_SIZE ((4/sizeof(UINT16))-1)
// Commands specified command table and processed by the PMC & it's HW accelerator
typedef enum {
SendSBIPosted = 0x0, // Perform a SBI Write & wait for result
SendSBINonPosted, // Perform a SBI Write & ignore return result (Not Supported in HW)
DoDelay, // PMC Inserts Delay when command detected
EndStruct = 0x7 // No-op Command indicating end of list
} PHY_COMMANDS;
/**
PCH HSIO PMC XRAM Header
**/
typedef struct {
UINT16 Word0;
UINT16 Word1;
UINT16 Word2;
UINT16 Word3;
UINT16 Word4;
UINT16 Word5;
UINT16 Word6;
UINT16 Word7;
UINT16 Word8;
UINT16 Word9;
UINT16 Word10;
UINT16 Word11;
UINT16 Word12;
UINT16 Word13;
UINT16 Word14;
UINT16 Word15;
} PCH_SBI_HSIO_HDR_TBL;
/**
PCH HSIO PMC XRAM Data
**/
typedef struct {
UINT8 Command : 3;
UINT8 Size : 5;
UINT8 Pid;
UINT8 OpCode; //PrivateControlWrite
UINT8 Bar; //0
UINT8 Fbe; //First Byte Enable : 0x0F
UINT8 Fid; //0
UINT16 Offset;
UINT32 Value;
} PCH_SBI_HSIO_CMD_TBL;
/**
PCH HSIO Delay XRAM Data
**/
typedef struct {
UINT8 Command : 3;
UINT8 Size : 5;
UINT8 DelayPeriod; //(00h = 1us, 01h = 10us, 02h = 100us, ..., 07h = 10s; others reserved)
UINT8 DelayCount; //(0 - 255); total delay = Delay period * Delay count
UINT8 Padding;
} PCH_DELAY_HSIO_CMD_TBL;
typedef enum {
Delay1us = 0x0,
Delay10us,
Delay100us,
Delay1ms,
Delay10ms,
Delay100ms,
Delay1s,
Delay10s
} DELAY;
/**
PCH PCIE PLL SSC Data
**/
#define MAX_PCIE_PLL_SSC_PERCENT 20
#include
#include
#include
#include
#include
#include
#include
#include
#include
#ifdef SKXD_EN
#include
#include
#endif // SKXD_EN
#endif //_PCH_HSIO_H_