DSDT, ACPI, and specifications galore

by hobbitalastair

As of late, I have been fiddling around with the Toshiba, with the aim of getting a few more things working. It’s been a somewhat productive period, since I’ve made some good progress on some fronts.

What I’ve been doing can be split into about 3 areas:

  • Trying to get the hard drive controller to work at a decent speed.
  • Looking at the ACPI specification and the DSDT table from the Toshiba to try to figure out what is supported and what is not.
  • Generally optimizing the kernel.

The first area is fairly self explanatory. I’ve discovered (after perusing the source code) that the pata_legacy driver is dropping back to using PIO0 – that is, PIO ‘zero’, which is limiting the speed to 3MB/s. If that. In theory, according to the DSDT table, the controller should be capable of at least DMA2, which is capable of more than twice that. To complicate matters, the PATA chipset is ‘special’, and hides itself inside the PCI host bridge. The PCI device ID is 0601, which is not supported in the kernel… however, Alan Cox made a couple of mentions on the mailing lists suggesting that the chip, was, in fact, a Toshiba Piccolo controller. I both have the documentation (now) for the Piccolo controller (series, apparently), and there is support in the kernel (albeit not for my particular chip), so I should be ready to go. Right?

Maybe not. I added the PCI ID to the list of supported chipsets for the piccolo driver, recompiled the kernel, and watched with baited breath. It crashed… and I can’t read what happened, because the PgUp button is broken. EDIT: I’ve fixed the PgUp button. It has a little ‘cap’ inside which had moved out of it’s socket, preventing it from working. That is now fixed…

I also tried the ‘ata-generic’ driver, and the ‘pata_acpi’ driver, both of which failed. I have yet to try the ‘pata_of_platform’ driver, which I’m not holding my breath over, or ‘pata_isapnp’, which might work but appears to be limited to PIO, albeit not PIO0.

So, the next step is to purchase a serial cable, setting the logging verbosity as high as it can go, and trying to figure out what is really happening… some additional printk’s might be involved!

As a side-effect of trying to get the hard drive controller to work, I discovered that ACPI actually works! I can now read the battery charge, shutdown properly, and see a whole bunch of ‘extra’ ACPI connected devices 🙂

It didn’t help with the pata_acpi driver, though, despite a HDD and CDROM entry in the DSDT, claiming to be generic ISA/PCI controllers. :/

Also, the backlight does not work. I’ll try the toshiba_acpi driver and see what happens…

While I was fiddling, I did tune the kernel somewhat. Boot times are now improved, although not by much, and things generally work better.

Overall, reasonably productive. Now, let’s see what I can do about that hard drive controller…