ppc4xx: Consolidate pci_pre_init() function
This patch removes the duplicted implementations of the pci_pre_init() function by introducing a weak default function for it. This weak default has a different implementation for some PPC variants. It can be overridden by a board specific version. Signed-off-by: Stefan Roese <sr@denx.de>
This commit is contained in:
		
							parent
							
								
									1095493a5d
								
							
						
					
					
						commit
						a760b02031
					
				|  | @ -466,61 +466,6 @@ phys_size_t initdram (int board_type) | |||
| #endif | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long addr; | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set priority for all PLB3 devices to 0. | ||||
| 	  | Set PLB3 arbiter to fair mode. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SD0_AMP1, addr); | ||||
| 	mtsdr(SD0_AMP1, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, addr | 0x80000000); | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set priority for all PLB4 devices to 0. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SD0_AMP0, addr); | ||||
| 	mtsdr(SD0_AMP0, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB4_ACR) | 0xa0000000;	/* Was 0x8---- */ | ||||
| 	mtdcr(PLB4_ACR, addr); | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set Nebula PLB4 arbiter to fair mode. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	/* Segment0 */ | ||||
| 	addr = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, addr); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	addr = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, addr); | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_master_init | ||||
|  * | ||||
|  |  | |||
|  | @ -164,34 +164,3 @@ long int fixed_sdram(void) | |||
| 	return (128 * 1024 * 1024);	/* 128 MB                           */ | ||||
| } | ||||
| #endif				/* !defined(CONFIG_SPD_EEPROM) */ | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long strap; | ||||
| 
 | ||||
| 	/*--------------------------------------------------------------------------+
 | ||||
| 	 * The ebony board is always configured as the host & requires the | ||||
| 	 * PCI arbiter to be enabled. | ||||
| 	 *--------------------------------------------------------------------------*/ | ||||
| 	strap = mfdcr(CPC0_STRP1); | ||||
| 	if ((strap & 0x00100000) == 0) { | ||||
| 		printf("PCI: CPC0_STRP1[PAE] not set.\n"); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif	/* defined(CONFIG_PCI) */ | ||||
|  |  | |||
|  | @ -260,37 +260,6 @@ u32 ddr_clktr(u32 default_val) { | |||
| 	return (SDRAM_CLKTR_CLKP_90_DEG_ADV); | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller * hose ) | ||||
| { | ||||
| 	unsigned long strap; | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------+
 | ||||
| 	 *	The katmai board is always configured as the host & requires the | ||||
| 	 *	PCI arbiter to be enabled. | ||||
| 	 *-------------------------------------------------------------------*/ | ||||
| 	mfsdr(SDR0_SDSTP1, strap); | ||||
| 	if( (strap & SDR0_SDSTP1_PAE_MASK) == 0 ) { | ||||
| 		printf("PCI: SDR0_STRP1[%08lX] - PCI Arbiter disabled.\n",strap); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif	/* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| #if defined(CONFIG_PCI) | ||||
| int board_pcie_card_present(int port) | ||||
| { | ||||
|  |  | |||
|  | @ -285,25 +285,6 @@ int checkboard (void) | |||
| 	return (0); | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *      Different boards may wish to customize the pci controller structure | ||||
|  *      (add regions, override default access routines, etc) or perform | ||||
|  *      certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller * hose ) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| #endif  /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| #if defined(CONFIG_POST) | ||||
| /*
 | ||||
|  * Returns 1 if keys pressed to start the power-on long-running tests | ||||
|  |  | |||
|  | @ -126,39 +126,6 @@ u32 ddr_clktr(u32 default_val) { | |||
| 	return (SDRAM_CLKTR_CLKP_180_DEG_ADV); | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init( struct pci_controller *hose ) | ||||
| { | ||||
| 	unsigned long strap; | ||||
| 
 | ||||
| 	/*--------------------------------------------------------------------------+
 | ||||
| 	 *	The luan board is always configured as the host & requires the | ||||
| 	 *	PCI arbiter to be enabled. | ||||
| 	 *--------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SDR0_SDSTP1, strap); | ||||
| 	if( (strap & SDR0_SDSTP1_PAE_MASK) == 0 ) { | ||||
| 		printf("PCI: SDR0_STRP1[%08lX] - PCI Arbiter disabled.\n",strap); | ||||
| 
 | ||||
| 		return  0; | ||||
| 	} | ||||
| 
 | ||||
| 	return  1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  hw_watchdog_reset | ||||
|  * | ||||
|  |  | |||
|  | @ -237,25 +237,6 @@ int checkboard (void) | |||
| 	return (0); | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *      Different boards may wish to customize the pci controller structure | ||||
|  *      (add regions, override default access routines, etc) or perform | ||||
|  *      certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller * hose ) | ||||
| { | ||||
| 	return 0; | ||||
| } | ||||
| #endif  /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| #if defined(CONFIG_POST) | ||||
| /*
 | ||||
|  * Returns 1 if keys pressed to start the power-on long-running tests | ||||
|  |  | |||
|  | @ -275,38 +275,6 @@ long int fixed_sdram (void) | |||
| } | ||||
| #endif	/* !defined(CONFIG_SPD_EEPROM) */ | ||||
| 
 | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller * hose ) | ||||
| { | ||||
| 	unsigned long strap; | ||||
| 
 | ||||
| 	/*--------------------------------------------------------------------------+
 | ||||
| 	 *	The ocotea board is always configured as the host & requires the | ||||
| 	 *	PCI arbiter to be enabled. | ||||
| 	 *--------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SDR0_SDSTP1, strap); | ||||
| 	if( (strap & SDR0_SDSTP1_PAE_MASK) == 0 ){ | ||||
| 		printf("PCI: SDR0_STRP1[%08lX] - PCI Arbiter disabled.\n",strap); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| void fpga_init(void) | ||||
| { | ||||
| 	unsigned long group; | ||||
|  |  | |||
|  | @ -364,69 +364,12 @@ int checkboard(void) | |||
| /*
 | ||||
|  * Assign interrupts to PCI devices. | ||||
|  */ | ||||
| void sequoia_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev) | ||||
| void board_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev) | ||||
| { | ||||
| 	pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, VECNUM_EIRQ2); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * pci_pre_init | ||||
|  * | ||||
|  * This routine is called just prior to registering the hose and gives | ||||
|  * the board the opportunity to check things. Returning a value of zero | ||||
|  * indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  * Different boards may wish to customize the pci controller structure | ||||
|  * (add regions, override default access routines, etc) or perform | ||||
|  * certain pre-initialization actions. | ||||
|  */ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long addr; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB3 devices to 0. | ||||
| 	 * Set PLB3 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP1, addr); | ||||
| 	mtsdr(SD0_AMP1, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, addr | 0x80000000); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB4 devices to 0. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP0, addr); | ||||
| 	mtsdr(SD0_AMP0, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB4_ACR) | 0xa0000000;	/* Was 0x8---- */ | ||||
| 	mtdcr(PLB4_ACR, addr); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set Nebula PLB4 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	/* Segment0 */ | ||||
| 	addr = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, addr); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	addr = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, addr); | ||||
| 
 | ||||
