linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* AMD756VIPER PCI IRQ Routing Patch (Need Additional Tests)
@ 2001-06-19 18:30 Jhon H. Caicedo
  2001-06-21 23:21 ` Jeff Garzik
  0 siblings, 1 reply; 3+ messages in thread
From: Jhon H. Caicedo @ 2001-06-19 18:30 UTC (permalink / raw)
  To: linux-kernel

[-- Attachment #1: Type: TEXT/PLAIN, Size: 1285 bytes --]


Hi,

I have been working on a small patch to add support for AMD756 PCI IRQ
Routing with linux-2.4.5

This has been tested with a Gigabyte 7IXE 7F board and several PCI cards,
including a SMC-Lucent PCI Cardbus Bridge which doesn't get an IRQ
assigned by the BIOS.

If anybody has a board based on this chipset I would appreciate further
testing and advise about the patch.

In this alpha version, I left two printk() lines to get information
about the IRQ settings.

You should get an output like the following:

[root@klingon ~]# dmesg | grep 756
PCI: Using IRQ router AMD756 VIPER [1022/740b] at 00:07.3
AMD756: dev 104c:ac1c, router pirq : 4 get irq :  0
AMD756: dev 104c:ac1c, router pirq : 4 get irq :  0
AMD756: dev 10ec:8029, router pirq : 3 get irq : 10
AMD756: dev 104c:ac1c, router pirq : 4 get irq :  0
AMD756: dev 104c:ac1c, router pirq : 4 SET irq :  5
AMD756: dev 104c:ac1c, router pirq : 4 get irq :  5
AMD756: dev 11fe:0005, router pirq : 1 get irq : 12

Thanks.

diff -u linux-2.4.5/arch/i386/kernel/pci-irq.c \
  linux/arch/i386/kernel/pci-irq.c > linux-2.4.5_amd756-pci-routing-alpha1.patch

--
Jhon H. Caicedo O. <jhcaiced@osso.org.co>
Observatorio Sismológico del SurOccidente O.S.S.O
http://www.osso.org.co
Cali - Colombia

[-- Attachment #2: Type: TEXT/PLAIN, Size: 2033 bytes --]

--- linux-2.4.5/arch/i386/kernel/pci-irq.c	Wed May 16 12:25:39 2001
+++ linux/arch/i386/kernel/pci-irq.c	Tue Jun 19 13:20:47 2001
@@ -391,6 +391,56 @@
 	return 1;
 }
 
+/*
+ * Jun/19/2001 Support for AMD756 PCI Router (Alpha Release)
+ * Jhon H. Caicedo <jhcaiced@osso.org.co>
+ * The AMD756 pirq rules are nibble-based
+ * offset 0x56 0-3 PIRQA  4-7  PIRQB
+ * offset 0x57 0-3 PIRQC  4-7  PIRQD
+ */
+static int pirq_amd756_get(struct pci_dev *router, struct pci_dev *dev, int pirq)
+{
+	u8 irq_value;
+	u8 irq;
+	
+	if (pirq < 5)
+	{
+		if (pirq < 3)
+			pci_read_config_byte(router, 0x56, &irq_value);
+		else
+			pci_read_config_byte(router, 0x57, &irq_value);
+	    if (pirq & 1)
+	    	irq = irq_value & 15;
+	    else
+	    	irq = irq_value >> 4;
+		printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d get irq : %2d\n",
+			dev->vendor, dev->device, pirq, irq);
+		return irq;
+	}
+    return 0;
+}
+
+static int pirq_amd756_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
+{
+	u8 irq_value;
+	u8 offset;
+
+	printk(KERN_INFO "AMD756: dev %04x:%04x, router pirq : %d SET irq : %2d\n", 
+		dev->vendor, dev->device, pirq, irq);
+	
+	if (pirq < 3)
+		offset = 0x56;
+	else
+		offset = 0x57;
+	pci_read_config_byte(router, offset, &irq_value);
+	if (pirq & 1)
+		irq_value = (irq_value & 0xF0) | irq;
+	else
+		irq_value = (irq_value & 0x0F) | (irq << 4);
+	pci_write_config_byte(router, offset, irq_value);
+	return 1;
+}
+
 #ifdef CONFIG_PCI_BIOS
 
 static int pirq_bios_set(struct pci_dev *router, struct pci_dev *dev, int pirq, int irq)
@@ -426,6 +476,8 @@
 	{ "VLSI 82C534", PCI_VENDOR_ID_VLSI, PCI_DEVICE_ID_VLSI_82C534, pirq_vlsi_get, pirq_vlsi_set },
 	{ "ServerWorks", PCI_VENDOR_ID_SERVERWORKS, PCI_DEVICE_ID_SERVERWORKS_OSB4,
 	  pirq_serverworks_get, pirq_serverworks_set },
+	{ "AMD756 VIPER", PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_VIPER_740B,
+		pirq_amd756_get, pirq_amd756_set },
 
 	{ "default", 0, 0, NULL, NULL }
 };

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: AMD756VIPER PCI IRQ Routing Patch (Need Additional Tests)
  2001-06-19 18:30 AMD756VIPER PCI IRQ Routing Patch (Need Additional Tests) Jhon H. Caicedo
@ 2001-06-21 23:21 ` Jeff Garzik
  2001-06-22  1:20   ` Jhon H. Caicedo
  0 siblings, 1 reply; 3+ messages in thread
From: Jeff Garzik @ 2001-06-21 23:21 UTC (permalink / raw)
  To: Jhon H. Caicedo; +Cc: linux-kernel

Can you use read_config_nybble and write_config_nybble, in your patch?
-- 
Jeff Garzik      | Andre the Giant has a posse.
Building 1024    |
MandrakeSoft     |

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: AMD756VIPER PCI IRQ Routing Patch (Need Additional Tests)
  2001-06-21 23:21 ` Jeff Garzik
@ 2001-06-22  1:20   ` Jhon H. Caicedo
  0 siblings, 0 replies; 3+ messages in thread
From: Jhon H. Caicedo @ 2001-06-22  1:20 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Jhon H. Caicedo, linux-kernel


Hi,

Thanks for your comment,

I haven't used read_config_nybble, write_config_nybble in order to use the
same code with this kernel patch (2.4.X) and a patch for pcmcia-cs
(pci_fixup.c) to use with linux 2.2.X

I think it would be better to rewrite the patch using the nybble functions
and "import" the nybble functions to the pcmcia-cs code, I will work on
it tomorrow and send it to the kernel mailing list.

Again, Thanks for the comment and for take the time to review the code.

Best wishes,

On Thu, 21 Jun 2001, Jeff Garzik wrote:

> Can you use read_config_nybble and write_config_nybble, in your patch?
>

-- 
--
Jhon H. Caicedo O. <jhcaiced@osso.org.co>
Observatorio Sismológico del SurOccidente O.S.S.O
http://www.osso.org.co
Cali - Colombia


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2001-06-22  1:21 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-06-19 18:30 AMD756VIPER PCI IRQ Routing Patch (Need Additional Tests) Jhon H. Caicedo
2001-06-21 23:21 ` Jeff Garzik
2001-06-22  1:20   ` Jhon H. Caicedo

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).