From patchwork Mon Jun 21 13:13:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Simek X-Patchwork-Id: 12334767 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.1 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 55CFBC4743C for ; Mon, 21 Jun 2021 13:15:34 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 1F50A60240 for ; Mon, 21 Jun 2021 13:15:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 1F50A60240 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=xilinx.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org 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=jmx4J1Z61C2ZMpfqpsB+8Vh0+FcRTQ47Dreqp0Qqqe8=; b=UundIJT9b7KofI nckDbRARwvsvLbel0zbjiHl113fU4RirMZ98FzYM0Jnk5PgZOywdk2dOT9i6RzdRU3uq+vRbj/sPC VpJGnkpJ/G5gEM/4dybs9k3G5HO3cs4Asqpf5ZgXFmWyqQTR9b0qaAWpsv/TMTvMYPM4Kgm2W4ixj xWRjdloOntKx3Hn30cNE0ygvKr8DaXUxe2KEmkipCoq4EPD9Xqawwlq8y6QLdRAyIW7pDMo9Hro7T ffZSA5D1eaYnxHJtqVY9gVBSKkAm3RbB/FXFJvOXexLKb684AvjGEFvwJhLMOKNonWUfscGTQnm9U cJ0f22WBoncymB9B3+aw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lvJkV-003Zae-HQ; Mon, 21 Jun 2021 13:13:59 +0000 Received: from mail-wr1-x430.google.com ([2a00:1450:4864:20::430]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lvJkQ-003ZZe-2e for linux-arm-kernel@lists.infradead.org; Mon, 21 Jun 2021 13:13:55 +0000 Received: by mail-wr1-x430.google.com with SMTP id m18so19634203wrv.2 for ; Mon, 21 Jun 2021 06:13:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=monstr-eu.20150623.gappssmtp.com; s=20150623; h=sender:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=2j5aqshvMmv3SFWLZl++fZj3Ut8b4ASWXCLeBWk+mKA=; b=UT4A6/tyLrxmzFAtlnMFgnjpyeuVjy8i3JweZRE6JO0MkNe02kYE6YnkxEZXhYGMZ5 ZY+pplPGwLhnW7waLUJQ85CramDYgsSUEE6K9mdDWkc3q087EvJRuFSjbALch+GTZMCK SsLoqSOGLvMQ2MkkFHtWTQuFKZP7/X0jwbQSvWcj6yBWf2ZD6HWrKhbKZ1XbF71NVI4A szhoIqKRo5qUGZHZSfUzJqH/U1SQfqvEpSob8xfHEYapMXHk+1vJLvPXDgaNQGWwh1cb lm4rw4kJv1l/365B/h6+rexzYQQ3gOjP0HhBnsI28i9h3gonHwQ5qhwWTF2VrlhXaJr1 pNFw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :mime-version:content-transfer-encoding; bh=2j5aqshvMmv3SFWLZl++fZj3Ut8b4ASWXCLeBWk+mKA=; b=T32gtTPYAJ+GMj7l8A6xcUVHfUxNevQp9NDb9TnjSUbQbx1+zowg2aH1znfMqAmBHP qmOtbimN5LvW1kjfBEzvBXqSwh8NfV02N+e9EThwsn+yICzG9aDtRDlKwGR0KQyp5Qh0 XMqAUtZOF2Js4jyaqelZdt1h2cP+oNmPS8xb0S4QyeRaXF37YBSxVKEmyqWZzYoOi6Ul RKTpCIM+U4MUYCvDSKdPJGrAStOSTwpi3twNxpc82r5CqlMVEzd1IwcaT8Me0ZUDigNx EQt1Y6xxDOwAgQOTeq2xEb544B36u0fB2rvgRtyfiMINXNir2KW/H26fC1ZGXHsEJLhG a1aw== X-Gm-Message-State: AOAM530K6tcJxolXRsw6weNrlG2YSIfhoqaoymic454qpHPLLrOECOiI TUavc5InVDD9dqSGehkLDGWkYQ== X-Google-Smtp-Source: ABdhPJxHYIboQGK0uRn5qPAdEup5HvcA17rhoedHpQq/bhwfl8l3cnFtHaT+ODFqG07ayJQaZD3qQw== X-Received: by 2002:a5d:6daf:: with SMTP id u15mr28295933wrs.400.1624281231767; Mon, 21 Jun 2021 06:13:51 -0700 (PDT) Received: from localhost ([2a02:768:2307:40d6::648]) by smtp.gmail.com with ESMTPSA id y7sm13147550wma.22.2021.06.21.06.13.51 (version=TLS1_2 cipher=ECDHE-ECDSA-CHACHA20-POLY1305 bits=256/256); Mon, 21 Jun 2021 06:13:51 -0700 (PDT) From: Michal Simek To: linux-kernel@vger.kernel.org, monstr@monstr.eu, michal.simek@xilinx.com, git@xilinx.com Cc: Arnd Bergmann , Michael Turquette , Punit Agrawal , Quanyang Wang , Stephen Boyd , linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org Subject: [PATCH v2] clk: zynqmp: fix compile testing without ZYNQMP_FIRMWARE Date: Mon, 21 Jun 2021 15:13:47 +0200 Message-Id: X-Mailer: git-send-email 2.32.0 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210621_061354_214319_82109620 X-CRM114-Status: GOOD ( 19.09 ) 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 From: Arnd Bergmann When the firmware code is disabled, the incomplete error handling in the clk driver causes compile-time warnings: drivers/clk/zynqmp/pll.c: In function 'zynqmp_pll_recalc_rate': drivers/clk/zynqmp/pll.c:147:29: error: 'fbdiv' is used uninitialized [-Werror=uninitialized] 147 | rate = parent_rate * fbdiv; | ~~~~~~~~~~~~^~~~~~~ In function 'zynqmp_pll_get_mode', inlined from 'zynqmp_pll_recalc_rate' at drivers/clk/zynqmp/pll.c:148:6: drivers/clk/zynqmp/pll.c:61:27: error: 'ret_payload' is used uninitialized [-Werror=uninitialized] 61 | return ret_payload[1]; | ~~~~~~~~~~~^~~ drivers/clk/zynqmp/pll.c: In function 'zynqmp_pll_recalc_rate': drivers/clk/zynqmp/pll.c:53:13: note: 'ret_payload' declared here 53 | u32 ret_payload[PAYLOAD_ARG_CNT]; | ^~~~~~~~~~~ drivers/clk/zynqmp/clk-mux-zynqmp.c: In function 'zynqmp_clk_mux_get_parent': drivers/clk/zynqmp/clk-mux-zynqmp.c:57:16: error: 'val' is used uninitialized [-Werror=uninitialized] 57 | return val; | ^~~ As it was apparently intentional to support this for compile testing purposes, change the code to have just enough error handling for the compiler to not notice the remaining bugs. Fixes: 21f237534661 ("clk: zynqmp: Drop dependency on ARCH_ZYNQMP") Signed-off-by: Arnd Bergmann Signed-off-by: Michal Simek --- Changes in v2: Based on discussion here Link: https://lore.kernel.org/r/20210421134844.3297838-1-arnd@kernel.org I have updated error return value which I got from clock core based on error cases. zynqmp_clk_mux_get_parent() should return num_parents() as error defined in clk_core_get_parent_by_index() where num_parents is incorrect index. Extend zynqmp_pll_get_mode() with PLL_MODE_ERROR to handle error case. zynqmp_pll_recalc_rate() returns 0 because __clk_core_init() consider 0 as default rate. But maybe -1ul which was used by Arnd is also good option. --- drivers/clk/zynqmp/clk-mux-zynqmp.c | 10 ++++++++-- drivers/clk/zynqmp/pll.c | 15 ++++++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/drivers/clk/zynqmp/clk-mux-zynqmp.c b/drivers/clk/zynqmp/clk-mux-zynqmp.c index 06194149be83..d576c900dee0 100644 --- a/drivers/clk/zynqmp/clk-mux-zynqmp.c +++ b/drivers/clk/zynqmp/clk-mux-zynqmp.c @@ -38,7 +38,7 @@ struct zynqmp_clk_mux { * zynqmp_clk_mux_get_parent() - Get parent of clock * @hw: handle between common and hardware-specific interfaces * - * Return: Parent index + * Return: Parent index on success or number of parents in case of error */ static u8 zynqmp_clk_mux_get_parent(struct clk_hw *hw) { @@ -50,9 +50,15 @@ static u8 zynqmp_clk_mux_get_parent(struct clk_hw *hw) ret = zynqmp_pm_clock_getparent(clk_id, &val); - if (ret) + if (ret) { pr_warn_once("%s() getparent failed for clock: %s, ret = %d\n", __func__, clk_name, ret); + /* + * clk_core_get_parent_by_index() takes num_parents as incorrect + * index which is exactly what I want to return here + */ + return clk_hw_get_num_parents(hw); + } return val; } diff --git a/drivers/clk/zynqmp/pll.c b/drivers/clk/zynqmp/pll.c index abe6afbf3407..3fe4d21227d0 100644 --- a/drivers/clk/zynqmp/pll.c +++ b/drivers/clk/zynqmp/pll.c @@ -31,8 +31,9 @@ struct zynqmp_pll { #define PS_PLL_VCO_MAX 3000000000UL enum pll_mode { - PLL_MODE_INT, - PLL_MODE_FRAC, + PLL_MODE_INT = 0, + PLL_MODE_FRAC = 1, + PLL_MODE_ERROR = 2, }; #define FRAC_OFFSET 0x8 @@ -54,9 +55,11 @@ static inline enum pll_mode zynqmp_pll_get_mode(struct clk_hw *hw) int ret; ret = zynqmp_pm_get_pll_frac_mode(clk_id, ret_payload); - if (ret) + if (ret) { pr_warn_once("%s() PLL get frac mode failed for %s, ret = %d\n", __func__, clk_name, ret); + return PLL_MODE_ERROR; + } return ret_payload[1]; } @@ -126,7 +129,7 @@ static long zynqmp_pll_round_rate(struct clk_hw *hw, unsigned long rate, * @hw: Handle between common and hardware-specific interfaces * @parent_rate: Clock frequency of parent clock * - * Return: Current clock frequency + * Return: Current clock frequency or 0 in case of error */ static unsigned long zynqmp_pll_recalc_rate(struct clk_hw *hw, unsigned long parent_rate) @@ -140,9 +143,11 @@ static unsigned long zynqmp_pll_recalc_rate(struct clk_hw *hw, int ret; ret = zynqmp_pm_clock_getdivider(clk_id, &fbdiv); - if (ret) + if (ret) { pr_warn_once("%s() get divider failed for %s, ret = %d\n", __func__, clk_name, ret); + return 0ul; + } rate = parent_rate * fbdiv; if (zynqmp_pll_get_mode(hw) == PLL_MODE_FRAC) {