On 30.03.2016 19:36, Julian Margetson wrote: > On 3/29/2016 11:49 PM, Michel Dänzer wrote: >> On 29.03.2016 18:55, Julian Margetson wrote: >>> On 3/28/2016 11:15 PM, Michel Dänzer wrote: >>>> On 29.03.2016 08:47, Julian Margetson wrote: >>>>> Seeing the following when booting kernel 4.6-rc1 on Acube Sam460ex >>>>> Canyonlands board. >>>>> This loops for a few times then the kernel boots. >>>>> No problem with the 4.6-rc1 with an A-eon Tabor Freescale e500v2 >>>>> board. >>>>> >>>>> Regards >>>>> >>>>> Julian >>>>> >>>>> >>>>> [ 2.197839] ------------[ cut here ]------------ >>>>> [ 2.197850] WARNING: CPU: 0 PID: 1 at >>>>> drivers/gpu/drm/drm_irq.c:1368 drm_vblank_off+0x2c/0x1e0 >>>> That's >>>> >>>> if (WARN_ON(pipe >= dev->num_crtcs)) >>>> >>>> My best guess is that drm_vblank_off is called before drm_vblank_init, >>>> so dev->num_crtcs is still 0. >>>> >>>> >>>> Please provide the full dmesg output corresponding to the problem. >>>> >>>> >>> Attached >> [...] >> >>> [drm] radeon: irq initialized. >>> [drm:r600_ring_test] *ERROR* radeon: ring 0 test failed >>> (scratch(0x850C)=0xCAFEDEAD) >>> radeon 0001:81:00.0: disabling GPU acceleration >> Okay, so the problem is that acceleration fails to initialize, in which >> case the driver calls drm_vblank_cleanup. >> >> I can see two basic options for a solution: Either don't call >> radeon_irq_kms_fini/drm_vblank_cleanup if acceleration fails to >> initialize, or check if acceleration is enabled before calling >> drm_vblank_on/off. Any preferences? >> >> > Thanks > > No preferences . Does the attached patch fix the problem? > I would be interested in a fix for the acceleration problem if possible . Beware that while the kernel side of this might be relatively easy to fix, making the userspace radeonsi driver work on big endian hosts would likely require substantial effort. -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer
diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c index cf61e08..b80b08f 100644 --- a/drivers/gpu/drm/radeon/atombios_crtc.c +++ b/drivers/gpu/drm/radeon/atombios_crtc.c @@ -275,13 +275,15 @@ void atombios_crtc_dpms(struct drm_crtc *crtc, int mode) if (ASIC_IS_DCE3(rdev) && !ASIC_IS_DCE6(rdev)) atombios_enable_crtc_memreq(crtc, ATOM_ENABLE); atombios_blank_crtc(crtc, ATOM_DISABLE); - drm_vblank_on(dev, radeon_crtc->crtc_id); + if (dev->num_crtcs > radeon_crtc->crtc_id) + drm_vblank_on(dev, radeon_crtc->crtc_id); radeon_crtc_load_lut(crtc); break; case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: case DRM_MODE_DPMS_OFF: - drm_vblank_off(dev, radeon_crtc->crtc_id); + if (dev->num_crtcs > radeon_crtc->crtc_id) + drm_vblank_off(dev, radeon_crtc->crtc_id); if (radeon_crtc->enabled) atombios_blank_crtc(crtc, ATOM_ENABLE); if (ASIC_IS_DCE3(rdev) && !ASIC_IS_DCE6(rdev)) diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c index 24152df..478d409 100644 --- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c +++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c @@ -331,13 +331,15 @@ static void radeon_crtc_dpms(struct drm_crtc *crtc, int mode) RADEON_CRTC_DISP_REQ_EN_B)); WREG32_P(RADEON_CRTC_EXT_CNTL, crtc_ext_cntl, ~(mask | crtc_ext_cntl)); } - drm_vblank_on(dev, radeon_crtc->crtc_id); + if (dev->num_crtcs > radeon_crtc->crtc_id) + drm_vblank_on(dev, radeon_crtc->crtc_id); radeon_crtc_load_lut(crtc); break; case DRM_MODE_DPMS_STANDBY: case DRM_MODE_DPMS_SUSPEND: case DRM_MODE_DPMS_OFF: - drm_vblank_off(dev, radeon_crtc->crtc_id); + if (dev->num_crtcs > radeon_crtc->crtc_id) + drm_vblank_off(dev, radeon_crtc->crtc_id); if (radeon_crtc->crtc_id) WREG32_P(RADEON_CRTC2_GEN_CNTL, mask, ~(RADEON_CRTC2_EN | mask)); else {
_______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel