diff options
| -rw-r--r-- | drivers/gpu/drm/tegra/drm.c | 34 | ||||
| -rw-r--r-- | drivers/gpu/drm/tegra/drm.h | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/tegra/fb.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/tegra/rgb.c | 11 | ||||
| -rw-r--r-- | drivers/gpu/host1x/bus.c | 5 | ||||
| -rw-r--r-- | drivers/gpu/host1x/hw/cdma_hw.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/host1x/hw/debug_hw.c | 4 |
7 files changed, 35 insertions, 27 deletions
diff --git a/drivers/gpu/drm/tegra/drm.c b/drivers/gpu/drm/tegra/drm.c index 28e178137718..07eba596d458 100644 --- a/drivers/gpu/drm/tegra/drm.c +++ b/drivers/gpu/drm/tegra/drm.c | |||
| @@ -135,11 +135,11 @@ int tegra_drm_submit(struct tegra_drm_context *context, | |||
| 135 | unsigned int num_relocs = args->num_relocs; | 135 | unsigned int num_relocs = args->num_relocs; |
| 136 | unsigned int num_waitchks = args->num_waitchks; | 136 | unsigned int num_waitchks = args->num_waitchks; |
| 137 | struct drm_tegra_cmdbuf __user *cmdbufs = | 137 | struct drm_tegra_cmdbuf __user *cmdbufs = |
| 138 | (void * __user)(uintptr_t)args->cmdbufs; | 138 | (void __user *)(uintptr_t)args->cmdbufs; |
| 139 | struct drm_tegra_reloc __user *relocs = | 139 | struct drm_tegra_reloc __user *relocs = |
| 140 | (void * __user)(uintptr_t)args->relocs; | 140 | (void __user *)(uintptr_t)args->relocs; |
| 141 | struct drm_tegra_waitchk __user *waitchks = | 141 | struct drm_tegra_waitchk __user *waitchks = |
| 142 | (void * __user)(uintptr_t)args->waitchks; | 142 | (void __user *)(uintptr_t)args->waitchks; |
| 143 | struct drm_tegra_syncpt syncpt; | 143 | struct drm_tegra_syncpt syncpt; |
| 144 | struct host1x_job *job; | 144 | struct host1x_job *job; |
| 145 | int err; | 145 | int err; |
| @@ -163,9 +163,10 @@ int tegra_drm_submit(struct tegra_drm_context *context, | |||
| 163 | struct drm_tegra_cmdbuf cmdbuf; | 163 | struct drm_tegra_cmdbuf cmdbuf; |
| 164 | struct host1x_bo *bo; | 164 | struct host1x_bo *bo; |
| 165 | 165 | ||
| 166 | err = copy_from_user(&cmdbuf, cmdbufs, sizeof(cmdbuf)); | 166 | if (copy_from_user(&cmdbuf, cmdbufs, sizeof(cmdbuf))) { |
| 167 | if (err) | 167 | err = -EFAULT; |
| 168 | goto fail; | 168 | goto fail; |
| 169 | } | ||
| 169 | 170 | ||
| 170 | bo = host1x_bo_lookup(drm, file, cmdbuf.handle); | 171 | bo = host1x_bo_lookup(drm, file, cmdbuf.handle); |
| 171 | if (!bo) { | 172 | if (!bo) { |
| @@ -178,10 +179,11 @@ int tegra_drm_submit(struct tegra_drm_context *context, | |||
| 178 | cmdbufs++; | 179 | cmdbufs++; |
| 179 | } | 180 | } |
| 180 | 181 | ||
| 181 | err = copy_from_user(job->relocarray, relocs, | 182 | if (copy_from_user(job->relocarray, relocs, |
| 182 | sizeof(*relocs) * num_relocs); | 183 | sizeof(*relocs) * num_relocs)) { |
| 183 | if (err) | 184 | err = -EFAULT; |
| 184 | goto fail; | 185 | goto fail; |
| 186 | } | ||
| 185 | 187 | ||
| 186 | while (num_relocs--) { | 188 | while (num_relocs--) { |
| 187 | struct host1x_reloc *reloc = &job->relocarray[num_relocs]; | 189 | struct host1x_reloc *reloc = &job->relocarray[num_relocs]; |
| @@ -199,15 +201,17 @@ int tegra_drm_submit(struct tegra_drm_context *context, | |||
| 199 | } | 201 | } |
| 200 | } | 202 | } |
| 201 | 203 | ||
| 202 | err = copy_from_user(job->waitchk, waitchks, | 204 | if (copy_from_user(job->waitchk, waitchks, |
| 203 | sizeof(*waitchks) * num_waitchks); | 205 | sizeof(*waitchks) * num_waitchks)) { |
| 204 | if (err) | 206 | err = -EFAULT; |
| 205 | goto fail; | 207 | goto fail; |
| 208 | } | ||
| 206 | 209 | ||
| 207 | err = copy_from_user(&syncpt, (void * __user)(uintptr_t)args->syncpts, | 210 | if (copy_from_user(&syncpt, (void __user *)(uintptr_t)args->syncpts, |
| 208 | sizeof(syncpt)); | 211 | sizeof(syncpt))) { |
| 209 | if (err) | 212 | err = -EFAULT; |
| 210 | goto fail; | 213 | goto fail; |
| 214 | } | ||
| 211 | 215 | ||
| 212 | job->is_addr_reg = context->client->ops->is_addr_reg; | 216 | job->is_addr_reg = context->client->ops->is_addr_reg; |
| 213 | job->syncpt_incrs = syncpt.incrs; | 217 | job->syncpt_incrs = syncpt.incrs; |
| @@ -573,7 +577,7 @@ static void tegra_debugfs_cleanup(struct drm_minor *minor) | |||
| 573 | } | 577 | } |
| 574 | #endif | 578 | #endif |
| 575 | 579 | ||
| 576 | struct drm_driver tegra_drm_driver = { | 580 | static struct drm_driver tegra_drm_driver = { |
| 577 | .driver_features = DRIVER_MODESET | DRIVER_GEM, | 581 | .driver_features = DRIVER_MODESET | DRIVER_GEM, |
| 578 | .load = tegra_drm_load, | 582 | .load = tegra_drm_load, |
| 579 | .unload = tegra_drm_unload, | 583 | .unload = tegra_drm_unload, |
diff --git a/drivers/gpu/drm/tegra/drm.h b/drivers/gpu/drm/tegra/drm.h index fdfe259ed7f8..7da0b923131f 100644 --- a/drivers/gpu/drm/tegra/drm.h +++ b/drivers/gpu/drm/tegra/drm.h | |||
| @@ -116,7 +116,7 @@ host1x_client_to_dc(struct host1x_client *client) | |||
| 116 | 116 | ||
| 117 | static inline struct tegra_dc *to_tegra_dc(struct drm_crtc *crtc) | 117 | static inline struct tegra_dc *to_tegra_dc(struct drm_crtc *crtc) |
| 118 | { | 118 | { |
| 119 | return container_of(crtc, struct tegra_dc, base); | 119 | return crtc ? container_of(crtc, struct tegra_dc, base) : NULL; |
| 120 | } | 120 | } |
| 121 | 121 | ||
| 122 | static inline void tegra_dc_writel(struct tegra_dc *dc, unsigned long value, | 122 | static inline void tegra_dc_writel(struct tegra_dc *dc, unsigned long value, |
diff --git a/drivers/gpu/drm/tegra/fb.c b/drivers/gpu/drm/tegra/fb.c index 490f7719e317..a3835e7de184 100644 --- a/drivers/gpu/drm/tegra/fb.c +++ b/drivers/gpu/drm/tegra/fb.c | |||
| @@ -247,7 +247,7 @@ static int tegra_fbdev_probe(struct drm_fb_helper *helper, | |||
| 247 | info->var.yoffset * fb->pitches[0]; | 247 | info->var.yoffset * fb->pitches[0]; |
| 248 | 248 | ||
| 249 | drm->mode_config.fb_base = (resource_size_t)bo->paddr; | 249 | drm->mode_config.fb_base = (resource_size_t)bo->paddr; |
| 250 | info->screen_base = bo->vaddr + offset; | 250 | info->screen_base = (void __iomem *)bo->vaddr + offset; |
| 251 | info->screen_size = size; | 251 | info->screen_size = size; |
| 252 | info->fix.smem_start = (unsigned long)(bo->paddr + offset); | 252 | info->fix.smem_start = (unsigned long)(bo->paddr + offset); |
| 253 | info->fix.smem_len = size; | 253 | info->fix.smem_len = size; |
diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c index ba47ca4fb880..3b29018913a5 100644 --- a/drivers/gpu/drm/tegra/rgb.c +++ b/drivers/gpu/drm/tegra/rgb.c | |||
| @@ -14,6 +14,8 @@ | |||
| 14 | 14 | ||
| 15 | struct tegra_rgb { | 15 | struct tegra_rgb { |
| 16 | struct tegra_output output; | 16 | struct tegra_output output; |
| 17 | struct tegra_dc *dc; | ||
| 18 | |||
| 17 | struct clk *clk_parent; | 19 | struct clk *clk_parent; |
| 18 | struct clk *clk; | 20 | struct clk *clk; |
| 19 | }; | 21 | }; |
| @@ -84,18 +86,18 @@ static void tegra_dc_write_regs(struct tegra_dc *dc, | |||
| 84 | 86 | ||
| 85 | static int tegra_output_rgb_enable(struct tegra_output *output) | 87 | static int tegra_output_rgb_enable(struct tegra_output *output) |
| 86 | { | 88 | { |
| 87 | struct tegra_dc *dc = to_tegra_dc(output->encoder.crtc); | 89 | struct tegra_rgb *rgb = to_rgb(output); |
| 88 | 90 | ||
| 89 | tegra_dc_write_regs(dc, rgb_enable, ARRAY_SIZE(rgb_enable)); | 91 | tegra_dc_write_regs(rgb->dc, rgb_enable, ARRAY_SIZE(rgb_enable)); |
| 90 | 92 | ||
| 91 | return 0; | 93 | return 0; |
| 92 | } | 94 | } |
| 93 | 95 | ||
| 94 | static int tegra_output_rgb_disable(struct tegra_output *output) | 96 | static int tegra_output_rgb_disable(struct tegra_output *output) |
| 95 | { | 97 | { |
| 96 | struct tegra_dc *dc = to_tegra_dc(output->encoder.crtc); | 98 | struct tegra_rgb *rgb = to_rgb(output); |
| 97 | 99 | ||
| 98 | tegra_dc_write_regs(dc, rgb_disable, ARRAY_SIZE(rgb_disable)); | 100 | tegra_dc_write_regs(rgb->dc, rgb_disable, ARRAY_SIZE(rgb_disable)); |
| 99 | 101 | ||
| 100 | return 0; | 102 | return 0; |
| 101 | } | 103 | } |
| @@ -146,6 +148,7 @@ int tegra_dc_rgb_probe(struct tegra_dc *dc) | |||
| 146 | 148 | ||
| 147 | rgb->output.dev = dc->dev; | 149 | rgb->output.dev = dc->dev; |
| 148 | rgb->output.of_node = np; | 150 | rgb->output.of_node = np; |
| 151 | rgb->dc = dc; | ||
| 149 | 152 | ||
| 150 | err = tegra_output_probe(&rgb->output); | 153 | err = tegra_output_probe(&rgb->output); |
| 151 | if (err < 0) | 154 | if (err < 0) |
diff --git a/drivers/gpu/host1x/bus.c b/drivers/gpu/host1x/bus.c index 509383f8be03..6a929591aa73 100644 --- a/drivers/gpu/host1x/bus.c +++ b/drivers/gpu/host1x/bus.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | #include <linux/of.h> | 19 | #include <linux/of.h> |
| 20 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
| 21 | 21 | ||
| 22 | #include "bus.h" | ||
| 22 | #include "dev.h" | 23 | #include "dev.h" |
| 23 | 24 | ||
| 24 | static DEFINE_MUTEX(clients_lock); | 25 | static DEFINE_MUTEX(clients_lock); |
| @@ -257,7 +258,7 @@ static int host1x_unregister_client(struct host1x *host1x, | |||
| 257 | return -ENODEV; | 258 | return -ENODEV; |
| 258 | } | 259 | } |
| 259 | 260 | ||
| 260 | struct bus_type host1x_bus_type = { | 261 | static struct bus_type host1x_bus_type = { |
| 261 | .name = "host1x", | 262 | .name = "host1x", |
| 262 | }; | 263 | }; |
| 263 | 264 | ||
| @@ -301,7 +302,7 @@ static int host1x_device_add(struct host1x *host1x, | |||
| 301 | device->dev.coherent_dma_mask = host1x->dev->coherent_dma_mask; | 302 | device->dev.coherent_dma_mask = host1x->dev->coherent_dma_mask; |
| 302 | device->dev.dma_mask = &device->dev.coherent_dma_mask; | 303 | device->dev.dma_mask = &device->dev.coherent_dma_mask; |
| 303 | device->dev.release = host1x_device_release; | 304 | device->dev.release = host1x_device_release; |
| 304 | dev_set_name(&device->dev, driver->name); | 305 | dev_set_name(&device->dev, "%s", driver->name); |
| 305 | device->dev.bus = &host1x_bus_type; | 306 | device->dev.bus = &host1x_bus_type; |
| 306 | device->dev.parent = host1x->dev; | 307 | device->dev.parent = host1x->dev; |
| 307 | 308 | ||
diff --git a/drivers/gpu/host1x/hw/cdma_hw.c b/drivers/gpu/host1x/hw/cdma_hw.c index 37e2a63241a9..6b09b71940c2 100644 --- a/drivers/gpu/host1x/hw/cdma_hw.c +++ b/drivers/gpu/host1x/hw/cdma_hw.c | |||
| @@ -54,8 +54,8 @@ static void cdma_timeout_cpu_incr(struct host1x_cdma *cdma, u32 getptr, | |||
| 54 | u32 *p = (u32 *)((u32)pb->mapped + getptr); | 54 | u32 *p = (u32 *)((u32)pb->mapped + getptr); |
| 55 | *(p++) = HOST1X_OPCODE_NOP; | 55 | *(p++) = HOST1X_OPCODE_NOP; |
| 56 | *(p++) = HOST1X_OPCODE_NOP; | 56 | *(p++) = HOST1X_OPCODE_NOP; |
| 57 | dev_dbg(host1x->dev, "%s: NOP at 0x%x\n", __func__, | 57 | dev_dbg(host1x->dev, "%s: NOP at %#llx\n", __func__, |
| 58 | pb->phys + getptr); | 58 | (u64)pb->phys + getptr); |
| 59 | getptr = (getptr + 8) & (pb->size_bytes - 1); | 59 | getptr = (getptr + 8) & (pb->size_bytes - 1); |
| 60 | } | 60 | } |
| 61 | wmb(); | 61 | wmb(); |
diff --git a/drivers/gpu/host1x/hw/debug_hw.c b/drivers/gpu/host1x/hw/debug_hw.c index 640c75ca5a8b..f72c873eff81 100644 --- a/drivers/gpu/host1x/hw/debug_hw.c +++ b/drivers/gpu/host1x/hw/debug_hw.c | |||
| @@ -163,8 +163,8 @@ static void show_channel_gathers(struct output *o, struct host1x_cdma *cdma) | |||
| 163 | continue; | 163 | continue; |
| 164 | } | 164 | } |
| 165 | 165 | ||
| 166 | host1x_debug_output(o, " GATHER at %08x+%04x, %d words\n", | 166 | host1x_debug_output(o, " GATHER at %#llx+%04x, %d words\n", |
| 167 | g->base, g->offset, g->words); | 167 | (u64)g->base, g->offset, g->words); |
| 168 | 168 | ||
| 169 | show_gather(o, g->base + g->offset, g->words, cdma, | 169 | show_gather(o, g->base + g->offset, g->words, cdma, |
| 170 | g->base, mapped); | 170 | g->base, mapped); |
