Everyone may overlook this because it seems so simple of a possible fix. So I will try to explain why it may help. It has worked for me, and several others. My laptop uses this chipset, and so it intermittantly panics for me if I don't use this. My information may not be 100% precise, but I will try to explain the best I know.
Since linux started using udev, hardware detection is asynchronous now. This allows faster and more efficient detection, but can cause all sorts of problems depending on the quality of your motherboard, bios, and other gear. So depending on circumstances, the time it takes for udev to get responses from all hardwares might vary depending on any number of circumstances. Limitless changes in kernel, firmwares, bios, drivers, etc- everyone's experience might vary. It may have worked fine in 2.6.17, but 2.6.18 does not work at all, 2.6.19 is spotty, etc...
This problem mostly occurs in my usb/external and sata drives. But in certain times I will get panic on my ide internal drive on boot. The bootloader relies on BIOS detection to get started. But once kernel loads, control is turned over to kernel. But kernel/udev request might not get response in time (since its asynchronous now) before boot tries to turn over to root=/dev/xxx. So mount fails, panic occurs. Earlymodules=piix tries to thwart this problem by loading the module much sooner. But again, depending on yout hardware, it might not happen soon enough. Also, since the drive will be busy at random times depending, it might need to finish up before it will respond to udev.
In summary, the drive has not responded to udev/kernel before the bootloader finishes loading the kernel and tries to turn control over to the new root. earlymodules=piix works for some, not others. Especially now since pata over ide. If you have this problem, the fix very well might be as simple as this, especially if you have sata, scsi or usb drives: Add rootdelay=15 on kernel line in bootloader. For example:
kernel /boot/vmlinuz26ck root=/dev/sda2 rootdelay=15
15=15 seconds. Might not need this much, but 15 second delay should be ample time for most people. For me, i don't use the earlymodules=piix, and I use rootdelay=5, and every time is fine. This option tells the kernel to literally wait x seconds before trying to turn root=/dev/xxx over and continuing boot. during this pause, you might see misc. devices returning info to udev before continuing, including your drive.
It really probably does seem to easy or simple to be true. But try it- it might work for you. I have seen more people say OMG IT WORKED!! versus people who say it didn't. Hope this helps some of you.