void pmu_tegra_cpufreq_hotplug(bool onoff) { if(onoff == 1) { tegra_cpufreq_hotplug(NvRmPmRequest_CpuOnFlag); } else { tegra_cpufreq_hotplug(NvRmPmRequest_CpuOffFlag); } }
static int tegra_cpufreq_dfsd(void *arg) { unsigned long rate, last_rate; NvRmPmRequest req = 0; BUG_ON(!clk_cpu); preset_lpj = loops_per_jiffy; rate = clk_get_rate(clk_cpu); last_rate = rate; NvRmDfsSetState(rm_cpufreq, NvRmDfsRunState_ClosedLoop); set_freezable_with_signal(); while (!kthread_should_stop() && !(req & NvRmPmRequest_ExitFlag)) { req = NvRmPrivPmThread(); if (try_to_freeze()) continue; tegra_cpufreq_hotplug(req); #ifdef CONFIG_USE_ARM_TWD_PRESCALER rate = clk_get_rate(clk_cpu); if (rate != last_rate) { local_timer_rescale(rate / 1000); smp_wmb(); on_each_cpu(twd_set_prescaler, NULL, true); last_rate = rate; } #endif } pr_info("dvfs thead shutdown\n"); return 0; }