]> git.proxmox.com Git - mirror_edk2.git/blob - Vlv2TbltDevicePkg/Library/PchPlatformLib/PchPlatformLibrary.c
c31fd754cb7c46e1895688b82f2274f3f628073f
[mirror_edk2.git] / Vlv2TbltDevicePkg / Library / PchPlatformLib / PchPlatformLibrary.c
1 /**
2
3 Copyright (c) 2012 - 2014, Intel Corporation. All rights reserved
4
5 SPDX-License-Identifier: BSD-2-Clause-Patent
6
7
8
9 @file
10 PchPlatformLib.c
11
12 @brief
13 PCH Platform Lib implementation.
14
15 **/
16
17 #include "PchPlatformLibrary.h"
18
19 //
20 // Silicon Steppings
21 //
22 /**
23 Return Pch stepping type
24
25 @param[in] None
26
27 @retval PCH_STEPPING Pch stepping type
28
29 **/
30 PCH_STEPPING
31 EFIAPI
32 PchStepping (
33 VOID
34 )
35 {
36 UINT8 RevId;
37
38 RevId = MmioRead8 (
39 MmPciAddress (0,
40 DEFAULT_PCI_BUS_NUMBER_PCH,
41 PCI_DEVICE_NUMBER_PCH_LPC,
42 PCI_FUNCTION_NUMBER_PCH_LPC,
43 R_PCH_LPC_RID_CC)
44 );
45
46 switch (RevId) {
47 case V_PCH_LPC_RID_0:
48 case V_PCH_LPC_RID_1:
49 return PchA0;
50 break;
51
52 case V_PCH_LPC_RID_2:
53 case V_PCH_LPC_RID_3:
54 return PchA1;
55 break;
56
57 case V_PCH_LPC_RID_4:
58 case V_PCH_LPC_RID_5:
59 return PchB0;
60 break;
61
62 case V_PCH_LPC_RID_6:
63 case V_PCH_LPC_RID_7:
64 return PchB1;
65 break;
66
67 case V_PCH_LPC_RID_8:
68 case V_PCH_LPC_RID_9:
69 return PchB2;
70 break;
71
72 case V_PCH_LPC_RID_A:
73 case V_PCH_LPC_RID_B:
74 return PchB3;
75 break;
76
77 case V_PCH_LPC_RID_C:
78 case V_PCH_LPC_RID_D:
79 return PchC0;
80 break;
81
82 case V_PCH_LPC_RID_E:
83 case V_PCH_LPC_RID_F:
84 return PchD0;
85 break;
86
87 default:
88 return PchSteppingMax;
89 break;
90
91 }
92 }
93
94 /**
95 Determine if PCH is supported
96
97 @param[in] None
98
99 @retval TRUE PCH is supported
100 @retval FALSE PCH is not supported
101
102 **/
103 BOOLEAN
104 IsPchSupported (
105 VOID
106 )
107 {
108 UINT32 Identifiers;
109 UINT16 PcuVendorId;
110 UINT16 PcuDeviceId;
111
112 Identifiers = MmioRead32 (
113 MmPciAddress (0,
114 DEFAULT_PCI_BUS_NUMBER_PCH,
115 PCI_DEVICE_NUMBER_PCH_LPC,
116 PCI_FUNCTION_NUMBER_PCH_LPC,
117 R_PCH_LPC_REG_ID)
118 );
119
120 PcuDeviceId = (UINT16) ((Identifiers & B_PCH_LPC_DEVICE_ID) >> 16);
121 PcuVendorId = (UINT16) (Identifiers & B_PCH_LPC_VENDOR_ID);
122
123 //
124 // Verify that this is a supported chipset
125 //
126 if (PcuVendorId != (UINT16) V_PCH_LPC_VENDOR_ID || !IS_PCH_VLV_LPC_DEVICE_ID (PcuDeviceId)) {
127 DEBUG ((EFI_D_ERROR, "VLV SC code doesn't support the PcuDeviceId: 0x%04x!\n", PcuDeviceId));
128 return FALSE;
129 }
130 return TRUE;
131 }