public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* Incorrect 80 wire detection with amd 760mpx & 2.4.21-pre4-ac7
@ 2003-03-02  0:54 Nicholas Wourms
  2003-03-02  2:16 ` Alan Cox
  0 siblings, 1 reply; 3+ messages in thread
From: Nicholas Wourms @ 2003-03-02  0:54 UTC (permalink / raw)
  To: linux-kernel

FYI:
I suspect that: 
http://marc.theaimsgroup.com/?l=linux-kernel&m=104619727013220&w=2
is related to my problem.

Anyhow, I'm using a UDMA5 WesternDigital drive on a ASUS 
K7M266-D motherboard.  With a plain, stock 2.4.20 kernel, 
the viper driver properly recognizes which channel has the 
80 wire cable (in my case ide0).  The hard disk is the 
primary master, a cd-r drive is the primary slave, and a zip 
drive is the secondary slave.  I can successfully set UDMA5 
with hdparm without any problems.  However, after upgrading 
to 2.4.21-pre4-ac7, I noticed that the drive was stuck at 
UDMA2.  Checking /proc/ide/amd74XX yeilds some unexpected 
results:

----------AMD BusMastering IDE Configuration----------------
Driver Version:                     2.9
South Bridge:                       Advanced Micro Devices 
[AMD] AMD-768 [Opus] IDE
Revision:                           IDE 0x4
Highest DMA rate:                   UDMA100
BM-DMA base:                        0xd800
PCI clock:                          33.3MHz
-----------------------Primary IDE-------Secondary IDE------
Prefetch Buffer:              yes                 yes
Post Write Buffer:            yes                 yes
Enabled:                      yes                 yes
Simplex only:                  no                  no
Cable Type:                   40w                 80w
-------------------drive0----drive1----drive2----drive3-----
Transfer Mode:       UDMA      UDMA      UDMA       PIO
Address Setup:       30ns      30ns      30ns     120ns
Cmd Active:          90ns      90ns      90ns      90ns
Cmd Recovery:        90ns      90ns      30ns      30ns
Data Active:         90ns      90ns      90ns     330ns
Data Recovery:       30ns      90ns      30ns     270ns
Cycle Time:          60ns      60ns      60ns     600ns
Transfer Rate:   33.3MB/s  33.3MB/s  33.3MB/s   3.3MB/s

It appears that the driver has got it backwards, identifying 
my 80 wire cable as a 40 wire cable and visa-versa.  As I 
mentioned, this is completely opposite to the behavior of 
2.4.20.  I've poked around the source, but I can't come up 
with anything new to what the other person discovered. 
Trying to pass ide0=ata66 doesn't seem to have any effect on 
the situation.  I can provide further information upon 
request, but I don't think it will be necessary at this point.

Cheers,
Nicholas


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

* Re: Incorrect 80 wire detection with amd 760mpx & 2.4.21-pre4-ac7
  2003-03-02  0:54 Incorrect 80 wire detection with amd 760mpx & 2.4.21-pre4-ac7 Nicholas Wourms
@ 2003-03-02  2:16 ` Alan Cox
  2003-03-03 15:44   ` Vojtech Pavlik
  0 siblings, 1 reply; 3+ messages in thread
From: Alan Cox @ 2003-03-02  2:16 UTC (permalink / raw)
  To: Nicholas Wourms; +Cc: Linux Kernel Mailing List

On Sun, 2003-03-02 at 00:54, Nicholas Wourms wrote:
> FYI:
> I suspect that: 
> http://marc.theaimsgroup.com/?l=linux-kernel&m=104619727013220&w=2
> is related to my problem.
> 
> Anyhow, I'm using a UDMA5 WesternDigital drive on a ASUS 
> K7M266-D motherboard.  With a plain, stock 2.4.20 kernel, 
> the viper driver properly recognizes which channel has the 

Yep. I'll apply the obvious fix if Vojtech doesn't. Its on the known
list


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

* Re: Incorrect 80 wire detection with amd 760mpx & 2.4.21-pre4-ac7
  2003-03-02  2:16 ` Alan Cox
@ 2003-03-03 15:44   ` Vojtech Pavlik
  0 siblings, 0 replies; 3+ messages in thread
From: Vojtech Pavlik @ 2003-03-03 15:44 UTC (permalink / raw)
  To: Alan Cox; +Cc: Nicholas Wourms, Linux Kernel Mailing List

[-- Attachment #1: Type: text/plain, Size: 571 bytes --]

On Sun, Mar 02, 2003 at 02:16:08AM +0000, Alan Cox wrote:
> On Sun, 2003-03-02 at 00:54, Nicholas Wourms wrote:
> > FYI:
> > I suspect that: 
> > http://marc.theaimsgroup.com/?l=linux-kernel&m=104619727013220&w=2
> > is related to my problem.
> > 
> > Anyhow, I'm using a UDMA5 WesternDigital drive on a ASUS 
> > K7M266-D motherboard.  With a plain, stock 2.4.20 kernel, 
> > the viper driver properly recognizes which channel has the 
> 
> Yep. I'll apply the obvious fix if Vojtech doesn't. Its on the known
> list

Obvious fix attached.

-- 
Vojtech Pavlik
SuSE Labs

[-- Attachment #2: obvious-fix.diff --]
[-- Type: text/plain, Size: 1082 bytes --]

--- linux-2.4.20-pre4-ac/drivers/ide/pci/amd74xx.c	Fri Feb 28 17:05:25 2003
+++ linux-2.4.20-pre4-amd8111/drivers/ide/pci/amd74xx.c	Fri Feb 28 17:19:37 2003
@@ -1,5 +1,5 @@
 /*
- * Version 2.9
+ * Version 2.10
  *
  * AMD 755/756/766/8111 and nVidia nForce IDE driver for Linux.
  *
@@ -103,7 +103,7 @@
 
 	amd_print("----------AMD BusMastering IDE Configuration----------------");
 
-	amd_print("Driver Version:                     2.9");
+	amd_print("Driver Version:                     2.10");
 	amd_print("South Bridge:                       %s", bmide_dev->name);
 
 	pci_read_config_byte(dev, PCI_REVISION_ID, &t);
@@ -309,7 +309,8 @@
 
 		case AMD_UDMA_100:
 			pci_read_config_byte(dev, AMD_CABLE_DETECT, &t);
-			amd_80w = ((u & 0x3) ? 1 : 0) | ((u & 0xc) ? 2 : 0);
+			pci_read_config_dword(dev, AMD_UDMA_TIMING, &u);
+			amd_80w = ((t & 0x3) ? 1 : 0) | ((t & 0xc) ? 2 : 0);
 			for (i = 24; i >= 0; i -= 8)
 				if (((u >> i) & 4) && !(amd_80w & (1 << (1 - (i >> 4))))) {
 					printk(KERN_WARNING "AMD_IDE: Bios didn't set cable bits corectly. Enabling workaround.\n");

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

end of thread, other threads:[~2003-03-03 15:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-03-02  0:54 Incorrect 80 wire detection with amd 760mpx & 2.4.21-pre4-ac7 Nicholas Wourms
2003-03-02  2:16 ` Alan Cox
2003-03-03 15:44   ` Vojtech Pavlik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox