From 371bb6f94416223be7b002fe7215ebeeba752af1 Mon Sep 17 00:00:00 2001 From: mb Date: Wed, 20 Feb 2008 17:56:24 +0000 Subject: bcm47xx: Add driver for the SSB Gigabit Ethernet core. It doesn't work, yet, but let's commit what we have. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@10509 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- .../linux/brcm47xx/files/arch/mips/bcm947xx/irq.c | 23 ++++++++++++++++++++++ .../brcm47xx/files/arch/mips/bcm947xx/setup.c | 14 +++++++++++++ 2 files changed, 37 insertions(+) (limited to 'target/linux/brcm47xx/files/arch') diff --git a/target/linux/brcm47xx/files/arch/mips/bcm947xx/irq.c b/target/linux/brcm47xx/files/arch/mips/bcm947xx/irq.c index 56d4c84b7..c6b85a959 100644 --- a/target/linux/brcm47xx/files/arch/mips/bcm947xx/irq.c +++ b/target/linux/brcm47xx/files/arch/mips/bcm947xx/irq.c @@ -1,5 +1,6 @@ /* * Copyright (C) 2004 Florian Schirmer (jolt@tuxbox.org) + * Copyright (C) 2008 Michael Buesch * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -29,12 +30,18 @@ #include #include #include +#include +#include #include #include #include #include + +extern struct ssb_bus ssb; + + void plat_irq_dispatch(void) { u32 cause; @@ -61,3 +68,19 @@ void __init arch_init_irq(void) { mips_cpu_irq_init(); } + +int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin) +{ + int res; + + res = ssb_pcibios_map_irq(dev, slot, pin); + if (res < 0) { + printk(KERN_ALERT "PCI: Failed to map IRQ of device %s\n", + pci_name((struct pci_dev *)dev)); + return 0; + } + /* IRQ-0 and IRQ-1 are software interrupts. */ + WARN_ON((res == 0) || (res == 1)); + + return res; +} diff --git a/target/linux/brcm47xx/files/arch/mips/bcm947xx/setup.c b/target/linux/brcm47xx/files/arch/mips/bcm947xx/setup.c index 85ff1cf81..5856d8fc6 100644 --- a/target/linux/brcm47xx/files/arch/mips/bcm947xx/setup.c +++ b/target/linux/brcm47xx/files/arch/mips/bcm947xx/setup.c @@ -47,6 +47,20 @@ extern void bcm47xx_time_init(void); struct ssb_bus ssb; + +int pcibios_plat_dev_init(struct pci_dev *dev) +{ + int err; + + err = ssb_pcibios_plat_dev_init(dev); + if (err) { + printk(KERN_ALERT "PCI: Failed to init device %s\n", + pci_name(dev)); + } + + return err; +} + static void bcm47xx_machine_restart(char *command) { printk(KERN_ALERT "Please stand by while rebooting the system...\n"); -- cgit v1.2.3