hc
2024-03-22 a0752693d998599af469473b8dc239ef973a012f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/** @file
 
Copyright (c) 2017 - 2021, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
 
**/
 
#include <PiPei.h>
#include "PeiAspireVn7Dash572GInitLib.h"
#include <Library/BoardEcLib.h>
#include <Library/DebugLib.h>
 
#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;
}