Thursday, April 16, 2009

Working around buggy ALi IDE on ultrasparc hardware

The Linux ALi IDE driver (at least 2.6.23) does not have a proper workaround for a hardware bug that makes DMA transfers sometimes produce garbage. The simple workaround to get these sparc up and running has been to boot with the "ide=nodma" kernel parameter. That is fine, but performance will really suck.
Anyway, I run my personal production mail, proxy, tunnel, build server on a Netra-AX and it has the buggy ALi IDE chipset. My first workaround was to just have the basic root system on a small IDE disk on the primary channel and all data disks on a SATA controller. This was alright for a while but on some heavy compilations and swapping made the system crawl. I had made the stupid mistake to put my swap on the no-dma disk, plus loading binaries and libraries from the nodma disk was slow. But what to do then ? The PROM will only boot from the internal IDE and I didn't like to move the system to another disk. Digging in my hardware stash I found a nice IDE-to-CF converter that can be plugged directly into the motherboard, plus a 32Mb CF card, just enough for a kernel or two. And the CF card is PIO only so the kernel handles it alright. So now I boot the system from the CF card and have the disk plugged into the external PCI IDE card.