Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp1100309pxb; Tue, 17 Aug 2021 03:58:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxfhJmk6PcaHUdaREsB95cqBSw/6ZT7vSVbGy9WW9cirxkHl4xwfk2niG6Ql13aCY+lHz+/ X-Received: by 2002:a92:7b10:: with SMTP id w16mr2116889ilc.241.1629197894030; Tue, 17 Aug 2021 03:58:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629197894; cv=none; d=google.com; s=arc-20160816; b=NRhSBNP4ex8giMNLc4W/OdMPZSdglB6R7f9LyPZnUnnaEPpQzFMUZkbGgYUaTrdP6E QqC+5AUx+1zxEYQmm1VjmuqMjRccAAYuuiIB24HFH9qIWEdgAL0omXwxwJ3zP0yKdIZL ze/YLcvCguteT3WkSEcaSr50fDQiN3XFRZ/5XRnSDmwaa1lqh/8EG5HS9YNNCd94mr3f rWvAZjNthZp9/Od3cwnMzMZ+0WmD56fRpWWfmSnKZUZdY3j9Vv/xJpJle0GwqbmuoJlt rSD2PJrD0Y1PUKba90oHqnzD4Du2wVxiG2XvyFOCwjORUGzUIIO2h74bOPW2f0TVk8Tf wTKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :organization:references:in-reply-to:message-id:subject:cc:to:from :date; bh=/v2Mpwuv87piFZde7aja3CiG+GNXIPf8MoSXsSFYhkE=; b=P1qcjPMvCJ1pg9WYFmc9oXfj9LWYml1wbzb+2RB3hHnzrFu45TcdAlqcBQyoLcQ/TY s9qYz+IUt4BQQvpR/2Fk8V6TW99SZEcg4xfC8AypzQ8cYIwgnJZQIjvVfAVDqFN++a1+ Wi2UMgeddqDkUjbj3ri5wmw5W0UnMcE5G7zV6Zzzx0C7/PTwdY7laCTLziL1YCdSTRYI yFmnbnfL8fGd8iExqHReGA9jdbW21dzs1scMs2k1KzoyUfqUE/zfemMQOX1uFQeVKdMo j3GNq5IZsPcbq2WujOUH8RY7t8ZY7VRD/sz3P9Dh/xWRPX64JRomxNEqyctKk4PD1qSC 7Fbg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id b41si2156031jav.121.2021.08.17.03.58.02; Tue, 17 Aug 2021 03:58:14 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239678AbhHQK4A convert rfc822-to-8bit (ORCPT + 99 others); Tue, 17 Aug 2021 06:56:00 -0400 Received: from relay1-d.mail.gandi.net ([217.70.183.193]:13549 "EHLO relay1-d.mail.gandi.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231515AbhHQKz7 (ORCPT ); Tue, 17 Aug 2021 06:55:59 -0400 Received: (Authenticated sender: miquel.raynal@bootlin.com) by relay1-d.mail.gandi.net (Postfix) with ESMTPSA id CFB06240007; Tue, 17 Aug 2021 10:55:22 +0000 (UTC) Date: Tue, 17 Aug 2021 12:55:21 +0200 From: Miquel Raynal To: Evgeny Novikov Cc: Andy Shevchenko , Richard Weinberger , Vignesh Raghavendra , Kirill Shilimanov , "linux-mtd@lists.infradead.org" , "linux-kernel@vger.kernel.org" , "ldv-project@linuxtesting.org" , masonccyang@mxic.com.tw Subject: Re: [PATCH] mtd: rawnand: mxic: Enable and prepare clocks in probe Message-ID: <20210817125521.487979b9@xps13> In-Reply-To: <246f2094-e294-73f8-8a5f-3467e987f788@ispras.ru> References: <20210812113800.12466-1-novikov@ispras.ru> <20210816100114.384f01b9@xps13> <246f2094-e294-73f8-8a5f-3467e987f788@ispras.ru> Organization: Bootlin X-Mailer: Claws Mail 3.17.7 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Evgeny, +Mason from Macronix Evgeny Novikov wrote on Tue, 17 Aug 2021 13:36:03 +0300: > Hi Miquel, > > On 16.08.2021 11:01, Miquel Raynal wrote: > > Hi Andy, > > > > Andy Shevchenko wrote on Thu, 12 Aug 2021 > > 15:13:10 +0300: > > > >> On Thursday, August 12, 2021, Evgeny Novikov wrote: > >> > >>> It seems that mxic_nfc_probe() missed invocation of > >>> mxic_nfc_clk_enable(). The patch fixed that. In addition, error handling > >>> was refined appropriately. > >> > >> NAK. Until you provide a deeper analysis, like how this works before your > >> change. > >> > >> > >> Please, don’t blindly generate patches, this can even your bot do, just > >> think about each change and preferable test on the real hardware. > >> > >> The above is to all your lovely contributions. > >> > >> > >>> Found by Linux Driver Verification project (linuxtesting.org). > >>> > >>> Signed-off-by: Evgeny Novikov > >>> Co-developed-by: Kirill Shilimanov > >>> Signed-off-by: Kirill Shilimanov > >>> --- > >>> drivers/mtd/nand/raw/mxic_nand.c | 16 ++++++++++++---- > >>> 1 file changed, 12 insertions(+), 4 deletions(-) > >>> > >>> diff --git a/drivers/mtd/nand/raw/mxic_nand.c b/drivers/mtd/nand/raw/mxic_ > >>> nand.c > >>> index da1070993994..37e75bf60ee5 100644 > >>> --- a/drivers/mtd/nand/raw/mxic_nand.c > >>> +++ b/drivers/mtd/nand/raw/mxic_nand.c > >>> @@ -509,9 +509,15 @@ static int mxic_nfc_probe(struct platform_device > >>> *pdev) > >>> if (IS_ERR(nfc->send_dly_clk)) > >>> return PTR_ERR(nfc->send_dly_clk); > >>> > >>> + err = mxic_nfc_clk_enable(nfc); > >>> + if (err) > >>> + return err; > > As Andy said, this is not needed. > > > >>> + > >>> nfc->regs = devm_platform_ioremap_resource(pdev, 0); > >>> - if (IS_ERR(nfc->regs)) > >>> - return PTR_ERR(nfc->regs); > >>> + if (IS_ERR(nfc->regs)) { > >>> + err = PTR_ERR(nfc->regs); > >>> + goto fail; > >>> + } > >>> > >>> nand_chip = &nfc->chip; > >>> mtd = nand_to_mtd(nand_chip); > >>> @@ -527,8 +533,10 @@ static int mxic_nfc_probe(struct platform_device > >>> *pdev) > >>> nand_chip->controller = &nfc->controller; > >>> > >>> irq = platform_get_irq(pdev, 0); > >>> - if (irq < 0) > >>> - return irq; > >>> + if (irq < 0) { > >>> + err = irq; > >>> + goto fail; > > However some reworking is needed in the error path. > > > > That goto statement should be renamed and devm_request_irq() should not > > jump to it. > > > > We still need some help and clarification from those who are very familiar with this sort of drivers or/and can test this particular driver. mxic_nfc_clk_enable() is the complementary function for mxic_nfc_clk_disable(). No other functions invoke clk_prepare_enable()/clk_disable_unprepare() in the driver. Unlikely somebody in its environment does that since driver specific clocks are dealt with. At the moment the driver invokes mxic_nfc_clk_disable() on error handling paths in probe, in remove and in mxic_nfc_set_freq(). mxic_nfc_clk_enable() is called just by mxic_nfc_set_freq() that moreover does this after calling mxic_nfc_clk_disable() first. So, we did not find any place in the driver that invokes mxic_nfc_clk_enable() prior to mxic_nfc_clk_disable(). Basing on this we added mxic_nfc_clk_enable() just after getting clocks. As I explained in the previous large e-mail, we may be wrong in our understanding of the driver environment or/and at specification of requirements being checked. It would be great if you will point out on our mistakes. Enabling the clocks seems to only be needed to access the NAND device and not the registers of the controller. Mason, is this statement right? If this statement is wrong, then your proposal is not entirely wrong in the sense that we must enable the missing clock *before* accessing any register. Otherwise for the two other clocks, we don't really care to enable them before setting the actual frequency in ->setup_interface() (called by nand_scan()) because at this point we don't yet know what timing mode is best. Disabling the clock is not an issue even though it was not enabled in the fist place anyway. In all cases, the error path is wrong. Thanks, Miquèl