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
|
/** @file
Register initialization table for Ich.
Copyright (c) 2013-2015 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "CommonHeader.h"
VOID
PlatformInitQNCRegs (
VOID
)
{
//
// All devices on bus 0.
// Device 0:
// FNC 0: Host Bridge
// Device 20:
// FNC 0: IOSF2AHB Bridge
// Device 21:
// FNC 0: IOSF2AHB Bridge
// Device 23:
// FNC 0: PCIe Port 0
// Device 24:
// FNC 0: PCIe Port 1
// Device 31:
// FNC 0: PCI-LPC Bridge
//
S3PciWrite32 (PCI_LIB_ADDRESS (PCI_BUS_NUMBER_QNC, PCI_DEVICE_NUMBER_QNC_LPC, PCI_FUNCTION_NUMBER_QNC_LPC, R_QNC_LPC_FWH_BIOS_DEC),
B_QNC_LPC_FWH_BIOS_DEC_F0 | B_QNC_LPC_FWH_BIOS_DEC_F8 |
B_QNC_LPC_FWH_BIOS_DEC_E0 | B_QNC_LPC_FWH_BIOS_DEC_E8 |
B_QNC_LPC_FWH_BIOS_DEC_D0 | B_QNC_LPC_FWH_BIOS_DEC_D8 |
B_QNC_LPC_FWH_BIOS_DEC_C0 | B_QNC_LPC_FWH_BIOS_DEC_C8
);
//
// Program SCI Interrupt for IRQ9
//
S3PciWrite8 (PCI_LIB_ADDRESS (PCI_BUS_NUMBER_QNC, PCI_DEVICE_NUMBER_QNC_LPC, PCI_FUNCTION_NUMBER_QNC_LPC, R_QNC_LPC_ACTL),
V_QNC_LPC_ACTL_SCIS_IRQ9
);
//
// Program Quark Interrupt Route Registers
//
S3MmioWrite16 ((UINTN)PcdGet64(PcdRcbaMmioBaseAddress) + R_QNC_RCRB_AGENT0IR,
PcdGet16(PcdQuarkAgent0IR)
);
S3MmioWrite16 ((UINTN)PcdGet64(PcdRcbaMmioBaseAddress) + R_QNC_RCRB_AGENT1IR,
PcdGet16(PcdQuarkAgent1IR)
);
S3MmioWrite16 ((UINTN)PcdGet64(PcdRcbaMmioBaseAddress) + R_QNC_RCRB_AGENT2IR,
PcdGet16(PcdQuarkAgent2IR)
);
S3MmioWrite16 ((UINTN)PcdGet64(PcdRcbaMmioBaseAddress) + R_QNC_RCRB_AGENT3IR,
PcdGet16(PcdQuarkAgent3IR)
);
//
// Program SVID and SID for QNC PCI devices. In order to boost performance, we
// combine two 16 bit PCI_WRITE into one 32 bit PCI_WRITE. The programmed LPC SVID
// will reflect on all internal devices's SVID registers
//
S3PciWrite32 (PCI_LIB_ADDRESS (PCI_BUS_NUMBER_QNC, PCI_DEVICE_NUMBER_QNC_LPC, PCI_FUNCTION_NUMBER_QNC_LPC, R_EFI_PCI_SVID),
(UINT32)(V_INTEL_VENDOR_ID + (QUARK_V_LPC_DEVICE_ID_0 << 16))
);
//
// Write once on Element Self Description Register before OS boot
//
QNCMmio32And (PcdGet64(PcdRcbaMmioBaseAddress), 0x04, 0xFF00FFFF);
return;
}
|