Received: by 10.223.185.111 with SMTP id b44csp18846wrg; Thu, 8 Mar 2018 23:57:15 -0800 (PST) X-Google-Smtp-Source: AG47ELsr5i9wLN6QXMVIWBMSaN5+wGDKgu57F1mLcqnNEhwIUjYcq9a4uRPwSSFHFXDK/J7j+R23 X-Received: by 2002:a17:902:3a1:: with SMTP id d30-v6mr26318728pld.409.1520582235529; Thu, 08 Mar 2018 23:57:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520582235; cv=none; d=google.com; s=arc-20160816; b=g0467M+BlHDaC0p58HFzwqDN4P9RZ4OQ5FGLqrFgBGxnCC6vOEeBIaWvJCZqKpOhzJ eu4rrNfH1uE2Hy7ober7ZYPm5wGsvOesxlEbznFyxrCrhgDBfLIQHJYAnNNo899ml/P3 gDhsHWavd840rzc+gS0pZkOnyu7oRljHwRrUrYS9uZ3bzr1ykB9E477kZN4Ho4p3HGKx RjrI/ztfWLPbVS92r2XEEyXq5JEItG+6ig8JvVrH/mtwPfWBry81tGwmtG2j1kGUNGEM bm892t/pyFCsxdcknM/fbs6iKTG7dObdo5cNfPVT8CsbPEA4OCaANGgwMDIO6d17P9vu 0V5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:in-reply-to:content-transfer-encoding :content-disposition:mime-version:references:mail-followup-to :message-id:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=0pfcmvUKLtz6Yfy67kFw8zrS+QT9c4+1/4plfTxL3Ss=; b=nxtbZZJeih3TBQiPbgZvt0vBqlPmfPfA9aRSpFMypFRvA0d/5ncXAkgP9uKpsQ4zKl ls4iJCNHvdQxt3QkZUHXRmuTh2teUwAATu6mrTQ81py2GQNqOF0Y63v7TWSNho03tKz4 Nl3WWVMkYmivRp/IimgqkWxQ/RY/nnjv10U/eKEAO6P1pnb4Smo01QUSf+JF98UHkHNw HfzSdy/6quPNGUlRKpsod0MeEKvSXWNL0H/1E6M657uR+ex5ZdZWsNQMmsPL6sZ21pFP gC3ZDt0gAQF0Xv9JtuKeAd4csUMGeGqfmCt0G/8/RepLTuwzfri02BKWynNJXPENa5AS MWEg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@xff.cz header.s=mail header.b=WaQbrRk/; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=xff.cz Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h33-v6si451172plh.311.2018.03.08.23.57.00; Thu, 08 Mar 2018 23:57:15 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@xff.cz header.s=mail header.b=WaQbrRk/; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=xff.cz Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751554AbeCIHzg (ORCPT + 99 others); Fri, 9 Mar 2018 02:55:36 -0500 Received: from vps.xff.cz ([195.181.215.36]:58608 "EHLO vps.xff.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750848AbeCIHze (ORCPT ); Fri, 9 Mar 2018 02:55:34 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xff.cz; s=mail; t=1520582132; bh=A61jtHD5ptXcrpWMHNzKZWLuVpFNs7zJADB7h7HhpZ8=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=WaQbrRk/1/ks3xUn//vC/4uCsbgIs0oBrr+W3KQZwjXO14UQN/60puVmfch82RNIe GaCtpHnPquhUiPgGjQ0pw2isWC8aTs7xTA9Ka0EaQv1cb/R3H8pLD7cGfUkZf40HZX qUCU0DFt1y+vX2RH5rQWz0D9FDa47edpQ9+p7PCM= Date: Fri, 9 Mar 2018 08:55:31 +0100 From: =?utf-8?Q?Ond=C5=99ej?= Jirman To: Jernej =?utf-8?Q?=C5=A0krabec?= Cc: maxime.ripard@free-electrons.com, wens@csie.org, airlied@linux.ie, robh+dt@kernel.org, mark.rutland@arm.com, mturquette@baylibre.com, sboyd@kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-sunxi@googlegroups.com Subject: Re: [linux-sunxi] [PATCH v3 06/16] drm/sun4i: Release exclusive clock lock when disabling TCON Message-ID: <20180309075531.jvwo72j4o6k2h7rg@core.my.home> Mail-Followup-To: Jernej =?utf-8?Q?=C5=A0krabec?= , maxime.ripard@free-electrons.com, wens@csie.org, airlied@linux.ie, robh+dt@kernel.org, mark.rutland@arm.com, mturquette@baylibre.com, sboyd@kernel.org, dri-devel@lists.freedesktop.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-clk@vger.kernel.org, linux-sunxi@googlegroups.com References: <20180301213442.16677-1-jernej.skrabec@siol.net> <20180309001314.bu3zcv5gyqsc52fx@core.my.home> <20180309004455.5s2ohse4jpwinre5@core.my.home> <2311763.nDsHW3lYFU@jernej-laptop> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <2311763.nDsHW3lYFU@jernej-laptop> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi, On Fri, Mar 09, 2018 at 07:19:33AM +0100, Jernej Škrabec wrote: > Hi, > > Dne petek, 09. marec 2018 ob 01:44:55 CET je Ondřej Jirman napisal(a): > > Hi, > > > > I've debugged this further and it seems that the code has incorrect > > assumptions. See docs for mode_set_nofb. > > > > https://elixir.bootlin.com/linux/v4.16-rc4/source/include/drm/drm_modeset_he > > lper_vtables.h#L209 > > > > Does this happen with https://github.com/jernejsk/linux-1/tree/h3_hdmi_v3 ? Haven't tested, but it probably does, looking at the code. Try restarting the X server a bunch of times. > I also tested running X, but I don't remember having the issue. > > > I've added traces to a few functions that call clk_.*exclusive.*() > > functions, and I see this after a few restarts of Xorg server: > > > > [ 0.783842] *** sun4i_tcon1_mode_set() > > [ 0.783886] *** sun4i_tcon_channel_set_status(..., 1, true) > > [ 6.881690] *** sun4i_tcon_channel_set_status(..., 1, false) > > [ 6.881758] *** sun4i_tcon_channel_set_status(..., 1, true) > > [ 52.335085] *** sun4i_tcon_channel_set_status(..., 1, false) > > [ 52.335343] *** sun4i_tcon_channel_set_status(..., 1, true) > > [ 68.921079] *** sun4i_tcon_channel_set_status(..., 1, false) > > [ 68.921337] *** sun4i_tcon_channel_set_status(..., 1, true) > > > > mode_set_nofb is called just once, yet sun4i_tcon_channel_set_status(..., 1, > > false) is called multiple times, which leads to unbalanced calls to > > clk_set_rate_exclusive and clk_rate_exclusive_put. > > > > I don't know how to fix this. > > Since there is no function to check if clock is protected, flag can be > introduced within TCON which is set when clock rate is protected and unset > when it is unprotected. That way we could track if clk_rate_exclusive_put() > needs to be called or not. I think that will not help. Protection is set in sun4i_tcon1_mode_set() and that's called only once, but sun4i_tcon_channel_set_status(..., 1, false) can be called multiple times, so the first call would disable protection and the clock would be unprotected from then on, even though the display would be active. Perhaps the protection needs to be enabled in sun4i_tcon_channel_set_status(..., true). regards, o. > Best regards, > Jernej > > > > > regards, > > o. > > > > On Fri, Mar 09, 2018 at 01:13:14AM +0100, 'Ondřej Jirman' via linux-sunxi > wrote: > > > Hi Jernej, > > > > > > On Thu, Mar 08, 2018 at 11:57:40PM +0100, Jernej Škrabec wrote: > > > > Hi, > > > > > > > > Dne četrtek, 08. marec 2018 ob 23:47:17 CET je Ondřej Jirman napisal(a): > > > > > Hi, > > > > > > > > > > On Thu, Mar 01, 2018 at 10:34:32PM +0100, Jernej Skrabec wrote: > > > > > > Currently exclusive TCON clock lock is never released, which, for > > > > > > example, prevents changing resolution on HDMI. > > > > > > > > > > > > In order to fix that, release clock when disabling TCON. TCON is > > > > > > always > > > > > > disabled first before new mode is set. > > > > > > > > > > > > Signed-off-by: Jernej Skrabec > > > > > > --- > > > > > > > > > > > > drivers/gpu/drm/sun4i/sun4i_tcon.c | 6 ++++-- > > > > > > 1 file changed, 4 insertions(+), 2 deletions(-) > > > > > > > > > > > > diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c > > > > > > b/drivers/gpu/drm/sun4i/sun4i_tcon.c index > > > > > > 1d714c06ec9d..7f6c4125c89f > > > > > > 100644 > > > > > > --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c > > > > > > +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c > > > > > > @@ -102,10 +102,12 @@ static void > > > > > > sun4i_tcon_channel_set_status(struct > > > > > > sun4i_tcon *tcon, int channel,> > > > > > > > > > > > > return; > > > > > > > > > > > > } > > > > > > > > > > > > - if (enabled) > > > > > > + if (enabled) { > > > > > > > > > > > > clk_prepare_enable(clk); > > > > > > > > > > > > - else > > > > > > + } else { > > > > > > + clk_rate_exclusive_put(clk); > > > > > > > > > > > > clk_disable_unprepare(clk); > > > > > > > > > > > > + } > > > > > > > > > > > > } > > > > > > > > > > At least in the linux-next/master I can't see clk_rate_exclusive_get > call: > > > > It is in drm-misc/drm-misc-fixes: > > > > https://cgit.freedesktop.org/drm/drm-misc/commit/?h=drm-misc-fixes&id=79 > > > > d103a565d16b1893d990b2ee5e0fe71767759f > > > > > > > > My patch is also applied in same branch, so there should be no issues > > > > while > > > > merging all those branches. > > > > > > > > linux-next doesn't have either patches currently: > > > > https://git.kernel.org/pub/ > > > > scm/linux/kernel/git/next/linux-next.git/log/drivers/gpu/drm/sun4i > > > > > > > > This is issue only if you manually apply one patch without the other. > > > > > > I have (and had) both patches applied. There's perhaps some code path, > > > where sun4i_tcon_channel_set_status(..., false) is called in unbalanced > > > way with regards to clk_set_rate_exclusive(). > > > > > > The issue occurs when starting Xorg. But Xorg works fine. > > > > > > regards, > > > > > > o. > > > > > > > Best regards, > > > > Jernej > > > > > > > > > $ git grep 'exclusive' linux-next/master -- drivers/gpu/drm/sun4i > > > > > > > > > > linux-next/master:sun4i_hdmi.h: * On sun5i the threshold is > > > > > exclusive, > > > > > i.e. does not include, linux-next/master:sun4i_tcon.c: > > > > > clk_rate_exclusive_put(clk); linux-next/master:sun4i_tcon.c: > > > > > clk_set_rate_exclusive(tcon->dclk, mode->crtc_clock * 1000); > > > > > linux-next/master:sun4i_tcon.c: clk_set_rate_exclusive(tcon->sclk1, > > > > > mode->crtc_clock * 1000); > > > > > > > > > > and the kernel complains too: > > > > > > > > > > [ 841.915161] ------------[ cut here ]------------ > > > > > [ 841.915187] WARNING: CPU: 0 PID: 273 at > > > > > /workspace/megous.com/orangepi-pc/linux-4.16/drivers/clk/clk.c:608 > > > > > clk_rate_exclusive_put+0x48/0x4c [ 841.915194] CPU: 0 PID: 273 Comm: > > > > > Xorg > > > > > Not tainted 4.16.0-rc4-00268-gbac2ecf73ed0 #13 [ 841.915196] Hardware > > > > > name: Allwinner sun8i Family > > > > > [ 841.915217] [] (unwind_backtrace) from [] > > > > > (show_stack+0x10/0x14) [ 841.915228] [] (show_stack) from > > > > > [] (dump_stack+0x88/0x9c) [ 841.915237] [] > > > > > (dump_stack) from [] (__warn+0xd4/0xf0) [ 841.915244] > > > > > [] (__warn) from [] (warn_slowpath_null+0x40/0x48) > > > > > [ > > > > > 841.915250] [] (warn_slowpath_null) from [] > > > > > (clk_rate_exclusive_put+0x48/0x4c) [ 841.915261] [] > > > > > (clk_rate_exclusive_put) from [] > > > > > (sun4i_tcon_set_status+0x178/0x2f0) [ 841.915269] [] > > > > > (sun4i_tcon_set_status) from [] > > > > > (sun4i_crtc_atomic_disable+0x7c/0xe4) [ 841.915279] [] > > > > > (sun4i_crtc_atomic_disable) from [] > > > > > (drm_atomic_helper_commit_modeset_disables+0x390/0x46c) [ 841.915288] > > > > > [] (drm_atomic_helper_commit_modeset_disables) from > > > > > [] > > > > > (drm_atomic_helper_commit_tail_rpm+0x18/0x64) [ 841.915295] > > > > > [] > > > > > (drm_atomic_helper_commit_tail_rpm) from [] > > > > > (commit_tail+0x40/0x6c) [ 841.915302] [] (commit_tail) from > > > > > [] (drm_atomic_helper_commit+0xbc/0x128) [ 841.915311] > > > > > [] (drm_atomic_helper_commit) from [] > > > > > (restore_fbdev_mode_atomic+0x100/0x1fc) [ 841.915319] [] > > > > > (restore_fbdev_mode_atomic) from [] > > > > > (drm_fb_helper_dpms+0x50/0x130) [ 841.915328] [] > > > > > (drm_fb_helper_dpms) from [] (drm_fb_helper_blank+0x54/0x90) > > > > > [ > > > > > 841.915337] [] (drm_fb_helper_blank) from [] > > > > > (fb_blank+0x54/0xa8) [ 841.915343] [] (fb_blank) from > > > > > [] (do_fb_ioctl+0x360/0x62c) [ 841.915351] [] > > > > > (do_fb_ioctl) from [] (do_vfs_ioctl+0x9c/0x774) [ > > > > > 841.915358] > > > > > [] (do_vfs_ioctl) from [] (SyS_ioctl+0x34/0x58) [ > > > > > 841.915364] [] (SyS_ioctl) from [] > > > > > (ret_fast_syscall+0x0/0x4c) [ 841.915368] Exception stack(0xe5fc5fa8 > > > > > to > > > > > 0xe5fc5ff0) > > > > > [ 841.915373] 5fa0: 00674f10 00675460 0000000b > > > > > 00004611 > > > > > 00000001 00000000 [ 841.915379] 5fc0: 00674f10 00675460 00000001 > > > > > 00000036 > > > > > 00650474 00000000 006504a4 00675df8 [ 841.915382] 5fe0: b61a502c > > > > > be8acb2c > > > > > b6192c38 b6b152ec > > > > > [ 841.915386] ---[ end trace fa81b956197707f8 ]--- > > > > > > > > > > It looks like clk_rate_exclusive_put inside > > > > > sun4i_tcon_channel_set_status is called without first calling some > > > > > function that would call > > > > > clk_set_rate_exclusive, leading to unbalanced get/put calls. > > > > > > > > > > regards, > > > > > > > > > > o. > > > > > > > > > > > static void sun4i_tcon_lvds_set_status(struct sun4i_tcon *tcon, > > > > > > > > > > > > -- > > > > > > 2.16.2 > > > > > > > > > > > > -- > > > > > > You received this message because you are subscribed to the Google > > > > > > Groups > > > > > > "linux-sunxi" group. To unsubscribe from this group and stop > > > > > > receiving > > > > > > emails from it, send an email to > > > > > > linux-sunxi+unsubscribe@googlegroups.com. For more options, visit > > > > > > https://groups.google.com/d/optout. > > > > > > > > -- > > > > You received this message because you are subscribed to the Google > > > > Groups "linux-sunxi" group. To unsubscribe from this group and stop > > > > receiving emails from it, send an email to > > > > linux-sunxi+unsubscribe@googlegroups.com. For more options, visit > > > > https://groups.google.com/d/optout. > > > > > > -- > > > You received this message because you are subscribed to the Google Groups > > > "linux-sunxi" group. To unsubscribe from this group and stop receiving > > > emails from it, send an email to > > > linux-sunxi+unsubscribe@googlegroups.com. For more options, visit > > > https://groups.google.com/d/optout. > > > > > -- > You received this message because you are subscribed to the Google Groups "linux-sunxi" group. > To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com. > For more options, visit https://groups.google.com/d/optout.