static int nand_init(void) { u32 i, reg; void __iomem *base; #define M4IF_GENP_WEIM_MM_MASK 0x00000001 #define WEIM_GCR2_MUX16_BYP_GRANT_MASK 0x00001000 base = ioremap(MX53_BASE_ADDR(M4IF_BASE_ADDR), SZ_4K); reg = __raw_readl(base + 0xc); reg &= ~M4IF_GENP_WEIM_MM_MASK; __raw_writel(reg, base + 0xc); iounmap(base); base = ioremap(MX53_BASE_ADDR(WEIM_BASE_ADDR), SZ_4K); for (i = 0x4; i < 0x94; i += 0x18) { reg = __raw_readl((u32)base + i); reg &= ~WEIM_GCR2_MUX16_BYP_GRANT_MASK; __raw_writel(reg, (u32)base + i); } iounmap(base); return 0; }
/* Config CS1 settings for ethernet controller */ static void weim_cs_config(void) { u32 reg; void __iomem *weim_base, *iomuxc_base; weim_base = ioremap(MX53_BASE_ADDR(WEIM_BASE_ADDR), SZ_4K); iomuxc_base = ioremap(MX53_BASE_ADDR(IOMUXC_BASE_ADDR), SZ_4K); /* CS1 timings for LAN9220 */ writel(0x20001, (weim_base + 0x18)); writel(0x0, (weim_base + 0x1C)); writel(0x16000202, (weim_base + 0x20)); writel(0x00000002, (weim_base + 0x24)); writel(0x16002082, (weim_base + 0x28)); writel(0x00000000, (weim_base + 0x2C)); writel(0x00000000, (weim_base + 0x90)); /* specify 64 MB on CS1 and CS0 on GPR1 */ reg = readl(iomuxc_base + 0x4); reg &= ~0x3F; reg |= 0x1B; writel(reg, (iomuxc_base + 0x4)); iounmap(iomuxc_base); iounmap(weim_base); }
static void __init mx53_evk_timer_init(void) { struct clk *uart_clk; mx53_clocks_init(32768, 24000000, 22579200, 24576000); uart_clk = clk_get_sys("mxcintuart.0", NULL); early_console_setup(MX53_BASE_ADDR(UART1_BASE_ADDR), uart_clk); }
/*! * This function resets IPU */ void mx5_ipu_reset(void) { u32 *reg; u32 value; reg = ioremap(MX53_BASE_ADDR(SRC_BASE_ADDR), PAGE_SIZE); value = __raw_readl(reg); value = value | 0x8; __raw_writel(value, reg); iounmap(reg); }
void mx5_vpu_reset(void) { u32 reg; void __iomem *src_base; src_base = ioremap(MX53_BASE_ADDR(SRC_BASE_ADDR), PAGE_SIZE); /* mask interrupt due to vpu passed reset */ reg = __raw_readl(src_base + 0x18); reg |= 0x02; __raw_writel(reg, src_base + 0x18); reg = __raw_readl(src_base); reg |= 0x5; /* warm reset vpu */ __raw_writel(reg, src_base); while (__raw_readl(src_base) & 0x04) ; iounmap(src_base); }
static int __init post_cpu_init(void) { void __iomem *base; unsigned int reg; struct clk *gpcclk = clk_get(NULL, "gpc_dvfs_clk"); int iram_size = IRAM_SIZE; if (!cpu_is_mx5()) return 0; if (cpu_is_mx51()) { mipi_hsc_disable(); #if defined(CONFIG_MXC_SECURITY_SCC) || defined(CONFIG_MXC_SECURITY_SCC_MODULE) iram_size -= SCC_RAM_SIZE; #endif iram_init(MX51_IRAM_BASE_ADDR, iram_size); } else { iram_init(MX53_IRAM_BASE_ADDR, iram_size); } gpc_base = ioremap(MX53_BASE_ADDR(GPC_BASE_ADDR), SZ_4K); ccm_base = ioremap(MX53_BASE_ADDR(CCM_BASE_ADDR), SZ_4K); clk_enable(gpcclk); /* Setup the number of clock cycles to wait for SRPG * power up and power down requests. */ __raw_writel(0x010F0201, gpc_base + SRPG_ARM_PUPSCR); __raw_writel(0x010F0201, gpc_base + SRPG_NEON_PUPSCR); __raw_writel(0x00000008, gpc_base + SRPG_EMPGC0_PUPSCR); __raw_writel(0x00000008, gpc_base + SRPG_EMPGC1_PUPSCR); __raw_writel(0x01010101, gpc_base + SRPG_ARM_PDNSCR); __raw_writel(0x01010101, gpc_base + SRPG_NEON_PDNSCR); __raw_writel(0x00000018, gpc_base + SRPG_EMPGC0_PDNSCR); __raw_writel(0x00000018, gpc_base + SRPG_EMPGC1_PDNSCR); clk_disable(gpcclk); clk_put(gpcclk); /* Set ALP bits to 000. Set ALP_EN bit in Arm Memory Controller reg. */ arm_plat_base = ioremap(MX53_BASE_ADDR(ARM_BASE_ADDR), SZ_4K); reg = 0x8; __raw_writel(reg, arm_plat_base + CORTEXA8_PLAT_AMC); base = ioremap(MX53_BASE_ADDR(AIPS1_BASE_ADDR), SZ_4K); __raw_writel(0x0, base + 0x40); __raw_writel(0x0, base + 0x44); __raw_writel(0x0, base + 0x48); __raw_writel(0x0, base + 0x4C); reg = __raw_readl(base + 0x50) & 0x00FFFFFF; __raw_writel(reg, base + 0x50); iounmap(base); base = ioremap(MX53_BASE_ADDR(AIPS2_BASE_ADDR), SZ_4K); __raw_writel(0x0, base + 0x40); __raw_writel(0x0, base + 0x44); __raw_writel(0x0, base + 0x48); __raw_writel(0x0, base + 0x4C); reg = __raw_readl(base + 0x50) & 0x00FFFFFF; __raw_writel(reg, base + 0x50); iounmap(base); if (cpu_is_mx51() || cpu_is_mx53()) { /*Allow for automatic gating of the EMI internal clock. * If this is done, emi_intr CCGR bits should be set to 11. */ base = ioremap(MX53_BASE_ADDR(M4IF_BASE_ADDR), SZ_4K); reg = __raw_readl(base + 0x8c); reg &= ~0x1; __raw_writel(reg, base + 0x8c); iounmap(base); } if (cpu_is_mx50()) init_ddr_settings(); return 0; }