|
@@ -17,6 +17,7 @@ DECLARE_GLOBAL_DATA_PTR;
|
|
|
#define AHBCKDIV (void *)(SYSCON_BASE + 0x04)
|
|
|
#define APBCKDIV (void *)(SYSCON_BASE + 0x08)
|
|
|
#define APBCKEN (void *)(SYSCON_BASE + 0x0C)
|
|
|
+#define RESET_REG (void *)(SYSCON_BASE + 0x18)
|
|
|
#define CLKSEL (void *)(SYSCON_BASE + 0x24)
|
|
|
#define CLKSTAT (void *)(SYSCON_BASE + 0x28)
|
|
|
#define PLLCON (void *)(SYSCON_BASE + 0x2C)
|
|
@@ -67,6 +68,14 @@ static int set_cpu_freq(unsigned int clk)
|
|
|
writel((readl(PLLCON) & PLL_MASK_2) | 0x200191, PLLCON);
|
|
|
break;
|
|
|
|
|
|
+ case 136:
|
|
|
+ writel(readl(PLLCON) & PLL_MASK_0, PLLCON);
|
|
|
+ /* pll_off=1, M=17, N=1, OD=1, PLL_OUT_CLK=136M */
|
|
|
+ writel((readl(PLLCON) & PLL_MASK_1) | 0x100111, PLLCON);
|
|
|
+ /* pll_off=0, M=17, N=1, OD=1, PLL_OUT_CLK=136M */
|
|
|
+ writel((readl(PLLCON) & PLL_MASK_2) | 0x100111, PLLCON);
|
|
|
+ break;
|
|
|
+
|
|
|
case 144:
|
|
|
writel(readl(PLLCON) & PLL_MASK_0, PLLCON);
|
|
|
/* pll_off=1, M=18, N=1, OD=1, PLL_OUT_CLK=144M */
|
|
@@ -99,7 +108,7 @@ extern u8 __ram_end[];
|
|
|
*/
|
|
|
int mach_cpu_init(void)
|
|
|
{
|
|
|
- int offset, freq;
|
|
|
+ int offset;
|
|
|
|
|
|
/* Don't relocate U-Boot */
|
|
|
gd->flags |= GD_FLG_SKIP_RELOC;
|
|
@@ -120,12 +129,12 @@ int mach_cpu_init(void)
|
|
|
if (offset < 0)
|
|
|
return offset;
|
|
|
|
|
|
- freq = fdtdec_get_int(gd->fdt_blob, offset, "clock-frequency", 0);
|
|
|
- if (!freq)
|
|
|
+ gd->cpu_clk = fdtdec_get_int(gd->fdt_blob, offset, "clock-frequency", 0);
|
|
|
+ if (!gd->cpu_clk)
|
|
|
return -EINVAL;
|
|
|
|
|
|
/* If CPU freq > 100 MHz, divide eFLASH clock by 2 */
|
|
|
- if (freq > 100000000) {
|
|
|
+ if (gd->cpu_clk > 100000000) {
|
|
|
u32 reg = readl(AHBCKDIV);
|
|
|
|
|
|
reg &= ~(0xF << 8);
|
|
@@ -133,7 +142,7 @@ int mach_cpu_init(void)
|
|
|
writel(reg, AHBCKDIV);
|
|
|
}
|
|
|
|
|
|
- return set_cpu_freq(freq);
|
|
|
+ return set_cpu_freq(gd->cpu_clk);
|
|
|
}
|
|
|
|
|
|
#define ARC_PERIPHERAL_BASE 0xF0000000
|
|
@@ -161,8 +170,32 @@ int board_mmc_init(bd_t *bis)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+int board_mmc_getcd(struct mmc *mmc)
|
|
|
+{
|
|
|
+ struct dwmci_host *host = mmc->priv;
|
|
|
+
|
|
|
+ return !(dwmci_readl(host, DWMCI_CDETECT) & 1);
|
|
|
+}
|
|
|
+
|
|
|
+#define IOTDK_RESET_SEQ 0x55AA6699
|
|
|
+
|
|
|
+void reset_cpu(ulong addr)
|
|
|
+{
|
|
|
+ writel(IOTDK_RESET_SEQ, RESET_REG);
|
|
|
+}
|
|
|
+
|
|
|
int checkboard(void)
|
|
|
{
|
|
|
puts("Board: Synopsys IoT Development Kit\n");
|
|
|
return 0;
|
|
|
};
|
|
|
+
|
|
|
+#ifdef CONFIG_DISPLAY_CPUINFO
|
|
|
+int print_cpuinfo(void)
|
|
|
+{
|
|
|
+ char mhz[8];
|
|
|
+
|
|
|
+ printf("CPU: ARC EM9D at %s MHz\n", strmhz(mhz, gd->cpu_clk));
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+#endif /* CONFIG_DISPLAY_CPUINFO */
|