diff options
| author | wdenk <wdenk> | 2003-04-05 00:53:31 +0000 | 
|---|---|---|
| committer | wdenk <wdenk> | 2003-04-05 00:53:31 +0000 | 
| commit | 3e38691e8f7aa0d9b498d76c7279ddec6e4946f3 (patch) | |
| tree | bec2e661298847dc5bcf9335ef31259686e882e1 /board/mpl/common/pci.c | |
| parent | 36c05a80ecbe3997abd9aa628a68dd6c0bacf681 (diff) | |
| download | olio-uboot-2014.01-3e38691e8f7aa0d9b498d76c7279ddec6e4946f3.tar.xz olio-uboot-2014.01-3e38691e8f7aa0d9b498d76c7279ddec6e4946f3.zip | |
* Patch by Arun Dharankar, 4 Apr 2003:LABEL_2003_04_05_0300
  Add IDMA example code (tested on 8260 only)
* Add support for Purple Board (MIPS64 5Kc)
* Add support for MIPS64 5Kc CPUs
* Fix missing setting of "loadaddr" and "bootfile" on ARM and MIPS
* Patch by Denis Peter, 04 Apr 2003:
  - update MIP405-4 board
* Patches by Denis Peter, 03 April 2003:
  - fix PCI IRQs on MPL boards
  - fix two more un-relocated pointer problems
* Fix behaviour of "run" command:
  - print error message iv variable does not exist
  - terminate processing of arguments in case of error
* Patches by Peter Figuli, 10 Mar 2003
  - Add support for BTUART on PXA platform
  - Add support for WEP EP250 (PXA) board
* Fix flash problems on INCA-IP; add tool to allow bruning images  to
  flash using a BDI2000
* Implement fix for I2C Edge Conditions problem for all boards that
  use the bit-banging driver (common/soft_i2c.c)
* Add patches by Robert Schwebel, 31 Mar 2003:
  - csb226 board: bring in sync with innokom/memsetup.S
  - csb226 board: fix MDREFR handling
  - misc doc fixes / extensions
  - innokom board: cleanup, MDREFR fix in memsetup.S, config update
  - add BOOT_PROGRESS to armlinux.c
Diffstat (limited to 'board/mpl/common/pci.c')
| -rw-r--r-- | board/mpl/common/pci.c | 40 | 
1 files changed, 32 insertions, 8 deletions
| diff --git a/board/mpl/common/pci.c b/board/mpl/common/pci.c index a26f542eb..692930b41 100644 --- a/board/mpl/common/pci.c +++ b/board/mpl/common/pci.c @@ -65,21 +65,22 @@ void pci_pip405_write_regs(struct pci_controller *hose, pci_dev_t dev,  static void pci_pip405_fixup_irq(struct pci_controller *hose, pci_dev_t dev)  {  	unsigned char int_line = 0xff; +	unsigned char pin;  	/*  	 * Write pci interrupt line register  	 */  	if(PCI_DEV(dev)==0) /* Device0 = PPC405 -> skip */  		return; -	if(PCI_FUNC(dev)==0) -	{ -		/* assuming all function 0 are using their INTA# Pin*/ -		int_line=PCI_IRQ_VECTOR(dev); -		pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line); +	pci_hose_read_config_byte(hose, dev, PCI_INTERRUPT_PIN, &pin); +	if ((pin == 0) || (pin > 4)) +	    return; + +	int_line = ((PCI_DEV(dev) + (pin-1) + 10) % 4) + 28; +	pci_hose_write_config_byte(hose, dev, PCI_INTERRUPT_LINE, int_line);  #ifdef DEBUG -		printf("Fixup IRQ: dev %d (%x) int line %d 0x%x\n", -		       PCI_DEV(dev),dev,int_line,int_line); +	printf("Fixup IRQ: dev %d (%x) int line %d 0x%x\n", +	       PCI_DEV(dev),dev,int_line,int_line);  #endif -	}  }  extern void pci_405gp_init(struct pci_controller *hose); @@ -90,11 +91,34 @@ static struct pci_controller hose = {    fixup_irq: pci_pip405_fixup_irq,  }; + +static void reloc_pci_cfg_table(struct pci_config_table *table) +{ +	DECLARE_GLOBAL_DATA_PTR; +	unsigned long addr; + +	for (; table && table->vendor; table++) { + 		addr = (ulong) (table->config_device) + gd->reloc_off; +#ifdef DEBUG +		printf ("device \"%d\": 0x%08lx => 0x%08lx\n", +				table->device, (ulong) (table->config_device), addr); +#endif +		table->config_device = +			(void (*)(struct pci_controller* hose, pci_dev_t dev, +			      struct pci_config_table *))addr; +		table->priv[0]+=gd->reloc_off; +	} +} +  void pci_init_board(void)  {  	/*we want the ptrs to RAM not flash (ie don't use init list)*/  	hose.fixup_irq    = pci_pip405_fixup_irq;  	hose.config_table = pci_pip405_config_table; +	reloc_pci_cfg_table(hose.config_table); +#ifdef DEBUG +	printf("Init PCI: fixup_irq=%p config_table=%p hose=%p\n",pci_pip405_fixup_irq,pci_pip405_config_table,hose); +#endif  	pci_405gp_init(&hose);  } |