int __init __clock_init_early(void)
{
	pr_info("ahb ctl0 %08x, ctl2 %08x glb aon apb0 %08x aon apb1 %08x clk_en %08x\n",
		sci_glb_raw_read(REG_AP_AHB_AHB_EB),
		sci_glb_raw_read(REG_AP_AHB_AHB_RST),
		sci_glb_raw_read(REG_AON_APB_APB_EB0),
		sci_glb_raw_read(REG_AON_APB_APB_EB1),
		sci_glb_raw_read(REG_AON_CLK_PUB_AHB_CFG));

	sci_glb_clr(REG_AP_AHB_AHB_EB,
		BIT_BUSMON2_EB		|
		BIT_BUSMON1_EB		|
		BIT_BUSMON0_EB		|
		BIT_GPS_EB		|
		BIT_DRM_EB		|
		BIT_NFC_EB		|
		0);
	sci_glb_clr(REG_AP_APB_APB_EB,
		BIT_INTC3_EB		|
		BIT_INTC2_EB		|
		BIT_INTC1_EB		|
		BIT_IIS1_EB		|
		BIT_UART2_EB		|
		BIT_UART0_EB		|
		BIT_SPI1_EB		|
		BIT_SPI0_EB		|
		BIT_IIS0_EB		|
		BIT_I2C0_EB		|
		BIT_SPI2_EB		|
		BIT_UART3_EB		|
		0);
	sci_glb_clr(REG_AON_APB_APB_RTC_EB,
		BIT_KPD_RTC_EB		|
		BIT_KPD_EB		|
		BIT_EFUSE_EB		|
		0);

	sci_glb_clr(REG_AON_APB_APB_EB0,
		BIT_AUDIF_EB		|
		BIT_VBC_EB		|
		BIT_PWM3_EB		|
		BIT_PWM1_EB		|
		0);
	sci_glb_clr(REG_AON_APB_APB_EB1,
		BIT_AUX1_EB		|
		BIT_AUX0_EB		|
		0);
	pr_debug("sc clock module early init ok\n");
	return 0;
}
Example #2
0
static void sdhci_sprd_enable_clock(struct sdhci_host *host, unsigned int clock)
{
#ifndef CONFIG_MACH_SPX35FPGA
	struct sprd_host_data *host_data= sdhci_priv(host);
	if(clock == 0){
		if (host_data->clk_enable) {
			sdhci_sdclk_enable(host, 0);
			clk_disable(host->clk);
			pr_debug("******* %s, call  clk_disable*******\n", mmc_hostname(host->mmc));
			host->clock = 0;
			host_data->clk_enable = 0;
		}
	}else{
		if (0 == host_data->clk_enable) {
			clk_enable(host->clk);
			pr_debug("******* %s, call  clk_enable*******\n", mmc_hostname(host->mmc));
			sdhci_sdclk_enable(host, 1);
			host_data->clk_enable = 1;
		}
	}
	pr_debug("clock:%d, host->clock:%d, AHB_CTL1:0x%x\n", clock,host->clock,
			sci_glb_raw_read(REG_AP_AHB_AHB_EB));
#endif
	return;
}
Example #3
0
int __init sc8825_regulator_init(void)
{
	static struct platform_device sc8825_regulator_device = {
		.name 	= "sprd-regulator",
		.id	= -1,
	};
	return platform_device_register(&sc8825_regulator_device);
}

int __init sc8825_clock_init_early(void)
{
	pr_info("ahb ctl0 %08x, ctl2 %08x glb gen0 %08x gen1 %08x clk_en %08x\n",
		sci_glb_raw_read(REG_AHB_AHB_CTL0),
		sci_glb_raw_read(REG_AHB_AHB_CTL2),
		sci_glb_raw_read(REG_GLB_GEN0),
		sci_glb_raw_read(REG_GLB_GEN1),
		sci_glb_raw_read(REG_GLB_CLK_EN));
	/* FIXME: Force disable all unused clocks */
	sci_glb_clr(REG_AHB_AHB_CTL0,
		BIT_AXIBUSMON2_EB	|
		BIT_AXIBUSMON1_EB	|
		BIT_AXIBUSMON0_EB	|
//		BIT_EMC_EB       	|
//		BIT_AHB_ARCH_EB  	|
//		BIT_SPINLOCK_EB  	|
		BIT_SDIO2_EB     	|
		BIT_EMMC_EB      	|
//		BIT_DISPC_EB     	|
		BIT_G3D_EB       	|
		BIT_SDIO1_EB     	|
		BIT_DRM_EB       	|
		BIT_BUSMON4_EB   	|
		BIT_BUSMON3_EB   	|
		BIT_BUSMON2_EB   	|
		BIT_ROT_EB       	|
		BIT_VSP_EB       	|
		BIT_ISP_EB       	|
		BIT_BUSMON1_EB   	|
		BIT_DCAM_MIPI_EB 	|
		BIT_CCIR_EB      	|
		BIT_NFC_EB       	|
		BIT_BUSMON0_EB   	|
//		BIT_DMA_EB       	|
//		BIT_USBD_EB      	|
		BIT_SDIO0_EB     	|
//		BIT_LCDC_EB      	|
		BIT_CCIR_IN_EB   	|
		BIT_DCAM_EB      	|
		0);
	sci_glb_clr(REG_AHB_AHB_CTL2,
//		BIT_DISPMTX_CLK_EN	|
		BIT_MMMTX_CLK_EN    |
//		BIT_DISPC_CORE_CLK_EN|
//		BIT_LCDC_CORE_CLK_EN|
		BIT_ISP_CORE_CLK_EN |
		BIT_VSP_CORE_CLK_EN |
		BIT_DCAM_CORE_CLK_EN|
		0);
	sci_glb_clr(REG_AHB_AHB_CTL3,
//		BIT_CLK_ULPI_EN		|
//		BIT_CLK_USB_REF_EN	|
		0);
	sci_glb_clr(REG_GLB_GEN0,
		BIT_IC3_EB          |
		BIT_IC2_EB          |
		BIT_IC1_EB          |
//		BIT_RTC_TMR_EB      |
//		BIT_RTC_SYST0_EB    |
		BIT_RTC_KPD_EB      |
		BIT_IIS1_EB         |
//		BIT_RTC_EIC_EB      |
		BIT_UART2_EB        |
//		BIT_UART1_EB        |
		BIT_UART0_EB        |
//		BIT_SYST0_EB        |
		BIT_SPI1_EB         |
		BIT_SPI0_EB         |
//		BIT_SIM1_EB         |
//		BIT_EPT_EB          |
		BIT_CCIR_MCLK_EN    |
//		BIT_PINREG_EB       |
		BIT_IIS0_EB         |
//		BIT_MCU_DSP_RST		|
//		BIT_EIC_EB     		|
		BIT_KPD_EB     		|
		BIT_EFUSE_EB   		|
//		BIT_ADI_EB     		|
//		BIT_GPIO_EB    		|
		BIT_I2C0_EB    		|
//		BIT_SIM0_EB    		|
//		BIT_TMR_EB     		|
		BIT_SPI2_EB    		|
		BIT_UART3_EB   		|
		0);
	sci_glb_clr(REG_AHB_CA5_CFG,
//		BIT_CA5_CLK_DBG_EN	|
		0);
	sci_glb_clr(REG_GLB_GEN1,
		BIT_AUDIF_AUTO_EN	|
		BIT_VBC_EN			|
		BIT_AUD_TOP_EB		|
		BIT_AUD_IF_EB		|
		BIT_CLK_AUX1_EN		|
		BIT_CLK_AUX0_EN		|
		0);
	sci_glb_clr(REG_GLB_CLK_EN,
		BIT_PWM3_EB			|
//		BIT_PWM2_EB			|
		BIT_PWM1_EB			|
//		BIT_PWM0_EB			|
		0);

	sci_glb_clr(REG_GLB_PCTRL,
	//		BIT_MCU_MPLL_EN 	|
	//		BIT_MCU_TDPLL_EN	|
	//		BIT_MCU_DPLL_EN 	|
			BIT_MCU_GPLL_EN);	/* clk_gpu */

	sci_glb_set(REG_GLB_TD_PLL_CTL,
	//		BIT_TDPLL_DIV2OUT_FORCE_PD	|	/* clk_384m */
	//		BIT_TDPLL_DIV3OUT_FORCE_PD	|	/* clk_256m */
	//		BIT_TDPLL_DIV4OUT_FORCE_PD	|	/* clk_192m */
	//		BIT_TDPLL_DIV5OUT_FORCE_PD	|	/* clk_153p6m */
			0);

	printk("sc8825 clock module early init ok\n");
	return 0;
}
int __init __clock_init_early(void)
{
#if defined(CONFIG_ARCH_SCX15)
#else
	pr_info("ahb ctl0 %08x, ctl2 %08x glb aon apb0 %08x aon apb1 %08x clk_en %08x\n",
		sci_glb_raw_read(REG_AP_AHB_AHB_EB),
		sci_glb_raw_read(REG_AP_AHB_AHB_RST),
		sci_glb_raw_read(REG_AON_APB_APB_EB0),
		sci_glb_raw_read(REG_AON_APB_APB_EB1),
		sci_glb_raw_read(REG_AON_CLK_PUB_AHB_CFG));
#endif

	sci_glb_clr(REG_AP_AHB_AHB_EB,
		BIT_BUSMON2_EB		|
		BIT_BUSMON1_EB		|
		BIT_BUSMON0_EB		|
		//BIT_SPINLOCK_EB		|
		BIT_GPS_EB		|
		//BIT_EMMC_EB		|
		//BIT_SDIO2_EB		|
		//BIT_SDIO1_EB		|
		//BIT_SDIO0_EB		|
		BIT_DRM_EB		|
		BIT_NFC_EB		|
		//BIT_DMA_EB		|
		//BIT_USB_EB		|
		//BIT_GSP_EB		|
		//BIT_DISPC1_EB		|
		//BIT_DISPC0_EB		|
		//BIT_DSI_EB		|
		0);
	sci_glb_clr(REG_AP_APB_APB_EB,
		BIT_INTC3_EB		|
		BIT_INTC2_EB		|
		BIT_INTC1_EB		|
		BIT_IIS1_EB		|
		BIT_UART2_EB		|
		BIT_UART0_EB		|
		BIT_SPI1_EB		|
		BIT_SPI0_EB		|
		BIT_IIS0_EB		|
		BIT_I2C0_EB		|
		BIT_SPI2_EB		|
		BIT_UART3_EB		|
		0);
	sci_glb_clr(REG_AON_APB_APB_RTC_EB,
		BIT_KPD_RTC_EB		|
		BIT_KPD_EB		|
		BIT_EFUSE_EB		|
		0);

	sci_glb_clr(REG_AON_APB_APB_EB0,
		BIT_AUDIF_EB			|
		BIT_VBC_EB			|
		BIT_PWM3_EB			|
		BIT_PWM1_EB			|
		0);
	sci_glb_clr(REG_AON_APB_APB_EB1,
		BIT_AUX1_EB			|
		BIT_AUX0_EB			|
		0);
	printk("sc clock module early init ok\n");
	return 0;
}
Example #5
0
int mmc_go_idle(struct mmc_host *host)
{
	int err;
	struct mmc_command cmd = {0};
#ifdef CONFIG_MMC_SDHCI_SCX35
	unsigned int tmp_flag = 0, reg_val = 0;
#endif

	/*
	 * Non-SPI hosts need to prevent chipselect going active during
	 * GO_IDLE; that would put chips into SPI mode.  Remind them of
	 * that in case of hardware that won't pull up DAT3/nCS otherwise.
	 *
	 * SPI hosts ignore ios.chip_select; it's managed according to
	 * rules that must accommodate non-MMC slaves which this layer
	 * won't even know about.
	 */
	if (!mmc_host_is_spi(host)) {
		mmc_set_chip_select(host, MMC_CS_HIGH);
	#ifdef CONFIG_MMC_SDHCI_SCX35
		/* if sdio0 set data[3] to gpio out mode, and data is 1 , for shark*/
		if ((host->pm_flags & MMC_PM_ONLY_USED_SDIO0_SHARK) != 0) {
			tmp_flag = 0;
			if ((sci_glb_raw_read(REG_AON_APB_APB_EB0) & BIT_GPIO_EB) == 0) {
				sci_glb_set(REG_AON_APB_APB_EB0, BIT_GPIO_EB);
				tmp_flag |= 1 << 0;
			}

			if ((sci_glb_raw_read(REG_AON_APB_APB_EB0) & BIT_PIN_EB) == 0) {
				sci_glb_set(REG_AON_APB_APB_EB0,  BIT_PIN_EB);
				tmp_flag |= 1 << 1;
			}

			/* set sdio0 data[3] to gpio mode*/
			reg_val = __raw_readl( SPRD_PIN_BASE + 0x1E0 );
			__raw_writel( 0x30, SPRD_PIN_BASE + 0x1E0 );

			/* set gpio output mode ,and out put 1 */
			sci_glb_set((CTL_GPIO_BASE + 0x308), (1 << 4));
			sci_glb_set((CTL_GPIO_BASE + 0x304), (1 << 4));
			sci_glb_set((CTL_GPIO_BASE + 0x300), (1 << 4));
		}
	#endif
		mmc_delay(1);
	}

	cmd.opcode = MMC_GO_IDLE_STATE;
	cmd.arg = 0;
	cmd.flags = MMC_RSP_SPI_R1 | MMC_RSP_NONE | MMC_CMD_BC;

	err = mmc_wait_for_cmd(host, &cmd, 0);

	mmc_delay(1);

	if (!mmc_host_is_spi(host)) {
		mmc_set_chip_select(host, MMC_CS_DONTCARE);
	#ifdef CONFIG_MMC_SDHCI_SCX35
		/* if sdio0 set data[3] to gpio out mode, and data is 1 , for shark*/
		if ((host->pm_flags & MMC_PM_ONLY_USED_SDIO0_SHARK) != 0) {
			if ((tmp_flag & 1) != 0) {
				sci_glb_clr(REG_AON_APB_APB_EB0, BIT_GPIO_EB);
			}

			if ((tmp_flag & (1 << 1)) != 0) {
				sci_glb_clr(REG_AON_APB_APB_EB0, BIT_PIN_EB);
			}

			/* set sdio0 data[3] to sdio data pin*/
			__raw_writel( reg_val, SPRD_PIN_BASE + 0x1E0 );
		}
	#endif
		mmc_delay(1);
	}

	host->use_spi_crc = 0;

	return err;
}
static void print_gr(void)
{
	u32 val = sci_glb_read(REG_GLB_GEN0, -1UL);
	printk("##: GR_GEN0 = %08x.\n", val);
	if (val & GEN0_UART3_EN) printk("GEN0_UART3_EN =1.\n");
	if (val & GEN0_SPI2_EN) printk("GEN0_SPI2_EN =1.\n");
	if (val & GEN0_TIMER_EN) printk("GEN0_TIMER_EN =1.\n");
	if (val & GEN0_SIM0_EN) printk("GEN0_SIM0_EN =1.\n");
	if (val & GEN0_I2C_EN) printk("GEN0_I2C_EN =1.\n");
	if (val & GEN0_GPIO_EN) printk("GEN0_GPIO_EN =1.\n");
	if (val & GEN0_ADI_EN) printk("GEN0_ADI_EN =1.\n");
	if (val & GEN0_EFUSE_EN) printk("GEN0_EFUSE_EN =1.\n");
	if (val & GEN0_KPD_EN) printk("GEN0_KPD_EN =1.\n");
	if (val & GEN0_EIC_EN) printk("GEN0_EIC_EN =1.\n");
	if (val & GEN0_I2S0_EN) printk("GEN0_I2S0_EN =1.\n");
	if (val & GEN0_PIN_EN) printk("GEN0_PIN_EN =1.\n");
	if (val & GEN0_CCIR_MCLK_EN) printk("GEN0_CCIR_MCLK_EN =1.\n");
	if (val & GEN0_EPT_EN) printk("GEN0_EPT_EN =1.\n");
	if (val & GEN0_SIM1_EN) printk("GEN0_SIM1_EN =1.\n");
	if (val & GEN0_SPI0_EN) printk("GEN0_SPI0_EN =1.\n");
	if (val & GEN0_SPI1_EN) printk("GEN0_SPI1_EN =1.\n");
	if (val & GEN0_SYST_EN) printk("GEN0_SYST_EN =1.\n");
	if (val & GEN0_UART0_EN) printk("GEN0_UART0_EN =1.\n");
	if (val & GEN0_UART1_EN) printk("GEN0_UART1_EN =1.\n");
	if (val & GEN0_UART2_EN) printk("GEN0_UART2_EN =1.\n");
	if (val & GEN0_VB_EN) printk("GEN0_VB_EN =1.\n");
	if (val & GEN0_EIC_RTC_EN) printk("GEN0_EIC_RTC_EN =1.\n");
	if (val & GEN0_I2S1_EN) printk("GEN0_I2S1_EN =1.\n");
	if (val & GEN0_KPD_RTC_EN) printk("GEN0_KPD_RTC_EN =1.\n");
	if (val & GEN0_SYST_RTC_EN) printk("GEN0_SYST_RTC_EN =1.\n");
	if (val & GEN0_TMR_RTC_EN) printk("GEN0_TMR_RTC_EN =1.\n");
	if (val & GEN0_I2C1_EN) printk("GEN0_I2C1_EN =1.\n");
	if (val & GEN0_I2C2_EN) printk("GEN0_I2C2_EN =1.\n");
	if (val & GEN0_I2C3_EN) printk("GEN0_I2C3_EN =1.\n");

	val = sci_glb_read(REG_GLB_GEN1, -1UL);
	printk("##: REG_GLB_GEN1 = %08x.\n", val);
	if (val & BIT_CLK_AUX0_EN ) printk(" CLK_AUX0_EN =1.\n");
	if (val & BIT_CLK_AUX1_EN ) printk(" CLK_AUX1_EN =1.\n");
	if (val & BIT_AUD_IF_EB ) printk(" AUD_IF_EB =1.\n");
	if (val & BIT_AUD_TOP_EB ) printk(" AUD_TOP_EB =1.\n");
	if (val & BIT_VBC_EN ) printk(" VBC_EN =1.\n");
	if (val & BIT_AUDIF_AUTO_EN ) printk(" AUDIF_AUTO_EN =1.\n");

	val = sci_glb_read(REG_GLB_CLK_EN, -1UL);
	printk("##: GR_CLK_EN = %08x.\n", val);
	if (val & CLK_PWM0_EN) printk("CLK_PWM0_EN =1.\n");
	if (val & CLK_PWM1_EN) printk("CLK_PWM1_EN = 1.\n");
	if (val & CLK_PWM2_EN) printk("CLK_PWM2_EN = 1.\n");
	if (val & CLK_PWM3_EN) printk("CLK_PWM3_EN = 1.\n");

	val = sci_glb_read(REG_GLB_BUSCLK, -1UL);
	printk("##: GR_BUSCLK_ALM = %08x.\n", val);
	if (val & ARM_VB_MCLKON) printk("ARM_VB_MCLKON =1.\n");
	if (val & ARM_VB_DA0ON) printk("ARM_VB_DA0ON = 1.\n");
	if (val & ARM_VB_DA1ON) printk("ARM_VB_DA1ON = 1.\n");
	if (val & ARM_VB_ADCON) printk("ARM_VB_ADCON = 1.\n");
	if (val & ARM_VB_ANAON) printk("ARM_VB_ANAON = 1.\n");
	if (val & ARM_VB_ACC) printk("ARM_VB_ACC = 1.\n");

	val = sci_glb_read(REG_GLB_CLK_GEN5, -1UL);
	printk("##: GR_CLK_GEN5 = %08x.\n", val);
	if (val & BIT(9)) printk("LDO_USB_PD =1.\n");

	val = sci_glb_raw_read(REG_GLB_PCTRL);
	printk("##: GLB_PCTL = %08x.\n", val);
	if (val & BIT_MCU_MPLL_EN) printk("MCU_MPLL = 1.\n");
	if (val & BIT_MCU_GPLL_EN) printk("MCU_GPLL = 1.\n");
	if (val & BIT_MCU_DPLL_EN) printk("MCU_DPLL = 1.\n");
	if (val & BIT_MCU_TDPLL_EN) printk("MCU_TDPLL = 1.\n");

	val = sci_glb_raw_read(REG_GLB_TD_PLL_CTL);
	printk("##: GLB_TD_PLL_CTL = %08x.\n", val);
	if (!(val & BIT_TDPLL_DIV2OUT_FORCE_PD)) printk("clk_384m = 1.\n");
	if (!(val & BIT_TDPLL_DIV3OUT_FORCE_PD)) printk("clk_256m = 1.\n");
	if (!(val & BIT_TDPLL_DIV4OUT_FORCE_PD)) printk("clk_192m = 1.\n");
	if (!(val & BIT_TDPLL_DIV5OUT_FORCE_PD)) printk("clk_153p6m = 1.\n");

	val = sci_glb_read(REG_GLB_POWCTL1, -1UL);
	printk("##: GR_POWCTL1 = %08x.\n", val);

	val = sci_glb_read(REG_GLB_M_PLL_CTL0, -1UL);
	printk("##: REG_GLB_M_PLL_CTL0 = %08x.\n", val);

	val = sci_glb_read(REG_GLB_MM_PWR_CTL, -1UL);
	printk("##: REG_GLB_MM_PWR_CTL = %08x.\n", val);
	val = sci_glb_read(REG_GLB_CEVA_L1RAM_PWR_CTL, -1UL);
	printk("##: REG_GLB_CEVA_L1RAM_PWR_CTL = %08x.\n", val);
	val = sci_glb_read(REG_GLB_GSM_PWR_CTL, -1UL);
	printk("##: REG_GLB_GSM_PWR_CTL = %08x.\n", val);
	val = sci_glb_read(REG_GLB_TD_PWR_CTL, -1UL);
	printk("##: GR_TD_PWR_CTRL = %08x.\n", val);
	val = sci_glb_read(REG_GLB_PERI_PWR_CTL, -1UL);
	printk("##: GR_PERI_PWR_CTRL = %08x.\n", val);
	val = sci_glb_read(REG_GLB_ARM_SYS_PWR_CTL, -1UL);
	printk("##: GR_ARM_SYS_PWR_CTRL = %08x.\n", val);
	val = sci_glb_read(REG_GLB_G3D_PWR_CTL, -1UL);
	printk("##: GR_G3D_PWR_CTRL = %08x.\n", val);
}