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