Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp2901993pxb; Mon, 17 Jan 2022 07:58:48 -0800 (PST) X-Google-Smtp-Source: ABdhPJxEOpIUHrVYwqJiGca86mt9IPAhfl3/7ACanXxVQDR0gtTwpiI3yK47pohbscDDOBTDhkeY X-Received: by 2002:a05:6a00:134e:b0:4c2:59a9:551b with SMTP id k14-20020a056a00134e00b004c259a9551bmr18433799pfu.29.1642435128632; Mon, 17 Jan 2022 07:58:48 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642435128; cv=none; d=google.com; s=arc-20160816; b=S4ZHOsbGqcVjzHNiM6qiZ1LTeDbrQQkdjhEuPLmYtZVSZXRNSyP9rmXb/zyfBm9liB tfo0otqcafz8yX/6x7n1a1bCtc5ifH4TjT7qnGWU0BcLgopwvv+MSBSqqhsHx5Pi0m7j M2nwO+kBSjtnb949zUu/6oz+LLFReql+nkNMN/7lzrRPVht4DUStQi35Mt2R1x1phjJe vSmRKp4//YCBQ56xQmppmTRiMoapM7brNl6AeRiApB1P+raTgxBVWy2fkQSI5XRTvvJO btNxRyw7oiDvRXYqLI245Rs7dAvAyrG0ytpie8hbNFsetgrjRPpdJDgSeogodAYSlKd2 /IbA== 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 :references:in-reply-to:date:cc:to:from:subject:message-id; bh=agqURCvx6H7Jl07dPeAT3FyXWd/vnSgoHLULU7gwXpo=; b=FiR9Awo2K6o3/jWNMZ6vy9mwcMW4PBL56m6qvH6sW/SeF+XAK7mzXzySEwLG1iB13c 3DBYPwwG1Xx3uyUZSNhbhGLfHnL1CIm9xdQIpbwMbkuwijhNq6LmWm2ztLaUE3Q1L4yd YXumPBtQsmgMli2Y6nBpaVB2ZPdEMfT0eYsXuyALJHCZDipnI/5Nvgsn+696KcC6YRAF dw/nRImc1EISzlyxZ+Xsm7ddQRY+23COkCj0EzZ7vaomiU3gLuxOEzogI6YWyKIfwKr/ ajITKcUFTamZnPgo2m6qmPLNfAOVSzsFxZZKykLdVJzfHoZbo9al1xCmVsroQ5se+rgf 77sQ== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id 78si14716134pgb.76.2022.01.17.07.58.37; Mon, 17 Jan 2022 07:58:48 -0800 (PST) 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=mediatek.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237555AbiAQHgC (ORCPT + 99 others); Mon, 17 Jan 2022 02:36:02 -0500 Received: from mailgw01.mediatek.com ([60.244.123.138]:34772 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S232208AbiAQHgA (ORCPT ); Mon, 17 Jan 2022 02:36:00 -0500 X-UUID: 0248352516b94cd1a40ba274f513aa84-20220117 X-UUID: 0248352516b94cd1a40ba274f513aa84-20220117 Received: from mtkexhb01.mediatek.inc [(172.21.101.102)] by mailgw01.mediatek.com (envelope-from ) (Generic MTA with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 1741393476; Mon, 17 Jan 2022 15:35:55 +0800 Received: from mtkcas11.mediatek.inc (172.21.101.40) by mtkmbs10n2.mediatek.inc (172.21.101.183) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.2.792.3; Mon, 17 Jan 2022 15:35:54 +0800 Received: from mhfsdcap04 (10.17.3.154) by mtkcas11.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 17 Jan 2022 15:35:53 +0800 Message-ID: <2205eedc9ecd10f83994138974b261baa0aee55a.camel@mediatek.com> Subject: Re: [PATCH v2 3/3] mmc: mediatek: add support for SDIO eint irq From: Axe Yang To: Andy Shevchenko CC: Ulf Hansson , Rob Herring , Chaotian Jing , Matthias Brugger , Adrian Hunter , "Yoshihiro Shimoda" , Satya Tangirala , Wolfram Sang , "Lucas Stach" , Eric Biggers , Andrew Jeffery , Stephen Boyd , Kiwoong Kim , Yue Hu , Tian Tao , , , , , Date: Mon, 17 Jan 2022 15:35:53 +0800 In-Reply-To: References: <20220111014046.5864-1-axe.yang@mediatek.com> <20220111014046.5864-4-axe.yang@mediatek.com> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.28.5-0ubuntu0.18.04.2 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-MTK: N Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Andy, patchset v3 is uploaded. I fixed most of the defect you pointed out. And in msdc_sdio_eint_irq(), you asked why do we need flags, the flags is for spin lock irq save/restore, so I keep it. On Tue, 2022-01-11 at 13:46 +0200, Andy Shevchenko wrote: > On Tue, Jan 11, 2022 at 09:40:46AM +0800, Axe Yang wrote: > > Add support for eint irq when MSDC is used as an SDIO host. This > > IRQ > > > feature requires SDIO device support async irq function. With this > > IRQ > > > feature,SDIO host can be awakened by SDIO card in suspend state, > > feature, SDIO > > > without additional pin. > > > > MSDC driver will time-share the SDIO DAT1 pin. During suspend, MSDC > > turn off clock and switch SDIO DAT1 pin to GPIO mode. And during > > resume, switch GPIO function back to DAT1 mode then turn on clock. > > > > Some device tree property should be added or modified in msdc node > > MSDC > > > to support SDIO eint irq. Pinctrls named state_dat1 and state_eint > > IRQ > > > are mandatory. And cap-sdio-async-irq flag is necessary since this > > feature depends on asynchronous interrupt: > > &mmcX { > > ... > > pinctrl-names = "default", "state_uhs", > > "state_eint", > > "state_dat1"; > > ... > > pinctrl-2 = <&mmc2_pins_eint>; > > pinctrl-3 = <&mmc2_pins_dat1>; > > ... > > cap-sdio-async-irq; > > ... > > }; > > ... > > > - * Copyright (c) 2014-2015 MediaTek Inc. > > + * Copyright (c) 2014-2022 MediaTek Inc. > > Shouldn't it be rather like > > * Copyright (c) 2014-2015,2022 MediaTek Inc. > > ? > > ... > > > +static irqreturn_t msdc_sdio_eint_irq(int irq, void *dev_id) > > +{ > > + unsigned long flags; > > + struct msdc_host *host = (struct msdc_host *)dev_id; > > No casting is needed. > > > + struct mmc_host *mmc = mmc_from_priv(host); > > Perhaps reversed xmas tree order > > struct msdc_host *host = dev_id; > struct mmc_host *mmc = mmc_from_priv(host); > unsigned long flags; > > ? > > But hey, why do you need flags? falgs is for spin lock irq save/restore. > > > + spin_lock_irqsave(&host->lock, flags); > > + if (likely(host->sdio_irq_cnt > 0)) { > > + disable_irq_nosync(host->eint_irq); > > + disable_irq_wake(host->eint_irq); > > + host->sdio_irq_cnt--; > > + } > > + spin_unlock_irqrestore(&host->lock, flags); > > + > > + sdio_signal_irq(mmc); > > + > > + return IRQ_HANDLED; > > +} > > ... > > > +static int msdc_request_dat1_eint_irq(struct msdc_host *host) > > +{ > > + struct gpio_desc *desc; > > + int irq, ret; > > + > > + desc = devm_gpiod_get(host->dev, "eint", GPIOD_IN); > > + if (IS_ERR(desc)) > > + return PTR_ERR(desc); > > + > > + ret = gpiod_to_irq(desc); > > + if (ret < 0) > > + return ret; > > + > > + irq = ret; > > + ret = devm_request_threaded_irq(host->dev, irq, NULL, > > msdc_sdio_eint_irq, > > + IRQF_TRIGGER_LOW | IRQF_ONESHOT > > | IRQF_NO_AUTOEN, > > + "sdio-eint", host); > > + > > Redundant blank line. > > > + if (!ret) > > + host->eint_irq = irq; > > + > > + return ret; > > I guess I have already commented on this, i.e. use standard pattern > > if (ret) > return ret; > > ... > return 0; > > > +} > > ... > > > + host->pins_eint = pinctrl_lookup_state(host->pinctrl, > > "state_eint"); > > + if (IS_ERR(host->pins_eint)) { > > + dev_dbg(&pdev->dev, "Cannot find pinctrl > > eint!\n"); > > In debug mode of pin control this will bring a duplicate message. > > > + } else { > > + host->pins_dat1 = pinctrl_lookup_state(host- > > >pinctrl, "state_dat1"); > > + if (IS_ERR(host->pins_dat1)) { > > + ret = dev_err_probe(&pdev->dev, > > PTR_ERR(host->pins_dat1), > > + "Cannot find > > pinctrl dat1!\n"); > > + goto host_free; > > + } > > + > > + host->sdio_eint_ready = true; > > + } > > + } > >