linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [BK PATCH] fixes for 2.6.0-test9
@ 2003-10-30  0:48 Greg KH
  2003-10-30  0:50 ` [PATCH] " Greg KH
  0 siblings, 1 reply; 4+ messages in thread
From: Greg KH @ 2003-10-30  0:48 UTC (permalink / raw)
  To: torvalds; +Cc: linux-kernel

Hi,

Here are 3 small fixes for 2.6.0-test9.  They fix a problem on Alphas on
boot time, remove some compiler warnings in some I2C drivers, and
disable a USB driver when building for SMP as the locking in it is all
messed up right now.

Please pull from:
	bk://kernel.bkbits.net/gregkh/linux/pci-2.6

thanks,

greg k-h

p.s. I'll send these as patches in response to this email to lkml for
those who want to see them.


 drivers/media/video/bt832.c      |    2 --
 drivers/media/video/saa5249.c    |    2 --
 drivers/media/video/tuner-3036.c |    2 --
 drivers/pci/setup-bus.c          |   30 +++++++++++++++++++++---------
 drivers/usb/serial/Kconfig       |    2 +-
 5 files changed, 22 insertions(+), 16 deletions(-)
-----


Greg Kroah-Hartman:
  o USB: don't build the whiteheat driver if on SMP as the locking is all messed up
  o I2C: remove some MOD_INC and MOD_DEC usages that are not needed anymore

Ivan Kokshaysky:
  o PCI: fix bug in pci_setup_bridge()


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

* [PATCH] fixes for 2.6.0-test9
  2003-10-30  0:48 [BK PATCH] fixes for 2.6.0-test9 Greg KH
@ 2003-10-30  0:50 ` Greg KH
  2003-10-30  0:50   ` Greg KH
  0 siblings, 1 reply; 4+ messages in thread
From: Greg KH @ 2003-10-30  0:50 UTC (permalink / raw)
  To: linux-kernel

ChangeSet 1.1384, 2003/10/29 15:20:38-08:00, ink@jurassic.park.msu.ru

[PATCH] PCI: fix bug in pci_setup_bridge()

This bug prevents Alphas with older firmware from booting if there
is a card with PCI-PCI bridge that supports 32-bit IO.
This has happened on AS2100 with a quad-tulip card, for example:
 - initially, the I/O window of 21152 bridge was 0x10000-0x10fff,
   as set up by firmware;
 - pci_setup_bridge() is going to change this, say, to 0xa000-0xafff:
   first, it updates PCI_IO_BASE_UPPER16 and PCI_IO_LIMIT_UPPER16
   registers, so that IO window temporarily is at 0x0000-0x0fff,
   which effectively blocks up all legacy IO ports in the lower
   4K range, such as serial, floppy, RTC an so on;
   does debugging printk - machine dies here with recursive
   machine checks as the serial console has gone.

Moving (or disabling) the debugging printk is not a solution -
there is possibility that timer interrupt (which might access RTC
ports) occurs between writes to lower and upper parts of the
base/limit registers.

The patch temporarily disables the IO window of the bridge by
setting PCI_IO_BASE_UPPER16 > PCI_IO_LIMIT_UPPER16 before doing
an update. It's safe, as we don't have any active IO behind
the bridge at this point. Also, it's a NOP for bridges with
16-bit-only IO.
Similar (but simpler, as we always clear upper 32 bits) fix
for 64-bit prefetchable MMIO range.


 drivers/pci/setup-bus.c |   30 +++++++++++++++++++++---------
 1 files changed, 21 insertions(+), 9 deletions(-)


diff -Nru a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
--- a/drivers/pci/setup-bus.c	Wed Oct 29 16:45:17 2003
+++ b/drivers/pci/setup-bus.c	Wed Oct 29 16:45:17 2003
@@ -132,13 +132,19 @@
    PCI-to-PCI Bridge Architecture Specification rev. 1.1 (1998)
    requires that if there is no I/O ports or memory behind the
    bridge, corresponding range must be turned off by writing base
-   value greater than limit to the bridge's base/limit registers.  */
+   value greater than limit to the bridge's base/limit registers.
+
+   Note: care must be taken when updating I/O base/limit registers
+   of bridges which support 32-bit I/O. This update requires two
+   config space writes, so it's quite possible that an I/O window of
+   the bridge will have some undesirable address (e.g. 0) after the
+   first write. Ditto 64-bit prefetchable MMIO.  */
 static void __devinit
 pci_setup_bridge(struct pci_bus *bus)
 {
 	struct pci_dev *bridge = bus->self;
 	struct pci_bus_region region;
-	u32 l;
+	u32 l, io_upper16;
 
 	DBGC((KERN_INFO "PCI: Bus %d, bridge: %s\n",
 			bus->number, pci_name(bridge)));
@@ -151,20 +157,22 @@
 		l |= (region.start >> 8) & 0x00f0;
 		l |= region.end & 0xf000;
 		/* Set up upper 16 bits of I/O base/limit. */
-		pci_write_config_word(bridge, PCI_IO_BASE_UPPER16,
-				      region.start >> 16);
-		pci_write_config_word(bridge, PCI_IO_LIMIT_UPPER16,
-				      region.end >> 16);
+		io_upper16 = (region.end & 0xffff0000) | (region.start >> 16);
 		DBGC((KERN_INFO "  IO window: %04lx-%04lx\n",
 				region.start, region.end));
 	}
 	else {
 		/* Clear upper 16 bits of I/O base/limit. */
-		pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0);
+		io_upper16 = 0;
 		l = 0x00f0;
 		DBGC((KERN_INFO "  IO window: disabled.\n"));
 	}
+	/* Temporarily disable the I/O range before updating PCI_IO_BASE. */
+	pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, 0x0000ffff);
+	/* Update lower 16 bits of I/O base/limit. */
 	pci_write_config_dword(bridge, PCI_IO_BASE, l);
+	/* Update upper 16 bits of I/O base/limit. */
+	pci_write_config_dword(bridge, PCI_IO_BASE_UPPER16, io_upper16);
 
 	/* Set up the top and bottom of the PCI Memory segment
 	   for this bus. */
@@ -181,8 +189,9 @@
 	}
 	pci_write_config_dword(bridge, PCI_MEMORY_BASE, l);
 
-	/* Clear out the upper 32 bits of PREF base/limit. */
-	pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, 0);
+	/* Clear out the upper 32 bits of PREF limit.
+	   If PCI_PREF_BASE_UPPER32 was non-zero, this temporarily
+	   disables PREF range, which is ok. */
 	pci_write_config_dword(bridge, PCI_PREF_LIMIT_UPPER32, 0);
 
 	/* Set up PREF base/limit. */
@@ -198,6 +207,9 @@
 		DBGC((KERN_INFO "  PREFETCH window: disabled.\n"));
 	}
 	pci_write_config_dword(bridge, PCI_PREF_MEMORY_BASE, l);
+
+	/* Clear out the upper 32 bits of PREF base. */
+	pci_write_config_dword(bridge, PCI_PREF_BASE_UPPER32, 0);
 
 	/* Check if we have VGA behind the bridge.
 	   Enable ISA in either case (FIXME!). */


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

* Re: [PATCH] fixes for 2.6.0-test9
  2003-10-30  0:50 ` [PATCH] " Greg KH
