Merge branch 'drm-next-3.12' of git://people.freedesktop.org/~agd5f/linux into drm-next
Alex writes: This is the radeon drm-next request. Big changes include: - support for dpm on CIK parts - support for ASPM on CIK parts - support for berlin GPUs - major ring handling cleanup - remove the old 3D blit code for bo moves in favor of CP DMA or sDMA - lots of bug fixes [airlied: fix up a bunch of conflicts from drm_order removal] * 'drm-next-3.12' of git://people.freedesktop.org/~agd5f/linux: (898 commits) drm/radeon/dpm: make sure dc performance level limits are valid (CI) drm/radeon/dpm: make sure dc performance level limits are valid (BTC-SI) (v2) drm/radeon: gcc fixes for extended dpm tables drm/radeon: gcc fixes for kb/kv dpm drm/radeon: gcc fixes for ci dpm drm/radeon: gcc fixes for si dpm drm/radeon: gcc fixes for ni dpm drm/radeon: gcc fixes for trinity dpm drm/radeon: gcc fixes for sumo dpm drm/radeonn: gcc fixes for rv7xx/eg/btc dpm drm/radeon: gcc fixes for rv6xx dpm drm/radeon: gcc fixes for radeon_atombios.c drm/radeon: enable UVD interrupts on CIK drm/radeon: fix init ordering for r600+ drm/radeon/dpm: only need to reprogram uvd if uvd pg is enabled drm/radeon: check the return value of uvd_v1_0_start in uvd_v1_0_init drm/radeon: split out radeon_uvd_resume from uvd_v4_2_resume radeon kms: fix uninitialised hotplug work usage in r100_irq_process() drm/radeon/audio: set up the sads on DCE3.2 asics drm/radeon: fix handling of variable sized arrays for router objects ... Conflicts: drivers/gpu/drm/i915/i915_dma.c drivers/gpu/drm/i915/i915_gem_dmabuf.c drivers/gpu/drm/i915/intel_pm.c drivers/gpu/drm/radeon/cik.c drivers/gpu/drm/radeon/ni.c drivers/gpu/drm/radeon/r600.c
Šī revīzija ir iekļauta:
@@ -29,6 +29,7 @@ static void mga_crtc_load_lut(struct drm_crtc *crtc)
|
||||
struct mga_crtc *mga_crtc = to_mga_crtc(crtc);
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct mga_device *mdev = dev->dev_private;
|
||||
struct drm_framebuffer *fb = crtc->fb;
|
||||
int i;
|
||||
|
||||
if (!crtc->enabled)
|
||||
@@ -36,6 +37,28 @@ static void mga_crtc_load_lut(struct drm_crtc *crtc)
|
||||
|
||||
WREG8(DAC_INDEX + MGA1064_INDEX, 0);
|
||||
|
||||
if (fb && fb->bits_per_pixel == 16) {
|
||||
int inc = (fb->depth == 15) ? 8 : 4;
|
||||
u8 r, b;
|
||||
for (i = 0; i < MGAG200_LUT_SIZE; i += inc) {
|
||||
if (fb->depth == 16) {
|
||||
if (i > (MGAG200_LUT_SIZE >> 1)) {
|
||||
r = b = 0;
|
||||
} else {
|
||||
r = mga_crtc->lut_r[i << 1];
|
||||
b = mga_crtc->lut_b[i << 1];
|
||||
}
|
||||
} else {
|
||||
r = mga_crtc->lut_r[i];
|
||||
b = mga_crtc->lut_b[i];
|
||||
}
|
||||
/* VGA registers */
|
||||
WREG8(DAC_INDEX + MGA1064_COL_PAL, r);
|
||||
WREG8(DAC_INDEX + MGA1064_COL_PAL, mga_crtc->lut_g[i]);
|
||||
WREG8(DAC_INDEX + MGA1064_COL_PAL, b);
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (i = 0; i < MGAG200_LUT_SIZE; i++) {
|
||||
/* VGA registers */
|
||||
WREG8(DAC_INDEX + MGA1064_COL_PAL, mga_crtc->lut_r[i]);
|
||||
@@ -877,7 +900,7 @@ static int mga_crtc_mode_set(struct drm_crtc *crtc,
|
||||
|
||||
pitch = crtc->fb->pitches[0] / (crtc->fb->bits_per_pixel / 8);
|
||||
if (crtc->fb->bits_per_pixel == 24)
|
||||
pitch = pitch >> (4 - bppshift);
|
||||
pitch = (pitch * 3) >> (4 - bppshift);
|
||||
else
|
||||
pitch = pitch >> (4 - bppshift);
|
||||
|
||||
@@ -1251,6 +1274,24 @@ static void mga_crtc_destroy(struct drm_crtc *crtc)
|
||||
kfree(mga_crtc);
|
||||
}
|
||||
|
||||
static void mga_crtc_disable(struct drm_crtc *crtc)
|
||||
{
|
||||
int ret;
|
||||
DRM_DEBUG_KMS("\n");
|
||||
mga_crtc_dpms(crtc, DRM_MODE_DPMS_OFF);
|
||||
if (crtc->fb) {
|
||||
struct mga_framebuffer *mga_fb = to_mga_framebuffer(crtc->fb);
|
||||
struct drm_gem_object *obj = mga_fb->obj;
|
||||
struct mgag200_bo *bo = gem_to_mga_bo(obj);
|
||||
ret = mgag200_bo_reserve(bo, false);
|
||||
if (ret)
|
||||
return;
|
||||
mgag200_bo_push_sysram(bo);
|
||||
mgag200_bo_unreserve(bo);
|
||||
}
|
||||
crtc->fb = NULL;
|
||||
}
|
||||
|
||||
/* These provide the minimum set of functions required to handle a CRTC */
|
||||
static const struct drm_crtc_funcs mga_crtc_funcs = {
|
||||
.cursor_set = mga_crtc_cursor_set,
|
||||
@@ -1261,6 +1302,7 @@ static const struct drm_crtc_funcs mga_crtc_funcs = {
|
||||
};
|
||||
|
||||
static const struct drm_crtc_helper_funcs mga_helper_funcs = {
|
||||
.disable = mga_crtc_disable,
|
||||
.dpms = mga_crtc_dpms,
|
||||
.mode_fixup = mga_crtc_mode_fixup,
|
||||
.mode_set = mga_crtc_mode_set,
|
||||
@@ -1581,6 +1623,8 @@ static struct drm_connector *mga_vga_init(struct drm_device *dev)
|
||||
|
||||
drm_connector_helper_add(connector, &mga_vga_connector_helper_funcs);
|
||||
|
||||
drm_sysfs_connector_add(connector);
|
||||
|
||||
mga_connector->i2c = mgag200_i2c_create(dev);
|
||||
if (!mga_connector->i2c)
|
||||
DRM_ERROR("failed to add ddc bus\n");
|
||||
|
@@ -324,6 +324,7 @@ int mgag200_bo_create(struct drm_device *dev, int size, int align,
|
||||
}
|
||||
|
||||
mgabo->bo.bdev = &mdev->ttm.bdev;
|
||||
mgabo->bo.bdev->dev_mapping = dev->dev_mapping;
|
||||
|
||||
mgag200_ttm_placement(mgabo, TTM_PL_FLAG_VRAM | TTM_PL_FLAG_SYSTEM);
|
||||
|
||||
@@ -354,6 +355,7 @@ int mgag200_bo_pin(struct mgag200_bo *bo, u32 pl_flag, u64 *gpu_addr)
|
||||
bo->pin_count++;
|
||||
if (gpu_addr)
|
||||
*gpu_addr = mgag200_bo_gpu_offset(bo);
|
||||
return 0;
|
||||
}
|
||||
|
||||
mgag200_ttm_placement(bo, pl_flag);
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user