diff options
| -rw-r--r-- | drivers/ata/sata_sil24.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/ata/sata_sil24.c b/drivers/ata/sata_sil24.c index a7f0139c3aae..be7726d7686d 100644 --- a/drivers/ata/sata_sil24.c +++ b/drivers/ata/sata_sil24.c | |||
| @@ -622,6 +622,11 @@ static int sil24_exec_polled_cmd(struct ata_port *ap, int pmp, | |||
| 622 | irq_enabled = readl(port + PORT_IRQ_ENABLE_SET); | 622 | irq_enabled = readl(port + PORT_IRQ_ENABLE_SET); |
| 623 | writel(PORT_IRQ_COMPLETE | PORT_IRQ_ERROR, port + PORT_IRQ_ENABLE_CLR); | 623 | writel(PORT_IRQ_COMPLETE | PORT_IRQ_ERROR, port + PORT_IRQ_ENABLE_CLR); |
| 624 | 624 | ||
| 625 | /* | ||
| 626 | * The barrier is required to ensure that writes to cmd_block reach | ||
| 627 | * the memory before the write to PORT_CMD_ACTIVATE. | ||
| 628 | */ | ||
| 629 | wmb(); | ||
| 625 | writel((u32)paddr, port + PORT_CMD_ACTIVATE); | 630 | writel((u32)paddr, port + PORT_CMD_ACTIVATE); |
| 626 | writel((u64)paddr >> 32, port + PORT_CMD_ACTIVATE + 4); | 631 | writel((u64)paddr >> 32, port + PORT_CMD_ACTIVATE + 4); |
| 627 | 632 | ||
| @@ -895,6 +900,11 @@ static unsigned int sil24_qc_issue(struct ata_queued_cmd *qc) | |||
| 895 | paddr = pp->cmd_block_dma + tag * sizeof(*pp->cmd_block); | 900 | paddr = pp->cmd_block_dma + tag * sizeof(*pp->cmd_block); |
| 896 | activate = port + PORT_CMD_ACTIVATE + tag * 8; | 901 | activate = port + PORT_CMD_ACTIVATE + tag * 8; |
| 897 | 902 | ||
| 903 | /* | ||
| 904 | * The barrier is required to ensure that writes to cmd_block reach | ||
| 905 | * the memory before the write to PORT_CMD_ACTIVATE. | ||
| 906 | */ | ||
| 907 | wmb(); | ||
| 898 | writel((u32)paddr, activate); | 908 | writel((u32)paddr, activate); |
| 899 | writel((u64)paddr >> 32, activate + 4); | 909 | writel((u64)paddr >> 32, activate + 4); |
| 900 | 910 | ||
