diff options
| -rw-r--r-- | board/sbc8548/law.c | 12 | ||||
| -rw-r--r-- | board/sbc8548/sbc8548.c | 127 | ||||
| -rw-r--r-- | board/sbc8548/tlb.c | 53 | ||||
| -rw-r--r-- | include/configs/sbc8548.h | 45 | 
4 files changed, 95 insertions, 142 deletions
| diff --git a/board/sbc8548/law.c b/board/sbc8548/law.c index e8c7ae2a2..6d1efc0c6 100644 --- a/board/sbc8548/law.c +++ b/board/sbc8548/law.c @@ -32,8 +32,10 @@   *   * 0x0000_0000	0x0fff_ffff	DDR			256M   * 0x8000_0000	0x9fff_ffff	PCI1 MEM		512M + * 0xa000_0000	0xbfff_ffff	PCIe MEM		512M   * 0xe000_0000	0xe000_ffff	CCSR			1M - * 0xe200_0000	0xe2ff_ffff	PCI1 IO			16M + * 0xe200_0000	0xe27f_ffff	PCI1 IO			8M + * 0xe280_0000	0xe2ff_ffff	PCIe IO			8M   * 0xf000_0000	0xf7ff_ffff	SDRAM			128M   * 0xf8b0_0000	0xf80f_ffff	EEPROM			1M   * 0xfb80_0000	0xff7f_ffff	FLASH (2nd bank)	64M @@ -48,8 +50,14 @@ struct law_entry law_table[] = {  #ifndef CONFIG_SPD_EEPROM  	SET_LAW(CONFIG_SYS_DDR_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_DDR),  #endif +#ifdef CONFIG_SYS_PCI1_MEM_PHYS  	SET_LAW(CONFIG_SYS_PCI1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCI), -	SET_LAW(CONFIG_SYS_PCI1_IO_PHYS, LAW_SIZE_16M, LAW_TRGT_IF_PCI), +	SET_LAW(CONFIG_SYS_PCI1_IO_PHYS, LAW_SIZE_8M, LAW_TRGT_IF_PCI), +#endif +#ifdef CONFIG_SYS_PCIE1_MEM_PHYS +	SET_LAW(CONFIG_SYS_PCIE1_MEM_PHYS, LAW_SIZE_512M, LAW_TRGT_IF_PCIE_1), +	SET_LAW(CONFIG_SYS_PCIE1_IO_PHYS, LAW_SIZE_8M, LAW_TRGT_IF_PCIE_1), +#endif  	/* LBC window - maps 256M 0xf0000000 -> 0xffffffff */  	SET_LAW(CONFIG_SYS_LBC_SDRAM_BASE, LAW_SIZE_256M, LAW_TRGT_IF_LBC),  }; diff --git a/board/sbc8548/sbc8548.c b/board/sbc8548/sbc8548.c index f4bfd925a..194f6ab96 100644 --- a/board/sbc8548/sbc8548.c +++ b/board/sbc8548/sbc8548.c @@ -321,125 +321,74 @@ static struct pci_controller pci1_hose;  static struct pci_controller pcie1_hose;  #endif	/* CONFIG_PCIE1 */ -int first_free_busno=0; +#ifdef CONFIG_PCI  void  pci_init_board(void)  {  	volatile ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR); +	struct fsl_pci_info pci_info[2]; +	u32 devdisr, pordevsr, porpllsr, io_sel; +	int first_free_busno = 0; +	int num = 0; -#ifdef CONFIG_PCI1 -{ -	volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCI1_ADDR; -	struct pci_controller *hose = &pci1_hose; -	struct pci_region *r = hose->regions; +#ifdef CONFIG_PCIE1 +	int pcie_configured; +#endif -	uint pci_32 = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32;	/* PORDEVSR[15] */ -	uint pci_arb = gur->pordevsr & MPC85xx_PORDEVSR_PCI1_ARB;	/* PORDEVSR[14] */ -	uint pci_clk_sel = gur->porpllsr & MPC85xx_PORDEVSR_PCI1_SPD;	/* PORPLLSR[16] */ +	devdisr = in_be32(&gur->devdisr); +	pordevsr = in_be32(&gur->pordevsr); +	porpllsr = in_be32(&gur->porpllsr); +	io_sel = (pordevsr & MPC85xx_PORDEVSR_IO_SEL) >> 19; -	uint pci_speed = CONFIG_SYS_CLK_FREQ;	/* get_clock_freq() */ +	debug("   pci_init_board: devdisr=%x, io_sel=%x\n", devdisr, io_sel); + +#ifdef CONFIG_PCI1 +	if (!(devdisr & MPC85xx_DEVDISR_PCI1)) { +		uint pci_32 = pordevsr & MPC85xx_PORDEVSR_PCI1_PCI32; +		uint pci_arb = pordevsr & MPC85xx_PORDEVSR_PCI1_ARB; +		uint pci_clk_sel = porpllsr & MPC85xx_PORDEVSR_PCI1_SPD; +		uint pci_speed = CONFIG_SYS_CLK_FREQ;	/* get_clock_freq() */ -	if (!(gur->devdisr & MPC85xx_DEVDISR_PCI1)) {  		printf ("    PCI host: %d bit, %s MHz, %s, %s\n",  			(pci_32) ? 32 : 64,  			(pci_speed == 33000000) ? "33" :  			(pci_speed == 66000000) ? "66" : "unknown",  			pci_clk_sel ? "sync" : "async", -			pci_arb ? "arbiter" : "external-arbiter" -			); - -		/* outbound memory */ -		pci_set_region(r++, -			       CONFIG_SYS_PCI1_MEM_BASE, -			       CONFIG_SYS_PCI1_MEM_PHYS, -			       CONFIG_SYS_PCI1_MEM_SIZE, -			       PCI_REGION_MEM); +			pci_arb ? "arbiter" : "external-arbiter"); -		/* outbound io */ -		pci_set_region(r++, -			       CONFIG_SYS_PCI1_IO_BASE, -			       CONFIG_SYS_PCI1_IO_PHYS, -			       CONFIG_SYS_PCI1_IO_SIZE, -			       PCI_REGION_IO); -		hose->region_count = r - hose->regions; - -		hose->first_busno=first_free_busno; - -		fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data); -		first_free_busno=hose->last_busno+1; -		printf ("PCI on bus %02x - %02x\n",hose->first_busno,hose->last_busno); -#ifdef CONFIG_PCIX_CHECK -		if (!(gur->pordevsr & MPC85xx_PORDEVSR_PCI1)) { -			/* PCI-X init */ -			if (CONFIG_SYS_CLK_FREQ < 66000000) -				printf("PCI-X will only work at 66 MHz\n"); - -			reg16 = PCI_X_CMD_MAX_SPLIT | PCI_X_CMD_MAX_READ -				| PCI_X_CMD_ERO | PCI_X_CMD_DPERR_E; -			pci_hose_write_config_word(hose, bus, PCIX_COMMAND, reg16); -		} -#endif +		SET_STD_PCI_INFO(pci_info[num], 1); +		first_free_busno = fsl_pci_init_port(&pci_info[num++], +					&pci1_hose, first_free_busno);  	} else {  		printf ("    PCI: disabled\n");  	} -} + +	puts("\n");  #else -	gur->devdisr |= MPC85xx_DEVDISR_PCI1; /* disable */ +	setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI1); /* disable */  #endif -	gur->devdisr |= MPC85xx_DEVDISR_PCI2; /* disable PCI2 */ +	setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCI2); /* disable PCI2 */  #ifdef CONFIG_PCIE1 -{ -	volatile ccsr_fsl_pci_t *pci = (ccsr_fsl_pci_t *) CONFIG_SYS_PCIE1_ADDR; -	struct pci_controller *hose = &pcie1_hose; -	struct pci_region *r = hose->regions; - -	int pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel); - -	if (pcie_configured && !(gur->devdisr & MPC85xx_DEVDISR_PCIE)){ -		printf ("\n    PCIE at base address %x", -			(uint)pci); - -		if (pci->pme_msg_det) { -			pci->pme_msg_det = 0xffffffff; -			debug (" with errors.  Clearing.  Now 0x%08x",pci->pme_msg_det); -		} -		printf ("\n"); - -		/* outbound memory */ -		pci_set_region(r++, -			       CONFIG_SYS_PCIE1_MEM_BASE, -			       CONFIG_SYS_PCIE1_MEM_PHYS, -			       CONFIG_SYS_PCIE1_MEM_SIZE, -			       PCI_REGION_MEM); - -		/* outbound io */ -		pci_set_region(r++, -			       CONFIG_SYS_PCIE1_IO_BASE, -			       CONFIG_SYS_PCIE1_IO_PHYS, -			       CONFIG_SYS_PCIE1_IO_SIZE, -			       PCI_REGION_IO); - -		hose->region_count = r - hose->regions; - -		hose->first_busno=first_free_busno; - -		fsl_pci_init(hose, (u32)&pci->cfg_addr, (u32)&pci->cfg_data); -		printf ("PCIE on bus %d - %d\n",hose->first_busno,hose->last_busno); - -		first_free_busno=hose->last_busno+1; +	pcie_configured = is_fsl_pci_cfg(LAW_TRGT_IF_PCIE_1, io_sel); +	if (pcie_configured && !(devdisr & MPC85xx_DEVDISR_PCIE)){ +		SET_STD_PCIE_INFO(pci_info[num], 1); +		printf ("    PCIE at base address %lx\n", pci_info[num].regs); +		first_free_busno = fsl_pci_init_port(&pci_info[num++], +					&pcie1_hose, first_free_busno);  	} else {  		printf ("    PCIE: disabled\n");  	} - } + +	puts("\n");  #else -	gur->devdisr |= MPC85xx_DEVDISR_PCIE; /* disable */ +	setbits_be32(&gur->devdisr, MPC85xx_DEVDISR_PCIE); /* disable */  #endif -  } +#endif  int board_eth_init(bd_t *bis)  { diff --git a/board/sbc8548/tlb.c b/board/sbc8548/tlb.c index a1795fcfb..38bdeb37c 100644 --- a/board/sbc8548/tlb.c +++ b/board/sbc8548/tlb.c @@ -56,60 +56,53 @@ struct fsl_e_tlb_entry tlb_table[] = {  		      0, 0, BOOKE_PAGESZ_64M, 1),  	/* -	 * TLB 1:	256M	Non-cacheable, guarded -	 * 0x80000000	256M	PCI1 MEM First half +	 * TLB 1:	1G	Non-cacheable, guarded +	 * 0x80000000	512M	PCI1 MEM +	 * 0xa0000000	512M	PCIe MEM  	 */ -	SET_TLB_ENTRY(1, CONFIG_SYS_PCI1_MEM_PHYS, CONFIG_SYS_PCI1_MEM_PHYS, +	SET_TLB_ENTRY(1, CONFIG_SYS_PCI1_MEM_VIRT, CONFIG_SYS_PCI1_MEM_PHYS,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, -		      0, 1, BOOKE_PAGESZ_256M, 1), +		      0, 1, BOOKE_PAGESZ_1G, 1),  	/* -	 * TLB 2:	256M	Non-cacheable, guarded -	 * 0x90000000	256M	PCI1 MEM Second half -	 */ -	SET_TLB_ENTRY(1, CONFIG_SYS_PCI1_MEM_PHYS + 0x10000000, -		      CONFIG_SYS_PCI1_MEM_PHYS + 0x10000000, -		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, -		      0, 2, BOOKE_PAGESZ_256M, 1), - -	/* -	 * TLB 3:	256M Cacheable, non-guarded +	 * TLB 2:	256M Cacheable, non-guarded  	 * 0x0		256M DDR SDRAM  	 */ -	#if !defined(CONFIG_SPD_EEPROM) +#if !defined(CONFIG_SPD_EEPROM)  	SET_TLB_ENTRY(1, CONFIG_SYS_DDR_SDRAM_BASE, CONFIG_SYS_DDR_SDRAM_BASE,  		      MAS3_SX|MAS3_SW|MAS3_SR, 0, -		      0, 3, BOOKE_PAGESZ_256M, 1), -	#endif +		      0, 2, BOOKE_PAGESZ_256M, 1), +#endif  	/* -	 * TLB 4:	64M	Non-cacheable, guarded +	 * TLB 3:	64M	Non-cacheable, guarded  	 * 0xe0000000	1M	CCSRBAR -	 * 0xe2000000	16M	PCI1 IO +	 * 0xe2000000	8M	PCI1 IO +	 * 0xe2800000	8M	PCIe IO  	 */  	SET_TLB_ENTRY(1, CONFIG_SYS_CCSRBAR, CONFIG_SYS_CCSRBAR_PHYS,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, -		      0, 4, BOOKE_PAGESZ_64M, 1), +		      0, 3, BOOKE_PAGESZ_64M, 1),  	/* -	 * TLB 5:	64M	Cacheable, non-guarded +	 * TLB 4:	64M	Cacheable, non-guarded  	 * 0xf0000000	64M	LBC SDRAM First half  	 */  	SET_TLB_ENTRY(1, CONFIG_SYS_LBC_SDRAM_BASE, CONFIG_SYS_LBC_SDRAM_BASE,  		      MAS3_SX|MAS3_SW|MAS3_SR, 0, -		      0, 5, BOOKE_PAGESZ_64M, 1), +		      0, 4, BOOKE_PAGESZ_64M, 1),  	/* -	 * TLB 6:	64M	Cacheable, non-guarded +	 * TLB 5:	64M	Cacheable, non-guarded  	 * 0xf4000000	64M	LBC SDRAM Second half  	 */  	SET_TLB_ENTRY(1, CONFIG_SYS_LBC_SDRAM_BASE + 0x4000000,  		      CONFIG_SYS_LBC_SDRAM_BASE + 0x4000000,  		      MAS3_SX|MAS3_SW|MAS3_SR, 0, -		      0, 6, BOOKE_PAGESZ_64M, 1), +		      0, 5, BOOKE_PAGESZ_64M, 1),  	/* -	 * TLB 7:	16M	Cacheable, non-guarded +	 * TLB 6:	16M	Cacheable, non-guarded  	 * 0xf8000000	1M	7-segment LED display  	 * 0xf8100000	1M	User switches  	 * 0xf8300000	1M	Board revision @@ -117,24 +110,24 @@ struct fsl_e_tlb_entry tlb_table[] = {  	 */  	SET_TLB_ENTRY(1, CONFIG_SYS_EPLD_BASE, CONFIG_SYS_EPLD_BASE,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, -		      0, 7, BOOKE_PAGESZ_16M, 1), +		      0, 6, BOOKE_PAGESZ_16M, 1),  	/* -	 * TLB 8:	4M	Non-cacheable, guarded +	 * TLB 7:	4M	Non-cacheable, guarded  	 * 0xfb800000	4M	1st 4MB block of 64MB user FLASH  	 */  	SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH, CONFIG_SYS_ALT_FLASH,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, -		      0, 8, BOOKE_PAGESZ_4M, 1), +		      0, 7, BOOKE_PAGESZ_4M, 1),  	/* -	 * TLB 9:	4M	Non-cacheable, guarded +	 * TLB 8:	4M	Non-cacheable, guarded  	 * 0xfbc00000	4M	2nd 4MB block of 64MB user FLASH  	 */  	SET_TLB_ENTRY(1, CONFIG_SYS_ALT_FLASH + 0x400000,  		      CONFIG_SYS_ALT_FLASH + 0x400000,  		      MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G, -		      0, 9, BOOKE_PAGESZ_4M, 1), +		      0, 8, BOOKE_PAGESZ_4M, 1),  }; diff --git a/include/configs/sbc8548.h b/include/configs/sbc8548.h index 009931df5..1f340ed7f 100644 --- a/include/configs/sbc8548.h +++ b/include/configs/sbc8548.h @@ -42,7 +42,14 @@  #undef CONFIG_PCI1		/* PCI controller 1 */  #undef CONFIG_PCIE1		/* PCIE controler 1 (slot 1) */  #undef CONFIG_RIO -#undef CONFIG_FSL_PCI_INIT		/* Use common FSL init code */ + +#ifdef CONFIG_PCI +#define CONFIG_FSL_PCI_INIT		/* Use common FSL init code */ +#define CONFIG_SYS_PCI_64BIT    1	/* enable 64-bit PCI resources */ +#endif +#ifdef CONFIG_PCIE1 +#define CONFIG_FSL_PCIE_RESET   1	/* need PCIe reset errata */ +#endif  #define CONFIG_TSEC_ENET		/* tsec ethernet support */  #define CONFIG_ENV_OVERWRITE @@ -343,31 +350,27 @@   * General PCI   * Memory space is mapped 1-1, but I/O space must start from 0.   */ +#define CONFIG_SYS_PCI_VIRT		0x80000000	/* 1G PCI TLB */  #define CONFIG_SYS_PCI_PHYS		0x80000000	/* 1G PCI TLB */ -#define CONFIG_SYS_PCI1_MEM_BASE	0x80000000 -#define CONFIG_SYS_PCI1_MEM_PHYS	CONFIG_SYS_PCI1_MEM_BASE +#define CONFIG_SYS_PCI1_MEM_VIRT	0x80000000 +#define CONFIG_SYS_PCI1_MEM_BUS		0x80000000 +#define CONFIG_SYS_PCI1_MEM_PHYS	0x80000000  #define CONFIG_SYS_PCI1_MEM_SIZE	0x20000000	/* 512M */ -#define CONFIG_SYS_PCI1_IO_BASE	0x00000000 -#define CONFIG_SYS_PCI1_IO_PHYS	0xe2000000 -#define CONFIG_SYS_PCI1_IO_SIZE	0x00100000	/* 1M */ - -#ifdef CONFIG_PCI2 -#define CONFIG_SYS_PCI2_MEM_BASE	0xa0000000 -#define CONFIG_SYS_PCI2_MEM_PHYS	CONFIG_SYS_PCI2_MEM_BASE -#define CONFIG_SYS_PCI2_MEM_SIZE	0x20000000	/* 512M */ -#define CONFIG_SYS_PCI2_IO_BASE	0x00000000 -#define CONFIG_SYS_PCI2_IO_PHYS	0xe2800000 -#define CONFIG_SYS_PCI2_IO_SIZE	0x00100000	/* 1M */ -#endif +#define CONFIG_SYS_PCI1_IO_VIRT		0xe2000000 +#define CONFIG_SYS_PCI1_IO_BUS		0x00000000 +#define CONFIG_SYS_PCI1_IO_PHYS		0xe2000000 +#define CONFIG_SYS_PCI1_IO_SIZE		0x00800000	/* 8M */  #ifdef CONFIG_PCIE1 -#define CONFIG_SYS_PCIE1_MEM_BASE	0xa0000000 -#define CONFIG_SYS_PCIE1_MEM_PHYS	CONFIG_SYS_PCIE1_MEM_BASE +#define CONFIG_SYS_PCIE1_MEM_VIRT	0xa0000000 +#define CONFIG_SYS_PCIE1_MEM_BUS	0xa0000000 +#define CONFIG_SYS_PCIE1_MEM_PHYS	0xa0000000  #define CONFIG_SYS_PCIE1_MEM_SIZE	0x20000000	/* 512M */ -#define CONFIG_SYS_PCIE1_IO_BASE	0x00000000 -#define CONFIG_SYS_PCIE1_IO_PHYS	0xe3000000 -#define CONFIG_SYS_PCIE1_IO_SIZE	0x00100000	/*   1M */ +#define CONFIG_SYS_PCIE1_IO_VIRT	0xe2800000 +#define CONFIG_SYS_PCIE1_IO_BUS		0x00000000 +#define CONFIG_SYS_PCIE1_IO_PHYS	0xe2800000 +#define CONFIG_SYS_PCIE1_IO_SIZE	0x00800000	/* 8M */  #endif  #ifdef CONFIG_RIO @@ -386,7 +389,7 @@  #undef CONFIG_EEPRO100  #undef CONFIG_TULIP -#undef CONFIG_PCI_SCAN_SHOW		/* show pci devices on startup */ +#define CONFIG_PCI_SCAN_SHOW		/* show pci devices on startup */  #endif	/* CONFIG_PCI */ |