diff options
author | Terje Bergstrom <tbergstrom@nvidia.com> | 2017-09-27 16:21:44 -0400 |
---|---|---|
committer | mobile promotions <svcmobile_promotions@nvidia.com> | 2017-10-13 18:19:55 -0400 |
commit | be3750bc9eb60f8696c20b7298cc282eea17ac1b (patch) | |
tree | b36fb818ce58a96fc7f2822480433057bd28faf4 /drivers/gpu/nvgpu/vgpu | |
parent | ff9c3fc20a27444cd1ff7d9402965023e425f404 (diff) |
gpu: nvgpu: Abstract IO aperture accessors
Add abstraction of IO aperture accessors. Add new functions
gk20a_io_exists() and gk20a_io_valid_reg() to remove dependencies to
aperture fields from common code.
Implement Linux version of the abstraction by moving gk20a_readl()
and gk20a_writel() to new Linux specific io.c. Move the fields
defining IO aperture to nvgpu_os_linux.
Add t19x specific IO aperture initialization functions and add t19x
specific section to nvgpu_os_linux.
JIRA NVGPU-259
Change-Id: I09e79cda60d11a20d1099a9aaa6d2375236e94ce
Signed-off-by: Terje Bergstrom <tbergstrom@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1569698
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/vgpu')
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | 3 | ||||
-rw-r--r-- | drivers/gpu/nvgpu/vgpu/vgpu.c | 18 |
2 files changed, 13 insertions, 8 deletions
diff --git a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c index 9010c4a3..73a67d91 100644 --- a/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/fifo_vgpu.c | |||
@@ -268,6 +268,7 @@ clean_up_runlist: | |||
268 | 268 | ||
269 | static int vgpu_init_fifo_setup_sw(struct gk20a *g) | 269 | static int vgpu_init_fifo_setup_sw(struct gk20a *g) |
270 | { | 270 | { |
271 | struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); | ||
271 | struct fifo_gk20a *f = &g->fifo; | 272 | struct fifo_gk20a *f = &g->fifo; |
272 | struct device *d = dev_from_gk20a(g); | 273 | struct device *d = dev_from_gk20a(g); |
273 | struct vgpu_priv_data *priv = vgpu_get_priv_data(g); | 274 | struct vgpu_priv_data *priv = vgpu_get_priv_data(g); |
@@ -305,7 +306,7 @@ static int vgpu_init_fifo_setup_sw(struct gk20a *g) | |||
305 | /* if reduced BAR1 range is specified, use offset of 0 | 306 | /* if reduced BAR1 range is specified, use offset of 0 |
306 | * (server returns offset assuming full BAR1 range) | 307 | * (server returns offset assuming full BAR1 range) |
307 | */ | 308 | */ |
308 | if (resource_size(g->bar1_mem) == | 309 | if (resource_size(l->bar1_mem) == |
309 | (resource_size_t)f->userd.size) | 310 | (resource_size_t)f->userd.size) |
310 | f->userd.gpu_va = 0; | 311 | f->userd.gpu_va = 0; |
311 | } | 312 | } |
diff --git a/drivers/gpu/nvgpu/vgpu/vgpu.c b/drivers/gpu/nvgpu/vgpu/vgpu.c index c13d8ff0..b63202c1 100644 --- a/drivers/gpu/nvgpu/vgpu/vgpu.c +++ b/drivers/gpu/nvgpu/vgpu/vgpu.c | |||
@@ -216,6 +216,7 @@ static int vgpu_intr_thread(void *dev_id) | |||
216 | 216 | ||
217 | static void vgpu_remove_support(struct gk20a *g) | 217 | static void vgpu_remove_support(struct gk20a *g) |
218 | { | 218 | { |
219 | struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); | ||
219 | struct vgpu_priv_data *priv = | 220 | struct vgpu_priv_data *priv = |
220 | vgpu_get_priv_data_from_dev(dev_from_gk20a(g)); | 221 | vgpu_get_priv_data_from_dev(dev_from_gk20a(g)); |
221 | struct tegra_vgpu_intr_msg msg; | 222 | struct tegra_vgpu_intr_msg msg; |
@@ -245,18 +246,20 @@ static void vgpu_remove_support(struct gk20a *g) | |||
245 | 246 | ||
246 | /* free mappings to registers, etc*/ | 247 | /* free mappings to registers, etc*/ |
247 | 248 | ||
248 | if (g->bar1) { | 249 | if (l->bar1) { |
249 | iounmap(g->bar1); | 250 | iounmap(l->bar1); |
250 | g->bar1 = NULL; | 251 | l->bar1 = NULL; |
251 | } | 252 | } |
252 | } | 253 | } |
253 | 254 | ||
254 | static void vgpu_init_vars(struct gk20a *g, struct gk20a_platform *platform) | 255 | static void vgpu_init_vars(struct gk20a *g, struct gk20a_platform *platform) |
255 | { | 256 | { |
257 | struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); | ||
258 | |||
256 | nvgpu_mutex_init(&g->poweron_lock); | 259 | nvgpu_mutex_init(&g->poweron_lock); |
257 | nvgpu_mutex_init(&g->poweroff_lock); | 260 | nvgpu_mutex_init(&g->poweroff_lock); |
258 | g->regs_saved = g->regs; | 261 | l->regs_saved = l->regs; |
259 | g->bar1_saved = g->bar1; | 262 | l->bar1_saved = l->bar1; |
260 | 263 | ||
261 | nvgpu_init_list_node(&g->pending_sema_waits); | 264 | nvgpu_init_list_node(&g->pending_sema_waits); |
262 | nvgpu_raw_spinlock_init(&g->pending_sema_waits_lock); | 265 | nvgpu_raw_spinlock_init(&g->pending_sema_waits_lock); |
@@ -276,6 +279,7 @@ static int vgpu_init_support(struct platform_device *pdev) | |||
276 | { | 279 | { |
277 | struct resource *r = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 280 | struct resource *r = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
278 | struct gk20a *g = get_gk20a(&pdev->dev); | 281 | struct gk20a *g = get_gk20a(&pdev->dev); |
282 | struct nvgpu_os_linux *l = nvgpu_os_linux_from_gk20a(g); | ||
279 | void __iomem *regs; | 283 | void __iomem *regs; |
280 | int err = 0; | 284 | int err = 0; |
281 | 285 | ||
@@ -292,8 +296,8 @@ static int vgpu_init_support(struct platform_device *pdev) | |||
292 | err = PTR_ERR(regs); | 296 | err = PTR_ERR(regs); |
293 | goto fail; | 297 | goto fail; |
294 | } | 298 | } |
295 | g->bar1 = regs; | 299 | l->bar1 = regs; |
296 | g->bar1_mem = r; | 300 | l->bar1_mem = r; |
297 | } | 301 | } |
298 | 302 | ||
299 | nvgpu_mutex_init(&g->dbg_sessions_lock); | 303 | nvgpu_mutex_init(&g->dbg_sessions_lock); |