aboutsummaryrefslogtreecommitdiff
path: root/src/vendorcode/amd/cimx/rd890/nbPcieHotplug.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vendorcode/amd/cimx/rd890/nbPcieHotplug.c')
-rw-r--r--src/vendorcode/amd/cimx/rd890/nbPcieHotplug.c343
1 files changed, 0 insertions, 343 deletions
diff --git a/src/vendorcode/amd/cimx/rd890/nbPcieHotplug.c b/src/vendorcode/amd/cimx/rd890/nbPcieHotplug.c
deleted file mode 100644
index 25ef38f587..0000000000
--- a/src/vendorcode/amd/cimx/rd890/nbPcieHotplug.c
+++ /dev/null
@@ -1,343 +0,0 @@
-/**
- * @file
- *
- * Routines to support Hotplug.
- *
- *
- *
- * @xrefitem bom "File Content Label" "Release Content"
- * @e project: CIMx-NB
- * @e sub-project:
- * @e \$Revision:$ @e \$Date:$
- *
- */
-/*****************************************************************************
- *
- * Copyright (C) 2012 Advanced Micro Devices, Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of Advanced Micro Devices, Inc. nor the names of
- * its contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL ADVANCED MICRO DEVICES, INC. BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- *
- ***************************************************************************/
-/*----------------------------------------------------------------------------------------
- * M O D U L E S U S E D
- *----------------------------------------------------------------------------------------
- */
-
-#include "NbPlatform.h"
-#include "amdSbLib.h"
-
-#ifndef HOTPLUG_SUPPORT_DISABLED
-
-/*----------------------------------------------------------------------------------------
- * D E F I N I T I O N S A N D M A C R O S
- *----------------------------------------------------------------------------------------
- */
-#define ATTN_BUTTON_PRESENT BIT0
-#define PWR_CONTROLLER_PRESENT BIT1
-#define MRL_SENSOR_PRESENT BIT2
-#define ATTN_INDICATOR_PRESENT BIT3
-#define PWR_INDICATOR_PRESENT BIT4
-#define HOTPLUG_SURPRISE BIT5
-#define HOTPLUG_CAPABLE BIT6
-
-#define ATTN_BUTTON_PRESSED BIT0
-#define PWR_FAULT_DETECTED BIT1
-#define MRL_SENSOR_CHANGED BIT2
-#define PRESENCE_DETECT_CHANGED BIT3
-#define COMMAND_COMPLETED BIT4
-#define MRL_SENSOR_STATE BIT5
-#define PRESENCE_DETECT_STATE BIT6
-#define DL_STATE_CHANGED BIT8
-
-#define PWR_CONTROLLER_CNTL BIT10
-#define NO_COMMAND_COMPLETED_SUPPORTED BIT18
-#define SERVER_HOTPLUG_CAPABILITY \
- (ATTN_BUTTON_PRESENT | PWR_CONTROLLER_PRESENT | ATTN_INDICATOR_PRESENT | PWR_INDICATOR_PRESENT | HOTPLUG_CAPABLE)
-#define NATIVE_HOTPLUG_CAPABILITY \
- (HOTPLUG_SURPRISE | HOTPLUG_CAPABLE)
-
-#define SERVER_HOTPLUG 1
-#define NATIVE_HOTPLUG 2
-/*----------------------------------------------------------------------------------------
- * T Y P E D E F S A N D S T R U C T U R E S
- *----------------------------------------------------------------------------------------
- */
-
-/*----------------------------------------------------------------------------------------
- * P R O T O T Y P E S O F L O C A L F U N C T I O N S
- *----------------------------------------------------------------------------------------
- */
-
- /*----------------------------------------------------------------------------------------
- * E X P O R T E D F U N C T I O N S
- *----------------------------------------------------------------------------------------
- */
-
-
-/*----------------------------------------------------------------------------------------*/
-/**
- * Init Ports Hotplug capability.
- * Initialize hotplug controller init port hotplug capability
- *
- *
- * @param[in] pConfig Northbridge configuration structure pointer.
- *
- * @retval AGESA_SUCCESS Hotplug controller successfully initialized.
- * @retval AGESA_FAIL Failure during initialization of hotplug controller.
- */
-/*----------------------------------------------------------------------------------------*/
-UINT32
-PcieInitHotplug (
- IN AMD_NB_CONFIG *pConfig
- )
-{
- UINT32 ServerHotplugPortMask;
- PORT PortId;
- PCI_ADDR ClkPciAddress;
- NB_INFO NbInfo;
- PCIE_CONFIG *pPcieConfig;
-
- CIMX_TRACE ((TRACE_DATA (GET_BLOCK_CONFIG_PTR (pConfig), CIMX_NBPCIE_TRACE), "[NBPCIE]PcieInitHotplug Enter\n"));
- pPcieConfig = GET_PCIE_CONFIG_PTR (pConfig);
- NbInfo = LibNbGetRevisionInfo (pConfig);
- ServerHotplugPortMask = 0;
- ClkPciAddress = pConfig->NbPciAddress;
- ClkPciAddress.Address.Function = 1;
- if (NbInfo.Type == NB_SR5690) {
- for (PortId = MIN_PORT_ID; PortId <= MAX_PORT_ID; PortId++) {
- if (pPcieConfig->PortConfiguration[PortId].PortPresent == ON &&
- pPcieConfig->PortConfiguration[PortId].PortHotplug != OFF ) {
- PCI_ADDR Port;
- Port = PcieLibGetPortPciAddress (PortId, pConfig);
- if (pPcieConfig->PortConfiguration[PortId].PortHotplug == SERVER_HOTPLUG) {
- UINT8 HpDescriptorRegister;
- UINT8 HpDescriptorOffset;
- ServerHotplugPortMask |= 1 << PortId;
- HpDescriptorOffset = (PcieLibGetStaticPortInfo (PcieLibNativePortId (PortId, pConfig), pConfig))->HotplugAddress;
- if (HpDescriptorOffset != 0xff) {
- ServerHotplugPortMask |= 1 << PortId;
- HpDescriptorRegister = (PcieLibGetCoreInfo (PcieLibGetCoreId (PortId, pConfig), pConfig))->HotplugRegister;
- //Enable CLK config
- LibNbEnableClkConfig (pConfig);
- //Setup descriptor
- LibNbPciRMW (
- ClkPciAddress.AddressValue | HpDescriptorRegister ,
- AccessWidth32,
- 0xffffffff,
- ((1 << 3) | (pPcieConfig->ExtPortConfiguration[PortId].PortHotplugDevMap << 2) | pPcieConfig->ExtPortConfiguration[PortId].PortHotplugByteMap) << HpDescriptorOffset,
- pConfig
- );
- //Hide CLK config
- LibNbDisableClkConfig (pConfig);
- // Enable power fault
- LibNbPciIndexRMW (Port.AddressValue | NB_BIF_INDEX, NB_BIFNBP_REG10, AccessWidth32, (UINT32)~BIT4, BIT4, pConfig);
- //Set up capability. Keep NO_COMMAND_COMPLETED_SUPPORTED (bit 18) to zero
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG6C, AccessWidth32, 0xfffbffff, SERVER_HOTPLUG_CAPABILITY, pConfig);
- //Clear Status
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG72, AccessWidth16, 0xffffffff, 0x11F, pConfig);
- }
- }
- if (pPcieConfig->PortConfiguration[PortId].PortHotplug == NATIVE_HOTPLUG) {
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG6C, AccessWidth32, 0xffffffff, NATIVE_HOTPLUG_CAPABILITY, pConfig);
- }
- }
- }
- }
- return ServerHotplugPortMask;
-}
-
-/*----------------------------------------------------------------------------------------*/
-/**
- * Init Ports Hotplug capability.
- * Initialize hotplug controller init port hotplug capability
- *
- * @param[in] ServerHotplugPortMask ServerHotplugPortMask
- * @param[in] pConfig Northbridge configuration structure pointer.
- *
- * @retval AGESA_SUCCESS Hotplug controller successfully initialized.
- * @retval AGESA_FAIL Failure during initialization of hotplug controller.
- */
-/*----------------------------------------------------------------------------------------*/
-VOID
-PcieCheckHotplug (
- IN UINT32 ServerHotplugPortMask,
- IN AMD_NB_CONFIG *pConfig
- )
-{
- PORT PortId;
- CIMX_TRACE ((TRACE_DATA (GET_BLOCK_CONFIG_PTR (pConfig), CIMX_NBPCIE_TRACE), "[NBPCIE]PcieCheckHotplug Enter\n"));
- //Check if Firmware loaded successfully
- for (PortId = MIN_PORT_ID; PortId <= MAX_PORT_ID; PortId++) {
- //Check Firmware Loaded successfully
- if ((ServerHotplugPortMask & (1 << PortId)) != 0) {
- UINT32 Count;
- PCI_ADDR Port;
- UINT16 SlotStatus;
-
- Count = 30; //Setup counter for 30ms
- Port = PcieLibGetPortPciAddress (PortId, pConfig);
- do {
- STALL (GET_BLOCK_CONFIG_PTR (pConfig), 1000, 0);
- LibNbPciRead (Port.AddressValue | NB_PCIP_REG72, AccessWidth16, &SlotStatus, pConfig);
- } while ((SlotStatus & (ATTN_BUTTON_PRESSED | PWR_FAULT_DETECTED)) == 0 && --Count != 0);
- CIMX_TRACE ((TRACE_DATA (GET_BLOCK_CONFIG_PTR (pConfig), CIMX_NBPCIE_TRACE), " Hotplug Firmware Init PortId = %d SlotStatus = 0x%x Retry = %d\n", PortId, SlotStatus, Count));
- if ((SlotStatus & PWR_FAULT_DETECTED) != 0 || (SlotStatus & (PWR_FAULT_DETECTED | ATTN_BUTTON_PRESSED)) == 0) {
- REPORT_EVENT (AGESA_ERROR, PCIE_ERROR_HOTPLUG_INIT, PortId, 0, 0, 0, pConfig);
- CIMX_TRACE ((TRACE_DATA (GET_BLOCK_CONFIG_PTR (pConfig), CIMX_NBPCIE_TRACE), " ERROR!!!Hotplug Firmware Init FAIL\n"));
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG6C, AccessWidth32, (UINT32)~SERVER_HOTPLUG_CAPABILITY, 0x0, pConfig);
- } else {
- //Clear Status
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG72, AccessWidth16, 0xffffffff, 0x11F, pConfig);
- if ((SlotStatus & PRESENCE_DETECT_CHANGED) != 0) {
- //Power on slot
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG70, AccessWidth16, (UINT32)~PWR_CONTROLLER_CNTL, 0x0, pConfig);
- }
- }
- }
- }
- CIMX_TRACE ((TRACE_DATA (GET_BLOCK_CONFIG_PTR (pConfig), CIMX_NBPCIE_TRACE), "[NBPCIE]PcieCheckHotplug Exit\n"));
-}
-
-
-/*----------------------------------------------------------------------------------------*/
-/**
- * Init Ports Hotplug capability.
- * Initialize hotplug controller init port hotplug capability
- *
- *
- * @param[in] pConfig Northbridge configuration structure pointer.
- *
- * @retval AGESA_SUCCESS Hotplug controller successfully initialized.
- * @retval AGESA_FAIL Failure during initialization of hotplug controller.
- */
-/*----------------------------------------------------------------------------------------*/
-/*
-AGESA_STATUS
-PcieInitHotplug (
- IN AMD_NB_CONFIG *pConfig
- )
-{
- AGESA_STATUS Status;
- UINT32 ServerHotplugPortMask;
- PORT PortId;
- PCI_ADDR ClkPciAddress;
- NB_INFO NbInfo;
- PCIE_CONFIG *pPcieConfig;
-
- CIMX_TRACE ((TRACE_DATA (GET_BLOCK_CONFIG_PTR (pConfig), CIMX_NBPCIE_TRACE), "[NBPCIE]PcieInitHotplug Enter\n"));
- pPcieConfig = GET_PCIE_CONFIG_PTR (pConfig);
- NbInfo = LibNbGetRevisionInfo (pConfig);
- ServerHotplugPortMask = 0;
- ClkPciAddress = pConfig->NbPciAddress;
- ClkPciAddress.Address.Function = 1;
- Status = AGESA_SUCCESS;
- if (NbInfo.Type == NB_SR5690) {
- for (PortId = MIN_PORT_ID; PortId <= MAX_PORT_ID; PortId++) {
- if (pPcieConfig->PortConfiguration[PortId].PortPresent == ON &&
- pPcieConfig->PortConfiguration[PortId].PortHotplug != OFF ) {
- PCI_ADDR Port;
- Port = PcieLibGetPortPciAddress (PortId, pConfig);
- if (pPcieConfig->PortConfiguration[PortId].PortHotplug == SERVER_HOTPLUG) {
- UINT8 HpDescriptorRegister;
- UINT8 HpDescriptorOffset;
- ServerHotplugPortMask |= 1 << PortId;
- HpDescriptorOffset = (PcieLibGetStaticPortInfo (PcieLibNativePortId (PortId, pConfig), pConfig))->HotplugAddress;
- if (HpDescriptorOffset != 0xff) {
- ServerHotplugPortMask |= 1 << PortId;
- HpDescriptorRegister = (PcieLibGetCoreInfo (PcieLibGetCoreId (PortId, pConfig), pConfig))->HotplugRegister;
- //Enable CLK config
- LibNbEnableClkConfig (pConfig);
- //Setup descriptor
- LibNbPciRMW (
- ClkPciAddress.AddressValue | HpDescriptorRegister ,
- AccessWidth32,
- 0xffffffff,
- ((1 << 3) | (pPcieConfig->ExtPortConfiguration[PortId].PortHotplugDevMap << 2) | pPcieConfig->ExtPortConfiguration[PortId].PortHotplugByteMap) << HpDescriptorOffset,
- pConfig
- );
- //Hide CLK config
- LibNbDisableClkConfig (pConfig);
- // Enable power fault
- LibNbPciIndexRMW (Port.AddressValue | NB_BIF_INDEX, NB_BIFNBP_REG10, AccessWidth32, (UINT32)~BIT4, BIT4, pConfig);
- //Set up capability. Keep NO_COMMAND_COMPLETED_SUPPORTED (bit 18) to zero
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG6C, AccessWidth32, 0xfffbffff, SERVER_HOTPLUG_CAPABILITY, pConfig);
- //Clear Status
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG72, AccessWidth16, 0xffffffff, 0x11F, pConfig);
- }
- }
- if (pPcieConfig->PortConfiguration[PortId].PortHotplug == NATIVE_HOTPLUG) {
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG6C, AccessWidth32, 0xffffffff, NATIVE_HOTPLUG_CAPABILITY, pConfig);
- }
- }
- }
- if (ServerHotplugPortMask != 0) {
- UINT32 FirmwareLength;
- FirmwareLength = sizeof (Firmware);
- if (FirmwareLength > 0) {
- UINT32 *pFirmware;
- pFirmware = (UINT32*)FIX_PTR_ADDR (&Firmware[0], NULL);
- //Load firmware
- LibNbMcuControl (AssertReset, pConfig);
- LibNbLoadMcuFirmwareBlock (0x200, (sizeof (Firmware) - 64), pFirmware, pConfig);
- LibNbLoadMcuFirmwareBlock (0xFFC0, 64, &pFirmware[(sizeof (Firmware) - 64) / 4], pConfig);
- LibNbMcuControl (DeAssertReset, pConfig);
- }
- }
- //Check if Firmware loaded successfully
- for (PortId = MIN_PORT_ID; PortId <= MAX_PORT_ID; PortId++) {
- //Check Firmware Loaded successfully
- if ((ServerHotplugPortMask & (1 << PortId)) != 0) {
- UINT32 Count;
- PCI_ADDR Port;
- UINT16 SlotStatus;
-
- Count = 30; //Setup counter for 30ms
- Port = PcieLibGetPortPciAddress (PortId, pConfig);
- do {
- STALL (GET_BLOCK_CONFIG_PTR (pConfig), 1000, 0);
- LibNbPciRead (Port.AddressValue | NB_PCIP_REG72, AccessWidth16, &SlotStatus, pConfig);
- } while ((SlotStatus & (ATTN_BUTTON_PRESSED | PWR_FAULT_DETECTED)) == 0 && --Count != 0);
- CIMX_TRACE ((TRACE_DATA (GET_BLOCK_CONFIG_PTR (pConfig), CIMX_NBPCIE_TRACE), " Hotplug Firmware Init PortId = %d SlotStatus = 0x%x Retry = %d\n", PortId, SlotStatus, Count));
- if ((SlotStatus & PWR_FAULT_DETECTED) != 0 || (SlotStatus & (PWR_FAULT_DETECTED | ATTN_BUTTON_PRESSED)) == 0) {
- Status = AGESA_ERROR;
- REPORT_EVENT (AGESA_ERROR, PCIE_ERROR_HOTPLUG_INIT, PortId, 0, 0, 0, pConfig);
- CIMX_TRACE ((TRACE_DATA (GET_BLOCK_CONFIG_PTR (pConfig), CIMX_NBPCIE_TRACE), " ERROR!!!Hotplug Firmware Init FAIL\n", PortId));
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG6C, AccessWidth32, ~SERVER_HOTPLUG_CAPABILITY, 0x0, pConfig);
- } else {
- //Clear Status
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG72, AccessWidth16, 0xffffffff, 0x11F, pConfig);
- if ((SlotStatus & PRESENCE_DETECT_CHANGED) != 0) {
- //Power on slot
- LibNbPciRMW (Port.AddressValue | NB_PCIP_REG70, AccessWidth16, ~PWR_CONTROLLER_CNTL, 0x0, pConfig);
- }
- }
- }
- }
- }
- CIMX_TRACE ((TRACE_DATA (GET_BLOCK_CONFIG_PTR (pConfig), CIMX_NBPCIE_TRACE), "[NBPCIE]PcieInitHotplug Exit. Status[0x%x]\n", Status));
- return Status;
-}
-*/
-#endif \ No newline at end of file