forked from luck/tmp_suning_uos_patched
libata-pmp: clear hob for pmp register accesses
>> Mark Lord wrote: >>> Tejun, I've added PMP to sata_mv, and am now trying to get it >>> to work with a Marvell PM attached. >>> >>> And the behaviour I see is very bizarre. >>> >>> After hard+soft resets, the PM signature is found, >>> and libata interrogates the PM registers. >>> >>> It successfully reads register 0, and then register 1. >>> But all subsequent registers read out (incorrectly) as zeros. ... This behavior has been confirmed by Marvell with a SATA analyzer. The Marvell port-multiplier apparently likes to see clean HOB information when accessing PMP registers. Since sata_mv uses PIO shadow register access, this doesn't happen automatically, as it might in a more purely FIS-based driver (eg. ahci). One way to fix this is to flag these commands with ATA_TFLAG_LBA48, forcing libata to write out the HOB fields with known (zero) values. Signed-off-by: Saeed Bishara <saeed@marvell.com> Acked-by: Mark Lord <mlord@pobox.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
9116300634
commit
39f25e70ca
|
@ -35,7 +35,7 @@ static unsigned int sata_pmp_read(struct ata_link *link, int reg, u32 *r_val)
|
|||
ata_tf_init(pmp_dev, &tf);
|
||||
tf.command = ATA_CMD_PMP_READ;
|
||||
tf.protocol = ATA_PROT_NODATA;
|
||||
tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
|
||||
tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48;
|
||||
tf.feature = reg;
|
||||
tf.device = link->pmp;
|
||||
|
||||
|
@ -71,7 +71,7 @@ static unsigned int sata_pmp_write(struct ata_link *link, int reg, u32 val)
|
|||
ata_tf_init(pmp_dev, &tf);
|
||||
tf.command = ATA_CMD_PMP_WRITE;
|
||||
tf.protocol = ATA_PROT_NODATA;
|
||||
tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
|
||||
tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE | ATA_TFLAG_LBA48;
|
||||
tf.feature = reg;
|
||||
tf.device = link->pmp;
|
||||
tf.nsect = val & 0xff;
|
||||
|
|
Loading…
Reference in New Issue
Block a user