forked from Minki/linux
drm/radeon/kms/r4xx: cleanup atom path
most of radeon_legacy_atom_set_surface() is taken care of in atombios_set_base(), so remove the duplicate setup and move the remaining bits (DISP_MERGE setup and FP2 sync) to atombios_crtc.c where they are used. Signed-off-by: Alex Deucher <alexdeucher@gmail.com> Signed-off-by: Dave Airlie <airlied@linux.ie>
This commit is contained in:
parent
54f088a960
commit
615e0cb679
@ -718,6 +718,30 @@ int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,
|
|||||||
return radeon_crtc_set_base(crtc, x, y, old_fb);
|
return radeon_crtc_set_base(crtc, x, y, old_fb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* properly set additional regs when using atombios */
|
||||||
|
static void radeon_legacy_atom_fixup(struct drm_crtc *crtc)
|
||||||
|
{
|
||||||
|
struct drm_device *dev = crtc->dev;
|
||||||
|
struct radeon_device *rdev = dev->dev_private;
|
||||||
|
struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
|
||||||
|
u32 disp_merge_cntl;
|
||||||
|
|
||||||
|
switch (radeon_crtc->crtc_id) {
|
||||||
|
case 0:
|
||||||
|
disp_merge_cntl = RREG32(RADEON_DISP_MERGE_CNTL);
|
||||||
|
disp_merge_cntl &= ~RADEON_DISP_RGB_OFFSET_EN;
|
||||||
|
WREG32(RADEON_DISP_MERGE_CNTL, disp_merge_cntl);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
disp_merge_cntl = RREG32(RADEON_DISP2_MERGE_CNTL);
|
||||||
|
disp_merge_cntl &= ~RADEON_DISP2_RGB_OFFSET_EN;
|
||||||
|
WREG32(RADEON_DISP2_MERGE_CNTL, disp_merge_cntl);
|
||||||
|
WREG32(RADEON_FP_H2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_H_SYNC_STRT_WID));
|
||||||
|
WREG32(RADEON_FP_V2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_V_SYNC_STRT_WID));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int atombios_crtc_mode_set(struct drm_crtc *crtc,
|
int atombios_crtc_mode_set(struct drm_crtc *crtc,
|
||||||
struct drm_display_mode *mode,
|
struct drm_display_mode *mode,
|
||||||
struct drm_display_mode *adjusted_mode,
|
struct drm_display_mode *adjusted_mode,
|
||||||
@ -740,7 +764,7 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc,
|
|||||||
if (radeon_crtc->crtc_id == 0)
|
if (radeon_crtc->crtc_id == 0)
|
||||||
atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
|
atombios_set_crtc_dtd_timing(crtc, adjusted_mode);
|
||||||
atombios_crtc_set_base(crtc, x, y, old_fb);
|
atombios_crtc_set_base(crtc, x, y, old_fb);
|
||||||
radeon_legacy_atom_set_surface(crtc);
|
radeon_legacy_atom_fixup(crtc);
|
||||||
}
|
}
|
||||||
atombios_overscan_setup(crtc, mode, adjusted_mode);
|
atombios_overscan_setup(crtc, mode, adjusted_mode);
|
||||||
atombios_scaler_setup(crtc);
|
atombios_scaler_setup(crtc);
|
||||||
|
@ -339,69 +339,6 @@ void radeon_crtc_dpms(struct drm_crtc *crtc, int mode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* properly set crtc bpp when using atombios */
|
|
||||||
void radeon_legacy_atom_set_surface(struct drm_crtc *crtc)
|
|
||||||
{
|
|
||||||
struct drm_device *dev = crtc->dev;
|
|
||||||
struct radeon_device *rdev = dev->dev_private;
|
|
||||||
struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
|
|
||||||
int format;
|
|
||||||
uint32_t crtc_gen_cntl;
|
|
||||||
uint32_t disp_merge_cntl;
|
|
||||||
uint32_t crtc_pitch;
|
|
||||||
|
|
||||||
switch (crtc->fb->bits_per_pixel) {
|
|
||||||
case 8:
|
|
||||||
format = 2;
|
|
||||||
break;
|
|
||||||
case 15: /* 555 */
|
|
||||||
format = 3;
|
|
||||||
break;
|
|
||||||
case 16: /* 565 */
|
|
||||||
format = 4;
|
|
||||||
break;
|
|
||||||
case 24: /* RGB */
|
|
||||||
format = 5;
|
|
||||||
break;
|
|
||||||
case 32: /* xRGB */
|
|
||||||
format = 6;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
crtc_pitch = ((((crtc->fb->pitch / (crtc->fb->bits_per_pixel / 8)) * crtc->fb->bits_per_pixel) +
|
|
||||||
((crtc->fb->bits_per_pixel * 8) - 1)) /
|
|
||||||
(crtc->fb->bits_per_pixel * 8));
|
|
||||||
crtc_pitch |= crtc_pitch << 16;
|
|
||||||
|
|
||||||
WREG32(RADEON_CRTC_PITCH + radeon_crtc->crtc_offset, crtc_pitch);
|
|
||||||
|
|
||||||
switch (radeon_crtc->crtc_id) {
|
|
||||||
case 0:
|
|
||||||
disp_merge_cntl = RREG32(RADEON_DISP_MERGE_CNTL);
|
|
||||||
disp_merge_cntl &= ~RADEON_DISP_RGB_OFFSET_EN;
|
|
||||||
WREG32(RADEON_DISP_MERGE_CNTL, disp_merge_cntl);
|
|
||||||
|
|
||||||
crtc_gen_cntl = RREG32(RADEON_CRTC_GEN_CNTL) & 0xfffff0ff;
|
|
||||||
crtc_gen_cntl |= (format << 8);
|
|
||||||
crtc_gen_cntl |= RADEON_CRTC_EXT_DISP_EN;
|
|
||||||
WREG32(RADEON_CRTC_GEN_CNTL, crtc_gen_cntl);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
disp_merge_cntl = RREG32(RADEON_DISP2_MERGE_CNTL);
|
|
||||||
disp_merge_cntl &= ~RADEON_DISP2_RGB_OFFSET_EN;
|
|
||||||
WREG32(RADEON_DISP2_MERGE_CNTL, disp_merge_cntl);
|
|
||||||
|
|
||||||
crtc_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL) & 0xfffff0ff;
|
|
||||||
crtc_gen_cntl |= (format << 8);
|
|
||||||
WREG32(RADEON_CRTC2_GEN_CNTL, crtc_gen_cntl);
|
|
||||||
WREG32(RADEON_FP_H2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_H_SYNC_STRT_WID));
|
|
||||||
WREG32(RADEON_FP_V2_SYNC_STRT_WID, RREG32(RADEON_CRTC2_V_SYNC_STRT_WID));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
|
int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
|
||||||
struct drm_framebuffer *old_fb)
|
struct drm_framebuffer *old_fb)
|
||||||
{
|
{
|
||||||
|
@ -453,7 +453,6 @@ extern void atombios_crtc_dpms(struct drm_crtc *crtc, int mode);
|
|||||||
|
|
||||||
extern int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
|
extern int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
|
||||||
struct drm_framebuffer *old_fb);
|
struct drm_framebuffer *old_fb);
|
||||||
extern void radeon_legacy_atom_set_surface(struct drm_crtc *crtc);
|
|
||||||
|
|
||||||
extern int radeon_crtc_cursor_set(struct drm_crtc *crtc,
|
extern int radeon_crtc_cursor_set(struct drm_crtc *crtc,
|
||||||
struct drm_file *file_priv,
|
struct drm_file *file_priv,
|
||||||
|
Loading…
Reference in New Issue
Block a user