|
@@ -47,32 +47,32 @@ static const struct cvb_table tegra124_cpu_cvb_tables[] = {
|
|
|
},
|
|
|
.speedo_scale = 100,
|
|
|
.voltage_scale = 1000,
|
|
|
- .cvb_table = {
|
|
|
- {204000000UL, {1112619, -29295, 402} },
|
|
|
- {306000000UL, {1150460, -30585, 402} },
|
|
|
- {408000000UL, {1190122, -31865, 402} },
|
|
|
- {510000000UL, {1231606, -33155, 402} },
|
|
|
- {612000000UL, {1274912, -34435, 402} },
|
|
|
- {714000000UL, {1320040, -35725, 402} },
|
|
|
- {816000000UL, {1366990, -37005, 402} },
|
|
|
- {918000000UL, {1415762, -38295, 402} },
|
|
|
- {1020000000UL, {1466355, -39575, 402} },
|
|
|
- {1122000000UL, {1518771, -40865, 402} },
|
|
|
- {1224000000UL, {1573009, -42145, 402} },
|
|
|
- {1326000000UL, {1629068, -43435, 402} },
|
|
|
- {1428000000UL, {1686950, -44715, 402} },
|
|
|
- {1530000000UL, {1746653, -46005, 402} },
|
|
|
- {1632000000UL, {1808179, -47285, 402} },
|
|
|
- {1734000000UL, {1871526, -48575, 402} },
|
|
|
- {1836000000UL, {1936696, -49855, 402} },
|
|
|
- {1938000000UL, {2003687, -51145, 402} },
|
|
|
- {2014500000UL, {2054787, -52095, 402} },
|
|
|
- {2116500000UL, {2124957, -53385, 402} },
|
|
|
- {2218500000UL, {2196950, -54665, 402} },
|
|
|
- {2320500000UL, {2270765, -55955, 402} },
|
|
|
- {2422500000UL, {2346401, -57235, 402} },
|
|
|
- {2524500000UL, {2437299, -58535, 402} },
|
|
|
- {0, { 0, 0, 0} },
|
|
|
+ .entries = {
|
|
|
+ { 204000000UL, { 1112619, -29295, 402 } },
|
|
|
+ { 306000000UL, { 1150460, -30585, 402 } },
|
|
|
+ { 408000000UL, { 1190122, -31865, 402 } },
|
|
|
+ { 510000000UL, { 1231606, -33155, 402 } },
|
|
|
+ { 612000000UL, { 1274912, -34435, 402 } },
|
|
|
+ { 714000000UL, { 1320040, -35725, 402 } },
|
|
|
+ { 816000000UL, { 1366990, -37005, 402 } },
|
|
|
+ { 918000000UL, { 1415762, -38295, 402 } },
|
|
|
+ { 1020000000UL, { 1466355, -39575, 402 } },
|
|
|
+ { 1122000000UL, { 1518771, -40865, 402 } },
|
|
|
+ { 1224000000UL, { 1573009, -42145, 402 } },
|
|
|
+ { 1326000000UL, { 1629068, -43435, 402 } },
|
|
|
+ { 1428000000UL, { 1686950, -44715, 402 } },
|
|
|
+ { 1530000000UL, { 1746653, -46005, 402 } },
|
|
|
+ { 1632000000UL, { 1808179, -47285, 402 } },
|
|
|
+ { 1734000000UL, { 1871526, -48575, 402 } },
|
|
|
+ { 1836000000UL, { 1936696, -49855, 402 } },
|
|
|
+ { 1938000000UL, { 2003687, -51145, 402 } },
|
|
|
+ { 2014500000UL, { 2054787, -52095, 402 } },
|
|
|
+ { 2116500000UL, { 2124957, -53385, 402 } },
|
|
|
+ { 2218500000UL, { 2196950, -54665, 402 } },
|
|
|
+ { 2320500000UL, { 2270765, -55955, 402 } },
|
|
|
+ { 2422500000UL, { 2346401, -57235, 402 } },
|
|
|
+ { 2524500000UL, { 2437299, -58535, 402 } },
|
|
|
+ { 0UL, { 0, 0, 0 } },
|
|
|
},
|
|
|
.cpu_dfll_data = {
|
|
|
.tune0_low = 0x005020ff,
|
|
@@ -84,9 +84,8 @@ static const struct cvb_table tegra124_cpu_cvb_tables[] = {
|
|
|
|
|
|
static int tegra124_dfll_fcpu_probe(struct platform_device *pdev)
|
|
|
{
|
|
|
- int process_id, speedo_id, speedo_value;
|
|
|
+ int process_id, speedo_id, speedo_value, err;
|
|
|
struct tegra_dfll_soc_data *soc;
|
|
|
- const struct cvb_table *cvb;
|
|
|
|
|
|
process_id = tegra_sku_info.cpu_process_id;
|
|
|
speedo_id = tegra_sku_info.cpu_speedo_id;
|
|
@@ -108,23 +107,41 @@ static int tegra124_dfll_fcpu_probe(struct platform_device *pdev)
|
|
|
return -ENODEV;
|
|
|
}
|
|
|
|
|
|
- cvb = tegra_cvb_build_opp_table(tegra124_cpu_cvb_tables,
|
|
|
- ARRAY_SIZE(tegra124_cpu_cvb_tables),
|
|
|
- process_id, speedo_id, speedo_value,
|
|
|
- cpu_max_freq_table[speedo_id],
|
|
|
- soc->dev);
|
|
|
- if (IS_ERR(cvb)) {
|
|
|
- dev_err(&pdev->dev, "couldn't build OPP table: %ld\n",
|
|
|
- PTR_ERR(cvb));
|
|
|
- return PTR_ERR(cvb);
|
|
|
+ soc->max_freq = cpu_max_freq_table[speedo_id];
|
|
|
+
|
|
|
+ soc->cvb = tegra_cvb_add_opp_table(soc->dev, tegra124_cpu_cvb_tables,
|
|
|
+ ARRAY_SIZE(tegra124_cpu_cvb_tables),
|
|
|
+ process_id, speedo_id, speedo_value,
|
|
|
+ soc->max_freq);
|
|
|
+ if (IS_ERR(soc->cvb)) {
|
|
|
+ dev_err(&pdev->dev, "couldn't add OPP table: %ld\n",
|
|
|
+ PTR_ERR(soc->cvb));
|
|
|
+ return PTR_ERR(soc->cvb);
|
|
|
+ }
|
|
|
+
|
|
|
+ err = tegra_dfll_register(pdev, soc);
|
|
|
+ if (err < 0) {
|
|
|
+ tegra_cvb_remove_opp_table(soc->dev, soc->cvb, soc->max_freq);
|
|
|
+ return err;
|
|
|
}
|
|
|
|
|
|
- soc->min_millivolts = cvb->min_millivolts;
|
|
|
- soc->tune0_low = cvb->cpu_dfll_data.tune0_low;
|
|
|
- soc->tune0_high = cvb->cpu_dfll_data.tune0_high;
|
|
|
- soc->tune1 = cvb->cpu_dfll_data.tune1;
|
|
|
+ platform_set_drvdata(pdev, soc);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int tegra124_dfll_fcpu_remove(struct platform_device *pdev)
|
|
|
+{
|
|
|
+ struct tegra_dfll_soc_data *soc = platform_get_drvdata(pdev);
|
|
|
+ int err;
|
|
|
+
|
|
|
+ err = tegra_dfll_unregister(pdev);
|
|
|
+ if (err < 0)
|
|
|
+ dev_err(&pdev->dev, "failed to unregister DFLL: %d\n", err);
|
|
|
+
|
|
|
+ tegra_cvb_remove_opp_table(soc->dev, soc->cvb, soc->max_freq);
|
|
|
|
|
|
- return tegra_dfll_register(pdev, soc);
|
|
|
+ return 0;
|
|
|
}
|
|
|
|
|
|
static const struct of_device_id tegra124_dfll_fcpu_of_match[] = {
|
|
@@ -140,7 +157,7 @@ static const struct dev_pm_ops tegra124_dfll_pm_ops = {
|
|
|
|
|
|
static struct platform_driver tegra124_dfll_fcpu_driver = {
|
|
|
.probe = tegra124_dfll_fcpu_probe,
|
|
|
- .remove = tegra_dfll_unregister,
|
|
|
+ .remove = tegra124_dfll_fcpu_remove,
|
|
|
.driver = {
|
|
|
.name = "tegra124-dfll",
|
|
|
.of_match_table = tegra124_dfll_fcpu_of_match,
|