From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Michel_D=c3=a4nzer?= Subject: Re: [Powerpc] Sam460ex Canyonlands issue -Kernel 4.4.6-rc1 Date: Thu, 31 Mar 2016 15:50:41 +0900 Message-ID: <56FCC8C1.7030706@daenzer.net> References: <56F9C2A5.5070808@candw.ms> <56F9F359.5040108@daenzer.net> <56FA5107.6080305@candw.ms> <56FB4CC7.7040301@daenzer.net> <56FBAC12.7080303@candw.ms> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------070208050600030805090003" Return-path: Received: from mail.gna.ch (darkcity.gna.ch [195.226.6.51]) by gabe.freedesktop.org (Postfix) with ESMTP id 757766E98C for ; Thu, 31 Mar 2016 06:50:46 +0000 (UTC) In-Reply-To: <56FBAC12.7080303@candw.ms> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Julian Margetson Cc: Alex Deucher , Maling list - DRI developers List-Id: dri-devel@lists.freedesktop.org This is a multi-part message in MIME format. --------------070208050600030805090003 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 30.03.2016 19:36, Julian Margetson wrote: > On 3/29/2016 11:49 PM, Michel D=C3=A4nzer wrote: >> On 29.03.2016 18:55, Julian Margetson wrote: >>> On 3/28/2016 11:15 PM, Michel D=C3=A4nzer 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 >=3D dev->num_crtcs)) >>>> >>>> My best guess is that drm_vblank_off is called before drm_vblank_ini= t, >>>> 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)=3D0xCAFEDEAD) >>> radeon 0001:81:00.0: disabling GPU acceleration >> Okay, so the problem is that acceleration fails to initialize, in whic= h >> 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 >=20 > 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. --=20 Earthling Michel D=C3=A4nzer | http://www.amd= .com Libre software enthusiast | Mesa and X developer --------------070208050600030805090003 Content-Type: text/x-patch; name="radeon-guard-vblank-on-off.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="radeon-guard-vblank-on-off.diff" diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/rad= eon/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/dr= m/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 { --------------070208050600030805090003 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVs IG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg== --------------070208050600030805090003--