9860 Pata Pdc 20378
If anyone else was having trouble with this, here's how I got the PATA controller to work in newer kernels where libata was modified to not check for PATA on this card.
ATA_FLAG_SLAVE_POSS is very important and apparently one of the members of the structure that was previously used to set the bit was removed. So you have to set it in the board_2037x section of pdc_port_info.
In the linux kernel source tree open drivers/scsi/sata_promise.c
Look for this section and change to the following:
/* board_2037x */
{
.sht = &pdc_ata_sht,
.host_flags = PDC_COMMON_FLAGS | ATA_FLAG_SLAVE_POSS,
.pio_mask = 0x1f, /* pio0-4 */
.mwdma_mask = 0x07, /* mwdma0-2 */
.udma_mask = 0x7f, /* udma0-6 ; FIXME */
.port_ops = &pdc_sata_ops,
},
Look for this section and change to the following:
case board_2037x:
probe_ent->n_ports = 3;
pdc_ata_setup_port(&probe_ent->port[2], base + 0x300);
break;
If you don't really need PATA, this won't work for you at all. I had my code set to test for SATA and PATA but since you have to set that flag during the pdc_port_info struct declaration anyhow, I think it will completely break SATA anyhow, but maybe not. There's probably a way to set the flag later like they used to do, but I didn't dig deep enough to make it work.
I would write a diff but I've never written one that doesn't care what else is on the lines... so regardless of what version of libata you are using, this will probably work.
If anyone needs this and it isn't working for them, let me know and I'll try to help.
-------------------
Update:
Looks like they put the port_flags back into 2.6.17-mm6 ( I didn't dig to see how far back into the mm patches that they fixed it so I'm just listing the latest ), so that is probably an option as well.