| #ifdef CONFIG_PCI_PNP | ||||
| 	hose->fixup_irq = sequoia_pci_fixup_irq; | ||||
| #endif | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| #if defined(CONFIG_PCI) && defined(CONFIG_SYS_PCI_MASTER_INIT) | ||||
| void pci_master_init(struct pci_controller *hose) | ||||
| { | ||||
|  |  | |||
|  | @ -209,37 +209,6 @@ int checkboard (void) | |||
| 	return (0); | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller * hose ) | ||||
| { | ||||
| 	unsigned long strap; | ||||
| 
 | ||||
| 	/*--------------------------------------------------------------------------+
 | ||||
| 	 *	The ocotea board is always configured as the host & requires the | ||||
| 	 *	PCI arbiter to be enabled. | ||||
| 	 *--------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SDR0_SDSTP1, strap); | ||||
| 	if( (strap & SDR0_SDSTP1_PAE_MASK) == 0 ){ | ||||
| 		printf("PCI: SDR0_STRP1[%08lX] - PCI Arbiter disabled.\n",strap); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| #ifdef CONFIG_POST | ||||
| /*
 | ||||
|  * Returns 1 if keys pressed to start the power-on long-running tests | ||||
|  |  | |||
|  | @ -352,61 +352,6 @@ phys_size_t initdram(int board) | |||
| 	return CONFIG_SYS_SDRAM_BANKS * (CONFIG_SYS_KBYTES_SDRAM * 1024);	/* return bytes */ | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long addr; | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set priority for all PLB3 devices to 0. | ||||
| 	  | Set PLB3 arbiter to fair mode. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SD0_AMP1, addr); | ||||
| 	mtsdr(SD0_AMP1, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, addr | 0x80000000); | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set priority for all PLB4 devices to 0. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SD0_AMP0, addr); | ||||
| 	mtsdr(SD0_AMP0, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB4_ACR) | 0xa0000000;	/* Was 0x8---- */ | ||||
| 	mtdcr(PLB4_ACR, addr); | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set Nebula PLB4 arbiter to fair mode. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	/* Segment0 */ | ||||
| 	addr = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, addr); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	addr = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, addr); | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif	/* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_master_init | ||||
|  * | ||||
|  |  | |||
|  | @ -588,37 +588,6 @@ u32 ddr_clktr(u32 default_val) { | |||
| 	return default_val; | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller * hose ) | ||||
| { | ||||
| 	unsigned long strap; | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------+
 | ||||
| 	 *	The yucca board is always configured as the host & requires the | ||||
| 	 *	PCI arbiter to be enabled. | ||||
| 	 *-------------------------------------------------------------------*/ | ||||
| 	mfsdr(SDR0_SDSTP1, strap); | ||||
| 	if( (strap & SDR0_SDSTP1_PAE_MASK) == 0 ) { | ||||
| 		printf("PCI: SDR0_STRP1[%08lX] - PCI Arbiter disabled.\n",strap); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif	/* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| #if defined(CONFIG_PCI) | ||||
| int board_pcie_card_present(int port) | ||||
| { | ||||
|  |  | |||
|  | @ -360,60 +360,6 @@ int checkboard(void) | |||
| 	return (0); | ||||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * pci_pre_init | ||||
|  * | ||||
|  * This routine is called just prior to registering the hose and gives | ||||
|  * the board the opportunity to check things. Returning a value of zero | ||||
|  * indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  * Different boards may wish to customize the pci controller structure | ||||
|  * (add regions, override default access routines, etc) or perform | ||||
|  * certain pre-initialization actions. | ||||
|  */ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long addr; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB3 devices to 0. | ||||
| 	 * Set PLB3 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP1, addr); | ||||
| 	mtsdr(SD0_AMP1, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, addr | 0x80000000); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB4 devices to 0. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP0, addr); | ||||
| 	mtsdr(SD0_AMP0, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB4_ACR) | 0xa0000000; /* Was 0x8---- */ | ||||
| 	mtdcr(PLB4_ACR, addr); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set Nebula PLB4 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	/* Segment0 */ | ||||
| 	addr = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, addr); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	addr = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, addr); | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| #if defined(CONFIG_PCI) && defined(CONFIG_SYS_PCI_MASTER_INIT) | ||||
| void pci_master_init(struct pci_controller *hose) | ||||
| { | ||||
|  |  | |||
|  | @ -478,7 +478,7 @@ int checkboard(void) | |||
| /*
 | ||||
|  * Assign interrupts to PCI devices. Some OSs rely on this. | ||||
|  */ | ||||
| void pmc440_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev) | ||||
| void board_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev) | ||||
| { | ||||
| 	unsigned char int_line[] = {IRQ_PCIC, IRQ_PCID, IRQ_PCIA, IRQ_PCIB}; | ||||
| 
 | ||||
|  | @ -487,64 +487,6 @@ void pmc440_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev) | |||
| } | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * pci_pre_init | ||||
|  * | ||||
|  * This routine is called just prior to registering the hose and gives | ||||
|  * the board the opportunity to check things. Returning a value of zero | ||||
|  * indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  * Different boards may wish to customize the pci controller structure | ||||
|  * (add regions, override default access routines, etc) or perform | ||||
|  * certain pre-initialization actions. | ||||
|  */ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long addr; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB3 devices to 0. | ||||
| 	 * Set PLB3 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP1, addr); | ||||
| 	mtsdr(SD0_AMP1, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, addr | 0x80000000); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB4 devices to 0. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP0, addr); | ||||
| 	mtsdr(SD0_AMP0, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB4_ACR) | 0xa0000000;	/* Was 0x8---- */ | ||||
| 	mtdcr(PLB4_ACR, addr); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set Nebula PLB4 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	/* Segment0 */ | ||||
| 	addr = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, addr); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	addr = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, addr); | ||||
| 
 | ||||
| #ifdef CONFIG_PCI_PNP | ||||
| 	hose->fixup_irq = pmc440_pci_fixup_irq; | ||||
| #endif | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| /*
 | ||||
|  * pci_target_init | ||||
|  * | ||||
|  |  | |||
|  | @ -29,6 +29,7 @@ | |||
| #include <ppc4xx.h> | ||||
| #include <asm/processor.h> | ||||
| #include <asm/io.h> | ||||
| #include <asm/4xx_pci.h> | ||||
| 
 | ||||
| DECLARE_GLOBAL_DATA_PTR; | ||||
| 
 | ||||
|  | @ -158,55 +159,13 @@ int checkboard(void) | |||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * pci_pre_init | ||||
|  * | ||||
|  * This routine is called just prior to registering the hose and gives | ||||
|  * the board the opportunity to check things. Returning a value of zero | ||||
|  * indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  * Override weak pci_pre_init() | ||||
|  */ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long addr; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB3 devices to 0. | ||||
| 	 * Set PLB3 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP1, addr); | ||||
| 	mtsdr(SD0_AMP1, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, addr | 0x80000000); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB4 devices to 0. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP0, addr); | ||||
| 	mtsdr(SD0_AMP0, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB4_ACR) | 0xa0000000;	/* Was 0x8---- */ | ||||
| 	mtdcr(PLB4_ACR, addr); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set Nebula PLB4 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	/* Segment0 */ | ||||
| 	addr = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, addr); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	addr = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, addr); | ||||
| 	/* First call common code */ | ||||
| 	__pci_pre_init(hose); | ||||
| 
 | ||||
