/* *JudgingbytheOPPtablesinthevendorBSP,thequalityorderofthe *returnedspeedbinindexis4->0/2->3->1,fromworsttobest. *0and2seemidenticalfromtheOPPtables'pointofview.
*/ static u32 sun50i_h616_efuse_xlate(u32 speedbin)
{ int ver_bits = get_soc_id_revision();
u32 value = 0;
switch (speedbin & 0xffff) { case0x2000:
value = 0; break; case0x2400: case0x7400: case0x2c00: case0x7c00: if (ver_bits != SMCCC_RET_NOT_SUPPORTED && ver_bits <= 1) { /* ic version A/B */
value = 1;
} else { /* ic version C and later version */
value = 2;
} break; case0x5000: case0x5400: case0x6000:
value = 3; break; case0x5c00:
value = 4; break; case0x5d00:
value = 0; break; case0x6c00:
value = 5; break; default:
pr_warn("sun50i-cpufreq-nvmem: unknown speed bin 0x%x, using default bin 0\n",
speedbin & 0xffff);
value = 0; break;
}
cpu_dev = get_cpu_device(0); if (!cpu_dev) return -ENODEV;
struct device_node *np __free(device_node) =
dev_pm_opp_of_get_opp_desc_node(cpu_dev); if (!np) return -ENOENT;
match = of_match_node(cpu_opp_match_list, np); if (!match) return -ENOENT;
opp_data = match->data;
speedbin_nvmem = of_nvmem_cell_get(np, NULL); if (IS_ERR(speedbin_nvmem)) return dev_err_probe(cpu_dev, PTR_ERR(speedbin_nvmem), "Could not get nvmem cell\n");
speedbin_ptr = nvmem_cell_read(speedbin_nvmem, &len);
nvmem_cell_put(speedbin_nvmem); if (IS_ERR(speedbin_ptr)) return PTR_ERR(speedbin_ptr);
if (len <= 4)
memcpy(&speedbin, speedbin_ptr, len);
speedbin = le32_to_cpu(speedbin);
ret = opp_data->efuse_xlate(speedbin);
kfree(speedbin_ptr);
return ret;
};
staticint sun50i_cpufreq_nvmem_probe(struct platform_device *pdev)
{ int *opp_tokens; char name[] = "speedXXXXXXXXXXX"; /* Integers can take 11 chars max */ unsignedint cpu, supported_hw; struct dev_pm_opp_config config = {}; int speed; int ret;
opp_tokens = kcalloc(num_possible_cpus(), sizeof(*opp_tokens),
GFP_KERNEL); if (!opp_tokens) return -ENOMEM;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.