Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 89877e42827f16fa5f86b1df0c2860b1 > files > 2300

kernel-2.6.18-128.1.10.el5.src.rpm

From: Chris Snook <csnook@redhat.com>
Date: Mon, 11 Jun 2007 20:19:01 -0400
Subject: [serial] support PCI Express icom devices
Message-id: 20070612001901.GA19848@bernoulli.boston.redhat.com
O-Subject: [RHEL 5.2 PATCH] BZ 243806: support PCI Express icom devices
Bugzilla: 243806

Hi folks --

	This patch, written and tested by IBM, adds support for the new PCI
Express model of the icom adapter.  It also corrects an unsigned char
irq_number to unsigned int irq_number, which happened to work on older
systems, but causes an oops during rmmod on POWER6 systems that use PCI
Express and have more than 256 IRQs.  This change brings the driver in line
with the PCI core, which uses unsigned int throughout.  The patch is upstream
as of 2.6.22-rc3.

	This resolves BZ 243806, please ack.

	-- Chris

Acked-by: Alan Cox <alan@redhat.com>
Acked-by: Pete Zaitcev <zaitcev@redhat.com>

diff --git a/drivers/serial/icom.c b/drivers/serial/icom.c
index a3c00a2..5b0a8c0 100644
--- a/drivers/serial/icom.c
+++ b/drivers/serial/icom.c
@@ -98,6 +98,13 @@ static const struct pci_device_id icom_pci_table[] = {
 	      .subdevice = PCI_DEVICE_ID_IBM_ICOM_FOUR_PORT_MODEL,
 	      .driver_data = ADAPTER_V2,
 	 },
+	{
+	      .vendor = PCI_VENDOR_ID_IBM,
+	      .device = PCI_DEVICE_ID_IBM_ICOM_DEV_ID_2,
+	      .subvendor = PCI_VENDOR_ID_IBM,
+	      .subdevice = PCI_DEVICE_ID_IBM_ICOM_V2_ONE_PORT_RVX_ONE_PORT_MDM_PCIE,
+	      .driver_data = ADAPTER_V2,
+	 },
 	{}
 };
 
diff --git a/drivers/serial/icom.h b/drivers/serial/icom.h
index 798f1ef..43f03e0 100644
--- a/drivers/serial/icom.h
+++ b/drivers/serial/icom.h
@@ -258,7 +258,7 @@ struct icom_port {
 struct icom_adapter {
 	void __iomem * base_addr;
 	unsigned long base_addr_pci;
-	unsigned char irq_number;
+	unsigned int irq_number;
 	struct pci_dev *pci_dev;
 	struct icom_port port_info[4];
 	int index;
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index d0093fa..92f6066 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -469,6 +469,7 @@
 #define PCI_DEVICE_ID_IBM_ICOM_V2_TWO_PORTS_RVX		0x021A
 #define PCI_DEVICE_ID_IBM_ICOM_V2_ONE_PORT_RVX_ONE_PORT_MDM	0x0251
 #define PCI_DEVICE_ID_IBM_ICOM_FOUR_PORT_MODEL	0x252
+#define PCI_DEVICE_ID_IBM_ICOM_V2_ONE_PORT_RVX_ONE_PORT_MDM_PCIE	0x0361
 
 #define PCI_VENDOR_ID_COMPEX2		0x101a /* pci.ids says "AT&T GIS (NCR)" */
 #define PCI_DEVICE_ID_COMPEX2_100VG	0x0005