
This commit adapts the files that were derived from PIBS (PowerPC Initialization and Boot Software) codeto using SPDX License Identifiers. So far, SPDX has not assigned an official License ID for the PIBS license yet, so this should be considered preliminary. Note that the following files contained incorrect license information: arch/powerpc/cpu/ppc4xx/4xx_uart.c arch/powerpc/cpu/ppc4xx/start.S arch/powerpc/include/asm/ppc440.h These files included, in addition to the GPL-2.0 / ibm-pibs dual license as inherited from PIBS, a GPL-2.0+ license header which was obviously incorrect. This has been removed. Signed-off-by: Wolfgang Denk <wd@denx.de> Cc: Stefan Roese <sr@denx.de> Signed-off-by: Wolfgang Denk <wd@denx.de> Conflicts: Licenses/README Acked-by: Stefan Roese <sr@denx.de>
91 lines
2.1 KiB
C
91 lines
2.1 KiB
C
/*
|
|
* SPDX-License-Identifier: GPL-2.0 ibm-pibs
|
|
*/
|
|
/*
|
|
* Adapted for PIP405 03.07.01
|
|
* Denis Peter, MPL AG Switzerland, d.peter@mpl.ch
|
|
*
|
|
* TODO: Clean-up
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <pci.h>
|
|
#include "isa.h"
|
|
|
|
#ifdef CONFIG_405GP
|
|
#ifdef CONFIG_PCI
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
#include "piix4_pci.h"
|
|
#include "pci_parts.h"
|
|
|
|
void pci_pip405_write_regs(struct pci_controller *hose, pci_dev_t dev,
|
|
struct pci_config_table *entry)
|
|
{
|
|
struct pci_pip405_config_entry *table;
|
|
int i;
|
|
|
|
table = (struct pci_pip405_config_entry*) entry->priv[0];
|
|
|
|
for (i=0; table[i].width; i++)
|
|
{
|
|
#ifdef DEBUG
|
|
printf("Reg 0x%02X Value 0x%08lX Width %02d written\n",
|
|
table[i].index, table[i].val, table[i].width);
|
|
#endif
|
|
|
|
switch(table[i].width)
|
|
{
|
|
case 1: pci_hose_write_config_byte(hose, dev, table[i].index, table[i].val); break;
|
|
case 2: pci_hose_write_config_word(hose, dev, table[i].index, table[i].val); break;
|
|
case 4: pci_hose_write_config_dword(hose, dev, table[i].index, table[i].val); break;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
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;
|
|
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);
|
|
#endif
|
|
}
|
|
|
|
extern void pci_405gp_init(struct pci_controller *hose);
|
|
|
|
|
|
static struct pci_controller hose = {
|
|
config_table: pci_pip405_config_table,
|
|
fixup_irq: pci_pip405_fixup_irq,
|
|
};
|
|
|
|
|
|
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;
|
|
#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);
|
|
}
|
|
|
|
#endif /* CONFIG_PCI */
|
|
#endif /* CONFIG_405GP */
|