From patchwork Sun Apr 16 19:10:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adam Ford X-Patchwork-Id: 13213059 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id DF97EC77B61 for ; Sun, 16 Apr 2023 19:12:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=7WffETO58GVPzVkSnCaMXA7+mLIZJCQavl/DL8jv2V4=; b=Jp88uVncw0r90J l1jlOvqnX+ITtnUEnBg/2hu3/ZxumGQd43Ky92ZWY7QGi+JyEqp9+bvFwrnaXPRkkKonxzu2eAJXw VAcwgKgsMzj9Zk9n6WF4ues074q1yYxlikj9s82ulDCJwfj2CuM03/tRHYNoomj6vDn2gsCV6Ziem mQHwelzD30WtYItbN91GPV+J9rlcxPFE+3QzuXl5+t28pdGkOjjnb8HtqA+91BV491QApi6FXM2An F+kaMWaHTql+UYnd/rgtJiNTGO+Yr0W+ZgLook+5ezV8YcuEuvbvoKYyIqGbtZhTTSGGfd8nZRhAD BtkQ1wHH1hclBUIkPeSg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1po7mJ-00ELHr-2D; Sun, 16 Apr 2023 19:11:11 +0000 Received: from mail-io1-xd36.google.com ([2607:f8b0:4864:20::d36]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1po7mG-00ELGw-1Z for linux-arm-kernel@lists.infradead.org; Sun, 16 Apr 2023 19:11:09 +0000 Received: by mail-io1-xd36.google.com with SMTP id m12so600609iov.4 for ; Sun, 16 Apr 2023 12:11:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1681672264; x=1684264264; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=SmvuhiuxAuYruekpO+qXlWQPF8+XI+RH2XWoXviPemo=; b=ZIHTPjOUCR94YgZBoBC07HVxE4rP94v/zZDYXN6aBcPoXdvTzVLR4trcoiAOlJx1f9 0eNzOd6RkX/tss0cX9dmnRtjbCVeOlYs2OP2lAMKx//keXEHCjxJNRWvmPE+uZNL/D2Q qRZRjxyteAHApDYuCn0xLEoySzKZxtff35fvegFCFtaCAbTqGLHukJZMRpmWjS9NW8eq 8ENSnZFqiq4Kjs2aEUt2+1aqzufeeXoa+dAmjACHjGhBVPXXhB1etPwCkhzeELEzdimt w53BtkTQPfwYWxYezaZOCwi9ckEO38949lxwV4lYSw5r2njgcXJW0/FXW6f1I7yyH7Ya /vgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1681672264; x=1684264264; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=SmvuhiuxAuYruekpO+qXlWQPF8+XI+RH2XWoXviPemo=; b=AT4BLocKYYUw8gzP1v36YhWPmLfDg6I7WoXT3SDMS5v7oCyHnpxdIXA+KR0VQDbBMv ASlrE7IQ5PDR/FyyHuvA2E62mhDPfTWKVvyaq+M+LqVCOCqDMuGwE9L4Cc44flqxBlmf A+1RrTM9WrnCNWLIBb0XSv4hu7FCqfK34kUIsRK/NSSu3KzZXJwBEs9KzQU5FZ2ZJHnI HR2YXu9bxKCDI4Bmnm4hAIqpACArwNeicVlHmwl3hXhegahiN6RdO/oNN8fyy4MFyoDC wL1UyDssNXei2YpBx9ceVy4zIz+WASyfJvpDKWZ5gVMw/E89LPb0EX1FtLjdFp+NDlzT L2TQ== X-Gm-Message-State: AAQBX9eIloUMIP7RtmCnuwX8yAmvbBcl8MqVc/RXJbSJSJ2lLSn6EQKR qwtBcNvudmCesL/N8ixNKcI= X-Google-Smtp-Source: AKy350aHI9BFLDvQFzvCMlI58HEGk+XF8iA0SsxyxfvB8/fRqh4zXzOhXz0kXd44cappd02de0zbZg== X-Received: by 2002:a6b:e506:0:b0:760:ea10:757 with SMTP id y6-20020a6be506000000b00760ea100757mr2589189ioc.20.1681672264056; Sun, 16 Apr 2023 12:11:04 -0700 (PDT) Received: from localhost.localdomain ([2601:447:d001:897f:af57:910a:275a:1164]) by smtp.gmail.com with ESMTPSA id t9-20020a02b189000000b0040f8abd7c05sm1685044jah.151.2023.04.16.12.11.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 16 Apr 2023 12:11:03 -0700 (PDT) From: Adam Ford To: linux-clk@vger.kernel.org Cc: aford@beaconembedded.com, Adam Ford , Abel Vesa , Peng Fan , Michael Turquette , Stephen Boyd , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH] clk: imx: composite-8m: Fix clock divisions greater than 8 Date: Sun, 16 Apr 2023 14:10:51 -0500 Message-Id: <20230416191051.106513-1-aford173@gmail.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230416_121108_544944_F5A91E7E X-CRM114-Status: GOOD ( 14.28 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org When adding imx8m_clk_divider_determine_rate to let the imx8mm and imx8mn get finer granulatiry of video clocks, it accidentally broke the imx8mp ability to divide clocks by more than 8 on clocks when the CLK_SET_RATE_PARENT flag is not set. On the imx8mp, the CLK_SET_RATE_PARENT flag cannot be set on either media_disp1_pix or media_disp2_pix, because they both share the video_pll as a common clock, and if two displays are used, the parent clock needs to be something that both child clocks can divide. imx8m_clk_divider_determine_rate ends up calling clk_divider_bestdiv which uses the value of 'width' to setup the maximum divisor. The clk-composite-8m driver sets the with to 3 which means the maximum divisor is 8, but these clocks can divide by up to 64. Currently, if the video_pll is set to 1039500000, the slowest clock rate achievable is 129937500 which breaks a whole bunch of lower resolution and refresh options for both media_disp1_pix and media_disp2_pix. By changing the 'width' variable to PCG_DIV_WIDTH, the maximum divisor becomes 64 which allows the clocks to divide down more, so the lower resolutions and refresh rates are achievable again. Fixes: 156e96ff2172 ("clk: imx: composite-8m: Add support to determine_rate") Signed-off-by: Adam Ford diff --git a/drivers/clk/imx/clk-composite-8m.c b/drivers/clk/imx/clk-composite-8m.c index 6883a8199b6c..805e6aada83d 100644 --- a/drivers/clk/imx/clk-composite-8m.c +++ b/drivers/clk/imx/clk-composite-8m.c @@ -47,6 +47,7 @@ static unsigned long imx8m_clk_composite_divider_recalc_rate(struct clk_hw *hw, divider->flags, PCG_DIV_WIDTH); } + static int imx8m_clk_composite_compute_dividers(unsigned long rate, unsigned long parent_rate, int *prediv, int *postdiv) @@ -215,12 +216,12 @@ struct clk_hw *__imx8m_clk_hw_composite(const char *name, mux_ops = &imx8m_clk_composite_mux_ops; } else if (composite_flags & IMX_COMPOSITE_BUS) { div->shift = PCG_PREDIV_SHIFT; - div->width = PCG_PREDIV_WIDTH; + div->width = PCG_DIV_WIDTH; divider_ops = &imx8m_clk_composite_divider_ops; mux_ops = &imx8m_clk_composite_mux_ops; } else { div->shift = PCG_PREDIV_SHIFT; - div->width = PCG_PREDIV_WIDTH; + div->width = PCG_DIV_WIDTH; divider_ops = &imx8m_clk_composite_divider_ops; mux_ops = &clk_mux_ops; if (!(composite_flags & IMX_COMPOSITE_FW_MANAGED))