mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
	akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
	Alan Stern <stern@rowland.harvard.edu>
Subject: [19/55] USB: OHCI: fix another regression for NVIDIA controllers
Date: Fri, 05 Aug 2011 17:01:49 -0700	[thread overview]
Message-ID: <20110806000250.799221410@clark.kroah.org> (raw)
In-Reply-To: <20110806000257.GA25498@kroah.com>

2.6.32-longterm review patch.  If anyone has any objections, please let us know.

------------------

From: Alan Stern <stern@rowland.harvard.edu>

commit 6ea12a04d295235ed67010a09fdea58c949e3eb0 upstream.

The NVIDIA series of OHCI controllers continues to be troublesome.  A
few people using the MCP67 chipset have reported that even with the
most recent kernels, the OHCI controller fails to handle new
connections and spams the system log with "unable to enumerate USB
port" messages.  This is different from the other problems previously
reported for NVIDIA OHCI controllers, although it is probably related.

It turns out that the MCP67 controller does not like to be kept in the
RESET state very long.  After only a few seconds, it decides not to
work any more.  This patch (as1479) changes the PCI initialization
quirk code so that NVIDIA controllers are switched into the SUSPEND
state after 50 ms of RESET.  With no interrupts enabled and all the
downstream devices reset, and thus unable to send wakeup requests,
this should be perfectly safe (even for non-NVIDIA hardware).

The removal code in ohci-hcd hasn't been changed; it will still leave
the controller in the RESET state.  As a result, if someone unloads
ohci-hcd and then reloads it, the controller won't work again until
the system is rebooted.  If anybody complains about this, the removal
code can be updated similarly.

This fixes Bugzilla #22052.

Tested-by: Larry Finger <Larry.Finger@lwfinger.net>
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

---
 drivers/usb/host/pci-quirks.c |   28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

--- a/drivers/usb/host/pci-quirks.c
+++ b/drivers/usb/host/pci-quirks.c
@@ -34,6 +34,8 @@
 #define OHCI_INTRSTATUS		0x0c
 #define OHCI_INTRENABLE		0x10
 #define OHCI_INTRDISABLE	0x14
+#define OHCI_FMINTERVAL		0x34
+#define OHCI_HCR		(1 << 0)	/* host controller reset */
 #define OHCI_OCR		(1 << 3)	/* ownership change request */
 #define OHCI_CTRL_RWC		(1 << 9)	/* remote wakeup connected */
 #define OHCI_CTRL_IR		(1 << 8)	/* interrupt routing */
@@ -204,6 +206,32 @@ static void __devinit quirk_usb_handoff_
 
 	/* reset controller, preserving RWC (and possibly IR) */
 	writel(control & OHCI_CTRL_MASK, base + OHCI_CONTROL);
