コード例 #1
0
static int sunxi_cpu_budget_cooling_register(struct platform_device *pdev)
{
	struct thermal_cooling_device *cdev;
	struct cpumask cluster0_mask;
	struct cpumask cluster1_mask;
    int i;
	/* make sure cpufreq driver has been initialized */
	if (!cpufreq_frequency_get_table(0))
		return -EPROBE_DEFER;
    cpumask_clear(&cluster0_mask);
    cpumask_clear(&cluster1_mask);
#if defined(CONFIG_SCHED_HMP)
    arch_get_fast_and_slow_cpus(&cluster1_mask,&cluster0_mask);
#elif defined(CONFIG_SCHED_SMP_DCMP)
	if (strlen(CONFIG_CLUSTER0_CPU_MASK) && strlen(CONFIG_CLUSTER1_CPU_MASK)) {
		if (cpulist_parse(CONFIG_CLUSTER0_CPU_MASK, &cluster0_mask)) {
			pr_err("Failed to parse cluster0 cpu mask!\n");
			return -1;
		}
		if (cpulist_parse(CONFIG_CLUSTER1_CPU_MASK, &cluster1_mask)) {
			pr_err("Failed to parse cluster1 cpu mask!\n");
			return -1;
		}
	}
#else
        cpumask_copy(&cluster0_mask, cpu_possible_mask);
#endif
    dynamic_tbl = kmalloc(sizeof(struct cpu_budget_table)*max_tbl_num,GFP_KERNEL);
    dynamic_tbl_num=0;
    for(i=0;i<max_tbl_num;i++)
    {
        if (m_current_tbl[i].online)
        {
            dynamic_tbl[dynamic_tbl_num].cluster0_freq = m_current_tbl[i].cluster0_freq;
            dynamic_tbl[dynamic_tbl_num].cluster0_cpunr = m_current_tbl[i].cluster0_cpunr;
            dynamic_tbl[dynamic_tbl_num].cluster1_freq = m_current_tbl[i].cluster1_freq;
            dynamic_tbl[dynamic_tbl_num].cluster1_cpunr = m_current_tbl[i].cluster1_cpunr;
            dynamic_tbl[dynamic_tbl_num].gpu_throttle = m_current_tbl[i].gpu_throttle;
            dynamic_tbl_num++;
        }
    }

	cdev = cpu_budget_cooling_register(dynamic_tbl,dynamic_tbl_num,&cluster0_mask,&cluster1_mask);
	if (IS_ERR_OR_NULL(cdev)) {
		dev_err(&pdev->dev, "Failed to register cooling device\n");
		return PTR_ERR(cdev);
	}
	platform_set_drvdata(pdev, cdev);
	dev_info(&pdev->dev, "Cooling device registered: %s\n",	cdev->type);
	return 0;
}
コード例 #2
0
static int sunxi_cpu_budget_cooling_register(struct platform_device *pdev)
{
	struct thermal_cooling_device *cdev;
	struct cpumask cluster0_mask;
	struct cpumask cluster1_mask;
    int i;
	/* make sure cpufreq driver has been initialized */
	if (!cpufreq_frequency_get_table(0))
		return -EPROBE_DEFER;
    cpumask_clear(&cluster0_mask);
    cpumask_clear(&cluster1_mask);
	cpumask_set_cpu(0, &cluster0_mask);
	cpumask_set_cpu(1, &cluster0_mask);
	cpumask_set_cpu(2, &cluster0_mask);
	cpumask_set_cpu(3, &cluster0_mask);
	cpumask_set_cpu(4, &cluster1_mask);
	cpumask_set_cpu(5, &cluster1_mask);
	cpumask_set_cpu(6, &cluster1_mask);
	cpumask_set_cpu(7, &cluster1_mask);

    dynamic_tbl = kmalloc(sizeof(struct cpu_budget_table)*max_tbl_num,GFP_KERNEL);
    dynamic_tbl_num=0;
    for(i=0;i<max_tbl_num;i++)
    {
        if (m_current_tbl[i].online)
        {
            dynamic_tbl[dynamic_tbl_num].cluster0_freq = m_current_tbl[i].cluster0_freq;
            dynamic_tbl[dynamic_tbl_num].cluster0_cpunr = m_current_tbl[i].cluster0_cpunr;
            dynamic_tbl[dynamic_tbl_num].cluster1_freq = m_current_tbl[i].cluster1_freq;
            dynamic_tbl[dynamic_tbl_num].cluster1_cpunr = m_current_tbl[i].cluster1_cpunr;
            dynamic_tbl[dynamic_tbl_num].gpu_throttle = m_current_tbl[i].gpu_throttle;
            dynamic_tbl_num++;
        }
    }

	cdev = cpu_budget_cooling_register(dynamic_tbl,dynamic_tbl_num,&cluster0_mask,&cluster1_mask);
	if (IS_ERR_OR_NULL(cdev)) {
		dev_err(&pdev->dev, "Failed to register cooling device\n");
		return PTR_ERR(cdev);
	}
	platform_set_drvdata(pdev, cdev);
	dev_info(&pdev->dev, "Cooling device registered: %s\n",	cdev->type);
	return 0;
}