clk: tegra: add fence_delay for clock registers
authorPeter De Schrijver <pdeschrijver@nvidia.com>
Thu, 25 Jan 2018 14:00:11 +0000 (16:00 +0200)
committerThierry Reding <treding@nvidia.com>
Thu, 8 Mar 2018 14:26:54 +0000 (15:26 +0100)
To ensure writes to clock registers have properly propagated through the
clock control logic and state machines, we need to ensure the writes have
been posted in the registers and wait for 1us after that.

Signed-off-by: Peter De Schrijver <pdeschrijver@nvidia.com>
Reviewed-by: Jon Hunter <jonathanh@nvidia.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Tested-by: Hector Martin <marcan@marcan.st>
Tested-by: Andre Heider <a.heider@gmail.com>
Tested-by: Mikko Perttunen <mperttunen@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/clk/tegra/clk.h

index 3b2763df51c2e0f7c5a5113f8df68dbbc4cb9b21..ba7e20e6a82ba84363259c2e705b8f5585bd7902 100644 (file)
@@ -812,4 +812,11 @@ int tegra_pll_wait_for_lock(struct tegra_clk_pll *pll);
 u16 tegra_pll_get_fixed_mdiv(struct clk_hw *hw, unsigned long input_rate);
 int tegra_pll_p_div_to_hw(struct tegra_clk_pll *pll, u8 p_div);
 
+/* Combined read fence with delay */
+#define fence_udelay(delay, reg)       \
+       do {                            \
+               readl(reg);             \
+               udelay(delay);          \
+       } while (0)
+
 #endif /* TEGRA_CLK_H */