+	readl(base + OHCI_CONTROL);
+
+	/* Some NVIDIA controllers stop working if kept in RESET for too long */
+	if (pdev->vendor == PCI_VENDOR_ID_NVIDIA) {
+		u32 fminterval;
+		int cnt;
+
+		/* drive reset for at least 50 ms (7.1.7.5) */
+		msleep(50);
+
+		/* software reset of the controller, preserving HcFmInterval */
+		fminterval = readl(base + OHCI_FMINTERVAL);
+		writel(OHCI_HCR, base + OHCI_CMDSTATUS);
+
+		/* reset requires max 10 us delay */
+		for (cnt = 30; cnt > 0; --cnt) {	/* ... allow extra time */
+			if ((readl(base + OHCI_CMDSTATUS) & OHCI_HCR) == 0)
+				break;
+			udelay(1);
+		}
+		writel(fminterval, base + OHCI_FMINTERVAL);
+
+		/* Now we're in the SUSPEND state with all devices reset
+		 * and wakeups and interrupts disabled
+		 */
+	}
 
 	/*
 	 * disable interrupts



  parent reply	other threads:[~2011-08-06  0:07 UTC|newest]

Thread overview: 64+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-06  0:02 [00/55] 2.6.32.44-longterm review Greg KH
2011-08-06  0:01 ` [01/55] ASoC: Fix Blackfin I2S _pointer() implementation return in bounds values Greg KH
2011-08-06  0:01 ` [02/55] [media] v4l2-ioctl.c: prefill tuner type for g_frequency and g/s_tuner Greg KH
2011-08-06  0:01 ` [03/55] [media] pvrusb2: fix g/s_tuner support Greg KH
2011-08-06  0:01 ` [04/55] [media] bttv: fix s_tuner for radio Greg KH
2011-08-06  0:01 ` [05/55] gro: Only reset frag0 when skb can be pulled Greg KH
2011-08-06  0:01 ` [06/55] NFSv4.1: update nfs4_fattr_bitmap_maxsz Greg KH
2011-08-06  0:01 ` [07/55] SUNRPC: Fix a race between work-queue and rpc_killall_tasks Greg KH
2011-08-07 17:38   ` [Stable-review] " Ben Hutchings
2011-08-08 17:03     ` Greg KH
2011-08-08 18:07       ` Ben Hutchings
2011-08-06  0:01 ` [08/55] SUNRPC: Fix use of static variable in rpcb_getport_async Greg KH
2011-08-06  0:01 ` [09/55] si4713-i2c: avoid potential buffer overflow on si4713 Greg KH
2011-08-06  0:01 ` [10/55] hwmon: (max1111) Fix race condition causing NULL pointer exception Greg KH
2011-08-06  0:01 ` [11/55] bridge: send proper message_age in config BPDU Greg KH
2011-08-06  0:01 ` [12/55] davinci: DM365 EVM: fix video input mux bits Greg KH
2011-08-06  0:01 ` [13/55] libata: fix unexpectedly frozen port after ata_eh_reset() Greg KH
2011-08-06  0:01 ` [14/55] x86: Make Dell Latitude E5420 use reboot=pci Greg KH
2011-08-06  0:01 ` [15/55] USB: pl2303: add AdLink ND-6530 USB IDs Greg KH
2011-08-06  0:01 ` [16/55] USB: pl2303.h: checkpatch cleanups Greg KH
2011-08-06  0:01 ` [17/55] USB: serial: add IDs for WinChipHead USB->RS232 adapter Greg KH
2011-08-06  0:01 ` [18/55] staging: comedi: fix infoleak to userspace Greg KH
2011-08-06  0:01 ` Greg KH [this message]
2011-08-06  0:01 ` [20/55] usb: musb: restore INDEX register in resume path Greg KH
2011-08-06  0:01 ` [21/55] USB: dummy-hcd needs the has_tt flag Greg KH
2011-08-06  0:01 ` [22/55] ARM: pxa/cm-x300: fix V3020 RTC functionality Greg KH
2011-08-06  0:01 ` [23/55] jme: Fix unmap error (Causing system freeze) Greg KH
2011-08-06  0:01 ` [24/55] [SCSI] libsas: remove expander from dev list on error Greg KH
2011-08-06  0:01 ` [25/55] mac80211: Restart STA timers only on associated state Greg KH
2011-08-06  0:01 ` [26/55] [SCSI] Blacklist Traxdata CDR4120 and IOMEGA Zip drive to avoid lock ups Greg KH
2011-08-06  0:01 ` [27/55] [SCSI] ses: requesting a fault indication Greg KH
2011-08-06  0:01 ` [28/55] [SCSI] fix crash in scsi_dispatch_cmd() Greg KH
     [not found]   ` <1312739411.2591.1026.camel@deadeye>
2011-08-07 17:51     ` [Stable-review] " Ben Hutchings
2011-08-08 17:04       ` Greg KH
2011-08-08 18:10         ` Ben Hutchings
2011-08-08 19:17           ` Dave Jones
2011-08-09 20:22           ` James Bottomley
2011-08-06  0:01 ` [29/55] [SCSI] pmcraid: reject negative request size Greg KH
2011-08-06  0:02 ` [30/55] kexec, x86: Fix incorrect jump back address if not Greg KH
2011-08-06  0:02 ` [31/55] powerpc/kdump: Fix timeout in crash_kexec_wait_realmode Greg KH
2011-08-06  0:02 ` [32/55] PCI: ARI is a PCIe v2 feature Greg KH
2011-08-06  0:02 ` [33/55] cciss: do not attempt to read from a write-only register Greg KH
2011-08-06  0:02 ` [34/55] xtensa: prevent arbitrary read in ptrace Greg KH
2011-08-06  0:02 ` [35/55] ext3: Fix oops in ext3_try_to_allocate_with_rsv() Greg KH
2011-08-06  0:02 ` [36/55] svcrpc: fix list-corrupting race on nfsd shutdown Greg KH
2011-08-06  0:02 ` [37/55] EHCI: only power off port if over-current is active Greg KH
2011-08-06  0:02 ` [38/55] EHCI: fix direction handling for interrupt data toggles Greg KH
2011-08-06  0:02 ` [39/55] powerpc/pseries/hvconsole: Fix dropped console output Greg KH
2011-08-06  0:02 ` [40/55] x86: Hpet: Avoid the comparator readback penalty Greg KH
2011-08-06  0:02 ` [41/55] x86: HPET: Chose a paranoid safe value for the ETIME check Greg KH
2011-08-06  0:02 ` [42/55] Revert "block: rescan partitions on invalidated devices on -ENOMEDIA Greg KH
2011-08-06  0:02 ` [43/55] cifs: clean up cifs_find_smb_ses (try #2) Greg KH
2011-08-06  0:02 ` [44/55] cifs: fix NULL pointer dereference in cifs_find_smb_ses Greg KH
2011-08-06  0:02 ` [45/55] cifs: check for NULL session password Greg KH
2011-08-06  0:02 ` [46/55] gre: fix netns vs proto registration ordering Greg KH
2011-08-06  0:02 ` [47/55] netns xfrm: fixup xfrm6_tunnel error propagation Greg KH
2011-08-06  0:02 ` [48/55] tunnels: fix netns vs proto registration ordering Greg KH
2011-08-06  0:02 ` [49/55] alpha: fix several security issues Greg KH
2011-08-06  0:02 ` [50/55] proc: restrict access to /proc/PID/io Greg KH
2011-08-06  0:02 ` [51/55] ALSA: sound/core/pcm_compat.c: adjust array index Greg KH
2011-08-06  0:02 ` [52/55] dm mpath: fix potential NULL pointer in feature arg processing Greg KH
2011-08-06  0:02 ` [53/55] dm: fix idr leak on module removal Greg KH
2011-08-06  0:02 ` [54/55] perf: overflow/perf_count_sw_cpu_clock crashes recent kernels Greg KH
2011-08-06  0:02 ` [55/55] atm: [br2684] allow routed mode operation again Greg KH

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110806000250.799221410@clark.kroah.org \
    --to=gregkh@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=stable-review@kernel.org \
    --cc=stable@kernel.org \
    --cc=stern@rowland.harvard.edu \
    --cc=torvalds@linux-foundation.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®