From patchwork Mon May 20 09:03:11 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 421 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-pf1-f198.google.com (mail-pf1-f198.google.com [209.85.210.198]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 756D23F36B for ; Mon, 20 May 2019 11:07:36 +0200 (CEST) Received: by mail-pf1-f198.google.com with SMTP id d9sf9550686pfo.13 for ; Mon, 20 May 2019 02:07:36 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1558343255; cv=pass; d=google.com; s=arc-20160816; b=gQpjipQ3yNqn6FBPt4I5gYTBRi+CRQi8ECTq6ITs46ZmzR0FoUHWUNiwtY4bp0xmGB SVOESSV4G36kJTxL7D4VwKJjSY7xKXwZDpL/rQXxxI9vxRg2ixd3Cl4swoFMIZGgBYkp Fe5WN7UWhieF5LhLIliTXJgy0rfbe8ImGUZLvzjfBCujujQ1nFWhZQ/cvByZ/4jBE3ua M1JZIY+zWFM/LcUula5K5Zej+gCc0k6kR+T6nEnuMJbbiYmdyrgbvGEX60LfQh4BjB7F y+BcZrGlqz6ZQfMcPsBOxxLpVYgYrKkZojQMzLB+KmuvBOB6djZwAV6ajHQ3J4n84VVD gysw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=6f3zsfYGNcZry/ZL5v94cb42mjcyYvpaQKyTmFV5yBI=; b=bkMYJnRmtkuO/OhT/1yqN3IOAarC90ajYdZ0joWCRKC0sjvxgV8ybKZrzJGq/y8xzb uhdijDmdpCURXfGcGVIoFjEJb0xeS6iQTtCBR0izzqZ9RHvkGoud0uzdR5Dv47x5HD65 fe04dGWWa+zsBTHw0p1H7i9c9CpRGEGCQ7tDijgGtjTDJpmgv7qhUOWRh+dMrIVQaPvm azvmFjLzWe1bbmjepbwscdym6lHT4oaRnZ2PHs7Hjw7mxciCkL8GyBZbo/v5SHluhjM8 fVyE9YNZe+cYe9Y0QII/3YgYaIEl916InfQR1gHIC8VpLqzSsFpsFtaIssgZCddLjrKZ 8H7Q== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=r3DLdZVq; spf=pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=jagan@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-unsubscribe; bh=6f3zsfYGNcZry/ZL5v94cb42mjcyYvpaQKyTmFV5yBI=; b=MLFFKXPhEJFBF9u23dVdHclMgjWhwFIaeOJYz6+V3O7m6SoTKbsZ4O0/pBtC9VxYpB +sHFp/I2X3Y8+b90n2lQh0GD68iGdrzkTWcQDM2qHsRWbfLuPMNvA4CB9fd2bljhBw8J /ygM0pUlr+3SwjkCSAHn9MMgS62K2XUSteYh8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-unsubscribe; bh=6f3zsfYGNcZry/ZL5v94cb42mjcyYvpaQKyTmFV5yBI=; b=WyDi5dqRBdCOAx2A2q3ao57KH8QN90/2TBnofd8952u63YWqE+9GwlZDfd8n3JsPYH 75UVaCEUin0hfWqSMGdDkvjAbaSdna74XykuBQoTsoRiX1xcbrvfobhxYBOdYhUNx8nb CrhJW+Uw7enEbZnwnDx/0QtkSDJxRLQ22dLCvFFk8DzN6goNMOp5xyml3p3ve6f0mfUm hQY0qqi58M9uCW3DUShMfpHqajIG6GdanYODvyefy7o74Mbb5E0N5spcq8BULhIM+6Se CXbFujnvHMOk9iU1hUm8rGFIKSZp9XWxWqnMlaTgaqlPdnzED7JbQCVPQ2+T/ryzEtul A3cw== X-Gm-Message-State: APjAAAV+QiAS7ZWZ2A50muoq5Tw9YP9MZKqm4FZfV+KZPgHPETiYK/dC a7+Cqge1aQqUHH1BWYSmlcmEfzCy X-Google-Smtp-Source: APXvYqzWoFtLBSumDo6V/KY7ZI2X2H1i88ABNnE1O1ZZcqFlNcSbVptJOh+bj1UJLxZq7uz9+Sww3Q== X-Received: by 2002:a65:4105:: with SMTP id w5mr74589662pgp.260.1558343255252; Mon, 20 May 2019 02:07:35 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com Received: by 2002:a17:902:8d84:: with SMTP id v4ls4348365plo.4.gmail; Mon, 20 May 2019 02:07:35 -0700 (PDT) X-Received: by 2002:a17:902:2bc9:: with SMTP id l67mr38928319plb.171.1558343254858; Mon, 20 May 2019 02:07:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558343254; cv=none; d=google.com; s=arc-20160816; b=qJO3nEHGacVA2Ket/xfKb1QUE1p/09fANaqa5W0yD0j0zy1fHohXMFjFhwYSLTaziC fK6UKdfwKG5LyaO9zgT3t/Q9tHYPknl0jIFsjxpZtacxET4HomFsrVJpaU/zeB91X26v fObMGfaYGIxdpNyyld0u3z6PteIdvi/tEaApzoI902l/E3gBx9NqRTjQrFqGR+Zc33IX +lokctKL/fRvpqpm2Nqi/6rHzRF1gbR7GTMWmmc5PiWQxh98lHZCqTxY3gAPEK+z6k5H Ds9uv9YIiYgpBAQ4txfsuC55shh4frGoZxl8/xGf5mBHokbr/WI+xlMZKDqn3vP+Oovf 3Yng== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=7Z3x6LljX02dT+qUsi4m5KdJMqoZuShmgkReRd7s7dw=; b=Z2PvzLXym5bEbfIbEmJlH8Ib/DN7Bv0AKOtZENtQr1Chj6fanlbB5jX1g1SKagjaLe O+mw9lTBs9JI4bTUDPVxzTWuLqP5Xz2aW77JIrGY64EK0MYb3nwq3b+Kfvupg4HDxhWx e6ZFkJ7eEMKeCrOy4yCaYMjuupbqkL+wOk6UcmL+Q09xfIJnrRBW0+gMT+WlneEZfGDi rJaqp63/FcdJdPIgdlM7aC5Xn6NDSihuhKbardAwZeZxTkOTOmXoUwi5M/1Iwkt3U96M 5ym9RdIUQ7wGXAR73DqKfMfdueja41t9okuTGxJVlqRl7kN/RcI4G1qUAmRz+4WnV4ly EnLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=r3DLdZVq; spf=pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=jagan@amarulasolutions.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id w4sor18597936pfi.67.2019.05.20.02.07.34 for (Google Transport Security); Mon, 20 May 2019 02:07:34 -0700 (PDT) Received-SPF: pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; X-Received: by 2002:a62:62c1:: with SMTP id w184mr77662542pfb.95.1558343254514; Mon, 20 May 2019 02:07:34 -0700 (PDT) Received: from localhost.localdomain ([183.82.227.193]) by smtp.gmail.com with ESMTPSA id d15sm51671614pfm.186.2019.05.20.02.07.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 20 May 2019 02:07:34 -0700 (PDT) From: Jagan Teki To: Maxime Ripard , David Airlie , Daniel Vetter , Chen-Yu Tsai , dri-devel@lists.freedesktop.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Cc: bshah@mykolab.com, Vasily Khoruzhick , powerpan@qq.com, michael@amarulasolutions.com, linux-amarula@amarulasolutions.com, linux-sunxi@googlegroups.com, Jagan Teki Subject: [PATCH v10 04/11] drm/sun4i: tcon: Compute DCLK dividers based on format, lanes Date: Mon, 20 May 2019 14:33:11 +0530 Message-Id: <20190520090318.27570-5-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.18.0.321.gffc6fa0e3 In-Reply-To: <20190520090318.27570-1-jagan@amarulasolutions.com> References: <20190520090318.27570-1-jagan@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: jagan@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=r3DLdZVq; spf=pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=jagan@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , pll-video => pll-mipi => tcon0 => tcon0-pixel-clock is the typical MIPI clock topology in Allwinner DSI controller. TCON dotclock driver is computing the desired DCLK divider based on panel pixel clock along with input DCLK min, max divider values from tcon driver and that would eventually set the pll-mipi clock rate. The current code is passing dsi min and max divider value as 4 via tcon driver which would ended-up triggering below vblank wait timed out warning on "bananapi,s070wv20-ct16" panel. WARNING: CPU: 0 PID: 31 at drivers/gpu/drm/drm_atomic_helper.c:1429 drm_atomic_helper_wait_for_vblanks.part.1+0x298/0x2a0 [CRTC:46:crtc-0] vblank wait timed out Modules linked in: CPU: 0 PID: 31 Comm: kworker/0:1 Not tainted 5.1.0-next-20190514-00025-g5186cdf10757-dirty #6 Hardware name: Allwinner sun8i Family Workqueue: events deferred_probe_work_func [] (unwind_backtrace) from [] (show_stack+0x10/0x14) [] (show_stack) from [] (dump_stack+0x84/0x98) [] (dump_stack) from [] (__warn+0xfc/0x114) [] (__warn) from [] (warn_slowpath_fmt+0x44/0x68) [] (warn_slowpath_fmt) from [] (drm_atomic_helper_wait_for_vblanks.part.1+0x298/0x2a0) [] (drm_atomic_helper_wait_for_vblanks.part.1) from [] (drm_atomic_helper_commit_tail_rpm+0x5c/0x6c) [] (drm_atomic_helper_commit_tail_rpm) from [] (commit_tail+0x40/0x6c) [] (commit_tail) from [] (drm_atomic_helper_commit+0xbc/0x128) [] (drm_atomic_helper_commit) from [] (restore_fbdev_mode_atomic+0x1cc/0x1dc) [] (restore_fbdev_mode_atomic) from [] (drm_fb_helper_restore_fbdev_mode_unlocked+0x54/0xa0) [] (drm_fb_helper_restore_fbdev_mode_unlocked) from [] (drm_fb_helper_set_par+0x30/0x54) [] (drm_fb_helper_set_par) from [] (fbcon_init+0x560/0x5ac) [] (fbcon_init) from [] (visual_init+0xbc/0x104) [] (visual_init) from [] (do_bind_con_driver+0x1b0/0x390) [] (do_bind_con_driver) from [] (do_take_over_console+0x13c/0x1c4) [] (do_take_over_console) from [] (do_fbcon_takeover+0x74/0xcc) [] (do_fbcon_takeover) from [] (notifier_call_chain+0x44/0x84) [] (notifier_call_chain) from [] (__blocking_notifier_call_chain+0x48/0x60) [] (__blocking_notifier_call_chain) from [] (blocking_notifier_call_chain+0x18/0x20) [] (blocking_notifier_call_chain) from [] (register_framebuffer+0x1e0/0x2f8) [] (register_framebuffer) from [] (__drm_fb_helper_initial_config_and_unlock+0x2fc/0x50c) [] (__drm_fb_helper_initial_config_and_unlock) from [] (drm_fbdev_client_hotplug+0xe8/0x1b8) [] (drm_fbdev_client_hotplug) from [] (drm_fbdev_generic_setup+0x88/0x118) [] (drm_fbdev_generic_setup) from [] (sun4i_drv_bind+0x128/0x160) [] (sun4i_drv_bind) from [] (try_to_bring_up_master+0x164/0x1a0) [] (try_to_bring_up_master) from [] (__component_add+0x94/0x140) [] (__component_add) from [] (sun6i_dsi_probe+0x144/0x234) [] (sun6i_dsi_probe) from [] (platform_drv_probe+0x48/0x9c) [] (platform_drv_probe) from [] (really_probe+0x1dc/0x2c8) [] (really_probe) from [] (driver_probe_device+0x60/0x160) [] (driver_probe_device) from [] (bus_for_each_drv+0x74/0xb8) [] (bus_for_each_drv) from [] (__device_attach+0xd0/0x13c) [] (__device_attach) from [] (bus_probe_device+0x84/0x8c) [] (bus_probe_device) from [] (deferred_probe_work_func+0x64/0x90) [] (deferred_probe_work_func) from [] (process_one_work+0x204/0x420) [] (process_one_work) from [] (worker_thread+0x274/0x5a0) [] (worker_thread) from [] (kthread+0x11c/0x14c) [] (kthread) from [] (ret_from_fork+0x14/0x2c) Exception stack(0xde539fb0 to 0xde539ff8) 9fa0: 00000000 00000000 00000000 00000000 9fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 9fe0: 00000000 00000000 00000000 00000000 00000013 00000000 ---[ end trace 4017fea4906ab391 ]--- But accordingly to Allwinner A33, A64 BSP codes [1] [2] this divider is clearly using 'format/lanes' for dsi divider value, dsi_clk.clk_div Which would compute the pll_freq and set a clock rate for it in [3] and [4] respectively. The same issue has reproduced in A33, A64 with 4-lane and 2-lane devices and got fixed with this computation logic 'format/lanes', so this patch using dclk min and max dividers as per BSP. [1] https://github.com/BPI-SINOVOIP/BPI-M2M-bsp/blob/master/linux-sunxi/drivers/video/sunxi/disp/de/disp_lcd.c#L1106 [2] https://github.com/BPI-SINOVOIP/BPI-M64-bsp/blob/master/linux-sunxi/drivers/video/sunxi/disp2/disp/de/lowlevel_sun50iw1/disp_al.c#L213 [3] https://github.com/BPI-SINOVOIP/BPI-M2M-bsp/blob/master/linux-sunxi/drivers/video/sunxi/disp/de/disp_lcd.c#L1127 [4] https://github.com/BPI-SINOVOIP/BPI-M2M-bsp/blob/master/linux-sunxi/drivers/video/sunxi/disp/de/disp_lcd.c#L1161 Tested-by: Merlijn Wajer Signed-off-by: Jagan Teki --- drivers/gpu/drm/sun4i/sun4i_tcon.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/sun4i/sun4i_tcon.c b/drivers/gpu/drm/sun4i/sun4i_tcon.c index 9d8d8124b1f6..8f93121fead4 100644 --- a/drivers/gpu/drm/sun4i/sun4i_tcon.c +++ b/drivers/gpu/drm/sun4i/sun4i_tcon.c @@ -341,8 +341,8 @@ static void sun4i_tcon0_mode_set_cpu(struct sun4i_tcon *tcon, u32 block_space, start_delay; u32 tcon_div; - tcon->dclk_min_div = SUN6I_DSI_TCON_DIV; - tcon->dclk_max_div = SUN6I_DSI_TCON_DIV; + tcon->dclk_min_div = bpp/lanes; + tcon->dclk_max_div = bpp/lanes; sun4i_tcon0_mode_set_common(tcon, mode);