diff --git a/drivers/gpu/nvgpu/common/linux/driver_common.c b/drivers/gpu/nvgpu/common/linux/driver_common.c index f2373e007..b90574e05 100644 --- a/drivers/gpu/nvgpu/common/linux/driver_common.c +++ b/drivers/gpu/nvgpu/common/linux/driver_common.c @@ -170,6 +170,13 @@ static void nvgpu_init_vbios_vars(struct gk20a *g) g->vbios_min_version = platform->vbios_min_version; } +static void nvgpu_init_ltc_vars(struct gk20a *g) +{ + struct gk20a_platform *platform = dev_get_drvdata(dev_from_gk20a(g)); + + g->ltc_streamid = platform->ltc_streamid; +} + static void nvgpu_init_mm_vars(struct gk20a *g) { struct gk20a_platform *platform = dev_get_drvdata(dev_from_gk20a(g)); @@ -202,6 +209,7 @@ int nvgpu_probe(struct gk20a *g, nvgpu_init_timeslice(g); nvgpu_init_pm_vars(g); nvgpu_init_vbios_vars(g); + nvgpu_init_ltc_vars(g); /* Initialize the platform interface. */ err = platform->probe(dev); diff --git a/drivers/gpu/nvgpu/common/linux/platform_gk20a.h b/drivers/gpu/nvgpu/common/linux/platform_gk20a.h index 9325eab7f..b0c089e6f 100644 --- a/drivers/gpu/nvgpu/common/linux/platform_gk20a.h +++ b/drivers/gpu/nvgpu/common/linux/platform_gk20a.h @@ -239,6 +239,9 @@ struct gk20a_platform { u32 ina3221_dcb_index; u32 ina3221_i2c_address; u32 ina3221_i2c_port; + + /* stream id to use */ + u32 ltc_streamid; }; static inline struct gk20a_platform *gk20a_get_platform( diff --git a/drivers/gpu/nvgpu/common/linux/platform_gp10b_tegra.c b/drivers/gpu/nvgpu/common/linux/platform_gp10b_tegra.c index 8a964caf5..00cbe48e2 100644 --- a/drivers/gpu/nvgpu/common/linux/platform_gp10b_tegra.c +++ b/drivers/gpu/nvgpu/common/linux/platform_gp10b_tegra.c @@ -25,6 +25,8 @@ #include #include +#include + #include #include #include @@ -417,6 +419,8 @@ struct gk20a_platform gp10b_tegra_platform = { .soc_name = "tegra18x", .unified_memory = true, + + .ltc_streamid = TEGRA_SID_GPUB, }; diff --git a/drivers/gpu/nvgpu/gk20a/gk20a.h b/drivers/gpu/nvgpu/gk20a/gk20a.h index f187f730c..8bddad118 100644 --- a/drivers/gpu/nvgpu/gk20a/gk20a.h +++ b/drivers/gpu/nvgpu/gk20a/gk20a.h @@ -1304,6 +1304,7 @@ struct gk20a { int irq_nonstall; u32 max_ltc_count; u32 ltc_count; + u32 ltc_streamid; struct gk20a_channel_worker { struct nvgpu_thread poll_task; diff --git a/drivers/gpu/nvgpu/gp10b/ltc_gp10b.c b/drivers/gpu/nvgpu/gp10b/ltc_gp10b.c index 7735d1ae4..d52a10ad2 100644 --- a/drivers/gpu/nvgpu/gp10b/ltc_gp10b.c +++ b/drivers/gpu/nvgpu/gp10b/ltc_gp10b.c @@ -24,8 +24,6 @@ #include -#include - #include #include #include @@ -299,7 +297,7 @@ void gp10b_ltc_init_fs_state(struct gk20a *g) gm20b_ltc_init_fs_state(g); gk20a_writel(g, ltc_ltca_g_axi_pctrl_r(), - ltc_ltca_g_axi_pctrl_user_sid_f(TEGRA_SID_GPUB)); + ltc_ltca_g_axi_pctrl_user_sid_f(g->ltc_streamid)); /* Enable ECC interrupts */ ltc_intr = gk20a_readl(g, ltc_ltcs_ltss_intr_r());