u32 gem1_rclk_ctrl; /* 0x13c */
u32 gem0_clk_ctrl; /* 0x140 */
u32 gem1_clk_ctrl; /* 0x144 */
- u32 reserved1[46];
+ u32 smc_clk_ctrl; /* 0x148 */
+ u32 lqspi_clk_ctrl; /* 0x14c */
+ u32 reserved1[44];
u32 pss_rst_ctrl; /* 0x200 */
u32 reserved2[15];
u32 fpga_rst_ctrl; /* 0x240 */
extern void zynq_slcr_gem_clk_setup(u32 gem_id, u32 rclk, u32 clk);
extern void zynq_slcr_devcfg_disable(void);
extern void zynq_slcr_devcfg_enable(void);
+extern u32 zynq_slcr_get_lqspi_clk_ctrl(void);
extern u32 zynq_slcr_get_boot_mode(void);
extern u32 zynq_slcr_get_idcode(void);
extern int zynq_slcr_get_mio_pin_status(const char *periph);
unsigned int max_hz, unsigned int mode)
{
int is_dual;
+ unsigned long lqspi_clk_ctrl_reg;
+ unsigned long lqspi_frequency;
struct zynq_qspi_slave *qspi;
debug("%s: bus: %d cs: %d max_hz: %d mode: %d\n",
return NULL;
}
+/*
+ * Read the lqspi_clk_ctrl_reg register and calculate the frequency. If failure
+ * revert to 200Mhz
+ */
+
+ lqspi_clk_ctrl_reg = zynq_slcr_get_lqspi_clk_ctrl();
+
+ lqspi_frequency = (CONFIG_CPU_FREQ_HZ / ((lqspi_clk_ctrl_reg & 0x3F00)>>
+ 8));
+ if (!lqspi_frequency) {
+ printf("Defaulting to 200000000 Hz qspi clk");
+ qspi->qspi.master.input_clk_hz = 200000000;
+ } else {
+ qspi->qspi.master.input_clk_hz = lqspi_frequency;
+ printf("Qspi clk frequency set to %d Hz\n", lqspi_frequency);
+ }
+
qspi->slave.is_dual = is_dual;
- qspi->qspi.master.input_clk_hz = 100000000;
qspi->qspi.master.speed_hz = qspi->qspi.master.input_clk_hz / 2;
qspi->qspi.max_speed_hz = qspi->qspi.master.speed_hz;
qspi->qspi.master.is_dual = is_dual;
qspi->qspi.bits_per_word = 32;
zynq_qspi_setup_transfer(&qspi->qspi, NULL);
+ debug("%s: lqspi_clk_ctrl_reg: %d CONFIG_CPU_FREQ_HZ %d\n",
+ __func__, lqspi_clk_ctrl_reg, CONFIG_CPU_FREQ_HZ);
+
spi_enable_quad_bit(&qspi->slave);
return &qspi->slave;