View | Details | Raw Unified | Return to bug 1101822
Collapse All | Expand All

(-)file_not_specified_in_diff (-25 / +35 lines)
Line  Link Here
--
1
drivers/gpu/drm/cirrus/cirrus_drv.h   |    2 -
drivers/gpu/drm/cirrus/cirrus_drv.h   |    2 -
2
drivers/gpu/drm/cirrus/cirrus_fbdev.c |   49 ++++++++++++++++++++--------------
1
drivers/gpu/drm/cirrus/cirrus_fbdev.c |   49 ++++++++++++++++++++--------------
3
drivers/gpu/drm/cirrus/cirrus_mode.c  |    2 -
2
drivers/gpu/drm/cirrus/cirrus_mode.c  |    2 -
4
3 files changed, 32 insertions(+), 21 deletions(-)
3
3 files changed, 32 insertions(+), 21 deletions(-)
5
-- a/drivers/gpu/drm/cirrus/cirrus_drv.h
4
++ b/drivers/gpu/drm/cirrus/cirrus_drv.h
Lines 152-158 struct cirrus_device { Link Here
152
152
153
struct cirrus_fbdev {
153
struct cirrus_fbdev {
154
	struct drm_fb_helper helper;
154
	struct drm_fb_helper helper;
155
	struct cirrus_framebuffer gfb;
155
	struct cirrus_framebuffer *gfb;
156
	void *sysram;
156
	void *sysram;
157
	int size;
157
	int size;
158
	int x1, y1, x2, y2; /* dirty rect */
158
	int x1, y1, x2, y2; /* dirty rect */
159
-- a/drivers/gpu/drm/cirrus/cirrus_fbdev.c
159
++ b/drivers/gpu/drm/cirrus/cirrus_fbdev.c
Lines 22-35 static void cirrus_dirty_update(struct c Link Here
22
	struct drm_gem_object *obj;
22
	struct drm_gem_object *obj;
23
	struct cirrus_bo *bo;
23
	struct cirrus_bo *bo;
24
	int src_offset, dst_offset;
24
	int src_offset, dst_offset;
25
	int bpp = afbdev->gfb.base.format->cpp[0];
25
	int bpp = afbdev->gfb->base.format->cpp[0];
26
	int ret = -EBUSY;
26
	int ret = -EBUSY;
27
	bool unmap = false;
27
	bool unmap = false;
28
	bool store_for_later = false;
28
	bool store_for_later = false;
29
	int x2, y2;
29
	int x2, y2;
30
	unsigned long flags;
30
	unsigned long flags;
31
31
32
	obj = afbdev->gfb.obj;
32
	obj = afbdev->gfb->obj;
33
	bo = gem_to_cirrus_bo(obj);
33
	bo = gem_to_cirrus_bo(obj);
34
34
35
	/*
35
	/*
Lines 82-88 static void cirrus_dirty_update(struct c Link Here
82
	}
82
	}
83
	for (i = y; i < y + height; i++) {
83
	for (i = y; i < y + height; i++) {
84
		/* assume equal stride for now */
84
		/* assume equal stride for now */
85
		src_offset = dst_offset = i * afbdev->gfb.base.pitches[0] + (x * bpp);
85
		src_offset = dst_offset = i * afbdev->gfb->base.pitches[0] + (x * bpp);
86
		memcpy_toio(bo->kmap.virtual + src_offset, afbdev->sysram + src_offset, width * bpp);
86
		memcpy_toio(bo->kmap.virtual + src_offset, afbdev->sysram + src_offset, width * bpp);
87
87
88
	}
88
	}
Lines 165-171 static int cirrusfb_create(struct drm_fb Link Here
165
		container_of(helper, struct cirrus_fbdev, helper);
165
		container_of(helper, struct cirrus_fbdev, helper);
166
	struct cirrus_device *cdev = gfbdev->helper.dev->dev_private;
166
	struct cirrus_device *cdev = gfbdev->helper.dev->dev_private;
167
	struct fb_info *info;
167
	struct fb_info *info;
168
	struct drm_framebuffer *fb;
168
	struct cirrus_framebuffer *fb;
169
	struct drm_mode_fb_cmd2 mode_cmd;
169
	struct drm_mode_fb_cmd2 mode_cmd;
170
	void *sysram;
170
	void *sysram;
171
	struct drm_gem_object *gobj = NULL;
171
	struct drm_gem_object *gobj = NULL;
Lines 192-224 static int cirrusfb_create(struct drm_fb Link Here
192
		return -ENOMEM;
192
		return -ENOMEM;
193
193
194
	info = drm_fb_helper_alloc_fbi(helper);
194
	info = drm_fb_helper_alloc_fbi(helper);
195
	if (IS_ERR(info))
195
	if (IS_ERR(info)) {
196
		return PTR_ERR(info);
196
		ret = PTR_ERR(info);
197
		goto err_vfree;
198
	}
197
199
198
	info->par = gfbdev;
200
	info->par = gfbdev;
199
201
200
	ret = cirrus_framebuffer_init(cdev->dev, &gfbdev->gfb, &mode_cmd, gobj);
202
	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
203
	if (!fb) {
204
		ret = -ENOMEM;
205
		goto err_drm_gem_object_put_unlocked;
206
	}
207
208
	ret = cirrus_framebuffer_init(cdev->dev, fb, &mode_cmd, gobj);
201
	if (ret)
209
	if (ret)
202
		return ret;
210
		goto err_kfree;
203
211
204
	gfbdev->sysram = sysram;
212
	gfbdev->sysram = sysram;
205
	gfbdev->size = size;
213
	gfbdev->size = size;
206
214
	gfbdev->gfb = fb;
207
	fb = &gfbdev->gfb.base;
208
	if (!fb) {
209
		DRM_INFO("fb is NULL\n");
210
		return -EINVAL;
211
	}
212
215
213
	/* setup helper */
216
	/* setup helper */
214
	gfbdev->helper.fb = fb;
217
	gfbdev->helper.fb = &fb->base;
215
218
216
	strcpy(info->fix.id, "cirrusdrmfb");
219
	strcpy(info->fix.id, "cirrusdrmfb");
217
220
218
	info->flags = FBINFO_DEFAULT;
221
	info->flags = FBINFO_DEFAULT;
219
	info->fbops = &cirrusfb_ops;
222
	info->fbops = &cirrusfb_ops;
220
223
221
	drm_fb_helper_fill_fix(info, fb->pitches[0], fb->format->depth);
224
	drm_fb_helper_fill_fix(info, fb->base.pitches[0], fb->base.format->depth);
222
	drm_fb_helper_fill_var(info, &gfbdev->helper, sizes->fb_width,
225
	drm_fb_helper_fill_var(info, &gfbdev->helper, sizes->fb_width,
223
			       sizes->fb_height);
226
			       sizes->fb_height);
224
227
Lines 238-253 static int cirrusfb_create(struct drm_fb Link Here
238
	DRM_INFO("fb mappable at 0x%lX\n", info->fix.smem_start);
241
	DRM_INFO("fb mappable at 0x%lX\n", info->fix.smem_start);
239
	DRM_INFO("vram aper at 0x%lX\n", (unsigned long)info->fix.smem_start);
242
	DRM_INFO("vram aper at 0x%lX\n", (unsigned long)info->fix.smem_start);
240
	DRM_INFO("size %lu\n", (unsigned long)info->fix.smem_len);
243
	DRM_INFO("size %lu\n", (unsigned long)info->fix.smem_len);
241
	DRM_INFO("fb depth is %d\n", fb->format->depth);
244
	DRM_INFO("fb depth is %d\n", fb->base.format->depth);
242
	DRM_INFO("   pitch is %d\n", fb->pitches[0]);
245
	DRM_INFO("   pitch is %d\n", fb->base.pitches[0]);
243
246
244
	return 0;
247
	return 0;
248
249
err_kfree:
250
	kfree(fb);
251
err_drm_gem_object_put_unlocked:
252
	drm_gem_object_put_unlocked(gobj);
253
err_vfree:
254
	vfree(sysram);
255
	return ret;
245
}
256
}
246
257
247
static int cirrus_fbdev_destroy(struct drm_device *dev,
258
static int cirrus_fbdev_destroy(struct drm_device *dev,
248
				struct cirrus_fbdev *gfbdev)
259
				struct cirrus_fbdev *gfbdev)
249
{
260
{
250
	struct cirrus_framebuffer *gfb = &gfbdev->gfb;
261
	struct cirrus_framebuffer *gfb = gfbdev->gfb;
251
262
252
	drm_fb_helper_unregister_fbi(&gfbdev->helper);
263
	drm_fb_helper_unregister_fbi(&gfbdev->helper);
253
264
254
-- a/drivers/gpu/drm/cirrus/cirrus_mode.c
265
++ b/drivers/gpu/drm/cirrus/cirrus_mode.c
Lines 133-139 static int cirrus_crtc_do_set_base(struc Link Here
133
		return ret;
133
		return ret;
134
	}
134
	}
135
135
136
	if (&cdev->mode_info.gfbdev->gfb == cirrus_fb) {
136
	if (cdev->mode_info.gfbdev->gfb == cirrus_fb) {
137
		/* if pushing console in kmap it */
137
		/* if pushing console in kmap it */
138
		ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap);
138
		ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap);
139
		if (ret)
139
		if (ret)

Return to bug 1101822