| 	/* enable 66 MHz ext. Clock */ | ||||
| 	out32(GPIO1_TCR, in32(GPIO1_TCR) | 0x00008000); | ||||
|  |  | |||
|  | @ -595,70 +595,12 @@ int checkboard(void) | |||
| /*
 | ||||
|  * Assign interrupts to PCI devices. | ||||
|  */ | ||||
| void korat_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev) | ||||
| void board_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev) | ||||
| { | ||||
| 	pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, VECNUM_EIRQ2); | ||||
| } | ||||
| #endif | ||||
| 
 | ||||
| /*
 | ||||
|  * pci_pre_init | ||||
|  * | ||||
|  * This routine is called just prior to registering the hose and gives | ||||
|  * the board the opportunity to check things. Returning a value of zero | ||||
|  * indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  * Different boards may wish to customize the pci controller structure | ||||
|  * (add regions, override default access routines, etc) or perform | ||||
|  * certain pre-initialization actions. | ||||
|  */ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long addr; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB3 devices to 0. | ||||
| 	 * Set PLB3 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP1, addr); | ||||
| 	mtsdr(SD0_AMP1, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, addr | 0x80000000); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB4 devices to 0. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP0, addr); | ||||
| 	mtsdr(SD0_AMP0, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB4_ACR) | 0xa0000000;	/* Was 0x8---- */ | ||||
| 	mtdcr(PLB4_ACR, addr); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set Nebula PLB4 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	/* Segment0 */ | ||||
| 	addr = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, addr); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	addr = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, addr); | ||||
| 
 | ||||
| #if defined(CONFIG_PCI_PNP) | ||||
| 	hose->fixup_irq = korat_pci_fixup_irq; | ||||
| #endif | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| /*
 | ||||
|  * pci_target_init | ||||
|  * | ||||
|  |  | |||
|  | @ -275,61 +275,6 @@ int checkboard(void) | |||
| 	return (0); | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long addr; | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set priority for all PLB3 devices to 0. | ||||
| 	  | Set PLB3 arbiter to fair mode. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SD0_AMP1, addr); | ||||
| 	mtsdr(SD0_AMP1, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, addr | 0x80000000); | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set priority for all PLB4 devices to 0. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SD0_AMP0, addr); | ||||
| 	mtsdr(SD0_AMP0, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB4_ACR) | 0xa0000000;	/* Was 0x8---- */ | ||||
| 	mtdcr(PLB4_ACR, addr); | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set Nebula PLB4 arbiter to fair mode. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	/* Segment0 */ | ||||
| 	addr = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, addr); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	addr = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, addr); | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif	/* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_master_init | ||||
|  * | ||||
|  |  | |||
|  | @ -550,61 +550,6 @@ phys_size_t initdram (int board_type) | |||
| 	return dram_size; | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long addr; | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set priority for all PLB3 devices to 0. | ||||
| 	  | Set PLB3 arbiter to fair mode. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SD0_AMP1, addr); | ||||
| 	mtsdr(SD0_AMP1, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, addr | 0x80000000); | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set priority for all PLB4 devices to 0. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SD0_AMP0, addr); | ||||
| 	mtsdr(SD0_AMP0, (addr & 0x000000FF) | 0x0000FF00); | ||||
| 	addr = mfdcr(PLB4_ACR) | 0xa0000000;	/* Was 0x8---- */ | ||||
| 	mtdcr(PLB4_ACR, addr); | ||||
| 
 | ||||
