コード例 #1
0
static int sunxi_cpu_budget_vftable_init(void)
{
    script_item_u val;
    script_item_value_type_e type;
    struct cpufreq_dvfs_s *ptable;
    unsigned int * plen;
    unsigned int freq,volt;
    int i,j,k,ret = -1;
    char tbl_name[]="dvfs_table";
    char name[16] = {0};
    unsigned int vf_table_type = 0;

    type = script_get_item("dvfs_table", "vf_table_count", &val);
    if (SCIRPT_ITEM_VALUE_TYPE_INT != type) {
        pr_info("%s: support only one vf_table\n", __func__);
        sprintf(tbl_name, "%s", "dvfs_table");
    } else {
        vf_table_type = sunxi_get_soc_bin();
        sprintf(tbl_name, "%s%d", "vf_table", vf_table_type);
    }

    for(k=0;k<2;k++)
    {
        ptable = k?&c1_vftable_syscfg[0]:&c0_vftable_syscfg[1];
        plen =  k?&c1_table_length:&c0_table_length;

#if defined(CONFIG_ARCH_SUN9IW1)
        if (hmp_cluster0_is_big) {
            if (k == 0)
                sprintf(name, "B_LV_count");
            else
                sprintf(name, "L_LV_count");
        } else {
            if (k == 0)
                sprintf(name, "L_LV_count");
            else
                sprintf(name, "B_LV_count");
        }
#elif defined(CONFIG_ARCH_SUN8IW5) || defined(CONFIG_ARCH_SUN8IW6)
        if (k == 0)
            sprintf(name, "L_LV_count");
        else
            sprintf(name, "B_LV_count");
#endif
        type = script_get_item(tbl_name, name, &val);
        if (SCIRPT_ITEM_VALUE_TYPE_INT != type) {
            pr_err("fetch %s from sysconfig failed\n",name);
            goto fail;
        }
        *plen = val.val;
        if(*plen >= 16){
            pr_err("%s from sysconfig is out of bounder\n",name);
            goto fail;
        }
        for (i = 1,j=0; i <= *plen ; i++)
        {
#if defined(CONFIG_ARCH_SUN9IW1)
            if (hmp_cluster0_is_big) {
                if (k == 0)
                    sprintf(name, "B_LV%d_freq", i);
                else
                    sprintf(name, "L_LV%d_freq", i);
            } else {
                if (k == 0)
                    sprintf(name, "L_LV%d_freq", i);
                else
                    sprintf(name, "B_LV%d_freq", i);
            }
#elif defined(CONFIG_ARCH_SUN8IW5) || defined(CONFIG_ARCH_SUN8IW6)
            if (k == 0)
                sprintf(name, "L_LV%d_freq", i);
            else
                sprintf(name, "B_LV%d_freq", i);
#endif
            type = script_get_item(tbl_name, name, &val);
            if (SCIRPT_ITEM_VALUE_TYPE_INT != type) {
                pr_err("get C%d_LV%d_freq from sysconfig failed\n", k,i);
                goto fail;
            }
            freq = val.val;

#if defined(CONFIG_ARCH_SUN9IW1)
            if (hmp_cluster0_is_big) {
                if (k == 0)
                    sprintf(name, "B_LV%d_volt", i);
                else
                    sprintf(name, "L_LV%d_volt", i);
            } else {
                if (k == 0)
                    sprintf(name, "L_LV%d_volt", i);
                else
                    sprintf(name, "B_LV%d_volt", i);
            }
#elif defined(CONFIG_ARCH_SUN8IW5) || defined(CONFIG_ARCH_SUN8IW6)
            if (k == 0)
                sprintf(name, "L_LV%d_volt", i);
            else
                sprintf(name, "B_LV%d_volt", i);
#endif
            type = script_get_item(tbl_name, name, &val);
            if (SCIRPT_ITEM_VALUE_TYPE_INT != type) {
                pr_err("get C%d_LV%d_volt from sysconfig failed\n", k,i);
                goto fail;
            }
            volt = val.val;

            if(freq)
            {
                ptable[j].freq = freq / 1000;
                ptable[j].volt = volt;
                j++;
             }
        }
        *plen = j;
    }
    return 0;
fail:
    return ret;
}
コード例 #2
0
static IMG_VOID ParseFex(IMG_VOID)
{
	int value;
    int i;
	char mainkey[9] = {0};
    char tfx_name[10] = {0};

	sprintf(mainkey, "%s%d", "gpu_sgx544_", sunxi_get_soc_bin());

	value = GetParaFromFex(mainkey, "normal_vol", 0);
    if(value > 0)
    {
        vf_data.normal.vol = value;
    }

    value = GetParaFromFex(mainkey, "normal_freq", 0);
    if(value > 0)
    {
        vf_data.normal.freq = value;
    }

	value = GetParaFromFex(mainkey, "extreme_vol", 0);
    if(value > 0)
    {
        vf_data.extreme.vol = value;
    }

    value = GetParaFromFex(mainkey, "extreme_freq", 0);
    if(value > 0)
    {
        vf_data.extreme.freq = value;
    }

    value = GetParaFromFex(mainkey, "scene_ctrl_status", 1);
    if(value != -1)
    {
        private_data.scene_ctrl_status = value;
    }

    value = GetParaFromFex(mainkey, "temp_ctrl_status", 1);
    if(value != -1)
    {
        private_data.tempctrl_data.temp_ctrl_status = value;
    }

#ifdef CONFIG_CPU_BUDGET_THERMAL
    value = GetParaFromFex(mainkey, "tft_count", sizeof(tf_table)/sizeof(tf_table[0]));
    if(value > 0)
    {
		if(value < private_data.tempctrl_data.count)
		{
			private_data.tempctrl_data.count = value;
		}

        for(i = 0; i < private_data.tempctrl_data.count; i++)
        {
            sprintf(tfx_name, "tf%d_temp",i);
            value = GetParaFromFex(mainkey, tfx_name, 0);
            if(value != -1)
            {
                tf_table[i].temp = value;
            }

            sprintf(tfx_name, "tf%d_freq",i);
            value = GetParaFromFex(mainkey, tfx_name, 0);
            if(value != -1)
            {
                tf_table[i].freq = value;
            }
        }
	}
#endif /* CONFIG_CPU_BUDGET_THERMAL */
}