Patchwork IDE cable detection on Apple PowerBook

login
register
mail settings
Submitter TOMARI Hisanobu
Date March 19, 2009, 1:30 p.m.
Message ID <20090319223001.c2674366.posco.grubb@gmail.com>
Download mbox | patch
Permalink /patch/24676/
State Not Applicable
Delegated to: Benjamin Herrenschmidt
Headers show

Comments

TOMARI Hisanobu - March 19, 2009, 1:30 p.m.
Thanks for helpful advices.
This patch adds an option to drivers/ide/Kconfig and adds 
some lines to drivers/ide/pmac.c . Now the driver checks
if the model is prefixed with "PowerBook" and the entire hack
can be toggled in the Kconfig.

Again, the patch is against linux 2.6.28.8.

Best regards,
TOMARI Hisanobu

p.s. oddly, the drive works in ATA/100 mode under untouched
MacOS X 10.5.

On Thu, 19 Mar 2009 17:08:37 +1100
Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:

> On Thu, 2009-03-19 at 17:07 +1100, Benjamin Herrenschmidt wrote:
> > On Wed, 2009-03-18 at 22:47 +0900, TOMARI Hisanobu wrote:
> > > I thought the short-40pin assumption would cause no problem
> > > considering all models beginning with "PowerBook5" are laptops.
> > > Do you mean an option to toggle this hack on/off should be present 
> > > in Kconfig?
> > 
> > Actually, it makes -some- amount of sense to do it by testing
> > specifically for the prefix "PowerBook" and "iBook" without a specific
> > number I suppose.
> 
> Actually "PowerBook" is enough, there's no iBook prefix in the
> device-tree, I was confusing with old busted iMac firmwares that used
> iMac instead of PowerMac in there.
> 
> Cheers,
> Ben.
> 
> > Ben.
> > 
> > > Thanks,
> > > TOMARI Hisanobu
> > > 
> > > On Wed, 18 Mar 2009 18:58:17 +1100
> > > Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> > > 
> > > > On Wed, 2009-03-18 at 14:06 +0900, TOMARI Hisanobu wrote:
> > > > > Hello,
> > > > > 
> > > > > I'm using an OCZ PATA SSD on Apple PowerBook5,4 computer.
> > > > > The IDE drive fails to recognize 80-conductor cable that
> > > > > connects the drive to motherboard to fall back to UDMA33.
> > > > > 
> > > > > This patch fixes this behavior by assuming that the cable is
> > > > > short-40pin when the model string matches "PowerBook5" and 
> > > > > the motherboard detects 80c cable.
> > > > > 
> > > > > This patch is against drivers/ide/pmac.c in linux 2.6.28.8.
> > > > 
> > > > The patch is too much of an ad-hoc hack... _maybe_ an option is to make
> > > > the core fallback to 40 "short" when 80 pin detection fails on
> > > > powerbooks instead ?
> > > > 
> > > > Ben.
> > > > 
> > > > > (before applying the patch) hdparm -i /dev/hda
> > > > > /dev/hda:
> > > > >  Timing buffered disk reads:   90 MB in  3.03 seconds =  29.73 MB/sec
> > > > > (dmesg 2.6.26)
> > > > > ide0: Found Apple UniNorth ATA-6 controller, bus ID 3, irq 39
> > > > > Probing IDE interface ide0...
> > > > > hda: CORE_PATA, ATA DISK drive
> > > > > hda: host max PIO4 wanted PIO255(auto-tune) selected PIO4
> > > > > hda: drive side 80-wire cable detection failed, limiting max speed to UDMA33
> > > > > hda: UDMA/33 mode selected
> > > > > 
> > > > > (after applying the patch) hdparm -i /dev/hda
> > > > > /dev/hda:
> > > > >  Timing buffered disk reads:  240 MB in  3.02 seconds =  79.42 MB/sec
> > > > > (dmesg 2.6.28.8)
> > > > > ide-pmac: Found Apple UniNorth ATA-6 controller (PCI), bus ID 3, irq 39
> > > > > Probing IDE interface ide0...
> > > > > hda: CORE_PATA, ATA DISK drive
> > > > > hda: host max PIO4 wanted PIO255(auto-tune) selected PIO4
> > > > > hda: UDMA/100 mode selected
> > > > > ide0 at 0xf102a000-0xf102a070,0xf102a160 on irq 39
> > > > > 
> > > > > 
> > > > > _______________________________________________
> > > > > Linuxppc-dev mailing list
> > > > > Linuxppc-dev@ozlabs.org
> > > > > https://ozlabs.org/mailman/listinfo/linuxppc-dev
> > > > 
>
Anton Vorontsov - March 19, 2009, 1:41 p.m.
On Thu, Mar 19, 2009 at 10:30:01PM +0900, TOMARI Hisanobu wrote:
> Thanks for helpful advices.
> This patch adds an option to drivers/ide/Kconfig and adds 
> some lines to drivers/ide/pmac.c .

