From 71bb9aae919aff87ac5f7ceb625003baaa7e0002 Mon Sep 17 00:00:00 2001 From: Debarshi Dutta Date: Mon, 11 Nov 2019 10:52:27 +0530 Subject: [PATCH] gpu: nvgpu: remove call to tegra_get_chip_id() tegra_get_chip_id is going to be deprecated soon and this patch removes calls to it. Chip-ID is already read via DT and call to tegra_get_chip_id() can be avoided by adding metadata to store the Chip-ID information in struct gk20a_platform. Bug 200524194 Bug 200551105 Change-Id: I5f9f5abf679cf9afe98840e20144d76eb0238426 Signed-off-by: Debarshi Dutta Reviewed-on: https://git-master.nvidia.com/r/2236311 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Sagar Kamble Reviewed-by: Vijayakumar Subbu Reviewed-by: mobile promotions Tested-by: mobile promotions --- drivers/gpu/nvgpu/os/linux/platform_gk20a.h | 12 ++++++++++++ .../gpu/nvgpu/os/linux/platform_gk20a_tegra.c | 17 +++++++++-------- .../gpu/nvgpu/os/linux/platform_gp10b_tegra.c | 1 + .../gpu/nvgpu/os/linux/platform_gv11b_tegra.c | 1 + drivers/gpu/nvgpu/os/linux/soc.c | 5 ++++- .../vgpu/gv11b/platform_gv11b_vgpu_tegra.c | 2 ++ .../nvgpu/os/linux/vgpu/platform_vgpu_tegra.c | 2 ++ 7 files changed, 31 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/nvgpu/os/linux/platform_gk20a.h b/drivers/gpu/nvgpu/os/linux/platform_gk20a.h index c02c2b7b0..a9a20ad65 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_gk20a.h +++ b/drivers/gpu/nvgpu/os/linux/platform_gk20a.h @@ -54,6 +54,16 @@ struct nvgpu_pci_gpios { #define PCI_VBAR_PWR_OFF_DELAY_MS 2 #define PCI_PWR_OFF_DELAY_MS 2 +enum tegra_chip_id { + TEGRA_124, + TEGRA_132, + TEGRA_210, + TEGRA_186, + TEGRA_194, + TEGRA_194_VGPU, + TEGRA_124_VGPU, +}; + struct gk20a_platform { /* Populated by the gk20a driver before probing the platform. */ struct gk20a *g; @@ -264,6 +274,8 @@ struct gk20a_platform { bool has_cde; #endif + enum tegra_chip_id platform_chip_id; + /* soc name for finding firmware files */ const char *soc_name; diff --git a/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c index 9ee8619ed..c250477c8 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c @@ -203,19 +203,19 @@ static void gk20a_tegra_prescale(struct device *dev) * */ -static void gk20a_tegra_calibrate_emc(struct device *dev, +static void gk20a_tegra_calibrate_emc(struct gk20a_platform *platform, struct gk20a_emc_params *emc_params) { - enum tegra_chipid cid = tegra_get_chip_id(); + enum tegra_chip_id cid = platform->platform_chip_id; long gpu_bw, emc_bw; /* store gpu bw based on soc */ switch (cid) { - case TEGRA210: + case TEGRA_210: gpu_bw = TEGRA_GM20B_BW_PER_FREQ; break; - case TEGRA124: - case TEGRA132: + case TEGRA_124: + case TEGRA_132: gpu_bw = TEGRA_GK20A_BW_PER_FREQ; break; default: @@ -552,7 +552,7 @@ static void gk20a_tegra_scale_init(struct device *dev) return; emc_params->freq_last_set = -1; - gk20a_tegra_calibrate_emc(dev, emc_params); + gk20a_tegra_calibrate_emc(platform, emc_params); #ifdef CONFIG_TEGRA_BWMGR emc_params->bwmgr_cl = tegra_bwmgr_register(TEGRA_BWMGR_CLIENT_GPU); @@ -810,7 +810,7 @@ static int gk20a_tegra_probe(struct device *dev) } platform->g->clk.gpc_pll.id = GK20A_GPC_PLL; - if (tegra_get_chip_id() == TEGRA210) { + if (platform->platform_chip_id == TEGRA_210) { /* WAR for bug 1547668: Disable railgating and scaling irrespective of platform data if the rework was not made. */ np = of_find_node_by_path("/gpu-dvfs-rework"); @@ -823,7 +823,7 @@ static int gk20a_tegra_probe(struct device *dev) platform->g->clk.gpc_pll.id = GM20B_GPC_PLL_C1; } - if (tegra_get_chip_id() == TEGRA132) + if (platform->platform_chip_id == TEGRA_132) platform->soc_name = "tegra13x"; gk20a_tegra_get_clocks(dev); @@ -962,6 +962,7 @@ struct gk20a_platform gm20b_tegra_platform = { .has_cde = true, #endif + .platform_chip_id = TEGRA_210, .soc_name = "tegra21x", .unified_memory = true, diff --git a/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c index 68563943f..4de7ba5e0 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c @@ -489,6 +489,7 @@ struct gk20a_platform gp10b_tegra_platform = { .force_reset_in_do_idle = false, + .platform_chip_id = TEGRA_186, .soc_name = "tegra18x", .unified_memory = true, diff --git a/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c index 838fa9e89..0bff4c560 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c @@ -305,6 +305,7 @@ struct gk20a_platform gv11b_tegra_platform = { .dump_platform_dependencies = gk20a_tegra_debug_dump, + .platform_chip_id = TEGRA_194, .soc_name = "tegra19x", .honors_aperture = true, diff --git a/drivers/gpu/nvgpu/os/linux/soc.c b/drivers/gpu/nvgpu/os/linux/soc.c index 962ffb9a9..4450d05c5 100644 --- a/drivers/gpu/nvgpu/os/linux/soc.c +++ b/drivers/gpu/nvgpu/os/linux/soc.c @@ -49,7 +49,10 @@ bool nvgpu_is_bpmp_running(struct gk20a *g) bool nvgpu_is_soc_t194_a01(struct gk20a *g) { - return ((tegra_get_chip_id() == TEGRA194 && + struct device *dev = dev_from_gk20a(g); + struct gk20a_platform *platform = gk20a_get_platform(dev); + + return ((platform->platform_chip_id == TEGRA_194 && tegra_chip_get_revision() == TEGRA194_REVISION_A01) ? true : false); } diff --git a/drivers/gpu/nvgpu/os/linux/vgpu/gv11b/platform_gv11b_vgpu_tegra.c b/drivers/gpu/nvgpu/os/linux/vgpu/gv11b/platform_gv11b_vgpu_tegra.c index 57a12f13d..b68dcb98c 100644 --- a/drivers/gpu/nvgpu/os/linux/vgpu/gv11b/platform_gv11b_vgpu_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/vgpu/gv11b/platform_gv11b_vgpu_tegra.c @@ -96,6 +96,8 @@ struct gk20a_platform gv11b_vgpu_tegra_platform = { .clk_round_rate = vgpu_plat_clk_round_rate, .get_clk_freqs = vgpu_plat_clk_get_freqs, + .platform_chip_id = TEGRA_194_VGPU, + /* frequency scaling configuration */ .devfreq_governor = "userspace", diff --git a/drivers/gpu/nvgpu/os/linux/vgpu/platform_vgpu_tegra.c b/drivers/gpu/nvgpu/os/linux/vgpu/platform_vgpu_tegra.c index 4e2fd802c..5b7bc2fb7 100644 --- a/drivers/gpu/nvgpu/os/linux/vgpu/platform_vgpu_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/vgpu/platform_vgpu_tegra.c @@ -86,6 +86,8 @@ struct gk20a_platform vgpu_tegra_platform = { .clk_round_rate = vgpu_plat_clk_round_rate, .get_clk_freqs = vgpu_plat_clk_get_freqs, + .platform_chip_id = TEGRA_124_VGPU, + /* frequency scaling configuration */ .devfreq_governor = "userspace",