| 	/*-------------------------------------------------------------------------+
 | ||||
| 	  | Set Nebula PLB4 arbiter to fair mode. | ||||
| 	  +-------------------------------------------------------------------------*/ | ||||
| 	/* Segment0 */ | ||||
| 	addr = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, addr); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	addr = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	addr = (addr & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	addr = (addr & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	addr = (addr & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, addr); | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif	/* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_master_init | ||||
|  * | ||||
|  |  | |||
|  | @ -29,6 +29,7 @@ | |||
| #include <ppc4xx_enet.h> | ||||
| #include <miiphy.h> | ||||
| #include <asm/processor.h> | ||||
| #include <asm/4xx_pci.h> | ||||
| 
 | ||||
| DECLARE_GLOBAL_DATA_PTR; | ||||
| 
 | ||||
|  | @ -144,39 +145,20 @@ int checkboard (void) | |||
| 	return (0); | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller * hose ) | ||||
| /*
 | ||||
|  * Override weak pci_pre_init() | ||||
|  */ | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long strap; | ||||
| 
 | ||||
| 	/*--------------------------------------------------------------------------+
 | ||||
| 	 *	The ocotea board is always configured as the host & requires the | ||||
| 	 *	PCI arbiter to be enabled. | ||||
| 	 *--------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SDR0_SDSTP1, strap); | ||||
| 	if( (strap & SDR0_SDSTP1_PAE_MASK) == 0 ){ | ||||
| 		printf("PCI: SDR0_STRP1[%08lX] - PCI Arbiter disabled.\n",strap); | ||||
| 	if (__pci_pre_init(hose) == 0) | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	/* FPGA Init */ | ||||
| 	alpr_fpga_init (); | ||||
| 	alpr_fpga_init(); | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  * Override weak is_pci_host() | ||||
|  | @ -193,8 +175,6 @@ int pci_pre_init(struct pci_controller * hose ) | |||
|  * | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| 
 | ||||
| static void wait_for_pci_ready(void) | ||||
| { | ||||
| 	/*
 | ||||
|  |  | |||
|  | @ -164,37 +164,6 @@ int misc_init_r (void) | |||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	unsigned long strap; | ||||
| 
 | ||||
| 	/*--------------------------------------------------------------------------+
 | ||||
| 	 *	The P3P440 board is always configured as the host & requires the | ||||
| 	 *	PCI arbiter to be disabled because it's an PMC module. | ||||
| 	 *--------------------------------------------------------------------------*/ | ||||
| 	strap = mfdcr(CPC0_STRP1); | ||||
| 	if (strap & 0x00100000) { | ||||
| 		printf("PCI: CPC0_STRP1[PAE] set.\n"); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif	/* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  * Override weak is_pci_host() | ||||
|  * | ||||
|  |  | |||
|  | @ -300,38 +300,6 @@ long int fixed_sdram (void) | |||
| } | ||||
| #endif	/* !defined(CONFIG_SPD_EEPROM) */ | ||||
| 
 | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  pci_pre_init | ||||
|  * | ||||
|  *  This routine is called just prior to registering the hose and gives | ||||
|  *  the board the opportunity to check things. Returning a value of zero | ||||
|  *  indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  *	Different boards may wish to customize the pci controller structure | ||||
|  *	(add regions, override default access routines, etc) or perform | ||||
|  *	certain pre-initialization actions. | ||||
|  * | ||||
|  ************************************************************************/ | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller * hose ) | ||||
| { | ||||
| 	unsigned long strap; | ||||
| 
 | ||||
| 	/*--------------------------------------------------------------------------+
 | ||||
| 	 *	The metrobox is always configured as the host & requires the | ||||
| 	 *	PCI arbiter to be enabled. | ||||
| 	 *--------------------------------------------------------------------------*/ | ||||
| 	mfsdr(SDR0_SDSTP1, strap); | ||||
| 	if( (strap & SDR0_SDSTP1_PAE_MASK) == 0 ){ | ||||
| 		printf("PCI: SDR0_STRP1[%08lX] - PCI Arbiter disabled.\n",strap); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| #endif /* defined(CONFIG_PCI) */ | ||||
| 
 | ||||
| /*************************************************************************
 | ||||
|  *  board_get_enetaddr | ||||
|  * | ||||
|  |  | |||
|  | @ -136,6 +136,8 @@ phys_size_t initdram(int board_type) | |||
| } | ||||
| 
 | ||||
| /*
 | ||||
|  * Override weak pci_pre_init() | ||||
|  * | ||||
|  * This routine is called just prior to registering the hose and gives | ||||
|  * the board the opportunity to check things. Returning a value of zero | ||||
|  * indicates that things are bad & PCI initialization should be aborted. | ||||
|  | @ -144,7 +146,6 @@ phys_size_t initdram(int board_type) | |||
|  * (add regions, override default access routines, etc) or perform | ||||
|  * certain pre-initialization actions. | ||||
|  */ | ||||
| 
 | ||||
| #if defined(CONFIG_PCI) | ||||
| int pci_pre_init(struct pci_controller * hose) | ||||
| { | ||||
|  |  | |||
|  | @ -73,9 +73,7 @@ | |||
| 
 | ||||
| #include <common.h> | ||||
| #include <command.h> | ||||
| #if !defined(CONFIG_440) | ||||
| #include <asm/4xx_pci.h> | ||||
| #endif | ||||
| #include <asm/processor.h> | ||||
| #include <asm/io.h> | ||||
| #include <pci.h> | ||||
|  | @ -84,13 +82,21 @@ | |||
| 
 | ||||
| DECLARE_GLOBAL_DATA_PTR; | ||||
| 
 | ||||
| #if defined(CONFIG_405GP) || defined(CONFIG_405EP) | ||||
| 
 | ||||
| #if defined(CONFIG_PMC405) | ||||
| ushort pmc405_pci_subsys_deviceid(void); | ||||
| #endif | ||||
| 
 | ||||
| /*#define DEBUG*/ | ||||
| 
 | ||||
| /*
 | ||||
|  * Board-specific pci initialization | ||||
|  * Platform code can reimplement pci_pre_init() if needed | ||||
|  */ | ||||
| int __pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| #if defined (CONFIG_405EP) | ||||
| #if defined(CONFIG_405EP) | ||||
| 	/*
 | ||||
| 	 * Enable the internal PCI arbiter by default. | ||||
| 	 * | ||||
|  | @ -106,15 +112,8 @@ int __pci_pre_init(struct pci_controller *hose) | |||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| int pci_pre_init(struct pci_controller *hose) __attribute__((weak, alias("__pci_pre_init"))); | ||||
| 
 | ||||
| #if defined(CONFIG_405GP) || defined(CONFIG_405EP) | ||||
| 
 | ||||
| #if defined(CONFIG_PMC405) | ||||
| ushort pmc405_pci_subsys_deviceid(void); | ||||
| #endif | ||||
| 
 | ||||
| /*#define DEBUG*/ | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| 	__attribute__((weak, alias("__pci_pre_init"))); | ||||
| 
 | ||||
| int __is_pci_host(struct pci_controller *hose) | ||||
| { | ||||
|  | @ -232,7 +231,7 @@ void pci_405gp_init(struct pci_controller *hose) | |||
| 		pciauto_region_init(hose->pci_fb); | ||||
| 
 | ||||
| 	/* Let board change/modify hose & do initial checks */ | ||||
| 	if (pci_pre_init (hose) == 0) { | ||||
| 	if (pci_pre_init(hose) == 0) { | ||||
| 		printf("PCI: Board-specific initialization failed.\n"); | ||||
| 		printf("PCI: Configuration aborted.\n"); | ||||
| 		return; | ||||
|  | @ -500,16 +499,17 @@ int __is_pci_host(struct pci_controller *hose) | |||
| int is_pci_host(struct pci_controller *hose) | ||||
| 	__attribute__((weak, alias("__is_pci_host"))); | ||||
| 
 | ||||
| /*
 | ||||
|  *  pci_target_init | ||||
|  * | ||||
|  *	The bootstrap configuration provides default settings for the pci | ||||
|  *	inbound map (PIM). But the bootstrap config choices are limited and | ||||
|  *	may not be sufficient for a given board. | ||||
|  */ | ||||
| #if defined(CONFIG_SYS_PCI_TARGET_INIT) | ||||
| #if defined(CONFIG_440EP) || defined(CONFIG_440EPX) || \ | ||||
|     defined(CONFIG_440GR) || defined(CONFIG_440GRX) | ||||
| 
 | ||||
| #if defined(CONFIG_SYS_PCI_TARGET_INIT) | ||||
| /*
 | ||||
|  * pci_target_init | ||||
|  * | ||||
|  * The bootstrap configuration provides default settings for the pci | ||||
|  * inbound map (PIM). But the bootstrap config choices are limited and | ||||
|  * may not be sufficient for a given board. | ||||
|  */ | ||||
| void __pci_target_init(struct pci_controller *hose) | ||||
| { | ||||
| 	/*
 | ||||
|  | @ -570,7 +570,68 @@ void __pci_target_init(struct pci_controller *hose) | |||
| 
 | ||||
| 	pci_write_config_dword(0, PCI_BRDGOPT2, 0x00000101); | ||||
| } | ||||
| #endif /* CONFIG_SYS_PCI_TARGET_INIT */ | ||||
| 
 | ||||
| /*
 | ||||
|  * pci_pre_init | ||||
|  * | ||||
|  * This routine is called just prior to registering the hose and gives | ||||
|  * the board the opportunity to check things. Returning a value of zero | ||||
|  * indicates that things are bad & PCI initialization should be aborted. | ||||
|  * | ||||
|  * Different boards may wish to customize the pci controller structure | ||||
|  * (add regions, override default access routines, etc) or perform | ||||
|  * certain pre-initialization actions. | ||||
|  * | ||||
|  */ | ||||
| int __pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	u32 reg; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB3 devices to 0. | ||||
| 	 * Set PLB3 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP1, reg); | ||||
| 	mtsdr(SD0_AMP1, (reg & 0x000000FF) | 0x0000FF00); | ||||
| 	reg = mfdcr(PLB3_ACR); | ||||
| 	mtdcr(PLB3_ACR, reg | 0x80000000); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set priority for all PLB4 devices to 0. | ||||
| 	 */ | ||||
| 	mfsdr(SD0_AMP0, reg); | ||||
| 	mtsdr(SD0_AMP0, (reg & 0x000000FF) | 0x0000FF00); | ||||
| 	reg = mfdcr(PLB4_ACR) | 0xa0000000; | ||||
| 	mtdcr(PLB4_ACR, reg); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Set Nebula PLB4 arbiter to fair mode. | ||||
| 	 */ | ||||
| 	/* Segment0 */ | ||||
| 	reg = (mfdcr(PLB0_ACR) & ~PLB0_ACR_PPM_MASK) | PLB0_ACR_PPM_FAIR; | ||||
| 	reg = (reg & ~PLB0_ACR_HBU_MASK) | PLB0_ACR_HBU_ENABLED; | ||||
| 	reg = (reg & ~PLB0_ACR_RDP_MASK) | PLB0_ACR_RDP_4DEEP; | ||||
| 	reg = (reg & ~PLB0_ACR_WRP_MASK) | PLB0_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB0_ACR, reg); | ||||
| 
 | ||||
| 	/* Segment1 */ | ||||
| 	reg = (mfdcr(PLB1_ACR) & ~PLB1_ACR_PPM_MASK) | PLB1_ACR_PPM_FAIR; | ||||
| 	reg = (reg & ~PLB1_ACR_HBU_MASK) | PLB1_ACR_HBU_ENABLED; | ||||
| 	reg = (reg & ~PLB1_ACR_RDP_MASK) | PLB1_ACR_RDP_4DEEP; | ||||
| 	reg = (reg & ~PLB1_ACR_WRP_MASK) | PLB1_ACR_WRP_2DEEP; | ||||
| 	mtdcr(PLB1_ACR, reg); | ||||
| 
 | ||||
| #if defined(CONFIG_SYS_PCI_BOARD_FIXUP_IRQ) | ||||
| 	hose->fixup_irq = board_pci_fixup_irq; | ||||
| #endif | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| #else /* defined(CONFIG_440EP) ... */ | ||||
| 
 | ||||
| #if defined(CONFIG_SYS_PCI_TARGET_INIT) | ||||
| void __pci_target_init(struct pci_controller * hose) | ||||
| { | ||||
| 	/*
 | ||||
|  | @ -599,11 +660,31 @@ void __pci_target_init(struct pci_controller * hose) | |||
| 	out_le16((void *)PCIL0_CMD, in_le16((void *)PCIL0_CMD) | | ||||
| 		 PCI_COMMAND_MEMORY); | ||||
| } | ||||
| #endif /* CONFIG_SYS_PCI_TARGET_INIT */ | ||||
| 
 | ||||
| int __pci_pre_init(struct pci_controller *hose) | ||||
| { | ||||
| 	/*
 | ||||
| 	 * This board is always configured as the host & requires the | ||||
| 	 * PCI arbiter to be enabled. | ||||
| 	 */ | ||||
| 	if (!pci_arbiter_enabled()) { | ||||
| 		printf("PCI: PCI Arbiter disabled!\n"); | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| #endif /* defined(CONFIG_440EP) ... */ | ||||
| 
 | ||||
| #if defined(CONFIG_SYS_PCI_TARGET_INIT) | ||||
| void pci_target_init(struct pci_controller * hose) | ||||
| 	__attribute__((weak, alias("__pci_target_init"))); | ||||
| #endif /* CONFIG_SYS_PCI_TARGET_INIT */ | ||||
| 
 | ||||
| #endif	/* defined(CONFIG_SYS_PCI_TARGET_INIT) */ | ||||
| int pci_pre_init(struct pci_controller *hose) | ||||
| 	__attribute__((weak, alias("__pci_pre_init"))); | ||||
| 
 | ||||
| int pci_440_init (struct pci_controller *hose) | ||||
| { | ||||
|  | @ -674,7 +755,7 @@ int pci_440_init (struct pci_controller *hose) | |||
| 	pci_setup_indirect(hose, PCIL0_CFGADR, PCIL0_CFGDATA); | ||||
| 
 | ||||
| 	/* Let board change/modify hose & do initial checks */ | ||||
| 	if (pci_pre_init (hose) == 0) { | ||||
| 	if (pci_pre_init(hose) == 0) { | ||||
| 		printf("PCI: Board-specific initialization failed.\n"); | ||||
| 		printf("PCI: Configuration aborted.\n"); | ||||
| 		return -1; | ||||
|  |  | |||
|  | @ -81,7 +81,7 @@ static int pci_async_enabled(void) | |||
| 
 | ||||
| #if defined(CONFIG_PCI) && !defined(CONFIG_IOP480) && \ | ||||
|     !defined(CONFIG_405) && !defined(CONFIG_405EX) | ||||
| static int pci_arbiter_enabled(void) | ||||
| int pci_arbiter_enabled(void) | ||||
| { | ||||
| #if defined(CONFIG_405GP) | ||||
| 	return (mfdcr(CPC0_PSR) & PSR_PCI_ARBIT_EN); | ||||
|  |  | |||
|  | @ -1,6 +1,8 @@ | |||
| #ifndef _405GP_PCI_H | ||||
| #define _405GP_PCI_H | ||||
| 
 | ||||
| #include <pci.h> | ||||
| 
 | ||||
| /*----------------------------------------------------------------------------+
 | ||||
| | 405GP PCI core memory map defines. | ||||
| +----------------------------------------------------------------------------*/ | ||||
|  | @ -49,6 +51,9 @@ | |||
| 
 | ||||
| #define PCIDEVID_405GP	0x0 | ||||
| 
 | ||||
| void board_pci_fixup_irq(struct pci_controller *hose, pci_dev_t dev); | ||||
| int pci_arbiter_enabled(void); | ||||
| int __pci_pre_init(struct pci_controller *hose); | ||||
| void __pci_target_init(struct pci_controller *hose); | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
|  | @ -435,6 +435,7 @@ | |||
| /* Board-specific PCI */ | ||||
| #define CONFIG_SYS_PCI_TARGET_INIT | ||||
| #define CONFIG_SYS_PCI_MASTER_INIT | ||||
| #define CONFIG_SYS_PCI_BOARD_FIXUP_IRQ | ||||
| 
 | ||||
| /* PCI identification */ | ||||
| #define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x12FE	/* PCI Vendor ID: esd gmbh      */ | ||||
|  |  | |||
|  | @ -360,6 +360,7 @@ | |||
| /* Board-specific PCI */ | ||||
| #define CONFIG_SYS_PCI_TARGET_INIT | ||||
| #define CONFIG_SYS_PCI_MASTER_INIT | ||||
| #define CONFIG_SYS_PCI_BOARD_FIXUP_IRQ | ||||
| 
 | ||||
| #define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x10e8	/* AMCC				*/ | ||||
| #define CONFIG_SYS_PCI_SUBSYS_ID       0xcafe	/* Whatever			*/ | ||||
|  |  | |||
|  | @ -364,6 +364,7 @@ | |||
| /* Board-specific PCI */ | ||||
| #define CONFIG_SYS_PCI_TARGET_INIT | ||||
| #define CONFIG_SYS_PCI_MASTER_INIT | ||||
| #define CONFIG_SYS_PCI_BOARD_FIXUP_IRQ | ||||
| 
 | ||||
| #define CONFIG_SYS_PCI_SUBSYS_VENDORID 0x10e8	/* AMCC				*/ | ||||
| #define CONFIG_SYS_PCI_SUBSYS_ID       0xcafe	/* Whatever			*/ | ||||
|  |  | |||
|  | @ -1276,7 +1276,8 @@ | |||
| #define CPC0_STRP1_PAE_MASK		(0x80000000 >> 11) | ||||
| #define CPC0_STRP1_PISE_MASK		(0x80000000 >> 13) | ||||
| #endif /* defined(CONFIG_440GP) */ | ||||
| #if defined(CONFIG_440GX) || defined(CONFIG_440SP) | ||||
| #if defined(CONFIG_440GX) || defined(CONFIG_440SP) || \ | ||||
|     defined(CONFIG_460EX) || defined(CONFIG_460GT) | ||||
| #define SDR0_SDSTP1_PAE_MASK		(0x80000000 >> 13) | ||||
| #define SDR0_SDSTP1_PISE_MASK		(0x80000000 >> 15) | ||||
| #endif /* defined(CONFIG_440GX) || defined(CONFIG_440SP) */ | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue