Skip to content

Commit 20a2078

Browse files
committed
Merge branch 'drm-next' of git://people.freedesktop.org/~airlied/linux
Pull drm updates from Dave Airlie: "This is the main drm pull request for 3.10. Wierd bits: - OMAP drm changes required OMAP dss changes, in drivers/video, so I took them in here. - one more fbcon fix for font handover - VT switch avoidance in pm code - scatterlist helpers for gpu drivers - have acks from akpm Highlights: - qxl kms driver - driver for the spice qxl virtual GPU Nouveau: - fermi/kepler VRAM compression - GK110/nvf0 modesetting support. Tegra: - host1x core merged with 2D engine support i915: - vt switchless resume - more valleyview support - vblank fixes - modesetting pipe config rework radeon: - UVD engine support - SI chip tiling support - GPU registers initialisation from golden values. exynos: - device tree changes - fimc block support Otherwise: - bunches of fixes all over the place." * 'drm-next' of git://people.freedesktop.org/~airlied/linux: (513 commits) qxl: update to new idr interfaces. drm/nouveau: fix build with nv50->nvc0 drm/radeon: fix handling of v6 power tables drm/radeon: clarify family checks in pm table parsing drm/radeon: consolidate UVD clock programming drm/radeon: fix UPLL_REF_DIV_MASK definition radeon: add bo tracking debugfs drm/radeon: add new richland pci ids drm/radeon: add some new SI PCI ids drm/radeon: fix scratch reg handling for UVD fence drm/radeon: allocate SA bo in the requested domain drm/radeon: fix possible segfault when parsing pm tables drm/radeon: fix endian bugs in atom_allocate_fb_scratch() OMAPDSS: TFP410: return EPROBE_DEFER if the i2c adapter not found OMAPDSS: VENC: Add error handling for venc_probe_pdata OMAPDSS: HDMI: Add error handling for hdmi_probe_pdata OMAPDSS: RFBI: Add error handling for rfbi_probe_pdata OMAPDSS: DSI: Add error handling for dsi_probe_pdata OMAPDSS: SDI: Add error handling for sdi_probe_pdata OMAPDSS: DPI: Add error handling for dpi_probe_pdata ...
2 parents 0279b3c + 307b9c0 commit 20a2078

File tree

404 files changed

+29277
-7299
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

404 files changed

+29277
-7299
lines changed

Documentation/EDID/1600x1200.S

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/*
2+
1600x1200.S: EDID data set for standard 1600x1200 60 Hz monitor
3+
4+
Copyright (C) 2013 Carsten Emde <[email protected]>
5+
6+
This program is free software; you can redistribute it and/or
7+
modify it under the terms of the GNU General Public License
8+
as published by the Free Software Foundation; either version 2
9+
of the License, or (at your option) any later version.
10+
11+
This program is distributed in the hope that it will be useful,
12+
but WITHOUT ANY WARRANTY; without even the implied warranty of
13+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14+
GNU General Public License for more details.
15+
16+
You should have received a copy of the GNU General Public License
17+
along with this program; if not, write to the Free Software
18+
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19+
*/
20+
21+
/* EDID */
22+
#define VERSION 1
23+
#define REVISION 3
24+
25+
/* Display */
26+
#define CLOCK 162000 /* kHz */
27+
#define XPIX 1600
28+
#define YPIX 1200
29+
#define XY_RATIO XY_RATIO_4_3
30+
#define XBLANK 560
31+
#define YBLANK 50
32+
#define XOFFSET 64
33+
#define XPULSE 192
34+
#define YOFFSET (63+1)
35+
#define YPULSE (63+3)
36+
#define DPI 72
37+
#define VFREQ 60 /* Hz */
38+
#define TIMING_NAME "Linux UXGA"
39+
#define ESTABLISHED_TIMINGS_BITS 0x00 /* none */
40+
#define HSYNC_POL 1
41+
#define VSYNC_POL 1
42+
#define CRC 0x9d
43+
44+
#include "edid.S"

Documentation/EDID/HOWTO.txt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ CONFIG_DRM_LOAD_EDID_FIRMWARE was introduced. It allows to provide an
1818
individually prepared or corrected EDID data set in the /lib/firmware
1919
directory from where it is loaded via the firmware interface. The code
2020
(see drivers/gpu/drm/drm_edid_load.c) contains built-in data sets for
21-
commonly used screen resolutions (1024x768, 1280x1024, 1680x1050,
22-
1920x1080) as binary blobs, but the kernel source tree does not contain
23-
code to create these data. In order to elucidate the origin of the
24-
built-in binary EDID blobs and to facilitate the creation of individual
25-
data for a specific misbehaving monitor, commented sources and a
26-
Makefile environment are given here.
21+
commonly used screen resolutions (1024x768, 1280x1024, 1600x1200,
22+
1680x1050, 1920x1080) as binary blobs, but the kernel source tree does
23+
not contain code to create these data. In order to elucidate the origin
24+
of the built-in binary EDID blobs and to facilitate the creation of
25+
individual data for a specific misbehaving monitor, commented sources
26+
and a Makefile environment are given here.
2727

2828
To create binary EDID and C source code files from the existing data
2929
material, simply type "make".

Documentation/devicetree/bindings/drm/exynos/g2d.txt

Lines changed: 0 additions & 22 deletions
This file was deleted.

arch/arm/mach-omap2/board-2430sdp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
#include "gpmc-smc91x.h"
3939

4040
#include <video/omapdss.h>
41-
#include <video/omap-panel-generic-dpi.h>
41+
#include <video/omap-panel-data.h>
4242

4343
#include "mux.h"
4444
#include "hsmmc.h"

arch/arm/mach-omap2/board-3430sdp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
#include "common.h"
3636
#include <linux/omap-dma.h>
3737
#include <video/omapdss.h>
38-
#include <video/omap-panel-tfp410.h>
38+
#include <video/omap-panel-data.h>
3939

4040
#include "gpmc.h"
4141
#include "gpmc-smc91x.h"

arch/arm/mach-omap2/board-am3517evm.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@
3535

3636
#include "common.h"
3737
#include <video/omapdss.h>
38-
#include <video/omap-panel-generic-dpi.h>
39-
#include <video/omap-panel-tfp410.h>
38+
#include <video/omap-panel-data.h>
4039

4140
#include "am35xx-emac.h"
4241
#include "mux.h"

arch/arm/mach-omap2/board-cm-t35.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,7 @@
4141

4242
#include <linux/platform_data/mtd-nand-omap2.h>
4343
#include <video/omapdss.h>
44-
#include <video/omap-panel-generic-dpi.h>
45-
#include <video/omap-panel-tfp410.h>
44+
#include <video/omap-panel-data.h>
4645
#include <linux/platform_data/spi-omap2-mcspi.h>
4746

4847
#include "common.h"

arch/arm/mach-omap2/board-devkit8000.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,7 @@
4343
#include "gpmc.h"
4444
#include <linux/platform_data/mtd-nand-omap2.h>
4545
#include <video/omapdss.h>
46-
#include <video/omap-panel-generic-dpi.h>
47-
#include <video/omap-panel-tfp410.h>
46+
#include <video/omap-panel-data.h>
4847

4948
#include <linux/platform_data/spi-omap2-mcspi.h>
5049
#include <linux/input/matrix_keypad.h>

arch/arm/mach-omap2/board-h4.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
#include <asm/mach/map.h>
3535

3636
#include <video/omapdss.h>
37-
#include <video/omap-panel-generic-dpi.h>
37+
#include <video/omap-panel-data.h>
3838

3939
#include "common.h"
4040
#include "mux.h"

arch/arm/mach-omap2/board-igep0020.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
#include <asm/mach/arch.h>
3232

3333
#include <video/omapdss.h>
34-
#include <video/omap-panel-tfp410.h>
34+
#include <video/omap-panel-data.h>
3535
#include <linux/platform_data/mtd-onenand-omap2.h>
3636

3737
#include "common.h"

arch/arm/mach-omap2/board-ldp.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141
#include "gpmc-smsc911x.h"
4242

4343
#include <video/omapdss.h>
44-
#include <video/omap-panel-generic-dpi.h>
44+
#include <video/omap-panel-data.h>
4545

4646
#include "board-flash.h"
4747
#include "mux.h"

arch/arm/mach-omap2/board-omap3beagle.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@
4343
#include <asm/mach/flash.h>
4444

4545
#include <video/omapdss.h>
46-
#include <video/omap-panel-tfp410.h>
46+
#include <video/omap-panel-data.h>
4747
#include <linux/platform_data/mtd-nand-omap2.h>
4848

4949
#include "common.h"

arch/arm/mach-omap2/board-omap3evm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@
5151
#include "common.h"
5252
#include <linux/platform_data/spi-omap2-mcspi.h>
5353
#include <video/omapdss.h>
54-
#include <video/omap-panel-tfp410.h>
54+
#include <video/omap-panel-data.h>
5555

5656
#include "soc.h"
5757
#include "mux.h"

arch/arm/mach-omap2/board-omap3stalker.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@
4444
#include "gpmc.h"
4545
#include <linux/platform_data/mtd-nand-omap2.h>
4646
#include <video/omapdss.h>
47-
#include <video/omap-panel-generic-dpi.h>
48-
#include <video/omap-panel-tfp410.h>
47+
#include <video/omap-panel-data.h>
4948

5049
#include <linux/platform_data/spi-omap2-mcspi.h>
5150

arch/arm/mach-omap2/board-overo.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,7 @@
4747
#include <asm/mach/map.h>
4848

4949
#include <video/omapdss.h>
50-
#include <video/omap-panel-generic-dpi.h>
51-
#include <video/omap-panel-tfp410.h>
50+
#include <video/omap-panel-data.h>
5251

5352
#include "common.h"
5453
#include "mux.h"

arch/arm/mach-omap2/dss-common.c

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,7 @@
2727
#include <linux/gpio.h>
2828

2929
#include <video/omapdss.h>
30-
#include <video/omap-panel-tfp410.h>
31-
#include <video/omap-panel-nokia-dsi.h>
32-
#include <video/omap-panel-picodlp.h>
30+
#include <video/omap-panel-data.h>
3331

3432
#include "soc.h"
3533
#include "dss-common.h"

drivers/gpu/Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
obj-y += drm/ vga/
2+
obj-$(CONFIG_TEGRA_HOST1X) += host1x/

drivers/gpu/drm/Kconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,8 @@ source "drivers/gpu/drm/cirrus/Kconfig"
215215

216216
source "drivers/gpu/drm/shmobile/Kconfig"
217217

218-
source "drivers/gpu/drm/tegra/Kconfig"
219-
220218
source "drivers/gpu/drm/omapdrm/Kconfig"
221219

222220
source "drivers/gpu/drm/tilcdc/Kconfig"
221+
222+
source "drivers/gpu/drm/qxl/Kconfig"

drivers/gpu/drm/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ obj-$(CONFIG_DRM_GMA500) += gma500/
4949
obj-$(CONFIG_DRM_UDL) += udl/
5050
obj-$(CONFIG_DRM_AST) += ast/
5151
obj-$(CONFIG_DRM_SHMOBILE) +=shmobile/
52-
obj-$(CONFIG_DRM_TEGRA) += tegra/
5352
obj-$(CONFIG_DRM_OMAP) += omapdrm/
5453
obj-$(CONFIG_DRM_TILCDC) += tilcdc/
54+
obj-$(CONFIG_DRM_QXL) += qxl/
5555
obj-y += i2c/

drivers/gpu/drm/ast/ast_drv.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,8 @@ struct ast_fbdev {
241241
void *sysram;
242242
int size;
243243
struct ttm_bo_kmap_obj mapping;
244+
int x1, y1, x2, y2; /* dirty rect */
245+
spinlock_t dirty_lock;
244246
};
245247

246248
#define to_ast_crtc(x) container_of(x, struct ast_crtc, base)

drivers/gpu/drm/ast/ast_fb.c

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,16 +53,52 @@ static void ast_dirty_update(struct ast_fbdev *afbdev,
5353
int bpp = (afbdev->afb.base.bits_per_pixel + 7)/8;
5454
int ret;
5555
bool unmap = false;
56+
bool store_for_later = false;
57+
int x2, y2;
58+
unsigned long flags;
5659

5760
obj = afbdev->afb.obj;
5861
bo = gem_to_ast_bo(obj);
5962

63+
/*
64+
* try and reserve the BO, if we fail with busy
65+
* then the BO is being moved and we should
66+
* store up the damage until later.
67+
*/
6068
ret = ast_bo_reserve(bo, true);
6169
if (ret) {
62-
DRM_ERROR("failed to reserve fb bo\n");
70+
if (ret != -EBUSY)
71+
return;
72+
73+
store_for_later = true;
74+
}
75+
76+
x2 = x + width - 1;
77+
y2 = y + height - 1;
78+
spin_lock_irqsave(&afbdev->dirty_lock, flags);
79+
80+
if (afbdev->y1 < y)
81+
y = afbdev->y1;
82+
if (afbdev->y2 > y2)
83+
y2 = afbdev->y2;
84+
if (afbdev->x1 < x)
85+
x = afbdev->x1;
86+
if (afbdev->x2 > x2)
87+
x2 = afbdev->x2;
88+
89+
if (store_for_later) {
90+
afbdev->x1 = x;
91+
afbdev->x2 = x2;
92+
afbdev->y1 = y;
93+
afbdev->y2 = y2;
94+
spin_unlock_irqrestore(&afbdev->dirty_lock, flags);
6395
return;
6496
}
6597

98+
afbdev->x1 = afbdev->y1 = INT_MAX;
99+
afbdev->x2 = afbdev->y2 = 0;
100+
spin_unlock_irqrestore(&afbdev->dirty_lock, flags);
101+
66102
if (!bo->kmap.virtual) {
67103
ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap);
68104
if (ret) {
@@ -72,10 +108,10 @@ static void ast_dirty_update(struct ast_fbdev *afbdev,
72108
}
73109
unmap = true;
74110
}
75-
for (i = y; i < y + height; i++) {
111+
for (i = y; i <= y2; i++) {
76112
/* assume equal stride for now */
77113
src_offset = dst_offset = i * afbdev->afb.base.pitches[0] + (x * bpp);
78-
memcpy_toio(bo->kmap.virtual + src_offset, afbdev->sysram + src_offset, width * bpp);
114+
memcpy_toio(bo->kmap.virtual + src_offset, afbdev->sysram + src_offset, (x2 - x + 1) * bpp);
79115

80116
}
81117
if (unmap)
@@ -292,6 +328,7 @@ int ast_fbdev_init(struct drm_device *dev)
292328

293329
ast->fbdev = afbdev;
294330
afbdev->helper.funcs = &ast_fb_helper_funcs;
331+
spin_lock_init(&afbdev->dirty_lock);
295332
ret = drm_fb_helper_init(dev, &afbdev->helper,
296333
1, 1);
297334
if (ret) {

drivers/gpu/drm/ast/ast_ttm.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -316,7 +316,7 @@ int ast_bo_reserve(struct ast_bo *bo, bool no_wait)
316316

317317
ret = ttm_bo_reserve(&bo->bo, true, no_wait, false, 0);
318318
if (ret) {
319-
if (ret != -ERESTARTSYS)
319+
if (ret != -ERESTARTSYS && ret != -EBUSY)
320320
DRM_ERROR("reserve failed %p\n", bo);
321321
return ret;
322322
}

drivers/gpu/drm/cirrus/cirrus_drv.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,8 @@ struct cirrus_fbdev {
154154
struct list_head fbdev_list;
155155
void *sysram;
156156
int size;
157+
int x1, y1, x2, y2; /* dirty rect */
158+
spinlock_t dirty_lock;
157159
};
158160

159161
struct cirrus_bo {

drivers/gpu/drm/cirrus/cirrus_fbdev.c

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,16 +27,51 @@ static void cirrus_dirty_update(struct cirrus_fbdev *afbdev,
2727
int bpp = (afbdev->gfb.base.bits_per_pixel + 7)/8;
2828
int ret;
2929
bool unmap = false;
30+
bool store_for_later = false;
31+
int x2, y2;
32+
unsigned long flags;
3033

3134
obj = afbdev->gfb.obj;
3235
bo = gem_to_cirrus_bo(obj);
3336

37+
/*
38+
* try and reserve the BO, if we fail with busy
39+
* then the BO is being moved and we should
40+
* store up the damage until later.
41+
*/
3442
ret = cirrus_bo_reserve(bo, true);
3543
if (ret) {
36-
DRM_ERROR("failed to reserve fb bo\n");
44+
if (ret != -EBUSY)
45+
return;
46+
store_for_later = true;
47+
}
48+
49+
x2 = x + width - 1;
50+
y2 = y + height - 1;
51+
spin_lock_irqsave(&afbdev->dirty_lock, flags);
52+
53+
if (afbdev->y1 < y)
54+
y = afbdev->y1;
55+
if (afbdev->y2 > y2)
56+
y2 = afbdev->y2;
57+
if (afbdev->x1 < x)
58+
x = afbdev->x1;
59+
if (afbdev->x2 > x2)
60+
x2 = afbdev->x2;
61+
62+
if (store_for_later) {
63+
afbdev->x1 = x;
64+
afbdev->x2 = x2;
65+
afbdev->y1 = y;
66+
afbdev->y2 = y2;
67+
spin_unlock_irqrestore(&afbdev->dirty_lock, flags);
3768
return;
3869
}
3970

71+
afbdev->x1 = afbdev->y1 = INT_MAX;
72+
afbdev->x2 = afbdev->y2 = 0;
73+
spin_unlock_irqrestore(&afbdev->dirty_lock, flags);
74+
4075
if (!bo->kmap.virtual) {
4176
ret = ttm_bo_kmap(&bo->bo, 0, bo->bo.num_pages, &bo->kmap);
4277
if (ret) {
@@ -268,6 +303,7 @@ int cirrus_fbdev_init(struct cirrus_device *cdev)
268303

269304
cdev->mode_info.gfbdev = gfbdev;
270305
gfbdev->helper.funcs = &cirrus_fb_helper_funcs;
306+
spin_lock_init(&gfbdev->dirty_lock);
271307

272308
ret = drm_fb_helper_init(cdev->dev, &gfbdev->helper,
273309
cdev->num_crtc, CIRRUSFB_CONN_LIMIT);

0 commit comments

Comments
 (0)