diff options
| author | Wolfgang Denk <wd@denx.de> | 2009-11-15 23:13:40 +0100 | 
|---|---|---|
| committer | Wolfgang Denk <wd@denx.de> | 2009-11-15 23:13:40 +0100 | 
| commit | 06f43286c6354aaab0103615e83893512f86eee7 (patch) | |
| tree | c0c6bc4819fa381a9e1a2a051492eb4813bd410b /drivers/pci/fsl_pci_init.c | |
| parent | c758e947aa7d39a2be607ecdedd818ad300807b2 (diff) | |
| parent | 3c014f1586d5bfe30dca7549396915c83f31cd30 (diff) | |
| download | olio-uboot-2014.01-06f43286c6354aaab0103615e83893512f86eee7.tar.xz olio-uboot-2014.01-06f43286c6354aaab0103615e83893512f86eee7.zip | |
Merge branch 'master' into next
Diffstat (limited to 'drivers/pci/fsl_pci_init.c')
| -rw-r--r-- | drivers/pci/fsl_pci_init.c | 32 | 
1 files changed, 17 insertions, 15 deletions
| diff --git a/drivers/pci/fsl_pci_init.c b/drivers/pci/fsl_pci_init.c index 8fbab68a2..170cc257c 100644 --- a/drivers/pci/fsl_pci_init.c +++ b/drivers/pci/fsl_pci_init.c @@ -42,6 +42,7 @@ DECLARE_GLOBAL_DATA_PTR;  #define FSL_PCI_PBFR		0x44  #define FSL_PCIE_CAP_ID		0x4c  #define FSL_PCIE_CFG_RDY	0x4b0 +#define FSL_PROG_IF_AGENT	0x1  void pciauto_prescan_setup_bridge(struct pci_controller *hose,  				pci_dev_t dev, int sub_bus); @@ -412,28 +413,24 @@ void fsl_pci_init(struct pci_controller *hose, u32 cfg_addr, u32 cfg_data)  	}  } +int fsl_is_pci_agent(struct pci_controller *hose) +{ +	u8 prog_if; +	pci_dev_t dev = PCI_BDF(hose->first_busno, 0, 0); + +	pci_hose_read_config_byte(hose, dev, PCI_CLASS_PROG, &prog_if); + +	return (prog_if == FSL_PROG_IF_AGENT); +} +  int fsl_pci_init_port(struct fsl_pci_info *pci_info, -			struct pci_controller *hose, int busno, int pcie_ep) +			struct pci_controller *hose, int busno)  {  	volatile ccsr_fsl_pci_t *pci;  	struct pci_region *r;  	pci = (ccsr_fsl_pci_t *) pci_info->regs; -	if (pcie_ep) { -		volatile pit_t *pi = &pci->pit[2]; - -		pci_setup_indirect(hose, (u32)&pci->cfg_addr, -					 (u32)&pci->cfg_data); -		out_be32(&pi->pitar, 0); -		out_be32(&pi->piwbar, 0); -		out_be32(&pi->piwar, PIWAR_EN | PIWAR_LOCAL | -			PIWAR_READ_SNOOP | PIWAR_WRITE_SNOOP | PIWAR_IWS_4K); - -		fsl_pci_config_unlock(hose); -		return 0; -	} -  	/* on non-PCIe controllers we don't have pme_msg_det so this code  	 * should do nothing since the read will return 0  	 */ @@ -464,6 +461,11 @@ int fsl_pci_init_port(struct fsl_pci_info *pci_info,  	fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data); +	if (fsl_is_pci_agent(hose)) { +		fsl_pci_config_unlock(hose); +		hose->last_busno = hose->first_busno; +	} +  	printf("    PCIE%x on bus %02x - %02x\n", pci_info->pci_num,  			hose->first_busno, hose->last_busno); |