/* * This function resets the system. It is called by machine_restart(). * * @param mode indicates different kinds of resets */ void arch_reset(char mode) { /* Workaround to reset NFC_CONFIG3 register * due to the chip warm reset does not reset it */ __raw_writel(0x20600, IO_ADDRESS(NFC_BASE_ADDR) + 0x28); /* Assert SRS signal */ mxc_wd_reset(); mxc_reboot(); }
/* * This function resets the system. It is called by machine_restart(). * * @param mode indicates different kinds of resets */ void arch_reset(char mode) { unsigned long reg; unsigned long reg_1 = 0xffffffff; doze_disable(); reg = __raw_readl(MXC_CCM_CGR0); reg |= (MXC_CCM_CGR0_ESDHC1_MASK | MXC_CCM_CGR0_ESDHC2_MASK | MXC_CCM_CGR0_ESDHC3_MASK | MXC_CCM_CGR0_CSPI1_MASK | MXC_CCM_CGR0_CSPI2_MASK); __raw_writel(reg, MXC_CCM_CGR0); reg = __raw_readl(MXC_CCM_CGR3); reg |= MXC_CCM_CGR3_IIM_MASK; __raw_writel(reg, MXC_CCM_CGR3); printk(KERN_INFO "MX35 arch_reset\n"); if (in_interrupt() || kernel_oops_counter) { mxc_wd_reset(); return; } local_irq_enable(); /* Clear out bit #1 in MEMA */ pmic_write_reg(REG_MEM_A, (0 << 1), (1 << 1)); /* Turn on bit #1 */ pmic_write_reg(REG_MEM_A, (1 << 1), (1 << 1)); /* Turn off VSD */ pmic_write_reg(REG_MODE_1, (0 << 18), (1 << 18)); cpufreq_suspended = 1; set_cpu_freq(512000000); mdelay(100); peri_pll_enable(); __raw_writel(reg_1, MXC_CCM_CGR0); __raw_writel(reg_1, MXC_CCM_CGR1); __raw_writel(reg_1, MXC_CCM_CGR2); __raw_writel(reg_1, MXC_CCM_CGR3); mdelay(100); /* Memory Hold Mode */ mx35_power_off(); }
void mxc_system_off(void) { afe_backlight_off(); mxc_external_mute(); /* NFC Configuration1 to 0 */ __raw_writel(0, IO_ADDRESS(NFC_BASE_ADDR_AXI + 0x1E04)); /* NANDF_RB to 0 */ __raw_writel(0, IO_ADDRESS(IOMUXC_BASE_ADDR + 0x80)); afe_system_off(); mdelay(1000); printk("Shutdown failed\n"); mxc_wd_reset(); while (1); }
/* * This function resets the system. It is called by machine_restart(). * * @param mode indicates different kinds of resets */ void arch_reset(char mode) { /* Assert SRS signal */ mxc_wd_reset(); }