mirror of https://github.com/acidanthera/audk.git
87 lines
2.8 KiB
C
87 lines
2.8 KiB
C
|
/** @file
|
||
|
Register initialization table for Ich.
|
||
|
|
||
|
Copyright (c) 2013-2015 Intel Corporation.
|
||
|
|
||
|
This program and the accompanying materials
|
||
|
are licensed and made available under the terms and conditions of the BSD License
|
||
|
which accompanies this distribution. The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
|
||
|
**/
|
||
|
|
||
|
|
||
|
#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;
|
||
|
}
|