/** @file
This file contains specific GPIO information
Copyright (c) 2019 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "GpioNativePrivateLibInternal.h"
//
// I2C controller pins
// I2C[controller number][pin: SDA/SCL]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpI2cGpio [][PCH_SERIAL_IO_PINS_PER_I2C_CONTROLLER]=
{
{{GPIO_CNL_LP_GPP_C16, GpioPadModeNative1}, {GPIO_CNL_LP_GPP_C17, GpioPadModeNative1}},
{{GPIO_CNL_LP_GPP_C18, GpioPadModeNative1}, {GPIO_CNL_LP_GPP_C19, GpioPadModeNative1}},
{{GPIO_CNL_LP_GPP_H4, GpioPadModeNative1}, {GPIO_CNL_LP_GPP_H5 , GpioPadModeNative1}},
{{GPIO_CNL_LP_GPP_H6, GpioPadModeNative1}, {GPIO_CNL_LP_GPP_H7 , GpioPadModeNative1}},
{{GPIO_CNL_LP_GPP_H8, GpioPadModeNative1}, {GPIO_CNL_LP_GPP_H9 , GpioPadModeNative1}},
{{GPIO_CNL_LP_GPP_H10, GpioPadModeNative1}, {GPIO_CNL_LP_GPP_H11, GpioPadModeNative1}}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHI2cGpio [][PCH_SERIAL_IO_PINS_PER_I2C_CONTROLLER]=
{
{{GPIO_CNL_H_GPP_C16, GpioPadModeNative1}, {GPIO_CNL_H_GPP_C17, GpioPadModeNative1}}, // I2C0
{{GPIO_CNL_H_GPP_C18, GpioPadModeNative1}, {GPIO_CNL_H_GPP_C19, GpioPadModeNative1}}, // I2C1
{{GPIO_CNL_H_GPP_D13, GpioPadModeNative3}, {GPIO_CNL_H_GPP_D14, GpioPadModeNative3}}, // I2C2
{{GPIO_CNL_H_GPP_D4, GpioPadModeNative2}, {GPIO_CNL_H_GPP_D23, GpioPadModeNative2}} // I2C3
};
/**
This function provides SerialIo I2C controller pins
@param[in] SerialIoI2cControllerNumber I2C controller
@param[out] NativePinsTable Table with pins
@param[out] NoOfNativePins Number of pins
**/
VOID
GpioGetSerialIoI2cPins (
IN UINT32 SerialIoI2cControllerNumber,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
if (SerialIoI2cControllerNumber < ARRAY_SIZE (mPchLpI2cGpio)) {
*NativePinsTable = mPchLpI2cGpio[SerialIoI2cControllerNumber];
return;
}
} else {
if (SerialIoI2cControllerNumber < ARRAY_SIZE (mPchHI2cGpio)) {
*NativePinsTable = mPchHI2cGpio[SerialIoI2cControllerNumber];
return;
}
}
*NativePinsTable = NULL;
ASSERT (FALSE);
}
//
// UART controller pins
// UART[controller number][pin: RXD/TXD/RTSB/CTSB]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpUartGpio [][PCH_SERIAL_IO_PINS_PER_UART_CONTROLLER]=
{
{ // UART0
{GPIO_CNL_LP_GPP_C8, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_C9, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_C10, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_C11, GpioPadModeNative1}
},
{ // UART1
{GPIO_CNL_LP_GPP_C12, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_C13, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_C14, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_C15, GpioPadModeNative1}
},
{ // UART2
{GPIO_CNL_LP_GPP_C20, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_C21, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_C22, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_C23, GpioPadModeNative1},
},
{ // UART0 (2nd pin set)
{GPIO_CNL_LP_GPP_F5, GpioPadModeNative2},
{GPIO_CNL_LP_GPP_F6, GpioPadModeNative2},
{GPIO_CNL_LP_GPP_F4, GpioPadModeNative2},
{GPIO_CNL_LP_GPP_F7, GpioPadModeNative2}
}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHUartGpio [][PCH_SERIAL_IO_PINS_PER_UART_CONTROLLER]=
{
{ // UART0
{GPIO_CNL_H_GPP_C8, GpioPadModeNative1},
{GPIO_CNL_H_GPP_C9, GpioPadModeNative1},
{GPIO_CNL_H_GPP_C10, GpioPadModeNative1},
{GPIO_CNL_H_GPP_C11, GpioPadModeNative1}
},
{ // UART1
{GPIO_CNL_H_GPP_C12, GpioPadModeNative1},
{GPIO_CNL_H_GPP_C13, GpioPadModeNative1},
{GPIO_CNL_H_GPP_C14, GpioPadModeNative1},
{GPIO_CNL_H_GPP_C15, GpioPadModeNative1}
},
{ // UART2
{GPIO_CNL_H_GPP_C20, GpioPadModeNative1},
{GPIO_CNL_H_GPP_C21, GpioPadModeNative1},
{GPIO_CNL_H_GPP_C22, GpioPadModeNative1},
{GPIO_CNL_H_GPP_C23, GpioPadModeNative1}
},
{ // UART0 (2nd pin set)
{GPIO_CNL_H_GPP_J5, GpioPadModeNative2},
{GPIO_CNL_H_GPP_J6, GpioPadModeNative2},
{GPIO_CNL_H_GPP_J4, GpioPadModeNative2},
{GPIO_CNL_H_GPP_J7, GpioPadModeNative2}
}
};
/**
This function provides SerialIo UART controller pins
@param[in] SerialIoUartControllerNumber UART controller
@param[in] HardwareFlowControl Hardware Flow control
@param[in] PinMuxing UART controller pin muxing
@param[out] NativePinsTable Table with pins
@param[out] NoOfNativePins Number of pins
**/
VOID
GpioGetSerialIoUartPins (
IN UINT32 SerialIoUartControllerNumber,
IN BOOLEAN HardwareFlowControl,
IN UINT32 PinMuxing,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable,
OUT UINT32 *NoOfNativePins
)
{
UINTN UartGpioIndex;
UartGpioIndex = SerialIoUartControllerNumber;
if ((SerialIoUartControllerNumber == 0) && (PinMuxing == 1)) {
// Last record is for UART0 second pin set
if (IsPchLp ()) {
UartGpioIndex = ARRAY_SIZE (mPchLpUartGpio) - 1;
} else {
UartGpioIndex = ARRAY_SIZE (mPchHUartGpio) - 1;
}
}
if (HardwareFlowControl) {
*NoOfNativePins = PCH_SERIAL_IO_PINS_PER_UART_CONTROLLER;
} else {
*NoOfNativePins = PCH_SERIAL_IO_PINS_PER_UART_CONTROLLER_NO_FLOW_CTRL;
}
if (IsPchLp ()) {
if (UartGpioIndex < ARRAY_SIZE (mPchLpUartGpio)) {
*NativePinsTable = mPchLpUartGpio[UartGpioIndex];
return;
}
} else {
if (UartGpioIndex < ARRAY_SIZE (mPchHUartGpio)) {
*NativePinsTable = mPchHUartGpio[UartGpioIndex];
return;
}
}
*NativePinsTable = NULL;
*NoOfNativePins = 0;
ASSERT (FALSE);
}
//
// SPI controller pins
// SPI[controller number][pin: CSB/CLK/MISO/MOSI]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpSpiGpio [][PCH_SERIAL_IO_PINS_PER_SPI_CONTROLLER]=
{
{ // SPI0
{GPIO_CNL_LP_GPP_B15, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B16, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B17, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B18, GpioPadModeNative1}
},
{ // SPI1
{GPIO_CNL_LP_GPP_B19, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B20, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B21, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B22, GpioPadModeNative1}
},
{ // SPI2
{GPIO_CNL_LP_GPP_D9, GpioPadModeNative3},
{GPIO_CNL_LP_GPP_D10, GpioPadModeNative3},
{GPIO_CNL_LP_GPP_D11, GpioPadModeNative3},
{GPIO_CNL_LP_GPP_D12, GpioPadModeNative3}
}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHSpiGpio [][PCH_SERIAL_IO_PINS_PER_SPI_CONTROLLER]=
{
{ // SPI0
{GPIO_CNL_H_GPP_B15, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B16, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B17, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B18, GpioPadModeNative1}
},
{ // SPI1
{GPIO_CNL_H_GPP_B19, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B20, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B21, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B22, GpioPadModeNative1}
},
{ // SPI2
{GPIO_CNL_H_GPP_D9, GpioPadModeNative3},
{GPIO_CNL_H_GPP_D10, GpioPadModeNative3},
{GPIO_CNL_H_GPP_D11, GpioPadModeNative3},
{GPIO_CNL_H_GPP_D12, GpioPadModeNative3}
}
};
/**
This function provides SerialIo SPI controller pins
@param[in] SerialIoSpiControllerNumber SPI controller
@param[out] NativePinsTable Table with pins
@param[out] NoOfNativePins Number of pins
**/
VOID
GpioGetSerialIoSpiPins (
IN UINT32 SerialIoSpiControllerNumber,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable,
OUT UINT32 *NoOfNativePins
)
{
if (IsPchLp ()) {
if (SerialIoSpiControllerNumber < ARRAY_SIZE (mPchLpSpiGpio)) {
*NativePinsTable = mPchLpSpiGpio[SerialIoSpiControllerNumber];
*NoOfNativePins = ARRAY_SIZE (mPchLpSpiGpio[SerialIoSpiControllerNumber]);
return;
}
} else {
if (SerialIoSpiControllerNumber < ARRAY_SIZE (mPchHSpiGpio)) {
*NativePinsTable = mPchHSpiGpio[SerialIoSpiControllerNumber];
*NoOfNativePins = ARRAY_SIZE (mPchHSpiGpio[SerialIoSpiControllerNumber]);
return;
}
}
*NativePinsTable = NULL;
*NoOfNativePins = 0;
ASSERT (FALSE);
}
//
// ISH GP pin
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpIshGPGpio[] =
{
{GPIO_CNL_LP_GPP_A18, GpioPadModeNative1},// ISH_GP_0
{GPIO_CNL_LP_GPP_A19, GpioPadModeNative1},// ISH_GP_1
{GPIO_CNL_LP_GPP_A20, GpioPadModeNative1},// ISH_GP_2
{GPIO_CNL_LP_GPP_A21, GpioPadModeNative1},// ISH_GP_3
{GPIO_CNL_LP_GPP_A22, GpioPadModeNative1},// ISH_GP_4
{GPIO_CNL_LP_GPP_A23, GpioPadModeNative1},// ISH_GP_5
{GPIO_CNL_LP_GPP_A12, GpioPadModeNative2},// ISH_GP_6
{GPIO_CNL_LP_GPP_A17, GpioPadModeNative2} // ISH_GP_7
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHIshGPGpio[] =
{
{GPIO_CNL_H_GPP_A18, GpioPadModeNative1},// ISH_GP_0
{GPIO_CNL_H_GPP_A19, GpioPadModeNative1},// ISH_GP_1
{GPIO_CNL_H_GPP_A20, GpioPadModeNative1},// ISH_GP_2
{GPIO_CNL_H_GPP_A21, GpioPadModeNative1},// ISH_GP_3
{GPIO_CNL_H_GPP_A22, GpioPadModeNative1},// ISH_GP_4
{GPIO_CNL_H_GPP_A23, GpioPadModeNative1},// ISH_GP_5
{GPIO_CNL_H_GPP_A12, GpioPadModeNative2},// ISH_GP_6
{GPIO_CNL_H_GPP_A17, GpioPadModeNative2} // ISH_GP_7
};
/**
This function provides ISH GP pin data
@param[in] IshGpPinNumber ISH GP pin number
@param[out] NativePin ISH GP pin
**/
VOID
GpioGetIshGpPin (
IN UINT32 IshGpPinNumber,
OUT GPIO_PAD_NATIVE_FUNCTION *NativePin
)
{
if (IsPchLp ()) {
if (IshGpPinNumber < ARRAY_SIZE (mPchLpIshGPGpio)) {
*NativePin = mPchLpIshGPGpio[IshGpPinNumber];
return;
}
} else {
if (IshGpPinNumber < ARRAY_SIZE (mPchHIshGPGpio)) {
*NativePin = mPchHIshGPGpio[IshGpPinNumber];
return;
}
}
*NativePin = (GPIO_PAD_NATIVE_FUNCTION){0};
ASSERT (FALSE);
}
//
// ISH UART controller pins
// ISH UART[controller number][pin: RXD/TXD/RTSB/CTSB]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpIshUartGpio[][PCH_ISH_PINS_PER_UART_CONTROLLER] =
{
{ // UART0
{GPIO_CNL_LP_GPP_D13, GpioPadModeNative1},// ISH_UART0_RXD
{GPIO_CNL_LP_GPP_D14, GpioPadModeNative1},// ISH_UART0_TXD
{GPIO_CNL_LP_GPP_D15, GpioPadModeNative1},// ISH_UART0_RTS
{GPIO_CNL_LP_GPP_D16, GpioPadModeNative1} // ISH_UART0_CTS
},
{ // UART1
{GPIO_CNL_LP_GPP_C12, GpioPadModeNative2},// ISH_UART1_RXD
{GPIO_CNL_LP_GPP_C13, GpioPadModeNative2},// ISH_UART1_TXD
{GPIO_CNL_LP_GPP_C14, GpioPadModeNative2},// ISH_UART1_RTSB
{GPIO_CNL_LP_GPP_C15, GpioPadModeNative2} // ISH_UART1_CTSB
}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHIshUartGpio[][PCH_ISH_PINS_PER_UART_CONTROLLER] =
{
{ // UART0
{GPIO_CNL_H_GPP_D13, GpioPadModeNative1},// ISH_UART0_RXD
{GPIO_CNL_H_GPP_D14, GpioPadModeNative1},// ISH_UART0_TXD
{GPIO_CNL_H_GPP_D15, GpioPadModeNative1},// ISH_UART0_RTS
{GPIO_CNL_H_GPP_D16, GpioPadModeNative1} // ISH_UART0_CTS
},
{ // UART1
{GPIO_CNL_H_GPP_C12, GpioPadModeNative2},// ISH_UART1_RXD
{GPIO_CNL_H_GPP_C13, GpioPadModeNative2},// ISH_UART1_TXD
{GPIO_CNL_H_GPP_C14, GpioPadModeNative2},// ISH_UART1_RTS
{GPIO_CNL_H_GPP_C15, GpioPadModeNative2} // ISH_UART1_CTS
}
};
/**
This function provides ISH UART controller pins
@param[in] IshUartControllerNumber ISH UART controller
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetIshUartPins (
IN UINT32 IshUartControllerNumber,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
if (IshUartControllerNumber < ARRAY_SIZE (mPchLpIshUartGpio)) {
*NativePinsTable = mPchLpIshUartGpio[IshUartControllerNumber];
return;
}
} else {
if (IshUartControllerNumber < ARRAY_SIZE (mPchHIshUartGpio)) {
*NativePinsTable = mPchHIshUartGpio[IshUartControllerNumber];
return;
}
}
*NativePinsTable = NULL;
ASSERT (FALSE);
}
//
// ISH I2C controller pins
// ISH I2C[controller number][pin: SDA/SCL]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpIshI2cGpio[][PCH_ISH_PINS_PER_I2C_CONTROLLER] =
{
{ // I2C0
{GPIO_CNL_LP_GPP_D5, GpioPadModeNative1},// ISH_I2C0_SDA
{GPIO_CNL_LP_GPP_D6, GpioPadModeNative1} // ISH_I2C0_SCL
},
{ // I2C1
{GPIO_CNL_LP_GPP_D7, GpioPadModeNative1},// ISH_I2C1_SDA
{GPIO_CNL_LP_GPP_D8, GpioPadModeNative1} // ISH_I2C1_SCL
},
{ // I2C2
{GPIO_CNL_LP_GPP_H10, GpioPadModeNative2},// ISH_I2C2_SDA
{GPIO_CNL_LP_GPP_H11, GpioPadModeNative2} // ISH_I2C2_SCL
},
{ // I2C3
{GPIO_CNL_LP_GPP_H4, GpioPadModeNative2},// ISH_I2C3_SDA
{GPIO_CNL_LP_GPP_H5, GpioPadModeNative2} // ISH_I2C3_SCL
},
{ // I2C4
{GPIO_CNL_LP_GPP_H6, GpioPadModeNative2},// ISH_I2C4_SDA
{GPIO_CNL_LP_GPP_H7, GpioPadModeNative2} // ISH_I2C4_SCL
},
{ // I2C5
{GPIO_CNL_LP_GPP_H8, GpioPadModeNative2},// ISH_I2C5_SDA
{GPIO_CNL_LP_GPP_H9, GpioPadModeNative2} // ISH_I2C5_SCL
}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHIshI2cGpio[][PCH_ISH_PINS_PER_I2C_CONTROLLER] =
{
{ // I2C0
{GPIO_CNL_H_GPP_H19, GpioPadModeNative1},// ISH_I2C0_SDA
{GPIO_CNL_H_GPP_H20, GpioPadModeNative1} // ISH_I2C0_SCL
},
{ // I2C1
{GPIO_CNL_H_GPP_H21, GpioPadModeNative1},// ISH_I2C1_SDA
{GPIO_CNL_H_GPP_H22, GpioPadModeNative1} // ISH_I2C1_SCL
},
{ // I2C2
{GPIO_CNL_H_GPP_D4, GpioPadModeNative1},// ISH_I2C2_SDA
{GPIO_CNL_H_GPP_D23, GpioPadModeNative1} // ISH_I2C2_SCL
}
};
/**
This function provides ISH I2C controller pins
@param[in] IshI2cControllerNumber ISH I2C controller
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetIshI2cPins (
IN UINT32 IshI2cControllerNumber,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
if (IshI2cControllerNumber < ARRAY_SIZE (mPchLpIshI2cGpio)) {
*NativePinsTable = mPchLpIshI2cGpio[IshI2cControllerNumber];
return;
}
} else {
if (IshI2cControllerNumber < ARRAY_SIZE (mPchHIshI2cGpio)) {
*NativePinsTable = mPchHIshI2cGpio[IshI2cControllerNumber];
return;
}
}
*NativePinsTable = NULL;
ASSERT (FALSE);
}
//
// ISH SPI controller pins
// ISH SPI[pin: CSB/CLK/MISO/MOSI]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpIshSpiGpio[PCH_ISH_PINS_PER_SPI_CONTROLLER] =
{
{GPIO_CNL_LP_GPP_D9, GpioPadModeNative1},// ISH_SPI_CSB
{GPIO_CNL_LP_GPP_D10, GpioPadModeNative1},// ISH_SPI_CLK
{GPIO_CNL_LP_GPP_D11, GpioPadModeNative1},// ISH_SPI_MISO
{GPIO_CNL_LP_GPP_D12, GpioPadModeNative1} // ISH_SPI_MOSI
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHIshSpiGpio[PCH_ISH_PINS_PER_SPI_CONTROLLER] =
{
{GPIO_CNL_H_GPP_D9, GpioPadModeNative1},// ISH_SPI_CSB
{GPIO_CNL_H_GPP_D10, GpioPadModeNative1},// ISH_SPI_CLK
{GPIO_CNL_H_GPP_D11, GpioPadModeNative1},// ISH_SPI_MISO
{GPIO_CNL_H_GPP_D12, GpioPadModeNative1} // ISH_SPI_MOSI
};
/**
This function provides ISH SPI controller pins
@param[in] IshSpiControllerNumber SPI controller
@param[out] NativePinsTable Table with pins
@param[out] NoOfNativePins Number of pins
**/
VOID
GpioGetIshSpiPins (
IN UINT32 IshSpiControllerNumber,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable,
OUT UINT32 *NoOfNativePins
)
{
if (IsPchLp ()) {
if (IshSpiControllerNumber < ARRAY_SIZE (mPchLpIshSpiGpio)) {
*NativePinsTable = mPchLpIshSpiGpio;
*NoOfNativePins = ARRAY_SIZE (mPchLpIshSpiGpio);
return;
}
} else {
if (IshSpiControllerNumber < ARRAY_SIZE (mPchHIshSpiGpio)) {
*NativePinsTable = mPchHIshSpiGpio;
*NoOfNativePins = ARRAY_SIZE (mPchHIshSpiGpio);
return;
}
}
*NoOfNativePins = 0;
*NativePinsTable = NULL;
ASSERT (FALSE);
}
//
// GPIO pins for SD controller
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpScsSdCardGpio[9] =
{
{GPIO_CNL_LP_GPP_A17, GpioPadModeNative1},// SD_PWR_EN_B
{GPIO_CNL_LP_GPP_G0, GpioPadModeNative1},// SD_CMD
{GPIO_CNL_LP_GPP_G1, GpioPadModeNative1},// SD_DATA_0
{GPIO_CNL_LP_GPP_G2, GpioPadModeNative1},// SD_DATA_1
{GPIO_CNL_LP_GPP_G3, GpioPadModeNative1},// SD_DATA_2
{GPIO_CNL_LP_GPP_G4, GpioPadModeNative1},// SD_DATA_3
{GPIO_CNL_LP_GPP_G5, GpioPadModeNative1},// SD_CDB
{GPIO_CNL_LP_GPP_G6, GpioPadModeNative1},// SD_CLK
{GPIO_CNL_LP_GPP_G7, GpioPadModeNative1} // SD_WP
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHScsSdCardGpio[9] =
{
{GPIO_CNL_H_GPP_A17, GpioPadModeNative1},// SD_PWR_EN_B
{GPIO_CNL_H_GPP_G0, GpioPadModeNative1},// SD_CMD
{GPIO_CNL_H_GPP_G1, GpioPadModeNative1},// SD_DATA_0
{GPIO_CNL_H_GPP_G2, GpioPadModeNative1},// SD_DATA_1
{GPIO_CNL_H_GPP_G3, GpioPadModeNative1},// SD_DATA_2
{GPIO_CNL_H_GPP_G4, GpioPadModeNative1},// SD_DATA_3
{GPIO_CNL_H_GPP_G5, GpioPadModeNative1},// SD_CDB
{GPIO_CNL_H_GPP_G6, GpioPadModeNative1},// SD_CLK
{GPIO_CNL_H_GPP_G7, GpioPadModeNative1} // SD_WP
};
/**
This function provides SCS SD CARD controller pins
@param[out] NativePinsTable Table with pins
@param[out] NoOfNativePins Number of pins
**/
VOID
GpioGetScsSdCardPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable,
OUT UINT32 *NoOfNativePins
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpScsSdCardGpio;
*NoOfNativePins = ARRAY_SIZE (mPchLpScsSdCardGpio);
} else {
*NativePinsTable = mPchHScsSdCardGpio;
*NoOfNativePins = ARRAY_SIZE (mPchHScsSdCardGpio);
}
}
/**
This function provides SCS SD CARD detect pin
@retval GpioPin SD CARD Detect pin
**/
GPIO_PAD
GpioGetScsSdCardDetectPin (
VOID
)
{
if (IsPchLp ()) {
return GPIO_CNL_LP_VGPIO39;
} else {
return GPIO_CNL_H_VGPIO6;
}
}
//
// GPIO pins for eMMC controller
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpScsEmmcGpio[12] =
{
{GPIO_CNL_LP_GPP_F11, GpioPadModeNative1},// EMMC_CMD
{GPIO_CNL_LP_GPP_F12, GpioPadModeNative1},// EMMC_DATA_0
{GPIO_CNL_LP_GPP_F13, GpioPadModeNative1},// EMMC_DATA_1
{GPIO_CNL_LP_GPP_F14, GpioPadModeNative1},// EMMC_DATA_2
{GPIO_CNL_LP_GPP_F15, GpioPadModeNative1},// EMMC_DATA_3
{GPIO_CNL_LP_GPP_F16, GpioPadModeNative1},// EMMC_DATA_4
{GPIO_CNL_LP_GPP_F17, GpioPadModeNative1},// EMMC_DATA_5
{GPIO_CNL_LP_GPP_F18, GpioPadModeNative1},// EMMC_DATA_6
{GPIO_CNL_LP_GPP_F19, GpioPadModeNative1},// EMMC_DATA_7
{GPIO_CNL_LP_GPP_F20, GpioPadModeNative1},// EMMC_RCLK
{GPIO_CNL_LP_GPP_F21, GpioPadModeNative1},// EMMC_CLK
{GPIO_CNL_LP_GPP_F22, GpioPadModeNative1} // EMMC_RESETB
};
/**
This function provides SCS eMMC controller pins
@param[out] NativePinsTable Table with pins
@param[out] NoOfNativePins Number of pins
**/
VOID
GpioGetScsEmmcPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable,
OUT UINT32 *NoOfNativePins
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpScsEmmcGpio;
*NoOfNativePins = ARRAY_SIZE (mPchLpScsEmmcGpio);
} else {
ASSERT (FALSE);
return;
}
}
//
// GPIO pins for HD Audio Link [pin: BCLK/RSTB/SYNC/SDO/SDIx]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpHdaLinkGpio[PCH_GPIO_HDA_LINK_NUMBER_OF_PINS] =
{
{GPIO_CNL_LP_HDA_BCLK, GpioPadModeNative1},// HDA_BCLK
{GPIO_CNL_LP_HDA_RSTB, GpioPadModeNative1},// HDA_RSTB
{GPIO_CNL_LP_HDA_SYNC, GpioPadModeNative1},// HDA_SYNC
{GPIO_CNL_LP_HDA_SDO, GpioPadModeNative1},// HDA_SDO
{GPIO_CNL_LP_HDA_SDI_0, GpioPadModeNative1},// HDA_SDI_0
{GPIO_CNL_LP_HDA_SDI_1, GpioPadModeNative1} // HDA_SDI_1
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHHdaLinkGpio[PCH_GPIO_HDA_LINK_NUMBER_OF_PINS] =
{
{GPIO_CNL_H_HDA_BCLK, GpioPadModeNative1},// HDA_BCLK
{GPIO_CNL_H_HDA_RSTB, GpioPadModeNative1},// HDA_RSTB
{GPIO_CNL_H_HDA_SYNC, GpioPadModeNative1},// HDA_SYNC
{GPIO_CNL_H_HDA_SDO, GpioPadModeNative1},// HDA_SDO
{GPIO_CNL_H_HDA_SDI_0, GpioPadModeNative1},// HDA_SDI_0
{GPIO_CNL_H_HDA_SDI_1, GpioPadModeNative1} // HDA_SDI_1
};
/**
This function provides HD Audio Link pins
@param[out] NativePinsTable Table with pins
@param[out] NoOfNativePins Number of pins
**/
VOID
GpioGetHdAudioLinkPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable,
OUT UINT32 *NoOfNativePins
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpHdaLinkGpio;
*NoOfNativePins = ARRAY_SIZE (mPchLpHdaLinkGpio);
} else {
*NativePinsTable = mPchHHdaLinkGpio;
*NoOfNativePins = ARRAY_SIZE (mPchHHdaLinkGpio);
}
}
//
// GPIO pins for HD Audio DMIC [DMIC number][pin: CLK/DATA]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpHdaDmicGpio[][PCH_GPIO_HDA_DMIC_NUMBER_OF_PINS] =
{
{ // DMIC0
{GPIO_CNL_LP_GPP_D19, GpioPadModeNative1},// DMIC_CLK_0
{GPIO_CNL_LP_GPP_D20, GpioPadModeNative1} // DMIC_DATA_0
},
{ // DMIC1
{GPIO_CNL_LP_GPP_D17, GpioPadModeNative1},// DMIC_CLK_1
{GPIO_CNL_LP_GPP_D18, GpioPadModeNative1} // DMIC_DATA_1
}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHHdaDmicGpio[][PCH_GPIO_HDA_DMIC_NUMBER_OF_PINS] =
{
{ // DMIC0
{GPIO_CNL_H_GPP_D19, GpioPadModeNative1},// DMIC_CLK_0
{GPIO_CNL_H_GPP_D20, GpioPadModeNative1} // DMIC_DATA_0
},
{ // DMIC1
{GPIO_CNL_H_GPP_D17, GpioPadModeNative1},// DMIC_CLK_1
{GPIO_CNL_H_GPP_D18, GpioPadModeNative1} // DMIC_DATA_1
}
};
/**
This function provides DMIC interface pins
@param[in] DmicNumber DMIC interface
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetHdaDmicPins (
IN UINT32 DmicNumber,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
if (DmicNumber < ARRAY_SIZE (mPchLpHdaDmicGpio)) {
*NativePinsTable = mPchLpHdaDmicGpio[DmicNumber];
return;
}
} else {
if (DmicNumber < ARRAY_SIZE (mPchHHdaDmicGpio)) {
*NativePinsTable = mPchHHdaDmicGpio[DmicNumber];
return;
}
}
*NativePinsTable = NULL;
ASSERT (FALSE);
}
//
// GPIO pins for HD Audio SSPx/I2Sx interface [SSP number][pin: SCLK/SFRM/TXD/RXD]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpHdaSspInterfaceGpio[][PCH_GPIO_HDA_SSP_NUMBER_OF_PINS] =
{
{ // SSP0/I2S0
{GPIO_CNL_LP_HDA_BCLK, GpioPadModeNative2},// SSP0_SCLK
{GPIO_CNL_LP_HDA_SYNC, GpioPadModeNative2},// SSP0_SFRM
{GPIO_CNL_LP_HDA_SDO, GpioPadModeNative2},// SSP0_TXD
{GPIO_CNL_LP_HDA_SDI_0, GpioPadModeNative2} // SSP0_RXD
},
{ // SSP1/I2S1
{GPIO_CNL_LP_HDA_RSTB, GpioPadModeNative2},// SSP1_SCLK
{GPIO_CNL_LP_SSP1_SFRM, GpioPadModeNative1},// SSP1_SFRM
{GPIO_CNL_LP_SSP1_TXD, GpioPadModeNative1},// SSP1_TXD
{GPIO_CNL_LP_HDA_SDI_1, GpioPadModeNative2} // SSP1_RXD
},
{ // SSP2/I2S2
{GPIO_CNL_LP_GPP_H0, GpioPadModeNative1},// SSP2_SCLK
{GPIO_CNL_LP_GPP_H1, GpioPadModeNative1},// SSP2_SFRM
{GPIO_CNL_LP_GPP_H2, GpioPadModeNative1},// SSP2_TXD
{GPIO_CNL_LP_GPP_H3, GpioPadModeNative1} // SSP2_RXD
}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHHdaSspInterfaceGpio[][PCH_GPIO_HDA_SSP_NUMBER_OF_PINS] =
{
{ // SSP0/I2S0
{GPIO_CNL_H_HDA_BCLK, GpioPadModeNative2},// SSP0_SCLK
{GPIO_CNL_H_HDA_SYNC, GpioPadModeNative2},// SSP0_SFRM
{GPIO_CNL_H_HDA_SDO, GpioPadModeNative2},// SSP0_TXD
{GPIO_CNL_H_HDA_SDI_0, GpioPadModeNative2} // SSP0_RXD
},
{ // SSP1/I2S1
{GPIO_CNL_H_HDA_RSTB, GpioPadModeNative2},// SSP1_SCLK
{GPIO_CNL_H_SSP1_SFRM, GpioPadModeNative1},// SSP1_SFRM
{GPIO_CNL_H_SSP1_TXD, GpioPadModeNative1},// SSP1_TXD
{GPIO_CNL_H_HDA_SDI_1, GpioPadModeNative2} // SSP1_RXD
},
{ // SSP2/I2S2
{GPIO_CNL_H_GPP_D5, GpioPadModeNative1}, // SSP2_SFRM
{GPIO_CNL_H_GPP_D6, GpioPadModeNative1}, // SSP2_TXD
{GPIO_CNL_H_GPP_D7, GpioPadModeNative1}, // SSP2_RXD
{GPIO_CNL_H_GPP_D8, GpioPadModeNative1} // SSP2_SCLK
}
};
/**
This function provides SSP/I2S interface pins
@param[in] SspInterfaceNumber SSP/I2S interface
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetHdaSspPins (
IN UINT32 SspInterfaceNumber,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
if (SspInterfaceNumber < ARRAY_SIZE (mPchLpHdaSspInterfaceGpio)) {
*NativePinsTable = mPchLpHdaSspInterfaceGpio[SspInterfaceNumber];
return;
}
} else {
if (SspInterfaceNumber < ARRAY_SIZE (mPchHHdaSspInterfaceGpio)) {
*NativePinsTable = mPchHHdaSspInterfaceGpio[SspInterfaceNumber];
return;
}
}
*NativePinsTable = NULL;
ASSERT (FALSE);
}
//
// GPIO Pin for HD Audio SSP_MCLK/I2S_MCLK
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpHdaSspMasterClockGpio = {GPIO_CNL_LP_GPP_D23, GpioPadModeNative1};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHHdaSspMasterClockGpio = {GPIO_CNL_H_GPP_B11, GpioPadModeNative1};
/**
This function sets HDA SSP Master Clock into native mode
@param[in] none
@retval Status
**/
EFI_STATUS
GpioEnableHdaSspMasterClock (
VOID
)
{
if (IsPchLp ()) {
return GpioSetPadMode (mPchLpHdaSspMasterClockGpio.Pad, mPchLpHdaSspMasterClockGpio.Mode);
} else {
return GpioSetPadMode (mPchHHdaSspMasterClockGpio.Pad, mPchHHdaSspMasterClockGpio.Mode);
}
}
//
// GPIO pins for HD Audio SoundWire interface [SNDW number][pin: CLK/DATA]
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpHdaSndwGpio[][PCH_GPIO_HDA_SNDW_NUMBER_OF_PINS] =
{
{ // SNDW1
{GPIO_CNL_LP_HDA_RSTB, GpioPadModeNative3},// SNDW1_CLK
{GPIO_CNL_LP_HDA_SDI_1, GpioPadModeNative3} // SNDW1_DATA
},
{ // SNDW2
{GPIO_CNL_LP_SSP1_SFRM, GpioPadModeNative2},// SNDW2_CLK
{GPIO_CNL_LP_SSP1_TXD, GpioPadModeNative2} // SNDW2_DATA
},
{ // SNDW3
{GPIO_CNL_LP_GPP_D17, GpioPadModeNative2},// SNDW3_CLK
{GPIO_CNL_LP_GPP_D18, GpioPadModeNative2} // SNDW3_DATA
},
{ // SNDW4
{GPIO_CNL_LP_GPP_D19, GpioPadModeNative2},// SNDW4_CLK
{GPIO_CNL_LP_GPP_D20, GpioPadModeNative2} // SNDW4_DATA
}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHHdaSndwGpio[][PCH_GPIO_HDA_SNDW_NUMBER_OF_PINS] =
{
{ // SNDW1
{GPIO_CNL_H_HDA_RSTB, GpioPadModeNative3},// SNDW1_CLK
{GPIO_CNL_H_HDA_SDI_1, GpioPadModeNative3} // SNDW1_DATA
},
{ // SNDW2
{GPIO_CNL_H_SSP1_SFRM, GpioPadModeNative2},// SNDW2_CLK
{GPIO_CNL_H_SSP1_TXD, GpioPadModeNative2} // SNDW2_DATA
},
{ // SNDW3
{GPIO_CNL_H_GPP_D17, GpioPadModeNative2},// SNDW3_CLK
{GPIO_CNL_H_GPP_D18, GpioPadModeNative2} // SNDW3_DATA
},
{ // SNDW4
{GPIO_CNL_H_GPP_D19, GpioPadModeNative2},// SNDW4_CLK
{GPIO_CNL_H_GPP_D20, GpioPadModeNative2} // SNDW4_DATA
}
};
/**
This function provides SNDW interface pins
@param[in] SndwInterfaceNumber SNDWx interface number
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetHdaSndwPins (
IN UINT32 SndwInterfaceNumber,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
if (SndwInterfaceNumber < ARRAY_SIZE (mPchLpHdaSndwGpio)) {
*NativePinsTable = mPchLpHdaSndwGpio[SndwInterfaceNumber];
return;
}
} else {
if (SndwInterfaceNumber < ARRAY_SIZE (mPchHHdaSndwGpio)) {
*NativePinsTable = mPchHHdaSndwGpio[SndwInterfaceNumber];
return;
}
}
*NativePinsTable = NULL;
ASSERT (FALSE);
}
//
// GPIO pins for SMBUS
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpSmbusGpio[PCH_GPIO_SMBUS_NUMBER_OF_PINS] =
{
{GPIO_CNL_LP_GPP_C0, GpioPadModeNative1},// SMB_CLK
{GPIO_CNL_LP_GPP_C1, GpioPadModeNative1} // SMB_DATA
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHSmbusGpio[PCH_GPIO_SMBUS_NUMBER_OF_PINS] =
{
{GPIO_CNL_H_GPP_C0, GpioPadModeNative1}, // SMB_CLK
{GPIO_CNL_H_GPP_C1, GpioPadModeNative1} // SMB_DATA
};
/**
This function provides SMBUS interface pins
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetSmbusPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpSmbusGpio;
} else {
*NativePinsTable = mPchHSmbusGpio;
}
}
//
// SMBUS Alert pin
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpSmbusAlertGpio = {GPIO_CNL_LP_GPP_C2, GpioPadModeNative1};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHSmbusAlertGpio = {GPIO_CNL_H_GPP_C2, GpioPadModeNative1};
/**
This function sets SMBUS ALERT pin into native mode
@param[in] none
@retval Status
**/
EFI_STATUS
GpioEnableSmbusAlert (
VOID
)
{
GPIO_PAD_NATIVE_FUNCTION SmbusAlertGpio;
if (IsPchLp ()) {
SmbusAlertGpio = mPchLpSmbusAlertGpio;
} else {
SmbusAlertGpio = mPchHSmbusAlertGpio;
}
return GpioSetPadMode (SmbusAlertGpio.Pad, SmbusAlertGpio.Mode);
}
//
// SATADevSlpPin to GPIO pin mapping
// SATA_DEVSLP_x -> GPIO pin y
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpSataDevSlpPinToGpioMap[] =
{
{GPIO_CNL_LP_GPP_E4, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_E5, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_E6, GpioPadModeNative1}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHSataDevSlpPinToGpioMap[] =
{
{GPIO_CNL_H_GPP_E4, GpioPadModeNative1},
{GPIO_CNL_H_GPP_E5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_E6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F7, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F8, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F9, GpioPadModeNative1}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mCdfPchSata1DevSlpPinToGpioMap[] =
{
/// @todo SERVER- update for SATA 1
{GPIO_CNL_H_GPP_E4, GpioPadModeNative1},
{GPIO_CNL_H_GPP_E5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_E6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F7, GpioPadModeNative1}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mCdfPchSata2DevSlpPinToGpioMap[] =
{
/// @todo SERVER- update for SATA 2
{GPIO_CNL_H_GPP_E4, GpioPadModeNative1},
{GPIO_CNL_H_GPP_E5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_E6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F7, GpioPadModeNative1}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mCdfPchSata3DevSlpPinToGpioMap[] =
{
/// @todo SERVER- update for SATA 3
{GPIO_CNL_H_GPP_E4, GpioPadModeNative1},
{GPIO_CNL_H_GPP_E5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_E6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_F7, GpioPadModeNative1}
};
/**
This function provides SATA DevSlp pin data
@param[in] SataCtrlIndex SATA controller index
@param[in] SataPort SATA port number
@param[out] NativePin SATA DevSlp pin
**/
VOID
GpioGetSataDevSlpPin (
IN UINT32 SataCtrlIndex,
IN UINTN SataPort,
OUT GPIO_PAD_NATIVE_FUNCTION *NativePin
)
{
if (IsCdfPch ()) {
if (SataCtrlIndex == SATA_1_CONTROLLER_INDEX) {
if (SataPort < ARRAY_SIZE (mCdfPchSata1DevSlpPinToGpioMap)) {
*NativePin = mCdfPchSata1DevSlpPinToGpioMap[SataPort];
return;
}
} else if (SataCtrlIndex == SATA_2_CONTROLLER_INDEX) {
if (SataPort < ARRAY_SIZE (mCdfPchSata2DevSlpPinToGpioMap)) {
*NativePin = mCdfPchSata2DevSlpPinToGpioMap[SataPort];
return;
}
} else if (SataCtrlIndex == SATA_3_CONTROLLER_INDEX) {
if (SataPort < ARRAY_SIZE (mCdfPchSata3DevSlpPinToGpioMap)) {
*NativePin = mCdfPchSata3DevSlpPinToGpioMap[SataPort];
return;
}
}
} else {
if (IsPchLp ()) {
if (SataPort < ARRAY_SIZE (mPchLpSataDevSlpPinToGpioMap)) {
*NativePin = mPchLpSataDevSlpPinToGpioMap[SataPort];
return;
}
} else {
if (SataPort < ARRAY_SIZE (mPchHSataDevSlpPinToGpioMap)) {
*NativePin = mPchHSataDevSlpPinToGpioMap[SataPort];
return;
}
}
}
*NativePin = (GPIO_PAD_NATIVE_FUNCTION){0};
ASSERT (FALSE);
}
//
// SATA reset port to GPIO pin mapping
// SATAGP_x -> GPIO pin y
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpSataGpToGpioMap[] =
{
{GPIO_CNL_LP_GPP_E0, GpioPadModeNative2},
{GPIO_CNL_LP_GPP_E1, GpioPadModeNative2},
{GPIO_CNL_LP_GPP_E2, GpioPadModeNative2}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHSataGpToGpioMap[] =
{
{GPIO_CNL_H_GPP_E0, GpioPadModeNative2},
{GPIO_CNL_H_GPP_E1, GpioPadModeNative2},
{GPIO_CNL_H_GPP_E2, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F0, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F1, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F2, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F3, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F4, GpioPadModeNative2}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mCdfPchSata1GpToGpioMap[] =
{
/// @todo SERVER- update for SATA 1
{GPIO_CNL_H_GPP_E0, GpioPadModeNative2},
{GPIO_CNL_H_GPP_E1, GpioPadModeNative2},
{GPIO_CNL_H_GPP_E2, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F0, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F1, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F2, GpioPadModeNative2}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mCdfPchSata2GpToGpioMap[] =
{
/// @todo SERVER- update for SATA 2
{GPIO_CNL_H_GPP_E0, GpioPadModeNative2},
{GPIO_CNL_H_GPP_E1, GpioPadModeNative2},
{GPIO_CNL_H_GPP_E2, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F0, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F1, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F2, GpioPadModeNative2}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mCdfPchSata3GpToGpioMap[] =
{
/// @todo SERVER- update for SATA 3
{GPIO_CNL_H_GPP_E0, GpioPadModeNative2},
{GPIO_CNL_H_GPP_E1, GpioPadModeNative2},
{GPIO_CNL_H_GPP_E2, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F0, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F1, GpioPadModeNative2},
{GPIO_CNL_H_GPP_F2, GpioPadModeNative2}
};
/**
This function provides SATA GP pin data
@param[in] SataCtrlIndex SATA controller index
@param[in] SataPort SATA port number
@param[out] NativePin SATA GP pin
**/
VOID
GpioGetSataGpPin (
IN UINT32 SataCtrlIndex,
IN UINTN SataPort,
OUT GPIO_PAD_NATIVE_FUNCTION *NativePin
)
{
if (IsCdfPch ()) {
if (SataCtrlIndex == SATA_1_CONTROLLER_INDEX) {
if (SataPort < ARRAY_SIZE (mCdfPchSata1GpToGpioMap)) {
*NativePin = mCdfPchSata1GpToGpioMap[SataPort];
return;
}
} else if (SataCtrlIndex == SATA_2_CONTROLLER_INDEX) {
if (SataPort < ARRAY_SIZE (mCdfPchSata2GpToGpioMap)) {
*NativePin = mCdfPchSata2GpToGpioMap[SataPort];
return;
}
} else if (SataCtrlIndex == SATA_3_CONTROLLER_INDEX) {
if (SataPort < ARRAY_SIZE (mCdfPchSata3GpToGpioMap)) {
*NativePin = mCdfPchSata3GpToGpioMap[SataPort];
return;
}
}
} else {
if (IsPchLp ()) {
if (SataPort < ARRAY_SIZE (mPchLpSataGpToGpioMap)) {
*NativePin = mPchLpSataGpToGpioMap[SataPort];
return;
}
} else {
if (SataPort < ARRAY_SIZE (mPchHSataGpToGpioMap)) {
*NativePin = mPchHSataGpToGpioMap[SataPort];
return;
}
}
}
*NativePin = (GPIO_PAD_NATIVE_FUNCTION){0};
ASSERT (FALSE);
}
//
// SATA LED pin
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpSataLedGpio = {GPIO_CNL_LP_GPP_E8, GpioPadModeNative1};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHSataLedGpio = {GPIO_CNL_H_GPP_E8, GpioPadModeNative1};
/**
This function sets SATA LED pin into native mode. SATA LED indicates
SATA controller activity
@param[in] none
@retval Status
**/
EFI_STATUS
GpioEnableSataLed (
VOID
)
{
GPIO_PAD_NATIVE_FUNCTION SataLedGpio;
if (IsPchLp ()) {
SataLedGpio = mPchLpSataLedGpio;
} else {
SataLedGpio = mPchHSataLedGpio;
}
return GpioSetPadMode (SataLedGpio.Pad, SataLedGpio.Mode);
}
//
// USB2 OC pins
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpUsbOcGpioPins[] =
{
{GPIO_CNL_LP_GPP_E9, GpioPadModeNative1},// USB_OC_0
{GPIO_CNL_LP_GPP_E10, GpioPadModeNative1},// USB_OC_1
{GPIO_CNL_LP_GPP_E11, GpioPadModeNative1},// USB_OC_2
{GPIO_CNL_LP_GPP_E12, GpioPadModeNative1} // USB_OC_3
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHUsbOcGpioPins[] =
{
{GPIO_CNL_H_GPP_E9, GpioPadModeNative1},// USB_OC_0
{GPIO_CNL_H_GPP_E10, GpioPadModeNative1},// USB_OC_1
{GPIO_CNL_H_GPP_E11, GpioPadModeNative1},// USB_OC_2
{GPIO_CNL_H_GPP_E12, GpioPadModeNative1},// USB_OC_3
{GPIO_CNL_H_GPP_F15, GpioPadModeNative1},// USB_OC_4
{GPIO_CNL_H_GPP_F16, GpioPadModeNative1},// USB_OC_5
{GPIO_CNL_H_GPP_F17, GpioPadModeNative1},// USB_OC_6
{GPIO_CNL_H_GPP_F18, GpioPadModeNative1} // USB_OC_7
};
/**
This function enables USB OverCurrent pins by setting
USB2 OCB pins into native mode
@param[in] OcPinNumber USB OC pin number
@retval Status
**/
EFI_STATUS
GpioEnableUsbOverCurrent (
IN UINTN OcPinNumber
)
{
GPIO_PAD_NATIVE_FUNCTION OcGpio;
if (IsPchLp ()) {
if (OcPinNumber >= ARRAY_SIZE (mPchLpUsbOcGpioPins)) {
ASSERT(FALSE);
return EFI_UNSUPPORTED;
}
OcGpio = mPchLpUsbOcGpioPins[OcPinNumber];
} else {
if (OcPinNumber >= ARRAY_SIZE (mPchHUsbOcGpioPins)) {
ASSERT (FALSE);
return EFI_UNSUPPORTED;
}
OcGpio = mPchHUsbOcGpioPins[OcPinNumber];
}
return GpioSetPadMode (OcGpio.Pad, OcGpio.Mode);
}
//
// GPIO pin for PCIE SCRCLKREQB
// SCRCLKREQB_x -> GPIO pin y
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpPcieSrcClkReqbPinToGpioMap[] =
{
{GPIO_CNL_LP_GPP_B5, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B6, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B7, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B8, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B9, GpioPadModeNative1},
{GPIO_CNL_LP_GPP_B10, GpioPadModeNative1}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHPcieSrcClkReqbPinToGpioMap[] =
{
{GPIO_CNL_H_GPP_B5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B7, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B8, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B9, GpioPadModeNative1},
{GPIO_CNL_H_GPP_B10, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H0, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H1, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H2, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H3, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H4, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H5, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H6, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H7, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H8, GpioPadModeNative1},
{GPIO_CNL_H_GPP_H9, GpioPadModeNative1}
};
/**
This function provides PCIe CLKREQ pin data
@param[in] ClkreqIndex CLKREQ# number
@param[out] NativePin Native pin data
**/
VOID
GpioGetPcieClkReqPin (
IN UINT32 ClkreqIndex,
OUT GPIO_PAD_NATIVE_FUNCTION *NativePin
)
{
if (IsPchLp ()) {
if (ClkreqIndex < ARRAY_SIZE (mPchLpPcieSrcClkReqbPinToGpioMap)) {
*NativePin = mPchLpPcieSrcClkReqbPinToGpioMap[ClkreqIndex];
return;
}
} else {
if (ClkreqIndex < ARRAY_SIZE (mPchHPcieSrcClkReqbPinToGpioMap)) {
*NativePin = mPchHPcieSrcClkReqbPinToGpioMap[ClkreqIndex];
return;
}
}
*NativePin = (GPIO_PAD_NATIVE_FUNCTION){0};
ASSERT (FALSE);
}
//
// PCHHOTB pin
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpPchHotbPin = {GPIO_CNL_LP_GPP_B23, GpioPadModeNative2};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHPchHotbPin = {GPIO_CNL_H_GPP_B23, GpioPadModeNative2};
/**
This function sets PCHHOT pin into native mode
@param[in] none
@retval Status
**/
EFI_STATUS
GpioEnablePchHot (
VOID
)
{
GPIO_PAD_NATIVE_FUNCTION PchHotbPin;
if (IsPchLp ()) {
PchHotbPin = mPchLpPchHotbPin;
} else {
PchHotbPin = mPchHPchHotbPin;
}
return GpioSetPadMode (PchHotbPin.Pad, PchHotbPin.Mode);
}
//
// VRALERTB pin
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpVrAlertbPin = {GPIO_CNL_LP_GPP_B2, GpioPadModeNative1};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHVrAlertbPin = {GPIO_CNL_H_GPP_B2, GpioPadModeNative1};
//
// CPU_C10_GATE pin
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpCpuC10GatePin = {GPIO_CNL_LP_GPP_H18, GpioPadModeNative1};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHCpuC10GatePin = {GPIO_CNL_H_GPP_J1, GpioPadModeNative2};
/**
This function sets VRALERTB pin into native mode
@param[in] none
@retval Status
**/
EFI_STATUS
GpioEnableVrAlert (
VOID
)
{
GPIO_PAD_NATIVE_FUNCTION VrAlertGpio;
if (IsPchLp ()) {
VrAlertGpio = mPchLpVrAlertbPin;
} else {
VrAlertGpio = mPchHVrAlertbPin;
}
return GpioSetPadMode (VrAlertGpio.Pad, VrAlertGpio.Mode);
}
/**
This function sets CPU C10 Gate pins into native mode
@retval Status
**/
EFI_STATUS
GpioEnableCpuC10GatePin (
VOID
)
{
GPIO_PAD_NATIVE_FUNCTION CpuC10GateGpio;
if (IsPchLp ()) {
CpuC10GateGpio = mPchLpCpuC10GatePin;
} else {
CpuC10GateGpio = mPchHCpuC10GatePin;
}
return GpioSetPadMode (CpuC10GateGpio.Pad, CpuC10GateGpio.Mode);
}
//
// CPU GP pins
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpCpuGpPinMap[PCH_GPIO_CPU_GP_NUMBER_OF_PINS] =
{
{GPIO_CNL_LP_GPP_E3, GpioPadModeNative1}, // CPU_GP_0
{GPIO_CNL_LP_GPP_E7, GpioPadModeNative1}, // CPU_GP_1
{GPIO_CNL_LP_GPP_B3, GpioPadModeNative1}, // CPU_GP_2
{GPIO_CNL_LP_GPP_B4, GpioPadModeNative1}, // CPU_GP_3
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHCpuGpPinMap[PCH_GPIO_CPU_GP_NUMBER_OF_PINS] =
{
{GPIO_CNL_H_GPP_E3, GpioPadModeNative1}, // CPU_GP_0
{GPIO_CNL_H_GPP_E7, GpioPadModeNative1}, // CPU_GP_1
{GPIO_CNL_H_GPP_B3, GpioPadModeNative1}, // CPU_GP_2
{GPIO_CNL_H_GPP_B4, GpioPadModeNative1}, // CPU_GP_3
};
/**
This function sets CPU GP pins into native mode
@param[in] CpuGpPinNum CPU GP pin number
@retval Status
**/
EFI_STATUS
GpioEnableCpuGpPin (
IN UINT32 CpuGpPinNum
)
{
GPIO_PAD_NATIVE_FUNCTION CpuGpPin;
if (IsPchLp ()) {
if (CpuGpPinNum >= ARRAY_SIZE (mPchLpCpuGpPinMap)) {
ASSERT (FALSE);
return EFI_UNSUPPORTED;
}
CpuGpPin = mPchLpCpuGpPinMap[CpuGpPinNum];
} else {
if (CpuGpPinNum >= ARRAY_SIZE (mPchHCpuGpPinMap)) {
ASSERT(FALSE);
return EFI_UNSUPPORTED;
}
CpuGpPin = mPchHCpuGpPinMap[CpuGpPinNum];
}
return GpioSetPadMode (CpuGpPin.Pad, CpuGpPin.Mode);
}
//
// DDSP_HPD pins
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpDdspHpdPins[] =
{
{GPIO_CNL_LP_GPP_E13, GpioPadModeNative1},// DDSP_HPD_0
{GPIO_CNL_LP_GPP_E14, GpioPadModeNative1},// DDSP_HPD_1
{GPIO_CNL_LP_GPP_E15, GpioPadModeNative1},// DDSP_HPD_2
{GPIO_CNL_LP_GPP_E16, GpioPadModeNative1} // DDSP_HPD_3
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHDdspHpdPins[] =
{
{GPIO_CNL_H_GPP_I0, GpioPadModeNative1},// DDSP_HPD_0
{GPIO_CNL_H_GPP_I1, GpioPadModeNative1},// DDSP_HPD_1
{GPIO_CNL_H_GPP_I2, GpioPadModeNative1},// DDSP_HPD_2
{GPIO_CNL_H_GPP_I3, GpioPadModeNative1} // DDSP_HPD_3
};
/**
This function sets DDSP_HPDx pin into native mode
@param[in] DdspHpdPin DDSP_HPDx pin
@retval Status
**/
EFI_STATUS
GpioEnableDpHotPlugDetect (
IN GPIO_DDSP_HPD DdspHpdPin
)
{
GPIO_PAD_NATIVE_FUNCTION DdspHpdGpio;
UINT32 DdspHpdPinIndex;
if (DdspHpdPin > GpioDdspHpd3) {
return EFI_UNSUPPORTED;
}
DdspHpdPinIndex = DdspHpdPin - GpioDdspHpd0;
if (IsPchLp ()) {
if (DdspHpdPinIndex >= ARRAY_SIZE (mPchLpDdspHpdPins)) {
goto Error;
}
DdspHpdGpio = mPchLpDdspHpdPins[DdspHpdPinIndex];
} else {
if (DdspHpdPinIndex >= ARRAY_SIZE (mPchHDdspHpdPins)) {
goto Error;
}
DdspHpdGpio = mPchHDdspHpdPins[DdspHpdPinIndex];
}
return GpioSetPadMode (DdspHpdGpio.Pad, DdspHpdGpio.Mode);
Error:
ASSERT (FALSE);
return EFI_UNSUPPORTED;
}
//
// EDP HPD, VDD and BKLT pins
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpEdpPins[PCH_GPIO_EDP_NUMBER_OF_PINS] =
{
{GPIO_CNL_LP_GPP_E17, GpioPadModeNative1},// EDP_HPD
{GPIO_CNL_LP_HVMOS_L_VDDEN, GpioPadModeNative1},// VDDEN
{GPIO_CNL_LP_HVMOS_L_BKLTEN, GpioPadModeNative1},// BKLTEN
{GPIO_CNL_LP_HVMOS_L_BKLTCTL, GpioPadModeNative1} // BKLTCTL
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHEdpPins[PCH_GPIO_EDP_NUMBER_OF_PINS] =
{
{GPIO_CNL_H_GPP_I4, GpioPadModeNative1},// EDP_HPD
{GPIO_CNL_H_GPP_F19, GpioPadModeNative1},// VDDEN
{GPIO_CNL_H_GPP_F20, GpioPadModeNative1},// BKLTEN
{GPIO_CNL_H_GPP_F21, GpioPadModeNative1} // BKLTCTL
};
/**
This function provides eDP pins
@param[out] NativePinsTable Table with pins
@param[out] NoOfNativePins Number of pins
**/
VOID
GpioGetEdpPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable,
OUT UINT32 *NoOfNativePins
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpEdpPins;
*NoOfNativePins = ARRAY_SIZE (mPchLpEdpPins);
} else {
*NativePinsTable = mPchHEdpPins;
*NoOfNativePins = ARRAY_SIZE (mPchHEdpPins);
}
}
//
// DDPB/C/D/F CTRLCLK and CTRLDATA pins
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpDdpInterfacePins[PCH_GPIO_DDP_NUMBER_OF_INTERFACES][PCH_GPIO_DDP_NUMBER_OF_PINS] =
{
{// DDPB
{GPIO_CNL_LP_GPP_E18, GpioPadModeNative1},// DDPB_CTRLCLK
{GPIO_CNL_LP_GPP_E19, GpioPadModeNative1} // DDPB_CTRLDATA
},
{// DDPC
{GPIO_CNL_LP_GPP_E20, GpioPadModeNative1},// DDPC_CTRLCLK
{GPIO_CNL_LP_GPP_E21, GpioPadModeNative1} // DDPC_CTRLDATA
},
{// DDPD
{GPIO_CNL_LP_GPP_E22, GpioPadModeNative1},// DDPD_CTRLCLK
{GPIO_CNL_LP_GPP_E23, GpioPadModeNative1} // DDPD_CTRLDATA
},
{// DDPF
{GPIO_CNL_LP_GPP_H16, GpioPadModeNative1},// DDPF_CTRLCLK
{GPIO_CNL_LP_GPP_H17, GpioPadModeNative1} // DDPF_CTRLDATA
}
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHDdpInterfacePins[PCH_GPIO_DDP_NUMBER_OF_INTERFACES][PCH_GPIO_DDP_NUMBER_OF_PINS] =
{
{// DDPB
{GPIO_CNL_H_GPP_I5, GpioPadModeNative1}, // DDPB_CTRLCLK
{GPIO_CNL_H_GPP_I6, GpioPadModeNative1}, // DDPB_CTRLDATA
},
{// DDPC
{GPIO_CNL_H_GPP_I7, GpioPadModeNative1}, // DDPC_CTRLCLK
{GPIO_CNL_H_GPP_I8, GpioPadModeNative1}, // DDPC_CTRLDATA
},
{// DDPD
{GPIO_CNL_H_GPP_I9, GpioPadModeNative1}, // DDPD_CTRLCLK
{GPIO_CNL_H_GPP_I10, GpioPadModeNative1}, // DDPD_CTRLDATA
},
{// DDPF
{GPIO_CNL_H_GPP_F22, GpioPadModeNative1}, // DDPF_CTRLCLK
{GPIO_CNL_H_GPP_F23, GpioPadModeNative1}, // DDPF_CTRLDATA
}
};
/**
This function provides DDPx interface pins
@param[in] DdpInterface DDPx interface
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetDdpPins (
IN GPIO_DDP DdpInterface,
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
UINT32 DdpInterfaceIndex;
switch (DdpInterface) {
case GpioDdpB:
case GpioDdpC:
case GpioDdpD:
DdpInterfaceIndex = DdpInterface - GpioDdpB;
break;
case GpioDdpF:
DdpInterfaceIndex = 3;
break;
default:
goto Error;
}
if (IsPchLp ()) {
if (DdpInterfaceIndex < ARRAY_SIZE (mPchLpDdpInterfacePins)) {
*NativePinsTable = mPchLpDdpInterfacePins[DdpInterfaceIndex];
return;
}
} else {
if (DdpInterfaceIndex < ARRAY_SIZE (mPchHDdpInterfacePins)) {
*NativePinsTable = mPchHDdpInterfacePins[DdpInterfaceIndex];
return;
}
}
Error:
*NativePinsTable = NULL;
ASSERT(FALSE);
}
/**
This function enables CNVi RF Reset pin
**/
VOID
GpioEnableCnviRfResetPin (
VOID
)
{
EFI_STATUS Status;
GPIO_PAD GpioPad;
GPIO_PAD_MODE PadMode;
if (IsPchLp ()) {
GpioPad = GPIO_CNL_LP_GPP_H1;
PadMode = GpioPadModeNative3;
} else {
GpioPad = GPIO_CNL_H_GPP_D5;
PadMode = GpioPadModeNative3;
}
Status = GpioSetPadMode (GpioPad, PadMode);
ASSERT_EFI_ERROR (Status);
}
/**
This function enables CNVi MODEM CLKREQ pin
**/
VOID
GpioEnableCnviModemClkReqPin (
VOID
)
{
EFI_STATUS Status;
GPIO_PAD GpioPad;
GPIO_PAD_MODE PadMode;
if (IsPchLp ()) {
GpioPad = GPIO_CNL_LP_GPP_H2;
PadMode = GpioPadModeNative3;
} else {
GpioPad = GPIO_CNL_H_GPP_D6;
PadMode = GpioPadModeNative3;
}
Status = GpioSetPadMode (GpioPad, PadMode);
ASSERT_EFI_ERROR (Status);
}
/**
This function provides CNVi BT interface select pin
@retval GpioPad GPIO pad for CNVi BT interface select
**/
GPIO_PAD
GpioGetCnviBtIfSelectPin (
VOID
)
{
if (IsPchLp ()) {
return GPIO_CNL_LP_VGPIO5;
} else {
return GPIO_CNL_H_VGPIO7;
}
}
/**
This function provides CNVi BT Charging pin
@retval GpioPad GPIO pad for CNVi BT Charging select
**/
GPIO_PAD
GpioGetCnviBtChargingPin (
VOID
)
{
if (IsPchLp ()) {
return GPIO_CNL_LP_VGPIO3;
} else {
return GPIO_CNL_H_VGPIO3;
}
}
/**
This function provides CNVi A4WP pin
@param[out] GpioNativePad GPIO native pad for CNVi A4WP
**/
VOID
GpioGetCnviA4WpPin (
OUT GPIO_PAD_NATIVE_FUNCTION *GpioNativePad
)
{
GpioNativePad->Mode = GpioPadModeNative1;
if (IsPchLp ()) {
GpioNativePad->Pad = GPIO_CNL_LP_GPP_F23;
} else {
GpioNativePad->Pad = GPIO_CNL_H_GPP_J11;
}
}
/**
This function provides CNVi BT host wake int pin
@retval GpioPad GPIO pad BT host wake int
**/
GPIO_PAD
GpioGetCnviBtHostWakeIntPin (
VOID
)
{
if (IsPchLp ()) {
return GPIO_CNL_LP_VGPIO4;
} else {
return GPIO_CNL_H_VGPIO4;
}
}
//
// CNVi Bluetooth UART pads
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchLpVCnviBtUartGpioPad[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
GPIO_CNL_LP_VGPIO6, // vCNV_BT_UART_TXD
GPIO_CNL_LP_VGPIO7, // vCNV_BT_UART_RXD
GPIO_CNL_LP_VGPIO8, // vCNV_BT_UART_CTS_B
GPIO_CNL_LP_VGPIO9 // vCNV_BT_UART_RTS_B
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchHVCnviBtUartGpioPad[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
GPIO_CNL_H_VGPIO8, // vCNV_BT_UART_TXD
GPIO_CNL_H_VGPIO9, // vCNV_BT_UART_RXD
GPIO_CNL_H_VGPIO10,// vCNV_BT_UART_CTS_B
GPIO_CNL_H_VGPIO11 // vCNV_BT_UART_RTS_B
};
//
// vUART for Bluetooth
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchLpVUartForCnviBtGpioPad[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
GPIO_CNL_LP_VGPIO18, // vUART0_TXD
GPIO_CNL_LP_VGPIO19, // vUART0_RXD
GPIO_CNL_LP_VGPIO20, // vUART0_CTS_B
GPIO_CNL_LP_VGPIO21 // vUART0_RTS_B
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchHVUartForCnviBtGpioPad[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
GPIO_CNL_H_VGPIO20, // vUART0_TXD
GPIO_CNL_H_VGPIO21, // vUART0_RXD
GPIO_CNL_H_VGPIO22, // vUART0_CTS_B
GPIO_CNL_H_VGPIO23 // vUART0_RTS_B
};
/**
This function provides CNVi BT UART pins
@param[in] ConnectionType CNVi BT UART connection type
@param[out] VCnviBtUartPad Table with vCNV_BT_UARTx pads
@param[out] VCnviBtUartPadMode vCNV_BT_UARTx pad mode
@param[out] VUartForCnviBtPad Table with vUART0 pads
@param[out] VUartForCnviBtPadMode vUART0 pad mode
**/
VOID
GpioGetCnviBtUartPins (
IN VGPIO_CNVI_BT_UART_CONNECTION_TYPE ConnectionType,
OUT GPIO_PAD **VCnviBtUartPad,
OUT GPIO_PAD_MODE *VCnviBtUartPadMode,
OUT GPIO_PAD **VUartForCnviBtPad,
OUT GPIO_PAD_MODE *VUartForCnviBtPadMode
)
{
if (IsPchLp ()) {
*VCnviBtUartPad = mPchLpVCnviBtUartGpioPad;
*VUartForCnviBtPad = mPchLpVUartForCnviBtGpioPad;
} else {
*VCnviBtUartPad = mPchHVCnviBtUartGpioPad;
*VUartForCnviBtPad = mPchHVUartForCnviBtGpioPad;
}
switch (ConnectionType) {
case GpioCnviBtUartToSerialIoUart0:
*VCnviBtUartPadMode = GpioPadModeNative1;
*VUartForCnviBtPadMode = GpioPadModeNative1;
break;
case GpioCnviBtUartToIshUart0:
*VCnviBtUartPadMode = GpioPadModeNative2;
*VUartForCnviBtPadMode = GpioPadModeNative1;
break;
case GpioCnviBtUartNotConnected:
case GpioCnviBtUartToExternalPads:
*VCnviBtUartPadMode = GpioPadModeGpio;
*VUartForCnviBtPadMode = GpioPadModeGpio;
break;
default:
ASSERT (FALSE);
return;
}
}
//
// CNVi Bluetooth UART external pads
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpCnviBtUartExternalPads[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
{GPIO_CNL_LP_GPP_C8, GpioPadModeNative2}, // CNV_BT_UART_0_RXD
{GPIO_CNL_LP_GPP_C9, GpioPadModeNative2}, // CNV_BT_UART_0_TXD
{GPIO_CNL_LP_GPP_C10, GpioPadModeNative2}, // CNV_BT_UART_0_RTS
{GPIO_CNL_LP_GPP_C11, GpioPadModeNative2} // CNV_BT_UART_0_CTS
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHCnviBtUartExternalPads[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
{GPIO_CNL_H_GPP_C8, GpioPadModeNative2}, // CNV_BT_UART_0_RXD
{GPIO_CNL_H_GPP_C9, GpioPadModeNative2}, // CNV_BT_UART_0_TXD
{GPIO_CNL_H_GPP_C10, GpioPadModeNative2}, // CNV_BT_UART_0_RTS
{GPIO_CNL_H_GPP_C11, GpioPadModeNative2} // CNV_BT_UART_0_CTS
};
/**
This function provides CNVi BT UART external pads
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetCnviBtUartExternalPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpCnviBtUartExternalPads;
} else {
*NativePinsTable = mPchHCnviBtUartExternalPads;
}
}
//
// CNVi Bluetooth I2S pads
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchLpVCnviBtI2sGpioPad[PCH_GPIO_CNVI_SSP_NUMBER_OF_PINS] =
{
GPIO_CNL_LP_VGPIO30, // vCNV_BT_I2S_BCLK
GPIO_CNL_LP_VGPIO31, // vCNV_BT_I2S_WS_SYNC
GPIO_CNL_LP_VGPIO32, // vCNV_BT_I2S_SDO
GPIO_CNL_LP_VGPIO33 // vCNV_BT_I2S_SDI
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchHVCnviBtI2sGpioPad[PCH_GPIO_CNVI_SSP_NUMBER_OF_PINS] =
{
GPIO_CNL_H_VGPIO32, // vCNV_BT_I2S_BCLK
GPIO_CNL_H_VGPIO33, // vCNV_BT_I2S_WS_SYNC
GPIO_CNL_H_VGPIO34, // vCNV_BT_I2S_SDO
GPIO_CNL_H_VGPIO35 // vCNV_BT_I2S_SDI
};
//
// vSSP for Bluetooth
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchLpVSspForCnviBtGpioPad[PCH_GPIO_CNVI_SSP_NUMBER_OF_PINS] =
{
GPIO_CNL_LP_VGPIO34, // vSSP2_SCLK
GPIO_CNL_LP_VGPIO35, // vSSP2_SFRM
GPIO_CNL_LP_VGPIO36, // vSSP2_TXD
GPIO_CNL_LP_VGPIO37 // vSSP2_RXD
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchHVSspForCnviBtGpioPad[PCH_GPIO_CNVI_SSP_NUMBER_OF_PINS] =
{
GPIO_CNL_H_VGPIO36, // vSSP2_SCLK
GPIO_CNL_H_VGPIO37, // vSSP2_SFRM
GPIO_CNL_H_VGPIO38, // vSSP2_TXD
GPIO_CNL_H_VGPIO39 // vSSP2_RXD
};
/**
This function provides CNVi BT I2S pins
@param[in] ConnectionType CNVi BT I2S connection type
@param[out] VCnviBtI2sPad Table with vCNV_BT_I2Sx pads
@param[out] VCnviBtI2sPadMode vCNV_BT_I2Sx pad mode
@param[out] VSspForCnviBtPad Table with vSSP2 pads
@param[out] VSspForCnviBtPadMode vSSP2 pad mode
**/
VOID
GpioGetCnviBtI2sPins (
IN VGPIO_CNVI_BT_I2S_CONNECTION_TYPE ConnectionType,
OUT GPIO_PAD **VCnviBtI2sPad,
OUT GPIO_PAD_MODE *VCnviBtI2sPadMode,
OUT GPIO_PAD **VSspForCnviBtPad,
OUT GPIO_PAD_MODE *VSspForCnviBtPadMode
)
{
if (IsPchLp ()) {
*VCnviBtI2sPad = mPchLpVCnviBtI2sGpioPad;
*VSspForCnviBtPad = mPchLpVSspForCnviBtGpioPad;
} else {
*VCnviBtI2sPad = mPchHVCnviBtI2sGpioPad;
*VSspForCnviBtPad = mPchHVSspForCnviBtGpioPad;
}
switch (ConnectionType) {
case GpioCnviBtI2sToSsp0:
*VCnviBtI2sPadMode = GpioPadModeNative1;
*VSspForCnviBtPadMode = GpioPadModeNative1;
break;
case GpioCnviBtI2sToSsp1:
*VCnviBtI2sPadMode = GpioPadModeNative2;
*VSspForCnviBtPadMode = GpioPadModeNative1;
break;
case GpioCnviBtI2sToSsp2:
*VCnviBtI2sPadMode = GpioPadModeNative3;
*VSspForCnviBtPadMode = GpioPadModeNative1;
break;
case GpioCnviBtI2sNotConnected:
case GpioCnviBtI2sToExternalPads:
*VCnviBtI2sPadMode = GpioPadModeGpio;
*VSspForCnviBtPadMode = GpioPadModeGpio;
break;
default:
ASSERT (FALSE);
return;
}
}
//
// CNVi Bluetooth I2S external pads
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpCnviBtI2sExternalPads[PCH_GPIO_CNVI_SSP_NUMBER_OF_PINS] =
{
{GPIO_CNL_LP_GPP_H0, GpioPadModeNative2}, // CNV_BT_I2S_WS_SYNC
{GPIO_CNL_LP_GPP_H1, GpioPadModeNative2}, // CNV_BT_I2S_BCLK
{GPIO_CNL_LP_GPP_H2, GpioPadModeNative2}, // CNV_BT_I2S_SDI
{GPIO_CNL_LP_GPP_H3, GpioPadModeNative2} // CNV_BT_I2S_SDO
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHCnviBtI2sExternalPads[PCH_GPIO_CNVI_SSP_NUMBER_OF_PINS] =
{
{GPIO_CNL_H_GPP_D8, GpioPadModeNative2}, // CNV_BT_I2S_WS_SYNC
{GPIO_CNL_H_GPP_D5, GpioPadModeNative2}, // CNV_BT_I2S_BCLK
{GPIO_CNL_H_GPP_D6, GpioPadModeNative2}, // CNV_BT_I2S_SDI
{GPIO_CNL_H_GPP_D7, GpioPadModeNative2} // CNV_BT_I2S_SDO
};
/**
This function provides CNVi BT I2S external pads
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetCnviBtI2sExternalPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpCnviBtI2sExternalPads;
} else {
*NativePinsTable = mPchHCnviBtI2sExternalPads;
}
}
//
// CNVi MFUART1 pads
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchLpVCnviMfUart1GpioPad[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
GPIO_CNL_LP_VGPIO10, // vCNV_MFUART1_TXD
GPIO_CNL_LP_VGPIO11, // vCNV_MFUART1_RXD
GPIO_CNL_LP_VGPIO12, // vCNV_MFUART1_CTS_B
GPIO_CNL_LP_VGPIO13 // vCNV_MFUART1_RTS_B
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchHVCnviMfUart1GpioPad[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
GPIO_CNL_H_VGPIO12, // vCNV_MFUART1_TXD
GPIO_CNL_H_VGPIO13, // vCNV_MFUART1_RXD
GPIO_CNL_H_VGPIO14, // vCNV_MFUART1_CTS_B
GPIO_CNL_H_VGPIO15 // vCNV_MFUART1_RTS_B
};
//
// vUART for MFUART1
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchLpVUartForCnviMfUart1GpioPad[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
GPIO_CNL_LP_VGPIO22, // vISH_UART0_TXD
GPIO_CNL_LP_VGPIO23, // vISH_UART0_RXD
GPIO_CNL_LP_VGPIO24, // vISH_UART0_CTS_B
GPIO_CNL_LP_VGPIO25 // vISH_UART0_RTS_B
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD mPchHVUartForCnviMfUart1GpioPad[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
GPIO_CNL_H_VGPIO24, // vISH_UART0_TXD
GPIO_CNL_H_VGPIO25, // vISH_UART0_RXD
GPIO_CNL_H_VGPIO26, // vISH_UART0_CTS_B
GPIO_CNL_H_VGPIO27 // vISH_UART0_RTS_B
};
/**
This function provides CNVi MFUART1 pins
@param[in] ConnectionType CNVi MFUART1 connection type
@param[out] VCnviBtI2sPad Table with vCNV_MFUART1x pads
@param[out] VCnviBtI2sPadMode vCNV_MFUART1x pad mode
@param[out] VSspForCnviBtPad Table with vISH_UART0 pads
@param[out] VSspForCnviBtPadMode vISH_UART0 pad mode
**/
VOID
GpioGetCnviMfUart1Pins (
IN VGPIO_CNVI_MF_UART1_CONNECTION_TYPE ConnectionType,
OUT GPIO_PAD **VCnviMfUart1Pad,
OUT GPIO_PAD_MODE *VCnviMfUart1PadMode,
OUT GPIO_PAD **VUartForCnviMfUart1Pad,
OUT GPIO_PAD_MODE *VUartForCnviMfUart1PadMode
)
{
if (IsPchLp ()) {
*VCnviMfUart1Pad = mPchLpVCnviMfUart1GpioPad;
*VUartForCnviMfUart1Pad = mPchLpVUartForCnviMfUart1GpioPad;
} else {
*VCnviMfUart1Pad = mPchHVCnviMfUart1GpioPad;
*VUartForCnviMfUart1Pad = mPchHVUartForCnviMfUart1GpioPad;
}
switch (ConnectionType) {
case GpioCnviMfUart1ToSerialIoUart2:
*VCnviMfUart1PadMode = GpioPadModeNative2;
*VUartForCnviMfUart1PadMode = GpioPadModeNative1;
break;
case GpioCnviMfUart1ToIshUart0:
*VCnviMfUart1PadMode = GpioPadModeNative1;
*VUartForCnviMfUart1PadMode = GpioPadModeNative1;
break;
case GpioCnviMfUart1NotConnected:
case GpioCnviMfUart1ToExternalPads:
*VCnviMfUart1PadMode = GpioPadModeGpio;
*VUartForCnviMfUart1PadMode = GpioPadModeGpio;
break;
default:
ASSERT (FALSE);
return;
}
}
//
// CNVi MFUART1 external pads
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpCnviMfUart1ExternalPads[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
{GPIO_CNL_LP_GPP_C12, GpioPadModeNative3}, // CNV_MFUART1_RXD
{GPIO_CNL_LP_GPP_C13, GpioPadModeNative3}, // CNV_MFUART1_TXD
{GPIO_CNL_LP_GPP_C14, GpioPadModeNative3}, // CNV_MFUART1_RTS
{GPIO_CNL_LP_GPP_C15, GpioPadModeNative3} // CNV_MFUART1_CTS
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHCnviMfUart1ExternalPads[PCH_GPIO_CNVI_UART_NUMBER_OF_PINS] =
{
{GPIO_CNL_H_GPP_C12, GpioPadModeNative3}, // CNV_MFUART1_RXD
{GPIO_CNL_H_GPP_C13, GpioPadModeNative3}, // CNV_MFUART1_TXD
{GPIO_CNL_H_GPP_C14, GpioPadModeNative3}, // CNV_MFUART1_RTS
{GPIO_CNL_H_GPP_C15, GpioPadModeNative3} // CNV_MFUART1_CTS
};
/**
This function provides CNVi MFUART1 external pads
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetCnviMfUart1ExternalPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpCnviMfUart1ExternalPads;
} else {
*NativePinsTable = mPchHCnviMfUart1ExternalPads;
}
}
/**
This function provides CNVi Bluetooth Enable pad
@retval GpioPad CNVi Bluetooth Enable pad
**/
GPIO_PAD
GpioGetCnviBtEnablePin (
VOID
)
{
if (IsPchLp ()) {
return GPIO_CNL_LP_VGPIO0;
} else {
return GPIO_CNL_H_VGPIO0;
}
}
//
// CNVi BRI (Bluetooth Radio Interface) and RGI (Radio Generic Interface) buses from Pulsar to CRF (Companion RF)
//
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpCnviBriRgiGpioPad[PCH_GPIO_CNVI_BRI_RGI_NUMBER_OF_PINS] =
{
{GPIO_CNL_LP_GPP_F4, GpioPadModeNative1}, // CNV_BRI_DT
{GPIO_CNL_LP_GPP_F5, GpioPadModeNative1}, // CNV_BRI_RSP
{GPIO_CNL_LP_GPP_F6, GpioPadModeNative1}, // CNV_RGI_DT
{GPIO_CNL_LP_GPP_F7, GpioPadModeNative1} // CNV_RGI_RSP
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHCnviBriRgiGpioPad[PCH_GPIO_CNVI_BRI_RGI_NUMBER_OF_PINS] =
{
{GPIO_CNL_H_GPP_J4, GpioPadModeNative1}, // CNV_BRI_DT
{GPIO_CNL_H_GPP_J5, GpioPadModeNative1}, // CNV_BRI_RSP
{GPIO_CNL_H_GPP_J6, GpioPadModeNative1}, // CNV_RGI_DT
{GPIO_CNL_H_GPP_J7, GpioPadModeNative1} // CNV_RGI_RSP
};
/**
This function provides CNVi BRI RGI GPIO pads
@param[out] NativePinsTable Table with pins
**/
VOID
GpioGetCnvBriRgiPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpCnviBriRgiGpioPad;
} else {
*NativePinsTable = mPchHCnviBriRgiGpioPad;
}
}
/**
This function sets CNVi WiFi mode
@param[in] Value CNVi WiFi Mode value
GpioCnviWiFiAuto: WiFi is automatically enabled/disabled by WiFi core
GpioCnviWiFiEnabled: WiFi is enabled regardless of WiFi core decision
@retval Status
**/
EFI_STATUS
GpioSetCnviWifiMode (
IN VGPIO_CNVI_WIFI_MODE WiFiMode
)
{
EFI_STATUS Status;
GPIO_PAD CnviWifiModePad;
GPIO_CONFIG PadConfig;
ZeroMem (&PadConfig, sizeof (PadConfig));
PadConfig.PadMode = GpioPadModeGpio;
PadConfig.Direction = GpioDirOut;
if (WiFiMode == GpioCnviWiFiEnabled) {
PadConfig.OutputState = GpioOutHigh;
} else {
PadConfig.OutputState = GpioOutLow;
}
if (IsPchLp ()) {
CnviWifiModePad = GPIO_CNL_LP_VGPIO2;
} else {
CnviWifiModePad = GPIO_CNL_H_VGPIO2;
}
Status = GpioSetPadConfig (CnviWifiModePad, &PadConfig);
ASSERT_EFI_ERROR (Status);
return EFI_SUCCESS;
}
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchLpImguClkOutGpioPad[SA_GPIO_IMGUCLK_NUMBER_OF_PINS] =
{
{GPIO_CNL_LP_GPP_D4, GpioPadModeNative1}, // IMGCLKOUT_0
{GPIO_CNL_LP_GPP_H20, GpioPadModeNative1}, // IMGCLKOUT_1
};
GLOBAL_REMOVE_IF_UNREFERENCED GPIO_PAD_NATIVE_FUNCTION mPchHImguClkOutGpioPad[SA_GPIO_IMGUCLK_NUMBER_OF_PINS] =
{
{GPIO_CNL_H_GPP_K22, GpioPadModeNative1}, // IMGCLKOUT_0
{GPIO_CNL_H_GPP_K23, GpioPadModeNative1}, // IMGCLKOUT_1
};
/**
This function provides IMGCLKOUT pins
@param[out] NativePinsTable Table with pins
@param[out] NoOfNativePins Number of pins
**/
VOID
GpioGetImgClkOutPins (
OUT GPIO_PAD_NATIVE_FUNCTION **NativePinsTable,
OUT UINT32 *NoOfNativePins
)
{
if (IsPchLp ()) {
*NativePinsTable = mPchLpImguClkOutGpioPad;
*NoOfNativePins = ARRAY_SIZE (mPchLpImguClkOutGpioPad);
} else {
*NativePinsTable = mPchHImguClkOutGpioPad;
*NoOfNativePins = ARRAY_SIZE (mPchHImguClkOutGpioPad);
}
}
/**
This function provides PWRBTN pin
@retval GpioPad PWRTBTN pin
**/
GPIO_PAD
GpioGetPwrBtnPin (
VOID
)
{
if (IsPchLp ()) {
return GPIO_CNL_LP_GPD3;
} else {
return GPIO_CNL_H_GPD3;
}
}
/**
This function provides LPC pin
@retval GpioPad LPC pin
**/
GPIO_PAD
GpioGetLpcPin (
VOID
)
{
if (PchGetLpcDid () == V_CNL_PCH_H_LPC_CFG_DEVICE_ID_A305_SKU) {
return GPIO_CNL_H_GPP_A8;
} else {
return 0;
}
}