diff options
Diffstat (limited to 'drivers/gpu/drm/vc4')
-rw-r--r-- | drivers/gpu/drm/vc4/vc4_crtc.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/vc4/vc4_drv.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/vc4/vc4_hvs.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/vc4/vc4_plane.c | 18 |
4 files changed, 23 insertions, 13 deletions
diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c index 7a9f4768591e..265064c62d49 100644 --- a/drivers/gpu/drm/vc4/vc4_crtc.c +++ b/drivers/gpu/drm/vc4/vc4_crtc.c | |||
@@ -168,7 +168,7 @@ static int vc4_get_clock_select(struct drm_crtc *crtc) | |||
168 | struct drm_connector *connector; | 168 | struct drm_connector *connector; |
169 | 169 | ||
170 | drm_for_each_connector(connector, crtc->dev) { | 170 | drm_for_each_connector(connector, crtc->dev) { |
171 | if (connector && connector->state->crtc == crtc) { | 171 | if (connector->state->crtc == crtc) { |
172 | struct drm_encoder *encoder = connector->encoder; | 172 | struct drm_encoder *encoder = connector->encoder; |
173 | struct vc4_encoder *vc4_encoder = | 173 | struct vc4_encoder *vc4_encoder = |
174 | to_vc4_encoder(encoder); | 174 | to_vc4_encoder(encoder); |
@@ -401,7 +401,8 @@ static void vc4_crtc_atomic_flush(struct drm_crtc *crtc, | |||
401 | dlist_next++; | 401 | dlist_next++; |
402 | 402 | ||
403 | HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), | 403 | HVS_WRITE(SCALER_DISPLISTX(vc4_crtc->channel), |
404 | (u32 *)vc4_crtc->dlist - (u32 *)vc4->hvs->dlist); | 404 | (u32 __iomem *)vc4_crtc->dlist - |
405 | (u32 __iomem *)vc4->hvs->dlist); | ||
405 | 406 | ||
406 | /* Make the next display list start after ours. */ | 407 | /* Make the next display list start after ours. */ |
407 | vc4_crtc->dlist_size -= (dlist_next - vc4_crtc->dlist); | 408 | vc4_crtc->dlist_size -= (dlist_next - vc4_crtc->dlist); |
@@ -591,14 +592,14 @@ static int vc4_crtc_bind(struct device *dev, struct device *master, void *data) | |||
591 | * that will take too much. | 592 | * that will take too much. |
592 | */ | 593 | */ |
593 | primary_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_PRIMARY); | 594 | primary_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_PRIMARY); |
594 | if (!primary_plane) { | 595 | if (IS_ERR(primary_plane)) { |
595 | dev_err(dev, "failed to construct primary plane\n"); | 596 | dev_err(dev, "failed to construct primary plane\n"); |
596 | ret = PTR_ERR(primary_plane); | 597 | ret = PTR_ERR(primary_plane); |
597 | goto err; | 598 | goto err; |
598 | } | 599 | } |
599 | 600 | ||
600 | cursor_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_CURSOR); | 601 | cursor_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_CURSOR); |
601 | if (!cursor_plane) { | 602 | if (IS_ERR(cursor_plane)) { |
602 | dev_err(dev, "failed to construct cursor plane\n"); | 603 | dev_err(dev, "failed to construct cursor plane\n"); |
603 | ret = PTR_ERR(cursor_plane); | 604 | ret = PTR_ERR(cursor_plane); |
604 | goto err_primary; | 605 | goto err_primary; |
diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c index 6e730605edcc..d5db9e0f3b73 100644 --- a/drivers/gpu/drm/vc4/vc4_drv.c +++ b/drivers/gpu/drm/vc4/vc4_drv.c | |||
@@ -259,7 +259,6 @@ static struct platform_driver vc4_platform_driver = { | |||
259 | .remove = vc4_platform_drm_remove, | 259 | .remove = vc4_platform_drm_remove, |
260 | .driver = { | 260 | .driver = { |
261 | .name = "vc4-drm", | 261 | .name = "vc4-drm", |
262 | .owner = THIS_MODULE, | ||
263 | .of_match_table = vc4_of_match, | 262 | .of_match_table = vc4_of_match, |
264 | }, | 263 | }, |
265 | }; | 264 | }; |
diff --git a/drivers/gpu/drm/vc4/vc4_hvs.c b/drivers/gpu/drm/vc4/vc4_hvs.c index ab1673f672a4..8098c5b21ba4 100644 --- a/drivers/gpu/drm/vc4/vc4_hvs.c +++ b/drivers/gpu/drm/vc4/vc4_hvs.c | |||
@@ -75,10 +75,10 @@ void vc4_hvs_dump_state(struct drm_device *dev) | |||
75 | for (i = 0; i < 64; i += 4) { | 75 | for (i = 0; i < 64; i += 4) { |
76 | DRM_INFO("0x%08x (%s): 0x%08x 0x%08x 0x%08x 0x%08x\n", | 76 | DRM_INFO("0x%08x (%s): 0x%08x 0x%08x 0x%08x 0x%08x\n", |
77 | i * 4, i < HVS_BOOTLOADER_DLIST_END ? "B" : "D", | 77 | i * 4, i < HVS_BOOTLOADER_DLIST_END ? "B" : "D", |
78 | ((uint32_t *)vc4->hvs->dlist)[i + 0], | 78 | readl((u32 __iomem *)vc4->hvs->dlist + i + 0), |
79 | ((uint32_t *)vc4->hvs->dlist)[i + 1], | 79 | readl((u32 __iomem *)vc4->hvs->dlist + i + 1), |
80 | ((uint32_t *)vc4->hvs->dlist)[i + 2], | 80 | readl((u32 __iomem *)vc4->hvs->dlist + i + 2), |
81 | ((uint32_t *)vc4->hvs->dlist)[i + 3]); | 81 | readl((u32 __iomem *)vc4->hvs->dlist + i + 3)); |
82 | } | 82 | } |
83 | } | 83 | } |
84 | 84 | ||
diff --git a/drivers/gpu/drm/vc4/vc4_plane.c b/drivers/gpu/drm/vc4/vc4_plane.c index cdd8b10c0147..887f3caad0be 100644 --- a/drivers/gpu/drm/vc4/vc4_plane.c +++ b/drivers/gpu/drm/vc4/vc4_plane.c | |||
@@ -70,7 +70,7 @@ static bool plane_enabled(struct drm_plane_state *state) | |||
70 | return state->fb && state->crtc; | 70 | return state->fb && state->crtc; |
71 | } | 71 | } |
72 | 72 | ||
73 | struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane) | 73 | static struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane) |
74 | { | 74 | { |
75 | struct vc4_plane_state *vc4_state; | 75 | struct vc4_plane_state *vc4_state; |
76 | 76 | ||
@@ -97,8 +97,8 @@ struct drm_plane_state *vc4_plane_duplicate_state(struct drm_plane *plane) | |||
97 | return &vc4_state->base; | 97 | return &vc4_state->base; |
98 | } | 98 | } |
99 | 99 | ||
100 | void vc4_plane_destroy_state(struct drm_plane *plane, | 100 | static void vc4_plane_destroy_state(struct drm_plane *plane, |
101 | struct drm_plane_state *state) | 101 | struct drm_plane_state *state) |
102 | { | 102 | { |
103 | struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); | 103 | struct vc4_plane_state *vc4_state = to_vc4_plane_state(state); |
104 | 104 | ||
@@ -108,7 +108,7 @@ void vc4_plane_destroy_state(struct drm_plane *plane, | |||
108 | } | 108 | } |
109 | 109 | ||
110 | /* Called during init to allocate the plane's atomic state. */ | 110 | /* Called during init to allocate the plane's atomic state. */ |
111 | void vc4_plane_reset(struct drm_plane *plane) | 111 | static void vc4_plane_reset(struct drm_plane *plane) |
112 | { | 112 | { |
113 | struct vc4_plane_state *vc4_state; | 113 | struct vc4_plane_state *vc4_state; |
114 | 114 | ||
@@ -157,6 +157,16 @@ static int vc4_plane_mode_set(struct drm_plane *plane, | |||
157 | int crtc_w = state->crtc_w; | 157 | int crtc_w = state->crtc_w; |
158 | int crtc_h = state->crtc_h; | 158 | int crtc_h = state->crtc_h; |
159 | 159 | ||
160 | if (state->crtc_w << 16 != state->src_w || | ||
161 | state->crtc_h << 16 != state->src_h) { | ||
162 | /* We don't support scaling yet, which involves | ||
163 | * allocating the LBM memory for scaling temporary | ||
164 | * storage, and putting filter kernels in the HVS | ||
165 | * context. | ||
166 | */ | ||
167 | return -EINVAL; | ||
168 | } | ||
169 | |||
160 | if (crtc_x < 0) { | 170 | if (crtc_x < 0) { |
161 | offset += drm_format_plane_cpp(fb->pixel_format, 0) * -crtc_x; | 171 | offset += drm_format_plane_cpp(fb->pixel_format, 0) * -crtc_x; |
162 | crtc_w += crtc_x; | 172 | crtc_w += crtc_x; |