summaryrefslogtreecommitdiff
path: root/drivers/ata
diff options
context:
space:
mode:
authorvenkatajagadish <vjagadish@nvidia.com>2014-03-14 12:04:03 +0530
committerLaxman Dewangan <ldewangan@nvidia.com>2014-03-20 01:05:27 -0700
commit7ebdd3d7ef56c8f412ef6d0404f814ae2d4eb67a (patch)
treedd76988b64a73c8bd1a3da23bd80f3a67f0f0472 /drivers/ata
parent12c2947deb045cc51b6d8f041d5e0b1602fd2b0e (diff)
SATA: tegra: Fix SATA write sync issue
It is required to read back the register to make sure the write operation is completed Change-Id: I0d9c83451819c3e059256c0f54193290b40ec923 Signed-off-by: venkatajagadish <vjagadish@nvidia.com> Reviewed-on: http://git-master/r/381906 Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/ahci-tegra.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/ata/ahci-tegra.c b/drivers/ata/ahci-tegra.c
index d894da56008f..dbc7524150b3 100644
--- a/drivers/ata/ahci-tegra.c
+++ b/drivers/ata/ahci-tegra.c
@@ -480,6 +480,7 @@ static inline void port_writel(u32 val, u32 offset)
{
AHCI_DBG_PRINT("[0x%x] => 0x%08x\n", PORT_BASE + offset, val);
writel(val, IO_ADDRESS(PORT_BASE + offset));
+ readl(IO_ADDRESS(PORT_BASE + offset));
}
static inline u32 bar5_readl(u32 offset)
@@ -496,6 +497,7 @@ static inline void bar5_writel(u32 val, u32 offset)
AHCI_DBG_PRINT("[0x%x] <= 0x%08x\n", TEGRA_SATA_BAR5_BASE+offset,
val);
writel(val, IO_ADDRESS(TEGRA_SATA_BAR5_BASE + offset));
+ readl(IO_ADDRESS(TEGRA_SATA_BAR5_BASE + offset));
}
@@ -513,6 +515,7 @@ static inline void xusb_writel(u32 val, u32 offset)
AHCI_DBG_PRINT("[0x%x] <= 0x%08x\n", TEGRA_XUSB_PADCTL_BASE+offset,
val);
writel(val, IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE + offset));
+ readl(IO_ADDRESS(TEGRA_XUSB_PADCTL_BASE + offset));
}
@@ -528,6 +531,7 @@ static inline void pmc_writel(u32 val, u32 offset)
{
AHCI_DBG_PRINT("[0x%x] <= 0x%08x\n", TEGRA_PMC_BASE+offset, val);
writel(val, IO_ADDRESS(TEGRA_PMC_BASE + offset));
+ readl(IO_ADDRESS(TEGRA_PMC_BASE + offset));
}
static inline u32 clk_readl(u32 offset)
@@ -543,6 +547,7 @@ static inline void clk_writel(u32 val, u32 offset)
{
AHCI_DBG_PRINT("[0x%x] <= 0x%08x\n", TEGRA_CLK_RESET_BASE+offset, val);
writel(val, IO_ADDRESS(TEGRA_CLK_RESET_BASE + offset));
+ readl(IO_ADDRESS(TEGRA_CLK_RESET_BASE + offset));
}
static inline u32 misc_readl(u32 offset)
@@ -558,6 +563,7 @@ static inline void misc_writel(u32 val, u32 offset)
{
AHCI_DBG_PRINT("[0x%x] <= 0x%08x\n", TEGRA_APB_MISC_BASE+offset, val);
writel(val, IO_ADDRESS(TEGRA_APB_MISC_BASE + offset));
+ readl(IO_ADDRESS(TEGRA_APB_MISC_BASE + offset));
}
static inline u32 sata_readl(u32 offset)
@@ -573,6 +579,7 @@ static inline void sata_writel(u32 val, u32 offset)
{
AHCI_DBG_PRINT("[0x%x] <= 0x%08x\n", TEGRA_SATA_BASE+offset, val);
writel(val, IO_ADDRESS(TEGRA_SATA_BASE + offset));
+ readl(IO_ADDRESS(TEGRA_SATA_BASE + offset));
}
static inline u32 scfg_readl(u32 offset)
@@ -590,6 +597,7 @@ static inline void scfg_writel(u32 val, u32 offset)
AHCI_DBG_PRINT("[0x%x] <= 0x%08x\n", TEGRA_SATA_CONFIG_BASE+offset,
val);
writel(val, IO_ADDRESS(TEGRA_SATA_CONFIG_BASE + offset));
+ readl(IO_ADDRESS(TEGRA_SATA_CONFIG_BASE + offset));
}
static inline u32 pictlr_readl(u32 offset)
@@ -607,6 +615,7 @@ static inline void pictlr_writel(u32 val, u32 offset)
AHCI_DBG_PRINT("[0x%x] <= 0x%08x\n", TEGRA_PRIMARY_ICTLR_BASE+offset,
val);
writel(val, IO_ADDRESS(TEGRA_PRIMARY_ICTLR_BASE + offset));
+ readl(IO_ADDRESS(TEGRA_PRIMARY_ICTLR_BASE + offset));
}
static inline u32 fuse_readl(u32 offset)