pci-ip27.c 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. /*
  2. * This file is subject to the terms and conditions of the GNU General Public
  3. * License. See the file "COPYING" in the main directory of this archive
  4. * for more details.
  5. *
  6. * Copyright (C) 2003 Christoph Hellwig (hch@lst.de)
  7. * Copyright (C) 1999, 2000, 04 Ralf Baechle (ralf@linux-mips.org)
  8. * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
  9. */
  10. #include <linux/io.h>
  11. #include <asm/sn/addrs.h>
  12. #include <asm/sn/types.h>
  13. #include <asm/sn/klconfig.h>
  14. #include <asm/sn/agent.h>
  15. #include <asm/sn/ioc3.h>
  16. #include <asm/pci/bridge.h>
  17. #ifdef CONFIG_NUMA
  18. int pcibus_to_node(struct pci_bus *bus)
  19. {
  20. struct bridge_controller *bc = BRIDGE_CONTROLLER(bus);
  21. return bc->nasid;
  22. }
  23. EXPORT_SYMBOL(pcibus_to_node);
  24. #endif /* CONFIG_NUMA */
  25. static void ip29_fixup_phy(struct pci_dev *dev)
  26. {
  27. int nasid = pcibus_to_node(dev->bus);
  28. u32 sid;
  29. if (nasid != 1)
  30. return; /* only needed on second module */
  31. /* enable ethernet PHY on IP29 systemboard */
  32. pci_read_config_dword(dev, PCI_SUBSYSTEM_VENDOR_ID, &sid);
  33. if (sid == (PCI_VENDOR_ID_SGI | (IOC3_SUBSYS_IP29_SYSBOARD) << 16))
  34. REMOTE_HUB_S(nasid, MD_LED0, 0x09);
  35. }
  36. DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_IOC3,
  37. ip29_fixup_phy);