@ 2003-10-30  0:50   ` Greg KH
  2003-10-30  0:50     ` Greg KH
  0 siblings, 1 reply; 4+ messages in thread
From: Greg KH @ 2003-10-30  0:50 UTC (permalink / raw)
  To: linux-kernel

ChangeSet 1.1385, 2003/10/29 16:04:38-08:00, greg@kroah.com

[PATCH] I2C: remove some MOD_INC and MOD_DEC usages that are not needed anymore.


 drivers/media/video/bt832.c      |    2 --
 drivers/media/video/saa5249.c    |    2 --
 drivers/media/video/tuner-3036.c |    2 --
 3 files changed, 6 deletions(-)


diff -Nru a/drivers/media/video/bt832.c b/drivers/media/video/bt832.c
--- a/drivers/media/video/bt832.c	Wed Oct 29 16:45:13 2003
+++ b/drivers/media/video/bt832.c	Wed Oct 29 16:45:13 2003
@@ -187,7 +187,6 @@
         t->client.data = t;
         i2c_attach_client(&t->client);
 
-	MOD_INC_USE_COUNT;
 	if(! bt832_init(&t->client)) {
 		bt832_detach(&t->client);
 		return -1;
@@ -210,7 +209,6 @@
 	printk("bt832: detach.\n");
 	i2c_detach_client(client);
 	kfree(t);
-	MOD_DEC_USE_COUNT;
 	return 0;
 }
 
