Skip to contentSkip to conversation

Port-Multiplier hotplug support: ATA_FLAG_AN

DISCUSSION Mark Lord 3 participants 5 messages May 13, 2008 – May 14, 2008 libata

lore
Share & tools
lore

Mark Lord

author
#0 lore raw

Tejun,

Apparently the newer (GenIIe) sata_mv chips *can* support asynchronous notification without problems. Some/all of the older ones cannot (errata).

So, I've done the one-liner change in sata_mv, to add ATA_FLAG_AN to the 7042 and 6042 chips, and it all seems to work rather nicely.

Am I missing something? Is there any other local code to sata_mv that should be provided before setting ATA_FLAG_AN ?

Like I said, it works, but I just want to check whether any other pieces are expected to be present?

Cheers

Mark

#1 lore raw
Quoted 5 lines · Mark Lord

Tejun,

Apparently the newer (GenIIe) sata_mv chips *can* support asynchronous notification without problems. Some/all of the older ones cannot (errata).

Quoted 8 lines

So, I've done the one-liner change in sata_mv, to add ATA_FLAG_AN to the 7042 and 6042 chips, and it all seems to work rather nicely.

Am I missing something? Is there any other local code to sata_mv that should be provided before setting ATA_FLAG_AN ?

Like I said, it works, but I just want to check whether any other pieces are expected to be present?

Did you check ATAPI or just PMP AN?

Jeff

author
#2 lore raw
Quoted 9 lines · Jeff Garzik
Quoted 8 lines · Mark Lord

Tejun,

Apparently the newer (GenIIe) sata_mv chips *can* support asynchronous notification without problems. Some/all of the older ones cannot (errata).

So, I've done the one-liner change in sata_mv, to add ATA_FLAG_AN to the 7042 and 6042 chips, and it all seems to work rather nicely.

Quoted 7 lines
Quoted 5 lines

Am I missing something? Is there any other local code to sata_mv that should be provided before setting ATA_FLAG_AN ?

Like I said, it works, but I just want to check whether any other pieces are expected to be present?

Did you check ATAPI or just PMP AN?

..

sata_mv does not (yet) support ATAPI for anything.

-ml

#3 lore raw
In reply to Mark Lord
Quoted 5 lines · Mark Lord

Tejun,

Apparently the newer (GenIIe) sata_mv chips *can* support asynchronous notification without problems. Some/all of the older ones cannot (errata).

Quoted 8 lines

So, I've done the one-liner change in sata_mv, to add ATA_FLAG_AN to the 7042 and 6042 chips, and it all seems to work rather nicely.

Am I missing something? Is there any other local code to sata_mv that should be provided before setting ATA_FLAG_AN ?

Like I said, it works, but I just want to check whether any other pieces are expected to be present?

You need to call sata_async_notification() from interrupt handler after AN FIS is received. sata_async_notification() is responsible for discerning between ATAPI and PMP ANs using SNotification and schedule appropriate actions. If SNotification is not available && PMP is attached, it just calls ata_port_schedule_eh(). That's probably why it just worked by setting ATA_FLAG_AN.

Thanks.

Signature · 1 line
tejun
author
#4 lore raw
Quoted 9 lines · Tejun Heo
Quoted 8 lines · Mark Lord

Tejun,

Apparently the newer (GenIIe) sata_mv chips *can* support asynchronous notification without problems. Some/all of the older ones cannot (errata).

So, I've done the one-liner change in sata_mv, to add ATA_FLAG_AN to the 7042 and 6042 chips, and it all seems to work rather nicely.

Quoted 7 lines
Quoted 5 lines

Am I missing something? Is there any other local code to sata_mv that should be provided before setting ATA_FLAG_AN ?

Like I said, it works, but I just want to check whether any other pieces are expected to be present?

You need to call sata_async_notification() from interrupt handler after AN FIS is received. sata_async_notification() is responsible for discerning between ATAPI and PMP ANs using SNotification and schedule appropriate actions. If SNotification is not available && PMP is attached, it just calls ata_port_schedule_eh(). That's probably why it just worked by setting ATA_FLAG_AN.

..

Okay, that's cool. So mv_err_intr() now just calls sata_async_notification(), and then bails out without further action (if no other errors coincided), and the EH then runs for just that one PM link, rather than the whole port.

(tested, working).

Cool!