* chaos PCI config access for 2.4 kernels
@ 2000-11-24 7:29 Michel Lanners
0 siblings, 0 replies; only message in thread
From: Michel Lanners @ 2000-11-24 7:29 UTC (permalink / raw)
To: Benjamin Herrenschmidt, Paul Mackerras; +Cc: linuxppc-dev
[-- Attachment #1: Type: TEXT/plain, Size: 1016 bytes --]
Hi all,
Below is a patch that fills in the missing parts for chaos host bridge
PCI config accesses.
The patch is against Paul's devel tree rsync'ed last night. It does
compile witout warnings, but I've been unable to verify its operation
since Paul's kernels continue to refuse booting on my machine.
The patch however was working on the same basis in benh's 2.5 kernel,
and detected both control and planb on my chaos, without blowing
everything up ;-)
Whoever has a machine with a chaos hostbridge (7300/7500/7600/8500/8600)
please test, and report back!
Cheers, and happy testing ;-)
Michel
PS If anyone's interested, I have the patch also for benh's 2.5 kernel..
-------------------------------------------------------------------------
Michel Lanners | " Read Philosophy. Study Art.
23, Rue Paul Henkes | Ask Questions. Make Mistakes.
L-1710 Luxembourg |
email mlan@cpu.lu |
http://www.cpu.lu/~mlan | Learn Always. "
[-- Attachment #2: 2.4-paulus-chaos.diff --]
[-- Type: TEXT/plain, Size: 3350 bytes --]
--- /mnt/r4/usr/src/linux-2.4.paul/arch/ppc/kernel/pmac_pci.c Wed Nov 22 01:30:11 2000
+++ linux-2.4.0-test11/arch/ppc/kernel/pmac_pci.c Fri Nov 24 00:46:16 2000
@@ -30,6 +30,7 @@
#undef DEBUG
static void add_bridges(struct device_node *dev);
+static int chaos_validate_dev(struct pci_dev *dev);
/* XXX Could be per-controller, but I don't think we risk anything by
* assuming we won't have both UniNorth and Bandit */
@@ -93,12 +94,17 @@
}
/*
- * Apple MacRISC (UniNorth, Bandit) PCI controllers.
+ * Apple MacRISC (UniNorth, Bandit, Chaos) PCI controllers.
*
* The "Bandit" version is present in all early PCI PowerMacs,
* and up to the first ones using Grackle. Some machines may
* have 2 bandit controllers (2 PCI busses).
*
+ * "Chaos" is used in some "Bandit"-type machines as a bridge
+ * for the separate display bus. It is accessed the same
+ * way as bandit, but cannot be probed for devices. It therefore
+ * has its own config access functions.
+ *
* The "UniNorth" version is present in all Core99 machines
* (iBook, G4, new IMacs, and all the recent Apple machines).
* It contains 3 controllers in one ASIC.
@@ -196,44 +202,30 @@
* based on what we find in OF device tree
*/
-static int chaos_config_read_byte(struct pci_dev *dev, int offset, u8 *val)
-{
- return PCIBIOS_DEVICE_NOT_FOUND;
-}
-
-static int chaos_config_read_word(struct pci_dev *dev, int offset, u16 *val)
-{
- return PCIBIOS_DEVICE_NOT_FOUND;
-}
-
-static int chaos_config_read_dword(struct pci_dev *dev, int offset, u32 *val)
-{
- return PCIBIOS_DEVICE_NOT_FOUND;
-}
-
-static int chaos_config_write_byte(struct pci_dev *dev, int offset, u8 val)
-{
- return PCIBIOS_DEVICE_NOT_FOUND;
-}
-
-static int chaos_config_write_word(struct pci_dev *dev, int offset, u16 val)
-{
- return PCIBIOS_DEVICE_NOT_FOUND;
+#define CHAOS_PCI_OP(rw, size, type, op, op2) \
+static int __pmac \
+chaos_##rw##_config_##size(struct pci_dev *dev, int off, type val) \
+{ \
+ if (chaos_validate_dev(dev) != PCIBIOS_SUCCESSFUL) \
+ return PCIBIOS_DEVICE_NOT_FOUND; \
+ return macrisc_##rw##_config_##size(dev, off, val); \
}
-static int chaos_config_write_dword(struct pci_dev *dev, int offset, u32 val)
-{
- return PCIBIOS_DEVICE_NOT_FOUND;
-}
+CHAOS_PCI_OP(read, byte, u8 *, in_8, x)
+CHAOS_PCI_OP(read, word, u16 *, in_le16, x)
+CHAOS_PCI_OP(read, dword, u32 *, in_le32, x)
+CHAOS_PCI_OP(write, byte, u8, out_8, in_8)
+CHAOS_PCI_OP(write, word, u16, out_le16, in_le16)
+CHAOS_PCI_OP(write, dword, u32, out_le32, in_le32)
static struct pci_ops chaos_pci_ops =
{
- chaos_config_read_byte,
- chaos_config_read_word,
- chaos_config_read_dword,
- chaos_config_write_byte,
- chaos_config_write_word,
- chaos_config_write_dword
+ chaos_read_config_byte,
+ chaos_read_config_word,
+ chaos_read_config_dword,
+ chaos_write_config_byte,
+ chaos_write_config_word,
+ chaos_write_config_dword
};
@@ -284,6 +276,17 @@
out_le32((volatile unsigned int *)bp->cfg_data, magic);
printk(KERN_INFO "Cache coherency enabled for bandit/PSX at %08lx\n",
bp->io_base_phys);
+}
+
+
+/*
+ * Verifiy that a specific (bus, dev_fn) exists on chaos
+ */
+static int chaos_validate_dev(struct pci_dev *dev)
+{
+ if(pci_device_to_OF_node(dev) == 0)
+ return PCIBIOS_DEVICE_NOT_FOUND;
+ return PCIBIOS_SUCCESSFUL;
}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2000-11-24 7:29 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2000-11-24 7:29 chaos PCI config access for 2.4 kernels Michel Lanners
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).