pci/fsl_pci_init: Enable inbound PCI config cycles
Add fsl_pci_config_unlock() function to enable a PCI/PCIe interface configured in agent/endpoint mode to respond to inbound PCI configuration cycles. Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
This commit is contained in:
parent
aced78d852
commit
7a89795911
@ -37,6 +37,11 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||
#include <pci.h>
|
||||
#include <asm/immap_fsl_pci.h>
|
||||
|
||||
/* Freescale-specific PCI config registers */
|
||||
#define FSL_PCI_PBFR 0x44
|
||||
#define FSL_PCIE_CAP_ID 0x4c
|
||||
#define FSL_PCIE_CFG_RDY 0x4b0
|
||||
|
||||
void pciauto_prescan_setup_bridge(struct pci_controller *hose,
|
||||
pci_dev_t dev, int sub_bus);
|
||||
void pciauto_postscan_setup_bridge(struct pci_controller *hose,
|
||||
@ -306,6 +311,30 @@ void fsl_pci_init(struct pci_controller *hose)
|
||||
}
|
||||
}
|
||||
|
||||
/* Enable inbound PCI config cycles for agent/endpoint interface */
|
||||
void fsl_pci_config_unlock(struct pci_controller *hose)
|
||||
{
|
||||
pci_dev_t dev = PCI_BDF(hose->first_busno,0,0);
|
||||
u8 agent;
|
||||
u8 pcie_cap;
|
||||
u16 pbfr;
|
||||
|
||||
pci_hose_read_config_byte(hose, dev, PCI_CLASS_PROG, &agent);
|
||||
if (!agent)
|
||||
return;
|
||||
|
||||
pci_hose_read_config_byte(hose, dev, FSL_PCIE_CAP_ID, &pcie_cap);
|
||||
if (pcie_cap != 0x0) {
|
||||
/* PCIe - set CFG_READY bit of Configuration Ready Register */
|
||||
pci_hose_write_config_byte(hose, dev, FSL_PCIE_CFG_RDY, 0x1);
|
||||
} else {
|
||||
/* PCI - clear ACL bit of PBFR */
|
||||
pci_hose_read_config_word(hose, dev, FSL_PCI_PBFR, &pbfr);
|
||||
pbfr &= ~0x20;
|
||||
pci_hose_write_config_word(hose, dev, FSL_PCI_PBFR, pbfr);
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_OF_BOARD_SETUP
|
||||
#include <libfdt.h>
|
||||
#include <fdt_support.h>
|
||||
|
Loading…
Reference in New Issue
Block a user