/** @file
Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include "PeiAspireVn7Dash572GInitLib.h"
#include
#include
#define ADC_3V_10BIT_GRANULARITY_MAX (3005/1023)
#define PCB_VER_AD 1
#define MODEL_ID_AD 3
/**
Get Aspire V Nitro (Skylake) board ID.
There are 2 different boards having different ID.
This function will return board ID to caller.
@param[out] DataBuffer
@retval EFI_SUCCESS Command success
@retval EFI_DEVICE_ERROR Command error
**/
VOID
GetAspireVn7Dash572GBoardId (
OUT UINT8 *BoardId
)
{
UINT16 DataBuffer;
ReadEcAdcConverter (MODEL_ID_AD, &DataBuffer);
DEBUG ((DEBUG_INFO, "BoardId (raw) = 0x%X\n", DataBuffer));
// Board by max millivoltage range (of 10-bit, 3.005 V ADC)
if (DataBuffer <= (1374/ADC_3V_10BIT_GRANULARITY_MAX)) {
// Consider returning an error
DEBUG ((DEBUG_ERROR, "BoardId is reserved?\n"));
} else if (DataBuffer <= (2017/ADC_3V_10BIT_GRANULARITY_MAX)) {
*BoardId = BoardIdNewgateSLx_dGPU;
} else {
*BoardId = BoardIdRayleighSLx_dGPU;
}
DEBUG ((DEBUG_INFO, "BoardId = 0x%X\n", *BoardId));
ReadEcAdcConverter (PCB_VER_AD, &DataBuffer);
DEBUG ((DEBUG_INFO, "PCB version (raw) = 0x%X\n", DataBuffer));
DEBUG ((DEBUG_INFO, "PCB version: "));
// PCB by max millivoltage range (of 10-bit, 3.005 V ADC)
if (DataBuffer <= (2017/ADC_3V_10BIT_GRANULARITY_MAX)) {
// Consider returning an error
DEBUG ((DEBUG_ERROR, "Reserved?\n"));
} else if (DataBuffer <= (2259/ADC_3V_10BIT_GRANULARITY_MAX)) {
DEBUG ((DEBUG_ERROR, "-1\n"));
} else if (DataBuffer <= (2493/ADC_3V_10BIT_GRANULARITY_MAX)) {
DEBUG ((DEBUG_ERROR, "SC\n"));
} else if (DataBuffer <= (2759/ADC_3V_10BIT_GRANULARITY_MAX)) {
DEBUG ((DEBUG_ERROR, "SB\n"));
} else {
DEBUG ((DEBUG_ERROR, "SA\n"));
}
}
EFI_STATUS
EFIAPI
AspireVn7Dash572GBoardDetect (
VOID
)
{
UINT8 BoardId;
if (LibPcdGetSku () != 0) {
return EFI_SUCCESS;
}
DEBUG ((DEBUG_INFO, "AspireVn7Dash572GDetectionCallback\n"));
GetAspireVn7Dash572GBoardId (&BoardId);
if (BoardId == BoardIdNewgateSLx_dGPU || BoardId == BoardIdRayleighSLx_dGPU) {
LibPcdSetSku (BoardId);
ASSERT (LibPcdGetSku() == BoardId);
} else {
DEBUG ((DEBUG_INFO, "BoardId not returned or valid!\n"));
return EFI_DEVICE_ERROR;
}
DEBUG ((DEBUG_INFO, "SKU_ID: 0x%x\n", LibPcdGetSku()));
return EFI_SUCCESS;
}