From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marius Vlad Subject: Re: [PATCH] drm/i915: Fix oops in vlv_force_pll_on() Date: Tue, 19 Apr 2016 13:02:44 +0300 Message-ID: <20160419100234.GA9029@mcvlad-wk.rb.intel.com> References: <1461000844-20543-1-git-send-email-ville.syrjala@linux.intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============0030482741==" Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTP id BE1256E6FF for ; Tue, 19 Apr 2016 09:59:45 +0000 (UTC) In-Reply-To: <1461000844-20543-1-git-send-email-ville.syrjala@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: ville.syrjala@linux.intel.com Cc: Jani Nikula , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org --===============0030482741== Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="IrhDeMKUP4DT/M7F" Content-Disposition: inline --IrhDeMKUP4DT/M7F Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable LGTM. Tested-By: Marius Vlad. On Mon, Apr 18, 2016 at 08:34:04PM +0300, ville.syrjala@linux.intel.com wro= te: > From: Ville Syrj=E4l=E4 >=20 > intel_pipe_will_have_type() doesn't just look at the passied in > pipe_config, instead it expects there to be a full atomic state behind > it. Obviously that won't go so well when vlv_force_pll_on() just uses a > temp pipe_config. Fix things by using pipe_config->has_dsi_encoder > instead intel_pipe_will_have_type(INTEL_OUTPUT_DSI) to check if we need > to actually enable the DPLL. >=20 > Here's an example oops for reference: > BUG: unable to handle kernel NULL pointer dereference at 0000000000000030 > IP: [] intel_pipe_will_have_type+0x15/0x7b [i915] > PGD 7acda067 PUD 72696067 PMD 0 > Oops: 0000 [#1] PREEMPT SMP > Modules linked in: i915 i2c_algo_bit drm_kms_helper syscopyarea sysfillre= ct sysimgblt fb_sys_fops drm intel_gtt agpgart netconsole psmouse atkbd iTC= O_wdt libps2 coretemp hwmon efi_pstore intel_rapl punit_atom_debug efivars = pcspkr i2c_i801 r8169 lpc_ich mii processor_thermal_device snd_soc_rt5670 i= ntel_soc_dts_iosf snd_soc_rl6231 i2c_hid hid snd_intel_sst_acpi snd_intel_s= st_core snd_soc_sst_mfld_platform snd_soc_sst_match snd_soc_core i8042 seri= o snd_compress snd_pcm snd_timer snd i2c_designware_platform sdhci_acpi i2c= _designware_core soundcore sdhci pwm_lpss_platform mmc_core pwm_lpss spi_px= a2xx_platform evdev int3403_thermal int3400_thermal int340x_thermal_zone ac= pi_thermal_rel sch_fq_codel ip_tables x_tables ipv6 autofs4 > CPU: 3 PID: 290 Comm: Xorg Tainted: G U 4.6.0-rc4-bsw+ #2876 > Hardware name: Intel Corporation CHERRYVIEW C0 PLATFORM/Braswell CRB, BIO= S BRAS.X64.X088.R00.1510270350 10/27/2015 > task: ffff88007a8dd200 ti: ffff880173ac4000 task.ti: ffff880173ac4000 > RIP: 0010:[] [] intel_pipe_will_have= _type+0x15/0x7b [i915] > RSP: 0018:ffff880173ac7928 EFLAGS: 00010246 > RAX: 0000000000000000 RBX: ffff880176594000 RCX: 0000000000000000 > RDX: 0000000000000000 RSI: 0000000000000009 RDI: ffff880176594000 > RBP: ffff880173ac7930 R08: 0000000000019290 R09: 0000000000000000 > R10: ffff880173ac7890 R11: 00000000000080cf R12: ffff88017fbd4000 > R13: ffffffffa03e3c44 R14: ffff88007492c000 R15: ffff88007492c000 > FS: 00007ff8936a6940(0000) GS:ffff88017ef80000(0000) knlGS:0000000000000= 000 > CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > CR2: 0000000000000030 CR3: 0000000177e08000 CR4: 00000000001006e0 > Stack: > ffff880176594000 ffff880173ac7948 ffffffffa0389b42 ffff880176594000 > ffff880173ac7978 ffffffffa0396e02 ffff8801765b0000 ffff88007af660d8 > 0000000000000000 0000000000000004 ffff880173ac79c0 ffffffffa03b6b64 > Call Trace: > [] chv_compute_dpll.isra.39+0x33/0x55 [i915] > [] vlv_force_pll_on+0x80/0xc6 [i915] > [] vlv_power_sequencer_pipe+0x29b/0x3dd [i915] > [] _pp_stat_reg+0x2e/0x38 [i915] > [] wait_panel_status+0x4c/0x1ec [i915] > [] wait_panel_power_cycle+0x6a/0xb4 [i915] > [] edp_panel_vdd_on+0xc5/0x1d1 [i915] > [] intel_dp_aux_ch+0x55/0x572 [i915] > [] ? mark_held_locks+0x5d/0x74 > [] ? mutex_lock_nested+0x321/0x346 > [] ? preempt_count_sub+0xf2/0x102 > [] intel_dp_aux_transfer+0x17c/0x1b5 [i915] > [] drm_dp_dpcd_access+0x62/0xed [drm_kms_helper] > [] drm_dp_dpcd_read+0x1b/0x1f [drm_kms_helper] > [] intel_dp_dpcd_read_wake+0x31/0x69 [i915] > [] intel_dp_long_pulse+0x15f/0x5ed [i915] > [] intel_dp_detect+0x79/0x95 [i915] > [] drm_helper_probe_single_connector_modes+0xc7/0x3db = [drm_kms_helper] > [] drm_mode_getconnector+0xe9/0x333 [drm] > [] ? lock_acquire+0x137/0x1df > [] drm_ioctl+0x266/0x3ae [drm] > [] ? drm_mode_getcrtc+0x126/0x126 [drm] > [] vfs_ioctl+0x18/0x34 > [] do_vfs_ioctl+0x547/0x5fe > [] ? __fget_light+0x62/0x71 > [] SyS_ioctl+0x43/0x61 > [] do_syscall_64+0x63/0xf8 > [] entry_SYSCALL64_slow_path+0x25/0x25 > Code: 35 00 40 a0 e8 97 4b ce e0 b8 17 00 00 00 5d c3 b8 17 00 00 00 c3 0= f 1f 44 00 00 55 31 c0 31 d2 48 89 e5 53 48 8b 8f e8 01 00 00 <44> 8b 49 30= 41 39 c1 7e 2d 4c 8b 51 38 4c 8b 41 40 49 83 3c c2 > RIP [] intel_pipe_will_have_type+0x15/0x7b [i915] > RSP > CR2: 0000000000000030 >=20 > The regressing patch wasn't exactly new (as in first posted more than > six months ago), so I'm a bit baffled how I didn't manage to hit this > myself so far. >=20 > Cc: Jani Nikula > Cc: Marius Vlad > Reported-by: Marius Vlad > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=3D94995 > Fixes: cd2d34d9b61f ("drm/i915: Setup DPLL/DPLLMD for DSI too on VLV/CHV") > Signed-off-by: Ville Syrj=E4l=E4 > --- > drivers/gpu/drm/i915/intel_display.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) >=20 > diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/= intel_display.c > index 68151271283c..ff60241b1f76 100644 > --- a/drivers/gpu/drm/i915/intel_display.c > +++ b/drivers/gpu/drm/i915/intel_display.c > @@ -7200,7 +7200,7 @@ static void vlv_compute_dpll(struct intel_crtc *crt= c, > pipe_config->dpll_hw_state.dpll |=3D DPLL_INTEGRATED_CRI_CLK_VLV; > =20 > /* DPLL not used with DSI, but still need the rest set up */ > - if (!intel_pipe_will_have_type(pipe_config, INTEL_OUTPUT_DSI)) > + if (!pipe_config->has_dsi_encoder) > pipe_config->dpll_hw_state.dpll |=3D DPLL_VCO_ENABLE | > DPLL_EXT_BUFFER_ENABLE_VLV; > =20 > @@ -7217,7 +7217,7 @@ static void chv_compute_dpll(struct intel_crtc *crt= c, > pipe_config->dpll_hw_state.dpll |=3D DPLL_INTEGRATED_CRI_CLK_VLV; > =20 > /* DPLL not used with DSI, but still need the rest set up */ > - if (!intel_pipe_will_have_type(pipe_config, INTEL_OUTPUT_DSI)) > + if (!pipe_config->has_dsi_encoder) > pipe_config->dpll_hw_state.dpll |=3D DPLL_VCO_ENABLE; > =20 > pipe_config->dpll_hw_state.dpll_md =3D > --=20 > 2.7.4 >=20 --IrhDeMKUP4DT/M7F Content-Type: application/pgp-signature; name="signature.asc" Content-Description: Digital signature -----BEGIN PGP SIGNATURE----- Version: GnuPG v1 iQEcBAEBAgAGBQJXFgJCAAoJELmLWIAQzyE+/7YH/ijjRWEl+X4rFiesWM17hvmr BgkGiVzmy9frZZFfxcz52+HoZ57A0dzRnJ6fRZCdthvcvetMq4TdfcXJTPGlL8yK EiH/Iwg0EbsN1XFsG7o277VtdlgYwNtJGQdx37V8GsCfWjWksc/Yl0MMltD97NvZ ZQj+zEWmtgVcmEwOfCFwpDx6u3xGvdqzk49/QG5SWdG6naRPFLYO4MU2+s3BgC3S I1Reed5Al/dWWWNLt74vClM6aCINsCCtdQZWNUeoSY9urOn9bEIVrVmMCLaebmSK KxIcnvLq0tpy2FFOGZUdq0bNRQbdca0paACMZFpbpU7us+sJyvpoGXPTESFNxFM= =BWnk -----END PGP SIGNATURE----- --IrhDeMKUP4DT/M7F-- --===============0030482741== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg== --===============0030482741==--