To sum up, it happens when the master slot is occupied by an ATAPI
device and the corresponding slave slot is empty. The slave slot
reports ATAPI signature (probably duplicated from the master) and passes
all legacy presence test thus resulting in timeout on IDENTIFY.
This problem was seen with PATA Promise 20275 adapter + IBM DVD-RAM drive.
Single master device configuration, no slave device.
The master device acts as slave and creates a phantom slave device.
The problem was later fixed by Tejun's ata_exec_internal() patch:
After the patch, the phantom device is finally detected by ata_dev_identify().
Libata uses polling PIO for IDENTIFY DEVICE before this major update.
The polling PIO finds something wrong when it reads a 0x00 device status.
So, the phantom device is detected quite quickly.
With irq-driven PIO, maybe the phantom device is only detected after time-out.
So it takes longer (30 secs) to detect the phantom device.
No good idea how to fix this. Maybe read more registers to see whether the
phantom device can be detected early before the IDENTIFY DEVICE.