diff options
| -rw-r--r-- | arch/powerpc/cpu/mpc85xx/liodn.c | 25 | ||||
| -rw-r--r-- | arch/powerpc/include/asm/immap_85xx.h | 4 | 
2 files changed, 24 insertions, 5 deletions
| diff --git a/arch/powerpc/cpu/mpc85xx/liodn.c b/arch/powerpc/cpu/mpc85xx/liodn.c index 4b00da9f7..19e130e87 100644 --- a/arch/powerpc/cpu/mpc85xx/liodn.c +++ b/arch/powerpc/cpu/mpc85xx/liodn.c @@ -239,9 +239,9 @@ static void fdt_fixup_srio_liodn(void *blob, struct srio_liodn_id_table *tbl)  #endif  #define CONFIG_SYS_MAX_PCI_EPS		8 -#define CONFIG_SYS_PCI_EP_LIODN_START	256 -static void fdt_fixup_pci_liodn_offsets(void *fdt, const char *compat) +static void fdt_fixup_pci_liodn_offsets(void *fdt, const char *compat, +					int ep_liodn_start)  {  	int off, pci_idx = 0, pci_cnt = 0, i, rc;  	const uint32_t *base_liodn; @@ -271,7 +271,7 @@ static void fdt_fixup_pci_liodn_offsets(void *fdt, const char *compat)  			continue;  		}  		for (i = 0; i < CONFIG_SYS_MAX_PCI_EPS; i++) -			liodn_offs[i + 1] = CONFIG_SYS_PCI_EP_LIODN_START + +			liodn_offs[i + 1] = ep_liodn_start +  					i * pci_cnt + pci_idx - *base_liodn;  		rc = fdt_setprop(fdt, off, "fsl,liodn-offset-list",  				 liodn_offs, sizeof(liodn_offs)); @@ -338,5 +338,22 @@ void fdt_fixup_liodn(void *blob)  	fdt_fixup_liodn_tbl(blob, rman_liodn_tbl, rman_liodn_tbl_sz);  #endif -	fdt_fixup_pci_liodn_offsets(blob, "fsl,qoriq-pcie-v2.4"); +	ccsr_pcix_t *pcix = (ccsr_pcix_t *)CONFIG_SYS_PCIE1_ADDR; +	int pci_ver = pcix->ipver1 & 0xffff, liodn_base = 0; + +	if (pci_ver >= 0x0204) { +		if (pci_ver >= 0x0300) +			liodn_base = 1024; +		else +			liodn_base = 256; +	} + +	if (liodn_base) { +		char compat[32]; + +		sprintf(compat, "fsl,qoriq-pcie-v%d.%d", +			(pci_ver & 0xff00) >> 8, pci_ver & 0xff); +		fdt_fixup_pci_liodn_offsets(blob, compat, liodn_base); +		fdt_fixup_pci_liodn_offsets(blob, "fsl,qoriq-pcie", liodn_base); +	}  } diff --git a/arch/powerpc/include/asm/immap_85xx.h b/arch/powerpc/include/asm/immap_85xx.h index 3e76c5419..631261857 100644 --- a/arch/powerpc/include/asm/immap_85xx.h +++ b/arch/powerpc/include/asm/immap_85xx.h @@ -282,7 +282,9 @@ typedef struct ccsr_pcix {  	u32	int_ack;	/* PCIX IRQ Acknowledge */  	u8	res000c[52];  	u32	liodn_base;	/* PCIX LIODN base register */ -	u8	res0044[3004]; +	u8	res0044[2996]; +	u32	ipver1;		/* PCIX IP block revision register 1 */ +	u32	ipver2;		/* PCIX IP block revision register 2 */  	u32	potar0;		/* PCIX Outbound Transaction Addr 0 */  	u32	potear0;	/* PCIX Outbound Translation Extended Addr 0 */  	u32	powbar0;	/* PCIX Outbound Window Base Addr 0 */ |