diff options
Diffstat (limited to 'drivers/gpu/nvgpu/os')
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c | 1 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c | 13 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c | 13 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/os/linux/sysfs.c | 8 |
4 files changed, 34 insertions, 1 deletions
diff --git a/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c index 0977e63a..c39e4f0e 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/platform_gk20a_tegra.c | |||
@@ -799,6 +799,7 @@ static int gk20a_tegra_probe(struct device *dev) | |||
799 | 799 | ||
800 | if (joint_xpu_rail) { | 800 | if (joint_xpu_rail) { |
801 | nvgpu_log_info(g, "XPU rails are joint\n"); | 801 | nvgpu_log_info(g, "XPU rails are joint\n"); |
802 | platform->can_railgate_init = false; | ||
802 | __nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, false); | 803 | __nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, false); |
803 | } | 804 | } |
804 | 805 | ||
diff --git a/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c index c5527f2d..9bf8d637 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/platform_gp10b_tegra.c | |||
@@ -141,6 +141,8 @@ static void gp10b_tegra_scale_exit(struct device *dev) | |||
141 | static int gp10b_tegra_probe(struct device *dev) | 141 | static int gp10b_tegra_probe(struct device *dev) |
142 | { | 142 | { |
143 | struct gk20a_platform *platform = dev_get_drvdata(dev); | 143 | struct gk20a_platform *platform = dev_get_drvdata(dev); |
144 | bool joint_xpu_rail = false; | ||
145 | struct gk20a *g = platform->g; | ||
144 | #ifdef CONFIG_TEGRA_GK20A_NVHOST | 146 | #ifdef CONFIG_TEGRA_GK20A_NVHOST |
145 | int ret; | 147 | int ret; |
146 | 148 | ||
@@ -163,6 +165,17 @@ static int gp10b_tegra_probe(struct device *dev) | |||
163 | platform->g->gr.ctx_vars.force_preemption_gfxp = false; | 165 | platform->g->gr.ctx_vars.force_preemption_gfxp = false; |
164 | platform->g->gr.ctx_vars.force_preemption_cilp = false; | 166 | platform->g->gr.ctx_vars.force_preemption_cilp = false; |
165 | 167 | ||
168 | #ifdef CONFIG_OF | ||
169 | joint_xpu_rail = of_property_read_bool(of_chosen, | ||
170 | "nvidia,tegra-joint_xpu_rail"); | ||
171 | #endif | ||
172 | |||
173 | if (joint_xpu_rail) { | ||
174 | nvgpu_log_info(g, "XPU rails are joint\n"); | ||
175 | platform->can_railgate_init = false; | ||
176 | __nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, false); | ||
177 | } | ||
178 | |||
166 | gp10b_tegra_get_clocks(dev); | 179 | gp10b_tegra_get_clocks(dev); |
167 | nvgpu_linux_init_clk_support(platform->g); | 180 | nvgpu_linux_init_clk_support(platform->g); |
168 | 181 | ||
diff --git a/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c b/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c index ac1958a2..6c9d0f5c 100644 --- a/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c +++ b/drivers/gpu/nvgpu/os/linux/platform_gv11b_tegra.c | |||
@@ -73,6 +73,8 @@ static int gv11b_tegra_probe(struct device *dev) | |||
73 | { | 73 | { |
74 | struct gk20a_platform *platform = dev_get_drvdata(dev); | 74 | struct gk20a_platform *platform = dev_get_drvdata(dev); |
75 | int err; | 75 | int err; |
76 | bool joint_xpu_rail = false; | ||
77 | struct gk20a *g = platform->g; | ||
76 | 78 | ||
77 | err = nvgpu_nvhost_syncpt_init(platform->g); | 79 | err = nvgpu_nvhost_syncpt_init(platform->g); |
78 | if (err) { | 80 | if (err) { |
@@ -94,6 +96,17 @@ static int gv11b_tegra_probe(struct device *dev) | |||
94 | platform->g->gr.ctx_vars.force_preemption_gfxp = false; | 96 | platform->g->gr.ctx_vars.force_preemption_gfxp = false; |
95 | platform->g->gr.ctx_vars.force_preemption_cilp = false; | 97 | platform->g->gr.ctx_vars.force_preemption_cilp = false; |
96 | 98 | ||
99 | #ifdef CONFIG_OF | ||
100 | joint_xpu_rail = of_property_read_bool(of_chosen, | ||
101 | "nvidia,tegra-joint_xpu_rail"); | ||
102 | #endif | ||
103 | |||
104 | if (joint_xpu_rail) { | ||
105 | nvgpu_log_info(g, "XPU rails are joint\n"); | ||
106 | platform->can_railgate_init = false; | ||
107 | __nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, false); | ||
108 | } | ||
109 | |||
97 | gp10b_tegra_get_clocks(dev); | 110 | gp10b_tegra_get_clocks(dev); |
98 | nvgpu_linux_init_clk_support(platform->g); | 111 | nvgpu_linux_init_clk_support(platform->g); |
99 | 112 | ||
diff --git a/drivers/gpu/nvgpu/os/linux/sysfs.c b/drivers/gpu/nvgpu/os/linux/sysfs.c index 2ab29649..84a311de 100644 --- a/drivers/gpu/nvgpu/os/linux/sysfs.c +++ b/drivers/gpu/nvgpu/os/linux/sysfs.c | |||
@@ -259,13 +259,19 @@ static ssize_t railgate_enable_store(struct device *dev, | |||
259 | unsigned long railgate_enable = 0; | 259 | unsigned long railgate_enable = 0; |
260 | /* dev is guaranteed to be valid here. Ok to de-reference */ | 260 | /* dev is guaranteed to be valid here. Ok to de-reference */ |
261 | struct gk20a *g = get_gk20a(dev); | 261 | struct gk20a *g = get_gk20a(dev); |
262 | struct gk20a_platform *platform = dev_get_drvdata(dev); | ||
262 | bool enabled = nvgpu_is_enabled(g, NVGPU_CAN_RAILGATE); | 263 | bool enabled = nvgpu_is_enabled(g, NVGPU_CAN_RAILGATE); |
263 | int err; | 264 | int err; |
264 | 265 | ||
265 | if (kstrtoul(buf, 10, &railgate_enable) < 0) | 266 | if (kstrtoul(buf, 10, &railgate_enable) < 0) |
266 | return -EINVAL; | 267 | return -EINVAL; |
267 | 268 | ||
268 | if (railgate_enable && !enabled) { | 269 | if (!platform->can_railgate_init) { |
270 | nvgpu_err(g, "Railgating is not supported"); | ||
271 | return -EINVAL; | ||
272 | } | ||
273 | |||
274 | if (railgate_enable) { | ||
269 | __nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, true); | 275 | __nvgpu_set_enabled(g, NVGPU_CAN_RAILGATE, true); |
270 | pm_runtime_set_autosuspend_delay(dev, g->railgate_delay); | 276 | pm_runtime_set_autosuspend_delay(dev, g->railgate_delay); |
271 | } else if (railgate_enable == 0 && enabled) { | 277 | } else if (railgate_enable == 0 && enabled) { |