I think it would be better to make it a kernel command line option
instead of Kconfig knob.

The reason is: with distro (pre-compiled) kernels you don't have to
re-compile anything to make the drive work.

The other option is to enable BLK_DEV_IDE_PMAC_SHORTCABLE by default,
but I'm not sure if it's safe thing to do (most probably not).

Thanks for you work on this,
Benjamin Herrenschmidt - March 19, 2009, 9:14 p.m.
On Thu, 2009-03-19 at 16:41 +0300, Anton Vorontsov wrote:
> 
> The other option is to enable BLK_DEV_IDE_PMAC_SHORTCABLE by default,
> but I'm not sure if it's safe thing to do (most probably not).

It should be allright for powerbooks. If the firmware says 80 pin cable,
then it probably is, and in fact, It used to work, I think the test in
the IDE code is new there, and MacOS X solely relies on the firmware
data.

Ben.
Benjamin Herrenschmidt - March 20, 2009, 6:27 a.m.
On Thu, 2009-03-19 at 22:30 +0900, TOMARI Hisanobu wrote:
> Thanks for helpful advices.
> This patch adds an option to drivers/ide/Kconfig and adds 
> some lines to drivers/ide/pmac.c . Now the driver checks
> if the model is prefixed with "PowerBook" and the entire hack
> can be toggled in the Kconfig.
> 
> Again, the patch is against linux 2.6.28.8.

Ack. I forwarded it to Bart for his queue.

Ben.

> Best regards,
> TOMARI Hisanobu
> 
> p.s. oddly, the drive works in ATA/100 mode under untouched
> MacOS X 10.5.
> 
> On Thu, 19 Mar 2009 17:08:37 +1100
> Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> 
> > On Thu, 2009-03-19 at 17:07 +1100, Benjamin Herrenschmidt wrote:
> > > On Wed, 2009-03-18 at 22:47 +0900, TOMARI Hisanobu wrote:
> > > > I thought the short-40pin assumption would cause no problem
> > > > considering all models beginning with "PowerBook5" are laptops.
> > > > Do you mean an option to toggle this hack on/off should be present 
> > > > in Kconfig?
> > > 
> > > Actually, it makes -some- amount of sense to do it by testing
> > > specifically for the prefix "PowerBook" and "iBook" without a specific
> > > number I suppose.
> > 
> > Actually "PowerBook" is enough, there's no iBook prefix in the
> > device-tree, I was confusing with old busted iMac firmwares that used
> > iMac instead of PowerMac in there.
> > 
> > Cheers,
> > Ben.
> > 
> > > Ben.
> > > 
> > > > Thanks,
> > > > TOMARI Hisanobu
> > > > 
> > > > On Wed, 18 Mar 2009 18:58:17 +1100
> > > > Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> > > > 
> > > > > On Wed, 2009-03-18 at 14:06 +0900, TOMARI Hisanobu wrote:
> > > > > > Hello,
> > > > > > 
> > > > > > I'm using an OCZ PATA SSD on Apple PowerBook5,4 computer.
> > > > > > The IDE drive fails to recognize 80-conductor cable that
> > > > > > connects the drive to motherboard to fall back to UDMA33.
> > > > > > 
> > > > > > This patch fixes this behavior by assuming that the cable is
> > > > > > short-40pin when the model string matches "PowerBook5" and 
> > > > > > the motherboard detects 80c cable.
> > > > > > 
> > > > > > This patch is against drivers/ide/pmac.c in linux 2.6.28.8.
> > > > > 
> > > > > The patch is too much of an ad-hoc hack... _maybe_ an option is to make
> > > > > the core fallback to 40 "short" when 80 pin detection fails on
> > > > > powerbooks instead ?
> > > > > 
> > > > > Ben.
> > > > > 
> > > > > > (before applying the patch) hdparm -i /dev/hda
> > > > > > /dev/hda:
> > > > > >  Timing buffered disk reads:   90 MB in  3.03 seconds =  29.73 MB/sec
> > > > > > (dmesg 2.6.26)
> > > > > > ide0: Found Apple UniNorth ATA-6 controller, bus ID 3, irq 39
> > > > > > Probing IDE interface ide0...
> > > > > > hda: CORE_PATA, ATA DISK drive
> > > > > > hda: host max PIO4 wanted PIO255(auto-tune) selected PIO4
> > > > > > hda: drive side 80-wire cable detection failed, limiting max speed to UDMA33
> > > > > > hda: UDMA/33 mode selected
> > > > > > 
> > > > > > (after applying the patch) hdparm -i /dev/hda
> > > > > > /dev/hda:
> > > > > >  Timing buffered disk reads:  240 MB in  3.02 seconds =  79.42 MB/sec
> > > > > > (dmesg 2.6.28.8)
> > > > > > ide-pmac: Found Apple UniNorth ATA-6 controller (PCI), bus ID 3, irq 39
> > > > > > Probing IDE interface ide0...
> > > > > > hda: CORE_PATA, ATA DISK drive
> > > > > > hda: host max PIO4 wanted PIO255(auto-tune) selected PIO4
> > > > > > hda: UDMA/100 mode selected
> > > > > > ide0 at 0xf102a000-0xf102a070,0xf102a160 on irq 39
> > > > > > 
> > > > > > 
> > > > > > _______________________________________________
> > > > > > Linuxppc-dev mailing list
> > > > > > Linuxppc-dev@ozlabs.org
> > > > > > https://ozlabs.org/mailman/listinfo/linuxppc-dev
> > > > > 
> >

