static int conf_disp_pll(int m, int n) { struct cm_perpll *cmper = (struct cm_perpll *)CM_PER; struct dpll_params dpll_lcd = {m, n, -1, -1, -1, -1, -1}; #if defined(DISPL_PLL_SPREAD_SPECTRUM) struct cm_wkuppll *cmwkup = (struct cm_wkuppll *)CM_WKUP; #endif u32 *const clk_domains[] = { &cmper->lcdclkctrl, 0 }; u32 *const clk_modules_explicit_en[] = { &cmper->lcdclkctrl, &cmper->lcdcclkstctrl, &cmper->spi1clkctrl, 0 }; do_enable_clocks(clk_domains, clk_modules_explicit_en, 1); do_setup_dpll(&dpll_lcd_regs, &dpll_lcd); #if defined(DISPL_PLL_SPREAD_SPECTRUM) writel(0x64, &cmwkup->resv6[3]); /* 0x50 */ writel(0x800, &cmwkup->resv6[2]); /* 0x4c */ writel(readl(&cmwkup->clkmoddplldisp) | CM_CLKMODE_DPLL_SSC_EN_MASK, &cmwkup->clkmoddplldisp); /* 0x98 */ #endif return 0; }
void enable_basic_uboot_clocks(void) { u32 const clk_domains_essential[] = { #if defined(CONFIG_DRA7XX) || defined(CONFIG_AM57XX) (*prcm)->cm_ipu_clkstctrl, #endif 0 }; u32 const clk_modules_hw_auto_essential[] = { (*prcm)->cm_l3init_hsusbtll_clkctrl, 0 }; u32 const clk_modules_explicit_en_essential[] = { (*prcm)->cm_l4per_mcspi1_clkctrl, (*prcm)->cm_l4per_i2c2_clkctrl, (*prcm)->cm_l4per_i2c3_clkctrl, (*prcm)->cm_l4per_i2c4_clkctrl, #if defined(CONFIG_DRA7XX) || defined(CONFIG_AM57XX) (*prcm)->cm_ipu_i2c5_clkctrl, #else (*prcm)->cm_l4per_i2c5_clkctrl, #endif (*prcm)->cm_l3init_hsusbhost_clkctrl, (*prcm)->cm_l3init_fsusb_clkctrl, 0 }; do_enable_clocks(clk_domains_essential, clk_modules_hw_auto_essential, clk_modules_explicit_en_essential, 1); }
void enable_basic_uboot_clocks(void) { u32 const clk_domains_essential[] = { 0 }; u32 const clk_modules_hw_auto_essential[] = { (*prcm)->cm_l3init_hsusbtll_clkctrl, 0 }; u32 const clk_modules_explicit_en_essential[] = { (*prcm)->cm_l4per_mcspi1_clkctrl, (*prcm)->cm_l4per_i2c2_clkctrl, (*prcm)->cm_l4per_i2c3_clkctrl, (*prcm)->cm_l4per_i2c4_clkctrl, (*prcm)->cm_l4per_i2c5_clkctrl, (*prcm)->cm_l3init_hsusbhost_clkctrl, (*prcm)->cm_l3init_fsusb_clkctrl, 0 }; do_enable_clocks(clk_domains_essential, clk_modules_hw_auto_essential, clk_modules_explicit_en_essential, 1); }
void enable_basic_uboot_clocks(void) { u32 const clk_domains_essential[] = { 0 }; u32 const clk_modules_hw_auto_essential[] = { (*prcm)->cm_l3init_hsusbotg_clkctrl, (*prcm)->cm_l3init_usbphy_clkctrl, (*prcm)->cm_clksel_usb_60mhz, (*prcm)->cm_l3init_hsusbtll_clkctrl, 0 }; u32 const clk_modules_explicit_en_essential[] = { (*prcm)->cm_l4per_mcspi1_clkctrl, (*prcm)->cm_l3init_hsusbhost_clkctrl, 0 }; do_enable_clocks(clk_domains_essential, clk_modules_hw_auto_essential, clk_modules_explicit_en_essential, 1); }
/* * Enable essential clock domains, modules and * do some additional special settings needed */ void enable_basic_clocks(void) { u32 const clk_domains_essential[] = { (*prcm)->cm_l4per_clkstctrl, (*prcm)->cm_l3init_clkstctrl, (*prcm)->cm_memif_clkstctrl, (*prcm)->cm_l4cfg_clkstctrl, 0 }; u32 const clk_modules_hw_auto_essential[] = { (*prcm)->cm_l3_gpmc_clkctrl, (*prcm)->cm_memif_emif_1_clkctrl, (*prcm)->cm_memif_emif_2_clkctrl, (*prcm)->cm_l4cfg_l4_cfg_clkctrl, (*prcm)->cm_wkup_gpio1_clkctrl, (*prcm)->cm_l4per_gpio2_clkctrl, (*prcm)->cm_l4per_gpio3_clkctrl, (*prcm)->cm_l4per_gpio4_clkctrl, (*prcm)->cm_l4per_gpio5_clkctrl, (*prcm)->cm_l4per_gpio6_clkctrl, 0 }; u32 const clk_modules_explicit_en_essential[] = { (*prcm)->cm_wkup_gptimer1_clkctrl, (*prcm)->cm_l3init_hsmmc1_clkctrl, (*prcm)->cm_l3init_hsmmc2_clkctrl, (*prcm)->cm_l4per_gptimer2_clkctrl, (*prcm)->cm_wkup_wdtimer2_clkctrl, (*prcm)->cm_l4per_uart3_clkctrl, 0 }; /* Enable optional additional functional clock for GPIO4 */ setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl, GPIO4_CLKCTRL_OPTFCLKEN_MASK); /* Enable 96 MHz clock for MMC1 & MMC2 */ setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl, HSMMC_CLKCTRL_CLKSEL_MASK); setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl, HSMMC_CLKCTRL_CLKSEL_MASK); /* Select 32KHz clock as the source of GPTIMER1 */ setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl, GPTIMER1_CLKCTRL_CLKSEL_MASK); /* Enable optional 48M functional clock for USB PHY */ setbits_le32((*prcm)->cm_l3init_usbphy_clkctrl, USBPHY_CLKCTRL_OPTFCLKEN_PHY_48M_MASK); do_enable_clocks(clk_domains_essential, clk_modules_hw_auto_essential, clk_modules_explicit_en_essential, 1); }
void enable_usb_clocks(int index) { u32 cm_l3init_usb_otg_ss_clkctrl = 0; if (index == 0) { cm_l3init_usb_otg_ss_clkctrl = (*prcm)->cm_l3init_usb_otg_ss1_clkctrl; /* Enable 960 MHz clock for dwc3 */ setbits_le32((*prcm)->cm_l3init_usb_otg_ss1_clkctrl, OPTFCLKEN_REFCLK960M); /* Enable 32 KHz clock for USB_PHY1 */ setbits_le32((*prcm)->cm_coreaon_usb_phy1_core_clkctrl, USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K); /* Enable 32 KHz clock for USB_PHY3 */ if (is_dra7xx()) setbits_le32((*prcm)->cm_coreaon_usb_phy3_core_clkctrl, USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K); } else if (index == 1) { cm_l3init_usb_otg_ss_clkctrl = (*prcm)->cm_l3init_usb_otg_ss2_clkctrl; /* Enable 960 MHz clock for dwc3 */ setbits_le32((*prcm)->cm_l3init_usb_otg_ss2_clkctrl, OPTFCLKEN_REFCLK960M); /* Enable 32 KHz clock for dwc3 */ setbits_le32((*prcm)->cm_coreaon_usb_phy2_core_clkctrl, USBPHY_CORE_CLKCTRL_OPTFCLKEN_CLK32K); /* Enable 60 MHz clock for USB2PHY2 */ setbits_le32((*prcm)->cm_coreaon_l3init_60m_gfclk_clkctrl, L3INIT_CLKCTRL_OPTFCLKEN_60M_GFCLK); } u32 const clk_domains_usb[] = { 0 }; u32 const clk_modules_hw_auto_usb[] = { (*prcm)->cm_l3init_ocp2scp1_clkctrl, cm_l3init_usb_otg_ss_clkctrl, 0 }; u32 const clk_modules_explicit_en_usb[] = { 0 }; do_enable_clocks(clk_domains_usb, clk_modules_hw_auto_usb, clk_modules_explicit_en_usb, 1); }
void enable_basic_clocks(void) { u32 *const clk_domains[] = { &cmper->l3clkstctrl, &cmper->l3sclkstctrl, &cmper->l4lsclkstctrl, &cmwkup->wkclkstctrl, &cmper->emifclkstctrl, 0 }; u32 *const clk_modules_explicit_en[] = { &cmper->l3clkctrl, &cmper->l4lsclkctrl, &cmper->l4fwclkctrl, &cmwkup->wkl4wkclkctrl, &cmper->l3instrclkctrl, &cmper->l4hsclkctrl, &cmwkup->wkgpio0clkctrl, &cmwkup->wkctrlclkctrl, &cmper->timer2clkctrl, &cmper->gpmcclkctrl, &cmper->elmclkctrl, &cmper->mmc0clkctrl, &cmper->mmc1clkctrl, &cmwkup->wkup_i2c0ctrl, &cmper->gpio1clkctrl, &cmper->gpio2clkctrl, &cmper->gpio3clkctrl, &cmper->gpio4clkctrl, &cmper->gpio5clkctrl, &cmper->i2c1clkctrl, &cmper->cpgmac0clkctrl, &cmper->emiffwclkctrl, &cmper->emifclkctrl, &cmper->otfaemifclkctrl, &cmper->qspiclkctrl, 0 }; do_enable_clocks(clk_domains, clk_modules_explicit_en, 1); /* Select the Master osc clk as Timer2 clock source */ writel(0x1, &cmdpll->clktimer2clk); /* For OPP100 the mac clock should be /5. */ writel(0x4, &cmdpll->clkselmacclk); }
void am33xx_spl_board_init(void) { unsigned int oldspeed; unsigned short buf; struct cm_perpll *const cmper = (struct cm_perpll *)CM_PER; struct cm_wkuppll *const cmwkup = (struct cm_wkuppll *)CM_WKUP; /* * enable additional clocks of modules which are accessed later from * VxWorks OS */ u32 *const clk_domains[] = { 0 }; u32 *const clk_modules_xre1specific[] = { &cmwkup->wkup_adctscctrl, &cmper->spi1clkctrl, &cmper->dcan0clkctrl, &cmper->dcan1clkctrl, &cmper->epwmss0clkctrl, &cmper->epwmss1clkctrl, &cmper->epwmss2clkctrl, &cmper->lcdclkctrl, &cmper->lcdcclkstctrl, 0 }; do_enable_clocks(clk_domains, clk_modules_xre1specific, 1); /* power-OFF LCD-Display */ gpio_direction_output(LCD_PWR, 0); /* setup I2C */ enable_i2c_pin_mux(); i2c_set_bus_num(0); i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE); /* power-ON 3V3 via Resetcontroller */ oldspeed = i2c_get_bus_speed(); if (i2c_set_bus_speed(CONFIG_SYS_OMAP24_I2C_SPEED_PSOC) >= 0) { buf = RSTCTRL_FORCE_PWR_NEN | RSTCTRL_CAN_STB; i2c_write(RSTCTRL_ADDR, RSTCTRL_CTRLREG, 1, (uint8_t *)&buf, sizeof(buf)); i2c_set_bus_speed(oldspeed); } else { puts("ERROR: i2c_set_bus_speed failed! (turn on PWR_nEN)\n"); } pmicsetup(0); }
void enable_basic_clocks(void) { u32 *const clk_domains[] = { &cmper->l3clkstctrl, &cmper->l4fwclkstctrl, &cmper->l3sclkstctrl, &cmper->l4lsclkstctrl, &cmwkup->wkclkstctrl, &cmper->emiffwclkctrl, &cmrtc->clkstctrl, 0 }; u32 *const clk_modules_explicit_en[] = { &cmper->l3clkctrl, &cmper->l4lsclkctrl, &cmper->l4fwclkctrl, &cmwkup->wkl4wkclkctrl, &cmper->l3instrclkctrl, &cmper->l4hsclkctrl, &cmwkup->wkgpio0clkctrl, &cmwkup->wkctrlclkctrl, &cmper->timer2clkctrl, &cmper->gpmcclkctrl, &cmper->elmclkctrl, &cmper->mmc0clkctrl, &cmper->mmc1clkctrl, &cmwkup->wkup_i2c0ctrl, &cmper->gpio1clkctrl, &cmper->gpio2clkctrl, &cmper->gpio3clkctrl, &cmper->i2c1clkctrl, &cmper->cpgmac0clkctrl, &cmper->spi0clkctrl, &cmrtc->rtcclkctrl, &cmper->usb0clkctrl, &cmper->emiffwclkctrl, &cmper->emifclkctrl, 0 }; do_enable_clocks(clk_domains, clk_modules_explicit_en, 1); /* Select the Master osc 24 MHZ as Timer2 clock source */ writel(0x1, &cmdpll->clktimer2clk); }
int init_sata(int dev) { int ret; u32 val; u32 const clk_domains_sata[] = { 0 }; u32 const clk_modules_hw_auto_sata[] = { (*prcm)->cm_l3init_ocp2scp3_clkctrl, 0 }; u32 const clk_modules_explicit_en_sata[] = { (*prcm)->cm_l3init_sata_clkctrl, 0 }; do_enable_clocks(clk_domains_sata, clk_modules_hw_auto_sata, clk_modules_explicit_en_sata, 0); /* Enable optional functional clock for SATA */ setbits_le32((*prcm)->cm_l3init_sata_clkctrl, SATA_CLKCTRL_OPTFCLKEN_MASK); sata_phy.power_reg = (void __iomem *)(*ctrl)->control_phy_power_sata; /* Power up the PHY */ phy_pipe3_power_on(&sata_phy); /* Enable SATA module, No Idle, No Standby */ val = TI_SATA_IDLE_NO | TI_SATA_STANDBY_NO; writel(val, TI_SATA_WRAPPER_BASE + TI_SATA_SYSCONFIG); ret = ahci_init(DWC_AHSATA_BASE); return ret; }
void enable_edma3_clocks(void) { u32 const clk_domains_edma3[] = { 0 }; u32 const clk_modules_hw_auto_edma3[] = { (*prcm)->cm_l3main1_tptc1_clkctrl, (*prcm)->cm_l3main1_tptc2_clkctrl, 0 }; u32 const clk_modules_explicit_en_edma3[] = { 0 }; do_enable_clocks(clk_domains_edma3, clk_modules_hw_auto_edma3, clk_modules_explicit_en_edma3, 1); }
void am33xx_spl_board_init(void) { struct cm_perpll *const cmper = (struct cm_perpll *)CM_PER; /*struct cm_wkuppll *const cmwkup = (struct cm_wkuppll *)CM_WKUP;*/ struct cm_dpll *const cmdpll = (struct cm_dpll *)CM_DPLL; /* * in TRM they write a reset value of 1 (=CLK_M_OSC) for the * CLKSEL_TIMER6_CLK Register, in fact reset value is 0, so we need set * the source of timer6 clk to CLK_M_OSC */ writel(0x01, &cmdpll->clktimer6clk); /* enable additional clocks of modules which are accessed later */ u32 *const clk_domains[] = { &cmper->lcdcclkstctrl, 0 }; u32 *const clk_modules_tsspecific[] = { &cmper->lcdclkctrl, &cmper->timer5clkctrl, &cmper->timer6clkctrl, 0 }; do_enable_clocks(clk_domains, clk_modules_tsspecific, 1); /* setup LCD-Pixel Clock */ writel(0x2, &cmdpll->clklcdcpixelclk); /* clock comes from perPLL M2 */ /* setup I2C */ enable_i2c_pin_mux(); i2c_set_bus_num(0); i2c_init(CONFIG_SYS_OMAP24_I2C_SPEED, CONFIG_SYS_OMAP24_I2C_SLAVE); pmicsetup(0); gpio_direction_output(64+29, 1); /* switch NAND_RnB to GPMC_WAIT1 */ gpio_direction_output(64+28, 1); /* switch MII2_CRS to GPMC_WAIT0 */ }
void enable_basic_clocks(void) { u32 *const clk_domains[] = { &cmper->l3clkstctrl, &cmper->l3sclkstctrl, &cmper->l4lsclkstctrl, &cmwkup->wkclkstctrl, &cmper->emifclkstctrl, 0 }; u32 *const clk_modules_explicit_en[] = { &cmper->l3clkctrl, &cmper->l4lsclkctrl, &cmper->l4fwclkctrl, &cmwkup->wkl4wkclkctrl, &cmper->l3instrclkctrl, &cmper->l4hsclkctrl, &cmwkup->wkgpio0clkctrl, &cmwkup->wkctrlclkctrl, &cmper->timer2clkctrl, &cmper->gpmcclkctrl, &cmper->elmclkctrl, &cmper->mmc0clkctrl, &cmper->mmc1clkctrl, &cmwkup->wkup_i2c0ctrl, &cmper->gpio1clkctrl, &cmper->gpio2clkctrl, &cmper->gpio3clkctrl, &cmper->i2c1clkctrl, &cmper->emiffwclkctrl, &cmper->emifclkctrl, &cmper->otfaemifclkctrl, 0 }; do_enable_clocks(clk_domains, clk_modules_explicit_en, 1); }
static int conf_disp_pll(int m, int n) { struct cm_perpll *cmper = (struct cm_perpll *)CM_PER; struct cm_dpll *cmdpll = (struct cm_dpll *)CM_DPLL; struct dpll_params dpll_lcd = {m, n, -1, -1, -1, -1, -1}; u32 *const clk_domains[] = { &cmper->lcdclkctrl, 0 }; u32 *const clk_modules_explicit_en[] = { &cmper->lcdclkctrl, &cmper->lcdcclkstctrl, &cmper->epwmss0clkctrl, 0 }; do_enable_clocks(clk_domains, clk_modules_explicit_en, 1); writel(0x0, &cmdpll->clklcdcpixelclk); do_setup_dpll(&dpll_lcd_regs, &dpll_lcd); return 0; }
/* * Enable essential clock domains, modules and * do some additional special settings needed */ void enable_basic_clocks(void) { u32 const clk_domains_essential[] = { (*prcm)->cm_l4per_clkstctrl, (*prcm)->cm_l3init_clkstctrl, (*prcm)->cm_memif_clkstctrl, (*prcm)->cm_l4cfg_clkstctrl, #ifdef CONFIG_DRIVER_TI_CPSW (*prcm)->cm_gmac_clkstctrl, #endif 0 }; u32 const clk_modules_hw_auto_essential[] = { (*prcm)->cm_l3_gpmc_clkctrl, (*prcm)->cm_memif_emif_1_clkctrl, (*prcm)->cm_memif_emif_2_clkctrl, (*prcm)->cm_l4cfg_l4_cfg_clkctrl, (*prcm)->cm_wkup_gpio1_clkctrl, (*prcm)->cm_l4per_gpio2_clkctrl, (*prcm)->cm_l4per_gpio3_clkctrl, (*prcm)->cm_l4per_gpio4_clkctrl, (*prcm)->cm_l4per_gpio5_clkctrl, (*prcm)->cm_l4per_gpio6_clkctrl, (*prcm)->cm_l4per_gpio7_clkctrl, (*prcm)->cm_l4per_gpio8_clkctrl, 0 }; u32 const clk_modules_explicit_en_essential[] = { (*prcm)->cm_wkup_gptimer1_clkctrl, (*prcm)->cm_l3init_hsmmc1_clkctrl, (*prcm)->cm_l3init_hsmmc2_clkctrl, (*prcm)->cm_l4per_gptimer2_clkctrl, (*prcm)->cm_wkup_wdtimer2_clkctrl, (*prcm)->cm_l4per_uart3_clkctrl, (*prcm)->cm_l4per_i2c1_clkctrl, #ifdef CONFIG_DRIVER_TI_CPSW (*prcm)->cm_gmac_gmac_clkctrl, #endif #ifdef CONFIG_TI_QSPI (*prcm)->cm_l4per_qspi_clkctrl, #endif 0 }; /* Enable optional additional functional clock for GPIO4 */ setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl, GPIO4_CLKCTRL_OPTFCLKEN_MASK); /* Enable 96 MHz clock for MMC1 & MMC2 */ setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl, HSMMC_CLKCTRL_CLKSEL_MASK); setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl, HSMMC_CLKCTRL_CLKSEL_MASK); /* Set the correct clock dividers for mmc */ setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl, HSMMC_CLKCTRL_CLKSEL_DIV_MASK); setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl, HSMMC_CLKCTRL_CLKSEL_DIV_MASK); /* Select 32KHz clock as the source of GPTIMER1 */ setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl, GPTIMER1_CLKCTRL_CLKSEL_MASK); do_enable_clocks(clk_domains_essential, clk_modules_hw_auto_essential, clk_modules_explicit_en_essential, 1); #ifdef CONFIG_TI_QSPI setbits_le32((*prcm)->cm_l4per_qspi_clkctrl, (1<<24)); #endif /* Enable SCRM OPT clocks for PER and CORE dpll */ setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl, OPTFCLKEN_SCRM_PER_MASK); setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl, OPTFCLKEN_SCRM_CORE_MASK); }
/* * Enable essential clock domains, modules and * do some additional special settings needed */ void enable_basic_clocks(void) { u32 const clk_domains_essential[] = { (*prcm)->cm_l4per_clkstctrl, (*prcm)->cm_l3init_clkstctrl, (*prcm)->cm_memif_clkstctrl, (*prcm)->cm_l4cfg_clkstctrl, 0 }; u32 const clk_modules_hw_auto_essential[] = { (*prcm)->cm_l3_gpmc_clkctrl, (*prcm)->cm_memif_emif_1_clkctrl, (*prcm)->cm_memif_emif_2_clkctrl, (*prcm)->cm_l4cfg_l4_cfg_clkctrl, (*prcm)->cm_wkup_gpio1_clkctrl, (*prcm)->cm_l4per_gpio2_clkctrl, (*prcm)->cm_l4per_gpio3_clkctrl, (*prcm)->cm_l4per_gpio4_clkctrl, (*prcm)->cm_l4per_gpio5_clkctrl, (*prcm)->cm_l4per_gpio6_clkctrl, 0 }; u32 const clk_modules_explicit_en_essential[] = { (*prcm)->cm_wkup_gptimer1_clkctrl, (*prcm)->cm_l3init_hsmmc1_clkctrl, (*prcm)->cm_l3init_hsmmc2_clkctrl, (*prcm)->cm_l4per_gptimer2_clkctrl, (*prcm)->cm_wkup_wdtimer2_clkctrl, (*prcm)->cm_l4per_uart3_clkctrl, (*prcm)->cm_l4per_i2c1_clkctrl, 0 }; /* Enable optional additional functional clock for GPIO4 */ setbits_le32((*prcm)->cm_l4per_gpio4_clkctrl, GPIO4_CLKCTRL_OPTFCLKEN_MASK); /* Enable 96 MHz clock for MMC1 & MMC2 */ setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl, HSMMC_CLKCTRL_CLKSEL_MASK); setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl, HSMMC_CLKCTRL_CLKSEL_MASK); /* Set the correct clock dividers for mmc */ setbits_le32((*prcm)->cm_l3init_hsmmc1_clkctrl, HSMMC_CLKCTRL_CLKSEL_DIV_MASK); setbits_le32((*prcm)->cm_l3init_hsmmc2_clkctrl, HSMMC_CLKCTRL_CLKSEL_DIV_MASK); /* Select 32KHz clock as the source of GPTIMER1 */ setbits_le32((*prcm)->cm_wkup_gptimer1_clkctrl, GPTIMER1_CLKCTRL_CLKSEL_MASK); do_enable_clocks(clk_domains_essential, clk_modules_hw_auto_essential, clk_modules_explicit_en_essential, 1); /* Select 384Mhz for GPU as its the POR for ES1.0 */ setbits_le32((*prcm)->cm_sgx_sgx_clkctrl, CLKSEL_GPU_HYD_GCLK_MASK); setbits_le32((*prcm)->cm_sgx_sgx_clkctrl, CLKSEL_GPU_CORE_GCLK_MASK); /* Enable SCRM OPT clocks for PER and CORE dpll */ setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl, OPTFCLKEN_SCRM_PER_MASK); setbits_le32((*prcm)->cm_wkupaon_scrm_clkctrl, OPTFCLKEN_SCRM_CORE_MASK); }
/* * Enable non-essential clock domains, modules and * do some additional special settings needed */ void enable_non_essential_clocks(void) { u32 const clk_domains_non_essential[] = { (*prcm)->cm_mpu_m3_clkstctrl, (*prcm)->cm_ivahd_clkstctrl, (*prcm)->cm_dsp_clkstctrl, (*prcm)->cm_dss_clkstctrl, (*prcm)->cm_sgx_clkstctrl, (*prcm)->cm1_abe_clkstctrl, (*prcm)->cm_c2c_clkstctrl, (*prcm)->cm_cam_clkstctrl, (*prcm)->cm_dss_clkstctrl, (*prcm)->cm_sdma_clkstctrl, 0 }; u32 const clk_modules_hw_auto_non_essential[] = { (*prcm)->cm_l3instr_l3_3_clkctrl, (*prcm)->cm_l3instr_l3_instr_clkctrl, (*prcm)->cm_l3instr_intrconn_wp1_clkctrl, (*prcm)->cm_l3init_hsi_clkctrl, 0 }; u32 const clk_modules_explicit_en_non_essential[] = { (*prcm)->cm1_abe_aess_clkctrl, (*prcm)->cm1_abe_pdm_clkctrl, (*prcm)->cm1_abe_dmic_clkctrl, (*prcm)->cm1_abe_mcasp_clkctrl, (*prcm)->cm1_abe_mcbsp1_clkctrl, (*prcm)->cm1_abe_mcbsp2_clkctrl, (*prcm)->cm1_abe_mcbsp3_clkctrl, (*prcm)->cm1_abe_slimbus_clkctrl, (*prcm)->cm1_abe_timer5_clkctrl, (*prcm)->cm1_abe_timer6_clkctrl, (*prcm)->cm1_abe_timer7_clkctrl, (*prcm)->cm1_abe_timer8_clkctrl, (*prcm)->cm1_abe_wdt3_clkctrl, (*prcm)->cm_l4per_gptimer9_clkctrl, (*prcm)->cm_l4per_gptimer10_clkctrl, (*prcm)->cm_l4per_gptimer11_clkctrl, (*prcm)->cm_l4per_gptimer3_clkctrl, (*prcm)->cm_l4per_gptimer4_clkctrl, (*prcm)->cm_l4per_hdq1w_clkctrl, (*prcm)->cm_l4per_mcbsp4_clkctrl, (*prcm)->cm_l4per_mcspi2_clkctrl, (*prcm)->cm_l4per_mcspi3_clkctrl, (*prcm)->cm_l4per_mcspi4_clkctrl, (*prcm)->cm_l4per_mmcsd3_clkctrl, (*prcm)->cm_l4per_mmcsd4_clkctrl, (*prcm)->cm_l4per_mmcsd5_clkctrl, (*prcm)->cm_l4per_uart1_clkctrl, (*prcm)->cm_l4per_uart2_clkctrl, (*prcm)->cm_l4per_uart4_clkctrl, (*prcm)->cm_wkup_keyboard_clkctrl, (*prcm)->cm_wkup_wdtimer2_clkctrl, (*prcm)->cm_cam_iss_clkctrl, (*prcm)->cm_cam_fdif_clkctrl, (*prcm)->cm_dss_dss_clkctrl, (*prcm)->cm_sgx_sgx_clkctrl, 0 }; /* Enable optional functional clock for ISS */ setbits_le32((*prcm)->cm_cam_iss_clkctrl, ISS_CLKCTRL_OPTFCLKEN_MASK); /* Enable all optional functional clocks of DSS */ setbits_le32((*prcm)->cm_dss_dss_clkctrl, DSS_CLKCTRL_OPTFCLKEN_MASK); do_enable_clocks(clk_domains_non_essential, clk_modules_hw_auto_non_essential, clk_modules_explicit_en_non_essential, 0); /* Put camera module in no sleep mode */ clrsetbits_le32((*prcm)->cm_cam_clkstctrl, MODULE_CLKCTRL_MODULEMODE_MASK, CD_CLKCTRL_CLKTRCTRL_NO_SLEEP << MODULE_CLKCTRL_MODULEMODE_SHIFT); }