/** @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; }