diff -Nru a/drivers/media/video/saa5249.c b/drivers/media/video/saa5249.c
--- a/drivers/media/video/saa5249.c	Wed Oct 29 16:45:13 2003
+++ b/drivers/media/video/saa5249.c	Wed Oct 29 16:45:13 2003
@@ -214,7 +214,6 @@
 	}
 	t->client = client;
 	i2c_attach_client(client);
-	MOD_INC_USE_COUNT;
 	return 0;
 }
 
@@ -237,7 +236,6 @@
 	kfree(vd->priv);
 	kfree(vd);
 	kfree(client);
-	MOD_DEC_USE_COUNT;
 	return 0;
 }
 
diff -Nru a/drivers/media/video/tuner-3036.c b/drivers/media/video/tuner-3036.c
--- a/drivers/media/video/tuner-3036.c	Wed Oct 29 16:45:13 2003
+++ b/drivers/media/video/tuner-3036.c	Wed Oct 29 16:45:13 2003
@@ -134,7 +134,6 @@
 	printk("tuner: SAB3036 found, status %02x\n", tuner_getstatus(client));
 
         i2c_attach_client(client);
-	MOD_INC_USE_COUNT;
 
 	if (i2c_master_send(client, buffer, 2) != 2)
 		printk("tuner: i2c i/o error 1\n");
@@ -148,7 +147,6 @@
 static int 
 tuner_detach(struct i2c_client *c)
 {
-	MOD_DEC_USE_COUNT;
 	return 0;
 }
 


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

* Re: [PATCH] fixes for 2.6.0-test9
  2003-10-30  0:50   ` Greg KH
@ 2003-10-30  0:50     ` Greg KH
  0 siblings, 0 replies; 4+ messages in thread
From: Greg KH @ 2003-10-30  0:50 UTC (permalink / raw)
  To: linux-kernel

ChangeSet 1.1386, 2003/10/29 16:04:55-08:00, greg@kroah.com

[PATCH] USB: don't build the whiteheat driver if on SMP as the locking is all messed up.


 drivers/usb/serial/Kconfig |    2 +-
 1 files changed, 1 insertion(+), 1 deletion(-)


diff -Nru a/drivers/usb/serial/Kconfig b/drivers/usb/serial/Kconfig
--- a/drivers/usb/serial/Kconfig	Wed Oct 29 16:45:09 2003
+++ b/drivers/usb/serial/Kconfig	Wed Oct 29 16:45:09 2003
@@ -73,7 +73,7 @@
 
 config USB_SERIAL_WHITEHEAT
 	tristate "USB ConnectTech WhiteHEAT Serial Driver"
-	depends on USB_SERIAL
+	depends on USB_SERIAL && BROKEN_ON_SMP
 	help
 	  Say Y here if you want to use a ConnectTech WhiteHEAT 4 port
 	  USB to serial converter device.


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

end of thread, other threads:[~2003-10-30  0:52 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-10-30  0:48 [BK PATCH] fixes for 2.6.0-test9 Greg KH
2003-10-30  0:50 ` [PATCH] " Greg KH
2003-10-30  0:50   ` Greg KH
2003-10-30  0:50     ` Greg KH

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