Commit d3587243 authored by Dave Liu's avatar Dave Liu Committed by Jeff Garzik

sata_fsl: Fix the command description of FSL SATA controller

The bit 11 of command description is reserved bit in Freescale
SATA controller and needs to be set to '1'.  This is needed to
make sure the last write from the controller to the buffer
descriptor is seen before an interrupt is raised.
Signed-off-by: default avatarDave Liu <daveliu@freescale.com>
Signed-off-by: default avatarKumar Gala <galak@kernel.crashing.org>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent f48c019f
...@@ -205,6 +205,7 @@ struct cmdhdr_tbl_entry { ...@@ -205,6 +205,7 @@ struct cmdhdr_tbl_entry {
* Description information bitdefs * Description information bitdefs
*/ */
enum { enum {
CMD_DESC_RES = (1 << 11),
VENDOR_SPECIFIC_BIST = (1 << 10), VENDOR_SPECIFIC_BIST = (1 << 10),
CMD_DESC_SNOOP_ENABLE = (1 << 9), CMD_DESC_SNOOP_ENABLE = (1 << 9),
FPDMA_QUEUED_CMD = (1 << 8), FPDMA_QUEUED_CMD = (1 << 8),
...@@ -388,7 +389,7 @@ static void sata_fsl_qc_prep(struct ata_queued_cmd *qc) ...@@ -388,7 +389,7 @@ static void sata_fsl_qc_prep(struct ata_queued_cmd *qc)
void __iomem *hcr_base = host_priv->hcr_base; void __iomem *hcr_base = host_priv->hcr_base;
unsigned int tag = sata_fsl_tag(qc->tag, hcr_base); unsigned int tag = sata_fsl_tag(qc->tag, hcr_base);
struct command_desc *cd; struct command_desc *cd;
u32 desc_info = CMD_DESC_SNOOP_ENABLE; u32 desc_info = CMD_DESC_RES | CMD_DESC_SNOOP_ENABLE;
u32 num_prde = 0; u32 num_prde = 0;
u32 ttl_dwords = 0; u32 ttl_dwords = 0;
dma_addr_t cd_paddr; dma_addr_t cd_paddr;
...@@ -841,7 +842,7 @@ static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, ...@@ -841,7 +842,7 @@ static int sata_fsl_softreset(struct ata_link *link, unsigned int *class,
/* device reset/SRST is a control register update FIS, uses tag0 */ /* device reset/SRST is a control register update FIS, uses tag0 */
sata_fsl_setup_cmd_hdr_entry(pp, 0, sata_fsl_setup_cmd_hdr_entry(pp, 0,
SRST_CMD | CMD_DESC_SNOOP_ENABLE, 0, 0, 5); SRST_CMD | CMD_DESC_RES | CMD_DESC_SNOOP_ENABLE, 0, 0, 5);
tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */ tf.ctl |= ATA_SRST; /* setup SRST bit in taskfile control reg */
ata_tf_to_fis(&tf, pmp, 0, cfis); ata_tf_to_fis(&tf, pmp, 0, cfis);
...@@ -887,7 +888,8 @@ static int sata_fsl_softreset(struct ata_link *link, unsigned int *class, ...@@ -887,7 +888,8 @@ static int sata_fsl_softreset(struct ata_link *link, unsigned int *class,
* using ATA signature D2H register FIS to the host controller. * using ATA signature D2H register FIS to the host controller.
*/ */
sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_SNOOP_ENABLE, 0, 0, 5); sata_fsl_setup_cmd_hdr_entry(pp, 0, CMD_DESC_RES | CMD_DESC_SNOOP_ENABLE,
0, 0, 5);
tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */ tf.ctl &= ~ATA_SRST; /* 2nd H2D Ctl. register FIS */
ata_tf_to_fis(&tf, pmp, 0, cfis); ata_tf_to_fis(&tf, pmp, 0, cfis);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment