lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Fri, 6 Oct 2006 14:05:35 +0200 (CEST)
From:	Thomas Hoehn <thomas.hoehn@...cent.com>
To:	linux-kernel@...r.kernel.org
Subject: PATCH] Perle multimodem card (PCI-RAS) detection, kernel 2.6.18

Hi there,

this patch is to get the Perle quad-modem PCI card (PCI-RAS4) detected by
current serial driver code in 2.6 kernel. It may also get the PCI-RAS8
(Perle 8-port modem PIC card) running, but I can't guarantee as I only
have a PCI-RAS4 for testing.

Here are the pci infos about the card (lspci -vn):

0000:02:07.0 0700: 10b5:9030 (prog-if 02)
         Subsystem: 155f:f001
         Flags: medium devsel, IRQ 10
         Memory at d0100400 (32-bit, non-prefetchable) [size=128]
         I/O ports at 3800 [size=128]
         I/O ports at 3400 [size=32]

i.e.:
Vendor ID: 10b5 (PLX Technology, Inc.)
Device ID: 9030 (PLX PCI <-> IOBus Bridge Hot Swap)
Subvendor ID: 155f (Perle Systems Ltd)
Subdevice ID: f001 (PCI-RAS4), f010 (PCI-RAS8)
Uses BAR: 2 (IO port 0x3400)

The PCI card has a TI TL16C754BPN (Texas Instruments) Quad-UART with 64 Byte
Rx/Tx-FIFO onboard, which is compatible to ST16654 so it should be detected
by the serial driver code.

Actually the autoconf() in 8250.c bails out because the IER test fails.
It turns out that bit 4 is set on my card regardless what is written to IER.

Looking in the TL16C754B datasheet gives the clue that EFR is involved
(see http://focus.ti.com/docs/prod/folders/print/tl16c754b.html, pdf p.30):
"NOTE: IER[7:4] can only be modified if EFR[4] is set, i.e. EFR[4] is a write
enable:". So I and'ed the IER read-back-value in scratch2 and scratch3 with
0x0f in order to test only bit 0-3 (but I'm not sure if that is fine for
general case). Whith that UART type ST16654 is found.

It was also neccessary to add vendor/device ID's for PLX chip 9030 and Perles
subsystem components in pci_ids.h.

The "(Maximum) number of 8250/16550 serial ports" in the kernel config should
also be set properly (4 internal + 4/8 on Perle card).

Would be glad if someone could test and confirm the patch below.

Regards,

Thomas Hoehn
Avocent Germany
(formerly Cyclades)

Web: www.avocent.com
Email: thomas.hoehn@...cent.com

=== 8< ============================================================================

diff -ur linux-2.6.18.orig/drivers/serial/8250.c linux/drivers/serial/8250.c
--- linux-2.6.18.orig/drivers/serial/8250.c	2006-09-20 05:42:06.000000000 +0200
+++ linux/drivers/serial/8250.c	2006-10-04 17:40:22.000000000 +0200
@@ -920,12 +920,12 @@
  #ifdef __i386__
  		outb(0xff, 0x080);
  #endif
-		scratch2 = serial_inp(up, UART_IER);
+		scratch2 = serial_inp(up, UART_IER) & 0x0f;
  		serial_outp(up, UART_IER, 0x0F);
  #ifdef __i386__
  		outb(0, 0x080);
  #endif
-		scratch3 = serial_inp(up, UART_IER);
+		scratch3 = serial_inp(up, UART_IER) & 0x0f;
  		serial_outp(up, UART_IER, scratch);
  		if (scratch2 != 0 || scratch3 != 0x0F) {
  			/*
diff -ur linux-2.6.18.orig/drivers/serial/8250_pci.c linux/drivers/serial/8250_pci.c
--- linux-2.6.18.orig/drivers/serial/8250_pci.c	2006-09-20 05:42:06.000000000 +0200
+++ linux/drivers/serial/8250_pci.c	2006-10-04 17:40:22.000000000 +0200
@@ -679,6 +679,13 @@
  	 */
  	{
  		.vendor		= PCI_VENDOR_ID_PLX,
+		.device		= PCI_DEVICE_ID_PLX_9030,
+		.subvendor	= PCI_SUBVENDOR_ID_PERLE,
+		.subdevice	= PCI_ANY_ID,
+		.setup		= pci_default_setup,
+	},
+	{
+		.vendor		= PCI_VENDOR_ID_PLX,
  		.device		= PCI_DEVICE_ID_PLX_9050,
  		.subvendor	= PCI_SUBVENDOR_ID_EXSYS,
  		.subdevice	= PCI_SUBDEVICE_ID_EXSYS_4055,
@@ -2353,6 +2360,15 @@
  		pbn_b2_2_115200 },

  	/*
+	 * Perle PCI-RAS cards
+	 */
+	{       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
+		PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS4,
+		0, 0, pbn_b2_4_921600 },
+	{       PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9030,
+		PCI_SUBVENDOR_ID_PERLE, PCI_SUBDEVICE_ID_PCI_RAS8,
+		0, 0, pbn_b2_8_921600 },
+	/*
  	 * These entries match devices with class COMMUNICATION_SERIAL,
  	 * COMMUNICATION_MODEM or COMMUNICATION_MULTISERIAL
  	 */
diff -ur linux-2.6.18.orig/include/linux/pci_ids.h linux/include/linux/pci_ids.h
--- linux-2.6.18.orig/include/linux/pci_ids.h	2006-09-20 05:42:06.000000000 +0200
+++ linux/include/linux/pci_ids.h	2006-10-04 17:41:37.000000000 +0200
@@ -948,6 +948,7 @@
  #define PCI_DEVICE_ID_PLX_R753		0x1152
  #define PCI_DEVICE_ID_PLX_OLITEC	0x1187
  #define PCI_DEVICE_ID_PLX_PCI200SYN	0x3196
+#define PCI_DEVICE_ID_PLX_9030          0x9030
  #define PCI_DEVICE_ID_PLX_9050		0x9050
  #define PCI_DEVICE_ID_PLX_9080		0x9080
  #define PCI_DEVICE_ID_PLX_GTEK_SERIAL2	0xa001
@@ -1961,6 +1962,10 @@

  #define PCI_VENDOR_ID_CHELSIO		0x1425

+#define PCI_SUBVENDOR_ID_PERLE          0x155f
+#define PCI_SUBDEVICE_ID_PCI_RAS4       0xf001
+#define PCI_SUBDEVICE_ID_PCI_RAS8       0xf010 
+

  #define PCI_VENDOR_ID_SYBA		0x1592
  #define PCI_DEVICE_ID_SYBA_2P_EPP	0x0782

=== 8< ============================================================================
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