This is purely clock code and should be in clock driver.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
#define DDRC_CTRL_REG1_OFFS 0x60
#define DDRC_DRAM_PARAM_REG3_OFFS 0x20
#define SCU_CTRL 0
-#define SLCR_TOPSW_CLK_CTRL 0x16c
#define DDRC_CLOCKSTOP_MASK BIT(23)
#define DDRC_SELFREFRESH_MASK BIT(12)
#define SCU_STBY_EN_MASK BIT(5)
-#define TOPSW_CLK_CTRL_DIS_MASK BIT(0)
static void __iomem *ddrc_base;
static void __iomem *ocm_base;
}
/* Topswitch clock stop disable */
- reg = zynq_slcr_read(SLCR_TOPSW_CLK_CTRL);
- reg |= TOPSW_CLK_CTRL_DIS_MASK;
- zynq_slcr_write(reg, SLCR_TOPSW_CLK_CTRL);
+ zynq_clk_topswitch_disable();
/* A9 clock gating */
asm volatile ("mrc p15, 0, r12, c15, c0, 0\n"
kfree(ocm_swap_area);
}
- /* Topswitch clock stop disable */
- reg = zynq_slcr_read(SLCR_TOPSW_CLK_CTRL);
- reg &= ~TOPSW_CLK_CTRL_DIS_MASK;
- zynq_slcr_write(reg, SLCR_TOPSW_CLK_CTRL);
+ /* Topswitch clock stop enable */
+ zynq_clk_topswitch_enable();
/* SCU standby mode */
if (zynq_scu_base) {
#define SLCR_CAN_MIOCLK_CTRL (zynq_slcr_base_priv + 0x160)
#define SLCR_DBG_CLK_CTRL (zynq_slcr_base_priv + 0x164)
#define SLCR_PCAP_CLK_CTRL (zynq_slcr_base_priv + 0x168)
+#define SLCR_TOPSW_CLK_CTRL (zynq_slcr_base_priv + 0x16c)
#define SLCR_FPGA0_CLK_CTRL (zynq_slcr_base_priv + 0x170)
#define SLCR_621_TRUE (zynq_slcr_base_priv + 0x1c4)
#define SLCR_SWDT_CLK_SEL (zynq_slcr_base_priv + 0x304)
static struct clk *armpll_save_parent;
static struct clk *iopll_save_parent;
+#define TOPSW_CLK_CTRL_DIS_MASK BIT(0)
+
int zynq_clk_suspend_early(void)
{
int ret;
zynq_clk_suspended = 0;
}
+
+void zynq_clk_topswitch_enable(void)
+{
+ u32 reg;
+
+ reg = readl(SLCR_TOPSW_CLK_CTRL);
+ reg &= ~TOPSW_CLK_CTRL_DIS_MASK;
+ writel(reg, SLCR_TOPSW_CLK_CTRL);
+}
+
+void zynq_clk_topswitch_disable(void)
+{
+ u32 reg;
+
+ reg = readl(SLCR_TOPSW_CLK_CTRL);
+ reg |= TOPSW_CLK_CTRL_DIS_MASK;
+ writel(reg, SLCR_TOPSW_CLK_CTRL);
+}
#endif
static void __init zynq_clk_register_fclk(enum zynq_clk fclk,
int zynq_clk_suspend_early(void);
void zynq_clk_resume_late(void);
+void zynq_clk_topswitch_enable(void);
+void zynq_clk_topswitch_disable(void);
void zynq_clock_init(void __iomem *slcr);
struct clk *clk_register_zynq_pll(const char *name, const char *parent,