soc/tegra: fuse: update speedo IDs for Tegra210
Bug 200255986
Bug 200418638
[ There's a merge conflict during the cherry-pick from Kernel 4.4
to 4.9 because a later patch got merged first -- Nicolin ]
Change-Id: Iacf188f4cccea03d3a82f7ad18455c18681c506d
Signed-off-by: Joseph Lo <josephl@nvidia.com>
Reviewed-on: http://git-master/r/1262213
(cherry picked from commit ca0b70d5504c94c8cb98d2765bba1c2601c27d78)
Signed-off-by: Danny Huang <dahuang@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1736725
(cherry picked from commit 4c0ca13ab0c39cb9b83a511f3f84826d533b529e)
[nicolinc: added fallthrough statements in switch-case]
Signed-off-by: Nicolin Chen <nicolinc@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/c/linux-5.9/+/2444441
Reviewed-by: automaticguardword <automaticguardword@nvidia.com>
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
GVS: Gerrit_Virtual_Submit
diff --git a/drivers/soc/tegra/fuse/speedo-tegra210.c b/drivers/soc/tegra/fuse/speedo-tegra210.c
index 89af2a2..de1fc644 100644
--- a/drivers/soc/tegra/fuse/speedo-tegra210.c
+++ b/drivers/soc/tegra/fuse/speedo-tegra210.c
@@ -58,6 +58,8 @@ static void __init rev_sku_to_speedo_ids(struct tegra_sku_info *sku_info,
u8 speedo_rev, int *threshold)
{
int sku = sku_info->sku_id;
+ int rev = sku_info->revision;
+ bool a02 = (rev == TEGRA_REVISION_A02) || (rev == TEGRA_REVISION_A02p);
bool vcm31_sku = false;
/* Assign to default */
@@ -73,8 +75,20 @@ static void __init rev_sku_to_speedo_ids(struct tegra_sku_info *sku_info,
switch (sku) {
case 0x00: /* Engineering SKU */
case 0x01: /* Engineering SKU */
+ case 0x13:
+ if (a02) {
+ sku_info->cpu_speedo_id = 5;
+ sku_info->gpu_speedo_id = 2;
+ break;
+ }
+ fallthrough; /* for a01 */
case 0x07:
case 0x17:
+ if (a02) {
+ sku_info->cpu_speedo_id = 7;
+ sku_info->gpu_speedo_id = 2;
+ break;
+ }
if (vcm31_sku) {
sku_info->cpu_speedo_id = 4;
sku_info->soc_speedo_id = 1;
@@ -84,17 +98,40 @@ static void __init rev_sku_to_speedo_ids(struct tegra_sku_info *sku_info,
}
fallthrough; /* for a01 */
case 0x27:
- if (speedo_rev >= 2)
- sku_info->gpu_speedo_id = 1;
+ if (a02) {
+ sku_info->cpu_speedo_id = 1;
+ sku_info->gpu_speedo_id = 2;
+ break;
+ }
+ sku_info->gpu_speedo_id = 1;
break;
-
- case 0x13:
- if (speedo_rev >= 2)
- sku_info->gpu_speedo_id = 1;
-
- sku_info->cpu_speedo_id = 1;
+ case 0x57:
+ sku_info->cpu_speedo_id = 4;
+ sku_info->soc_speedo_id = 1;
+ sku_info->gpu_speedo_id = 4;
+ *threshold = THRESHOLD_INDEX_1;
break;
-
+ case 0x83:
+ if (a02) {
+ sku_info->cpu_speedo_id = 3;
+ sku_info->gpu_speedo_id = 3;
+ break;
+ }
+ fallthrough; /* for a01 */
+ case 0x87:
+ if (a02) {
+ sku_info->cpu_speedo_id = 2;
+ sku_info->gpu_speedo_id = 1;
+ break;
+ }
+ fallthrough; /* for a01 */
+ case 0x8F:
+ if (a02) {
+ sku_info->cpu_speedo_id = 9;
+ sku_info->gpu_speedo_id = 2;
+ break;
+ }
+ fallthrough; /* for a01 */
default:
pr_err("Tegra210: unknown SKU %#04x\n", sku);
/* Using the default for the error case */
@@ -144,7 +181,6 @@ void __init tegra210_init_speedo_data(struct tegra_sku_info *sku_info)
* revision. Note that GPU speedo value is fused in CPU_SPEEDO_2.
*/
speedo_revision = get_speedo_revision();
- pr_info("Speedo Revision %u\n", speedo_revision);
sku_info->speedo_rev = speedo_revision;
if (speedo_revision >= 3) {
@@ -182,6 +218,21 @@ void __init tegra210_init_speedo_data(struct tegra_sku_info *sku_info)
soc_process_speedos[index],
SOC_PROCESS_CORNERS);
- pr_debug("Tegra GPU Speedo ID=%d, Speedo Value=%d\n",
- sku_info->gpu_speedo_id, sku_info->gpu_speedo_value);
+ pr_info("Tegra Speedo/IDDQ fuse revision %u\n", speedo_revision);
+ pr_info("Tegra: CPU Speedo ID %d, SoC Speedo ID %d, GPU Speedo ID %d\n",
+ sku_info->cpu_speedo_id,
+ sku_info->soc_speedo_id,
+ sku_info->gpu_speedo_id);
+ pr_info("Tegra: CPU Process ID %d, SoC Process ID %d, GPU Process ID %d\n",
+ sku_info->cpu_process_id,
+ sku_info->soc_process_id,
+ sku_info->gpu_process_id);
+ pr_info("Tegra: CPU Speedo Value %d, SoC Speedo Value %d, GPU Speedo Value %d\n",
+ sku_info->cpu_speedo_value,
+ sku_info->soc_speedo_value,
+ sku_info->gpu_speedo_value);
+ pr_info("Tegra: CPU IDDQ Value %d, SoC IDDQ Value %d, GPU IDDQ Value %d\n",
+ sku_info->cpu_iddq_value,
+ sku_info->soc_iddq_value,
+ sku_info->gpu_iddq_value);
}