static u32 mxc_get_pll_pfd(enum pll_clocks pll, int pfd_num) { u32 div; u64 freq; switch (pll) { case PLL_BUS: if (!is_mx6ul() && !is_mx6ull()) { if (pfd_num == 3) { /* No PFD3 on PLL2 */ return 0; } } div = __raw_readl(&imx_ccm->analog_pfd_528); freq = (u64)decode_pll(PLL_BUS, MXC_HCLK); break; case PLL_USBOTG: div = __raw_readl(&imx_ccm->analog_pfd_480); freq = (u64)decode_pll(PLL_USBOTG, MXC_HCLK); break; default: /* No PFD on other PLL */ return 0; } return lldiv(freq * 18, (div & ANATOP_PFD_FRAC_MASK(pfd_num)) >> ANATOP_PFD_FRAC_SHIFT(pfd_num)); }
void init_aips(void) { struct aipstz_regs *aips1, *aips2, *aips3; aips1 = (struct aipstz_regs *)AIPS1_BASE_ADDR; aips2 = (struct aipstz_regs *)AIPS2_BASE_ADDR; aips3 = (struct aipstz_regs *)AIPS3_BASE_ADDR; /* * Set all MPROTx to be non-bufferable, trusted for R/W, * not forced to user-mode. */ writel(0x77777777, &aips1->mprot0); writel(0x77777777, &aips1->mprot1); writel(0x77777777, &aips2->mprot0); writel(0x77777777, &aips2->mprot1); /* * Set all OPACRx to be non-bufferable, not require * supervisor privilege level for access,allow for * write access and untrusted master access. */ writel(0x00000000, &aips1->opacr0); writel(0x00000000, &aips1->opacr1); writel(0x00000000, &aips1->opacr2); writel(0x00000000, &aips1->opacr3); writel(0x00000000, &aips1->opacr4); writel(0x00000000, &aips2->opacr0); writel(0x00000000, &aips2->opacr1); writel(0x00000000, &aips2->opacr2); writel(0x00000000, &aips2->opacr3); writel(0x00000000, &aips2->opacr4); if (is_mx6ull() || is_mx6sx() || is_mx7()) { /* * Set all MPROTx to be non-bufferable, trusted for R/W, * not forced to user-mode. */ writel(0x77777777, &aips3->mprot0); writel(0x77777777, &aips3->mprot1); /* * Set all OPACRx to be non-bufferable, not require * supervisor privilege level for access,allow for * write access and untrusted master access. */ writel(0x00000000, &aips3->opacr0); writel(0x00000000, &aips3->opacr1); writel(0x00000000, &aips3->opacr2); writel(0x00000000, &aips3->opacr3); writel(0x00000000, &aips3->opacr4); } }
static inline int gpt_has_clk_source_osc(void) { #if defined(CONFIG_MX6) if (((is_mx6dq()) && (soc_rev() > CHIP_REV_1_0)) || is_mx6dqp() || is_mx6sdl() || is_mx6sx() || is_mx6ul() || is_mx6ull() || is_mx6sll()) return 1; return 0; #else return 0; #endif }
void enable_uart_clk(unsigned char enable) { u32 mask; if (is_mx6ul() || is_mx6ull()) mask = MXC_CCM_CCGR5_UART_MASK; else mask = MXC_CCM_CCGR5_UART_MASK | MXC_CCM_CCGR5_UART_SERIAL_MASK; if (enable) setbits_le32(&imx_ccm->CCGR5, mask); else clrbits_le32(&imx_ccm->CCGR5, mask); }
void imx_wdog_disable_powerdown(void) { struct wdog_regs *wdog1 = (struct wdog_regs *)WDOG1_BASE_ADDR; struct wdog_regs *wdog2 = (struct wdog_regs *)WDOG2_BASE_ADDR; struct wdog_regs *wdog3 = (struct wdog_regs *)WDOG3_BASE_ADDR; #ifdef CONFIG_MX7D struct wdog_regs *wdog4 = (struct wdog_regs *)WDOG4_BASE_ADDR; #endif /* Write to the PDE (Power Down Enable) bit */ writew(0, &wdog1->wmcr); writew(0, &wdog2->wmcr); if (is_mx6sx() || is_mx6ul() || is_mx6ull() || is_mx7()) writew(0, &wdog3->wmcr); #ifdef CONFIG_MX7D writew(0, &wdog4->wmcr); #endif }
void enable_enet_clk(unsigned char enable) { u32 mask, *addr; if (is_mx6ull()) { mask = MXC_CCM_CCGR0_ENET_CLK_ENABLE_MASK; addr = &imx_ccm->CCGR0; } else if (is_mx6ul()) { mask = MXC_CCM_CCGR3_ENET_MASK; addr = &imx_ccm->CCGR3; } else { mask = MXC_CCM_CCGR1_ENET_MASK; addr = &imx_ccm->CCGR1; } if (enable) setbits_le32(addr, mask); else clrbits_le32(addr, mask); }
/* i2c_num can be from 0 - 3 */ int enable_i2c_clk(unsigned char enable, unsigned i2c_num) { u32 reg; u32 mask; u32 *addr; if (i2c_num > 3) return -EINVAL; if (i2c_num < 3) { mask = MXC_CCM_CCGR_CG_MASK << (MXC_CCM_CCGR2_I2C1_SERIAL_OFFSET + (i2c_num << 1)); reg = __raw_readl(&imx_ccm->CCGR2); if (enable) reg |= mask; else reg &= ~mask; __raw_writel(reg, &imx_ccm->CCGR2); } else { if (is_mx6sll()) return -EINVAL; if (is_mx6sx() || is_mx6ul() || is_mx6ull()) { mask = MXC_CCM_CCGR6_I2C4_MASK; addr = &imx_ccm->CCGR6; } else { mask = MXC_CCM_CCGR1_I2C4_SERIAL_MASK; addr = &imx_ccm->CCGR1; } reg = __raw_readl(addr); if (enable) reg |= mask; else reg &= ~mask; __raw_writel(reg, addr); } return 0; }