Messages in this thread Patch in this message | | | Subject | [PATCH] ppc32: Fix PowerMac mediabay driver | From | Benjamin Herrenschmidt <> | Date | 03 Aug 2003 16:07:59 +0200 |
| |
Hi Marcelo !
The mediabay driver for PowerMac (hotswap IDE bay) got broken in 2.4.21 by the switch of ide pmac to mmio, this fixes it along with a longstanding bug where the timeout waiting for the drive to be ready was actually infinite.
Please apply. Note that proper operations for this driver requires the other patch I just sent that fixes proper keeping of the "hold" flag in hwif during ide_unregister() call.
Ben.
diff -urN linux-2.4/drivers/macintosh/mediabay.c linuxppc_benh_devel/drivers/macintosh/mediabay.c --- linux-2.4/drivers/macintosh/mediabay.c 2003-07-08 10:50:26.000000000 +0200 +++ linuxppc_benh_devel/drivers/macintosh/mediabay.c 2003-08-03 15:12:31.000000000 +0200 @@ -109,7 +109,7 @@ #ifdef CONFIG_BLK_DEV_IDE /* check the busy bit in the media-bay ide interface (assumes the media-bay contains an ide device) */ -#define MB_IDE_READY(i) ((inb(media_bays[i].cd_base + 0x70) & 0x80) == 0) +#define MB_IDE_READY(i) ((readb(media_bays[i].cd_base + 0x70) & 0x80) == 0) #endif /* Note: All delays are not in milliseconds and converted to HZ relative @@ -577,7 +577,8 @@ MBDBG("mediabay %d IDE ready\n", i); } break; - } + } else if (bay->timer > 0) + bay->timer--; if (bay->timer == 0) { printk("\nIDE Timeout in bay %d !\n", i); MBDBG("mediabay%d: nIDE Timeout !\n", i); @@ -756,7 +757,7 @@ struct media_bay_info* bay = &media_bays[n]; if (!np->parent || np->n_addrs == 0 || !request_OF_resource(np, 0, NULL)) { np = np->next; - printk(KERN_ERR "media-bay: Can't request IO resource !\n"); + printk(KERN_ERR "mediabay: Can't request IO resource !\n"); continue; } bay->mb_type = mb_ohare; @@ -771,7 +772,7 @@ bay->mb_type = mb_ohare; bay->ops = &ohare_mb_ops; } else { - printk(KERN_ERR "mediabay: Unknown bay type !\n"); + printk(KERN_ERR "media-bay: Unknown bay type !\n"); np = np->next; continue; } @@ -782,7 +783,7 @@ MB_BIS(bay, KEYLARGO_MBCR, KL_MBCR_MB0_ENABLE); #ifdef MB_USE_INTERRUPTS if (np->n_intrs == 0) { - printk(KERN_ERR "media bay %d has no irq\n",n); + printk(KERN_ERR "media-bay %d has no irq\n",n); np = np->next; continue; } @@ -823,8 +824,9 @@ pmu_register_sleep_notifier(&mb_sleep_notifier); #endif /* CONFIG_PMAC_PBOOK */ - kernel_thread(media_bay_task, NULL, - CLONE_FS | CLONE_FILES | CLONE_SIGHAND); + if (kernel_thread(media_bay_task, NULL, + CLONE_FS | CLONE_FILES | CLONE_SIGHAND) < 0) + printk(KERN_ERR "media-bay: Cannot create polling thread !\n"); } } - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |