From: Florian Fainelli <f.fainelli@gmail.com>
To: DENG Qingfang <dqfext@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
Jakub Kicinski <kuba@kernel.org>,
Landen Chao <Landen.Chao@mediatek.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Sean Wang <sean.wang@mediatek.com>,
Vivien Didelot <vivien.didelot@gmail.com>,
Vladimir Oltean <olteanv@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Sergio Paracuellos <sergio.paracuellos@gmail.com>,
linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org,
linux-staging@lists.linux.dev, devicetree@vger.kernel.org,
netdev@vger.kernel.org
Cc: "Weijie Gao" <weijie.gao@mediatek.com>,
"Chuanhong Guo" <gch981213@gmail.com>,
"René van Dorst" <opensource@vdorst.com>,
"Frank Wunderlich" <frank-w@public-files.de>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Marc Zyngier" <maz@kernel.org>
Subject: Re: [PATCH net-next 2/4] net: dsa: mt7530: add interrupt support
Date: Thu, 29 Apr 2021 16:39:36 -0700 [thread overview]
Message-ID: <18aa9a3b-e286-86b2-8b9b-e519ad884d77@gmail.com> (raw)
In-Reply-To: <20210429062130.29403-3-dqfext@gmail.com>
On 4/28/2021 11:21 PM, DENG Qingfang wrote:
> Add support for MT7530 interrupt controller to handle internal PHYs.
> In order to assign an IRQ number to each PHY, the registration of MDIO bus
> is also done in this driver.
>
> Signed-off-by: DENG Qingfang <dqfext@gmail.com>
> ---
[snip]
> +static int
> +mt7530_setup_irq(struct mt7530_priv *priv)
> +{
> + struct device *dev = priv->dev;
> + struct device_node *np = dev->of_node;
> + int ret;
> +
> + if (!of_property_read_bool(np, "interrupt-controller")) {
> + dev_info(dev, "no interrupt support\n");
> + return 0;
> + }
> +
> + priv->irq = of_irq_get(np, 0);
Using platform_get_irq() may be a bit nicer to avoid using too many
OF-centric APIs, but this does not have to be changed right now.
Likewise for the interrupt-controller above.
> + if (priv->irq <= 0) {
> + dev_err(dev, "failed to get parent IRQ: %d\n", priv->irq);
> + return priv->irq ? : -EINVAL;
> + }
> +
> + priv->irq_domain = irq_domain_add_linear(np, MT7530_NUM_PHYS,
> + &mt7530_irq_domain_ops, priv);
> + if (!priv->irq_domain) {
> + dev_err(dev, "failed to create IRQ domain\n");
> + return -ENOMEM;
> + }
> +
> + /* This register must be set for MT7530 to properly fire interrupts */
> + if (priv->id != ID_MT7531)
> + mt7530_set(priv, MT7530_TOP_SIG_CTRL, TOP_SIG_CTRL_NORMAL);
> +
> + ret = request_threaded_irq(priv->irq, NULL, mt7530_irq_thread_fn,
> + IRQF_ONESHOT, KBUILD_MODNAME, priv);
Maybe dev_name() would be more unique in case a system happens to have
more switches in the future so you can easily differentiate them.
> + if (ret) {
Can you call mt7530_free_irq() to avoid the error repetition?
> + irq_domain_remove(priv->irq_domain);
> + dev_err(dev, "failed to request IRQ: %d\n", ret);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static void
> +mt7530_free_mdio_irq(struct mt7530_priv *priv)
> +{
> + int p;
> +
> + for (p = 0; p < MT7530_NUM_PHYS; p++) {
> + if (BIT(p) & priv->ds->phys_mii_mask) {
> + unsigned int irq;
> +
> + irq = irq_find_mapping(priv->irq_domain, p);
> + irq_dispose_mapping(irq);
> + }
> + }
> +}
> +
> +static void
> +mt7530_free_irq_common(struct mt7530_priv *priv)
> +{
> + free_irq(priv->irq, priv);
> + irq_domain_remove(priv->irq_domain);
> +}
> +
> +static void
> +mt7530_free_irq(struct mt7530_priv *priv)
> +{
> + mt7530_free_mdio_irq(priv);
> + mt7530_free_irq_common(priv);
> +}
> +
> +static int
> +mt7530_setup_mdio(struct mt7530_priv *priv)
> +{
> + struct dsa_switch *ds = priv->ds;
> + struct device *dev = priv->dev;
> + struct mii_bus *bus;
> + static int idx;
> + int ret;
> +
> + bus = devm_mdiobus_alloc(dev);
> + if (!bus)
> + return -ENOMEM;
> +
> + ds->slave_mii_bus = bus;
> + bus->priv = priv;
> + bus->name = KBUILD_MODNAME "-mii";
> + snprintf(bus->id, MII_BUS_ID_SIZE, KBUILD_MODNAME "-%d", idx++);
Likewise using dev_name() here would provide an unique name in case you
have multiple switches.
Feel free to address my comments later, they do not seem to be blocking:
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
_______________________________________________
Linux-mediatek mailing list
Linux-mediatek@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-mediatek
WARNING: multiple messages have this Message-ID (diff)
From: Florian Fainelli <f.fainelli@gmail.com>
To: DENG Qingfang <dqfext@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
Jakub Kicinski <kuba@kernel.org>,
Landen Chao <Landen.Chao@mediatek.com>,
Matthias Brugger <matthias.bgg@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Sean Wang <sean.wang@mediatek.com>,
Vivien Didelot <vivien.didelot@gmail.com>,
Vladimir Oltean <olteanv@gmail.com>,
Rob Herring <robh+dt@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Sergio Paracuellos <sergio.paracuellos@gmail.com>,
linux-kernel@vger.kernel.org, linux-mediatek@lists.infradead.org,
linux-staging@lists.linux.dev, devicetree@vger.kernel.org,
netdev@vger.kernel.org
Cc: "Weijie Gao" <weijie.gao@mediatek.com>,
"Chuanhong Guo" <gch981213@gmail.com>,
"René van Dorst" <opensource@vdorst.com>,
"Frank Wunderlich" <frank-w@public-files.de>,
"Thomas Gleixner" <tglx@linutronix.de>,
"Marc Zyngier" <maz@kernel.org>
Subject: Re: [PATCH net-next 2/4] net: dsa: mt7530: add interrupt support
Date: Thu, 29 Apr 2021 16:39:36 -0700 [thread overview]
Message-ID: <18aa9a3b-e286-86b2-8b9b-e519ad884d77@gmail.com> (raw)
In-Reply-To: <20210429062130.29403-3-dqfext@gmail.com>
On 4/28/2021 11:21 PM, DENG Qingfang wrote:
> Add support for MT7530 interrupt controller to handle internal PHYs.
> In order to assign an IRQ number to each PHY, the registration of MDIO bus
> is also done in this driver.
>
> Signed-off-by: DENG Qingfang <dqfext@gmail.com>
> ---
[snip]
> +static int
> +mt7530_setup_irq(struct mt7530_priv *priv)
> +{
> + struct device *dev = priv->dev;
> + struct device_node *np = dev->of_node;
> + int ret;
> +
> + if (!of_property_read_bool(np, "interrupt-controller")) {
> + dev_info(dev, "no interrupt support\n");
> + return 0;
> + }
> +
> + priv->irq = of_irq_get(np, 0);
Using platform_get_irq() may be a bit nicer to avoid using too many
OF-centric APIs, but this does not have to be changed right now.
Likewise for the interrupt-controller above.
> + if (priv->irq <= 0) {
> + dev_err(dev, "failed to get parent IRQ: %d\n", priv->irq);
> + return priv->irq ? : -EINVAL;
> + }
> +
> + priv->irq_domain = irq_domain_add_linear(np, MT7530_NUM_PHYS,
> + &mt7530_irq_domain_ops, priv);
> + if (!priv->irq_domain) {
> + dev_err(dev, "failed to create IRQ domain\n");
> + return -ENOMEM;
> + }
> +
> + /* This register must be set for MT7530 to properly fire interrupts */
> + if (priv->id != ID_MT7531)
> + mt7530_set(priv, MT7530_TOP_SIG_CTRL, TOP_SIG_CTRL_NORMAL);
> +
> + ret = request_threaded_irq(priv->irq, NULL, mt7530_irq_thread_fn,
> + IRQF_ONESHOT, KBUILD_MODNAME, priv);
Maybe dev_name() would be more unique in case a system happens to have
more switches in the future so you can easily differentiate them.
> + if (ret) {
Can you call mt7530_free_irq() to avoid the error repetition?
> + irq_domain_remove(priv->irq_domain);
> + dev_err(dev, "failed to request IRQ: %d\n", ret);
> + return ret;
> + }
> +
> + return 0;
> +}
> +
> +static void
> +mt7530_free_mdio_irq(struct mt7530_priv *priv)
> +{
> + int p;
> +
> + for (p = 0; p < MT7530_NUM_PHYS; p++) {
> + if (BIT(p) & priv->ds->phys_mii_mask) {
> + unsigned int irq;
> +
> + irq = irq_find_mapping(priv->irq_domain, p);
> + irq_dispose_mapping(irq);
> + }
> + }
> +}
> +
> +static void
> +mt7530_free_irq_common(struct mt7530_priv *priv)
> +{
> + free_irq(priv->irq, priv);
> + irq_domain_remove(priv->irq_domain);
> +}
> +
> +static void
> +mt7530_free_irq(struct mt7530_priv *priv)
> +{
> + mt7530_free_mdio_irq(priv);
> + mt7530_free_irq_common(priv);
> +}
> +
> +static int
> +mt7530_setup_mdio(struct mt7530_priv *priv)
> +{
> + struct dsa_switch *ds = priv->ds;
> + struct device *dev = priv->dev;
> + struct mii_bus *bus;
> + static int idx;
> + int ret;
> +
> + bus = devm_mdiobus_alloc(dev);
> + if (!bus)
> + return -ENOMEM;
> +
> + ds->slave_mii_bus = bus;
> + bus->priv = priv;
> + bus->name = KBUILD_MODNAME "-mii";
> + snprintf(bus->id, MII_BUS_ID_SIZE, KBUILD_MODNAME "-%d", idx++);
Likewise using dev_name() here would provide an unique name in case you
have multiple switches.
Feel free to address my comments later, they do not seem to be blocking:
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
--
Florian
next prev parent reply other threads:[~2021-04-29 23:40 UTC|newest]
Thread overview: 60+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-29 6:21 [PATCH net-next 0/4] MT7530 interrupt support DENG Qingfang
2021-04-29 6:21 ` DENG Qingfang
2021-04-29 6:21 ` [PATCH net-next 1/4] net: phy: add MediaTek PHY driver DENG Qingfang
2021-04-29 6:21 ` DENG Qingfang
2021-04-29 21:26 ` Andrew Lunn
2021-04-29 21:26 ` Andrew Lunn
2021-04-29 23:40 ` Florian Fainelli
2021-04-29 23:40 ` Florian Fainelli
2021-05-06 11:33 ` Vladimir Oltean
2021-05-06 11:33 ` Vladimir Oltean
2021-04-29 6:21 ` [PATCH net-next 2/4] net: dsa: mt7530: add interrupt support DENG Qingfang
2021-04-29 6:21 ` DENG Qingfang
2021-04-29 21:29 ` Andrew Lunn
2021-04-29 21:29 ` Andrew Lunn
2021-04-29 23:39 ` Florian Fainelli [this message]
2021-04-29 23:39 ` Florian Fainelli
2021-05-06 11:42 ` Vladimir Oltean
2021-05-06 11:42 ` Vladimir Oltean
2021-04-29 6:21 ` [PATCH net-next 3/4] dt-bindings: net: dsa: add MT7530 interrupt controller binding DENG Qingfang
2021-04-29 6:21 ` DENG Qingfang
2021-04-29 21:30 ` Andrew Lunn
2021-04-29 21:30 ` Andrew Lunn
2021-04-29 23:31 ` Florian Fainelli
2021-04-29 23:31 ` Florian Fainelli
2021-05-03 19:35 ` Rob Herring
2021-05-03 19:35 ` Rob Herring
2021-04-29 6:21 ` [PATCH net-next 4/4] staging: mt7621-dts: enable MT7530 interrupt controller DENG Qingfang
2021-04-29 6:21 ` DENG Qingfang
2021-04-29 21:30 ` Andrew Lunn
2021-04-29 21:30 ` Andrew Lunn
2021-04-29 23:31 ` Florian Fainelli
2021-04-29 23:31 ` Florian Fainelli
2021-05-06 11:48 ` Vladimir Oltean
2021-05-06 11:48 ` Vladimir Oltean
2021-04-30 0:08 ` [PATCH net-next 0/4] MT7530 interrupt support David Miller
2021-04-30 0:08 ` David Miller
2021-04-30 2:38 ` DENG Qingfang
2021-04-30 2:38 ` DENG Qingfang
2021-04-30 12:24 ` Andrew Lunn
2021-04-30 12:24 ` Andrew Lunn
2021-04-30 12:37 ` Aw: " Frank Wunderlich
2021-04-30 12:37 ` Frank Wunderlich
2021-04-30 12:44 ` Andrew Lunn
2021-04-30 12:44 ` Andrew Lunn
2021-04-30 12:56 ` Aw: " Frank Wunderlich
2021-04-30 12:56 ` Frank Wunderlich
2021-04-30 13:13 ` Andrew Lunn
2021-04-30 13:13 ` Andrew Lunn
2021-04-30 14:59 ` Aw: " Frank Wunderlich
2021-04-30 14:59 ` Frank Wunderlich
2021-04-30 16:34 ` Andrew Lunn
2021-04-30 16:34 ` Andrew Lunn
2021-05-05 9:31 ` Landen Chao
2021-05-05 9:31 ` Landen Chao
2021-05-05 9:43 ` DENG Qingfang
2021-05-05 9:43 ` DENG Qingfang
2021-05-06 12:54 ` Landen Chao
2021-05-06 12:54 ` Landen Chao
2021-05-07 7:55 ` DENG Qingfang
2021-05-07 7:55 ` DENG Qingfang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=18aa9a3b-e286-86b2-8b9b-e519ad884d77@gmail.com \
--to=f.fainelli@gmail.com \
--cc=Landen.Chao@mediatek.com \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=dqfext@gmail.com \
--cc=frank-w@public-files.de \
--cc=gch981213@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=hkallweit1@gmail.com \
--cc=kuba@kernel.org \
--cc=linus.walleij@linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mediatek@lists.infradead.org \
--cc=linux-staging@lists.linux.dev \
--cc=linux@armlinux.org.uk \
--cc=matthias.bgg@gmail.com \
--cc=maz@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=opensource@vdorst.com \
--cc=robh+dt@kernel.org \
--cc=sean.wang@mediatek.com \
--cc=sergio.paracuellos@gmail.com \
--cc=tglx@linutronix.de \
--cc=vivien.didelot@gmail.com \
--cc=weijie.gao@mediatek.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.