2003-07-20 19:48:01

by Jürgen Stohr

[permalink] [raw]
Subject: BUG in pdc202xx_old.c

Hi Andre,
in pdc202xx_old.c is a bug that prevents the use of "66 Clocking". The driver
always falls back to UDMA 33. The reason for this bug is found in function
"config_chipset_for_dma" when checking if the "other" drive is capable of
UDMA 66. The follwing patch, which should apply against 2.4.22-pre7, solves
the problem for me:

--- pdc202xx_old.c.broken 2003-07-20 20:12:39.000000000 +0200
+++ pdc202xx_old.c 2003-07-20 20:18:50.000000000 +0200
@@ -425,7 +425,7 @@
* check to make sure drive on same channel
* is u66 capable
*/
- if (hwif->drives[!(drive->dn%2)].id) {
+ if (hwif->drives[!(drive->dn%2)].present) {
if (hwif->drives[!(drive->dn%2)].id->dma_ultra
& 0x0078) {
hwif->OUTB(CLKSPD | mask,
(hwif->dma_master + 0x11));
} else {

regards,
Jürgen


2003-07-20 20:46:19

by Andre Hedrick

[permalink] [raw]
Subject: Re: BUG in pdc202xx_old.c


Juergen:

I have formally given up on Promise.
If it works somebody take it and stuff it into a kernel tree it is a DGD
for me now.

DGD == Don't Giva Damn

Cheers,

Andre Hedrick
LAD Storage Consulting Group

On Sun, 20 Jul 2003, [utf-8] Jürgen Stohr wrote:

> Hi Andre,
> in pdc202xx_old.c is a bug that prevents the use of "66 Clocking". The driver
> always falls back to UDMA 33. The reason for this bug is found in function
> "config_chipset_for_dma" when checking if the "other" drive is capable of
> UDMA 66. The follwing patch, which should apply against 2.4.22-pre7, solves
> the problem for me:
>
> --- pdc202xx_old.c.broken 2003-07-20 20:12:39.000000000 +0200
> +++ pdc202xx_old.c 2003-07-20 20:18:50.000000000 +0200
> @@ -425,7 +425,7 @@
> * check to make sure drive on same channel
> * is u66 capable
> */
> - if (hwif->drives[!(drive->dn%2)].id) {
> + if (hwif->drives[!(drive->dn%2)].present) {
> if (hwif->drives[!(drive->dn%2)].id->dma_ultra
> & 0x0078) {
> hwif->OUTB(CLKSPD | mask,
> (hwif->dma_master + 0x11));
> } else {
>
> regards,
> Jürgen
>

2003-07-20 23:18:41

by Alan

[permalink] [raw]
Subject: Re: BUG in pdc202xx_old.c

On Sul, 2003-07-20 at 21:06, Jürgen Stohr wrote:
> * check to make sure drive on same channel
> * is u66 capable
> */
> - if (hwif->drives[!(drive->dn%2)].id) {
> + if (hwif->drives[!(drive->dn%2)].present) {

This doesn't really seem to make sense for current IDE - drive[n].id is
never NULL. On old systems it was and this test was needed so we didnt
check ultra dma flags on an ident free drive (old ST506 etc)

That makes me curious as to what is really going on here.