int arch_interrupt_init (void) { DEBUG_MEMORY /* disable and clear any residue */ gic_dic_disable_secure (); gic_dic_clear_enable_all_intr (); gic_dic_clear_pending_all_intr (); /* set the priority so all IRQ will trigger exception */ gic_cpu_set_priority_mask (1<<3); /* enable DIC and CPU IF */ gic_dic_enable_secure (); gic_cpu_enable (); return 0; }
int sc8825_enter_lowpower(void) { int status, ret = 0; unsigned long flags, time; unsigned int cpu = smp_processor_id(); #ifdef CONFIG_SPRD_PM_DEBUG __raw_writel(0xfdffbfff, SPRD_INTC0_BASE + 0xc);//intc0 __raw_writel(0x02004000, SPRD_INTC0_BASE + 0x8);//intc0 __raw_writel(0xffffffff, SPRD_INTC0_BASE + 0x100c);//intc1 #endif time = get_sys_cnt(); if (!hw_irqs_disabled()) { flags = read_cpsr(); printk("##: Error(%s): IRQ is enabled(%08lx)!\n", "wakelock_suspend", flags); } /*TODO: * we need to known clock status in modem side */ #ifdef FORCE_DISABLE_DSP status = 0; #else #ifdef CONFIG_NKERNEL status = sc8825_get_clock_status(); #else /* * TODO: get clock status in native version, force deep sleep now */ status = 0; #endif #endif if (status & DEVICE_AHB) { /*printk("###### %s, DEVICE_AHB ###\n", __func__ );*/ set_sleep_mode(SLP_MODE_ARM); arm_sleep(); } else if (status & DEVICE_APB) { /*printk("###### %s, DEVICE_APB ###\n", __func__ );*/ set_sleep_mode(SLP_MODE_MCU); mcu_sleep(); } else { /*printk("###### %s, DEEP ###\n", __func__ );*/ set_sleep_mode(SLP_MODE_DEP); gic_save_context( ); scu_save_context(); ret = deep_sleep( ); scu_restore_context(); flush_cache_all(); gic_restore_context( ); gic_cpu_enable(cpu); gic_dist_enable( ); #if 1 void notrace __update_sched_clock(void); __update_sched_clock(); #endif } time_add(get_sys_cnt() - time, ret); return ret; }