IMG_VOID DisableSystemClocks(SYS_DATA *psSysData) { SYS_SPECIFIC_DATA *psSysSpecData = (SYS_SPECIFIC_DATA *) psSysData->pvSysSpecificData; PVR_TRACE(("DisableSystemClocks: Disabling System Clocks")); DisableSGXClocks(psSysData); /* disable & gate clock, power down */ clk_disable_unprepare(psSysSpecData->psSGXClock); cpm_pwc_disable(psSysSpecData->pCPMHandle); }
void jzsoc_cpu_die(unsigned int cpu) { unsigned long flags; unsigned int status; if (cpu == 0) /* FIXME */ return; local_irq_save(flags); cpumask_clear_cpu(cpu, cpu_ready); cpumask_clear_cpu(cpu, &cpu_start); cpumask_clear_cpu(cpu, &cpu_running); wmb(); do{ status = get_smp_status(); }while(!(status & (1<<(cpu+16)))); cpm_pwc_disable(scpu_pwc); cpm_set_bit(15,CPM_CLKGR1); local_irq_restore(flags); printk("disable cpu %d\n",cpu); }
static long vpu_off(struct jz_vpu *vpu) { disable_irq_nosync(vpu->irq); __asm__ __volatile__ ( "mfc0 $2, $16, 7 \n\t" "andi $2, $2, 0xbf \n\t" "mtc0 $2, $16, 7 \n\t" "nop \n\t"); cpm_clear_bit(31,CPM_OPCR); clk_disable(vpu->clk); clk_disable(vpu->clk_gate); cpm_pwc_disable(vpu->cpm_pwc); /* Clear completion use_count here to avoid a unhandled irq after vpu off */ vpu->done.done = 0; //wake_unlock(&vpu->wake_lock); dev_dbg(vpu->dev, "[%d:%d] off\n", current->tgid, current->pid); return 0; }