Patch

*** linux-2.6.28.8/drivers/ide/Kconfig.old	2009-03-19 21:30:24.594129124 +0900
--- linux-2.6.28.8/drivers/ide/Kconfig	2009-03-19 21:49:41.776996312 +0900
***************
*** 691,696 ****
--- 691,706 ----
  	  CD-ROM on hda. This option changes this to more natural hda for
  	  hard disk and hdc for CD-ROM.
  
+ config BLK_DEV_IDE_PMAC_SHORTCABLE
+        bool "Assume short IDE cable on PowerBook/iBook"
+        depends on BLK_DEV_IDE_PMAC
+        help
+          Some IDE drives fail to recognize 80-conductor IDE cable used in
+ 	 PowerBooks and the driver limits the transfer speed to ATA/33.
+ 	 With this option, the driver reports the 80-conductor cable to be 
+ 	 of "40 conductor short" type on PowerBook/iBook, and enables to use
+ 	 ATA/100 on drives that support the transfer mode.
+ 
  config BLK_DEV_IDE_AU1XXX
         bool "IDE for AMD Alchemy Au1200"
         depends on SOC_AU1200
*** linux-2.6.28.8/drivers/ide/pmac.c.orig	2009-03-19 22:21:14.137849502 +0900
--- linux-2.6.28.8/drivers/ide/pmac.c	2009-03-19 22:16:44.612877441 +0900
***************
*** 917,926 ****
  		(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
  	struct device_node *np = pmif->node;
  	const char *cable = of_get_property(np, "cable-type", NULL);
  
  	/* Get cable type from device-tree. */
  	if (cable && !strncmp(cable, "80-", 3))
! 		return ATA_CBL_PATA80;
  
  	/*
  	 * G5's seem to have incorrect cable type in device-tree.
--- 917,938 ----
  		(pmac_ide_hwif_t *)dev_get_drvdata(hwif->gendev.parent);
  	struct device_node *np = pmif->node;
  	const char *cable = of_get_property(np, "cable-type", NULL);
+ #ifdef CONFIG_BLK_DEV_IDE_PMAC_SHORTCABLE
+ 	struct device_node *root = of_find_node_by_path("/");
+ 	const char *model = of_get_property(root, "model", NULL);
+ #endif
  
  	/* Get cable type from device-tree. */
  	if (cable && !strncmp(cable, "80-", 3))
! 	  {
! #ifdef CONFIG_BLK_DEV_IDE_PMAC_SHORTCABLE
! 	    if(strncmp(model,"PowerBook",9)==0)
! 	      /* Some drives fail to detect 80c cable in PowerBook */
! 	      return ATA_CBL_PATA40_SHORT;
! 	    else
! #endif
! 	      return ATA_CBL_PATA80;
! 	  }
  
  	/*
  	 * G5's seem to have incorrect cable type in device-tree.