From: Herve Codina <herve.codina@bootlin.com>
To: Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: Simon Horman <horms@kernel.org>,
Sai Krishna Gajula <saikrishnag@marvell.com>,
Thomas Gleixner <tglx@linutronix.de>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Lee Jones <lee@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Horatiu Vultur <horatiu.vultur@microchip.com>,
UNGLinuxDriver@microchip.com, Andrew Lunn <andrew@lunn.ch>,
Heiner Kallweit <hkallweit1@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Saravana Kannan <saravanak@google.com>,
Bjorn Helgaas <bhelgaas@google.com>,
Philipp Zabel <p.zabel@pengutronix.de>,
Lars Povlsen <lars.povlsen@microchip.com>,
Steen Hegelund <Steen.Hegelund@microchip.com>,
Daniel Machon <daniel.machon@microchip.com>,
Alexandre Belloni <alexandre.belloni@bootlin.com>,
linux-kernel@vger.kernel.org, devicetree@vger.kernel.org,
netdev@vger.kernel.org, linux-pci@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
Allan Nielsen <allan.nielsen@microchip.com>,
Luca Ceresoli <luca.ceresoli@bootlin.com>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>
Subject: Re: [PATCH v2 18/19] mfd: Add support for LAN966x PCI device
Date: Thu, 20 Jun 2024 18:43:01 +0200 [thread overview]
Message-ID: <20240620184301.2e768c02@bootlin.com> (raw)
In-Reply-To: <20240620175646.24455efb@bootlin.com>
My bad, I wrongly answered first in private.
-> Resend my answers with people in Cc
Andy, I will also resend your reply.
Sorry for this mistake.
Herve
On Thu, 20 Jun 2024 17:56:46 +0200
Herve Codina <herve.codina@bootlin.com> wrote:
> Hi Andy,
>
> On Wed, 5 Jun 2024 23:24:43 +0300
> Andy Shevchenko <andy.shevchenko@gmail.com> wrote:
>
> > Mon, May 27, 2024 at 06:14:45PM +0200, Herve Codina kirjoitti:
> > > Add a PCI driver that handles the LAN966x PCI device using a device-tree
> > > overlay. This overlay is applied to the PCI device DT node and allows to
> > > describe components that are present in the device.
> > >
> > > The memory from the device-tree is remapped to the BAR memory thanks to
> > > "ranges" properties computed at runtime by the PCI core during the PCI
> > > enumeration.
> > > The PCI device itself acts as an interrupt controller and is used as the
> > > parent of the internal LAN966x interrupt controller to route the
> > > interrupts to the assigned PCI INTx interrupt.
> >
> > ...
> >
> > > +#include <linux/irq.h>
> > > +#include <linux/irqdomain.h>
> >
> > > +#include <linux/kernel.h>
> >
> > Why do you need this?
> >
> > > +#include <linux/module.h>
> > > +#include <linux/of.h>
> > > +#include <linux/of_platform.h>
> > > +#include <linux/pci.h>
> > > +#include <linux/slab.h>
> >
> > General comment to the headers (in all your patches), try to follow IWYU
> > principle, i.e. include what you use explicitly and don't use "proxy" headers
> > such as kernel.h which basically shouldn't be used at all in the drivers.
>
> Sure, I will remove unneeded header inclusion.
>
> >
> > ...
> >
> > > +static irqreturn_t pci_dev_irq_handler(int irq, void *data)
> > > +{
> > > + struct pci_dev_intr_ctrl *intr_ctrl = data;
> > > + int ret;
> > > +
> > > + ret = generic_handle_domain_irq(intr_ctrl->irq_domain, 0);
> > > + return ret ? IRQ_NONE : IRQ_HANDLED;
> >
> > There is a macro for that IRQ_RETVAL() IIRC.
>
> Didn't known about that. Thanks for pointing out!
> I will use it :)
>
> >
> > > +}
> >
> > ...
> >
> > > +static int devm_pci_dev_create_intr_ctrl(struct pci_dev *pdev)
> > > +{
> > > + struct pci_dev_intr_ctrl *intr_ctrl;
> > > +
> > > + intr_ctrl = pci_dev_create_intr_ctrl(pdev);
> >
> > > +
> >
> > Redundant blank line.
>
> Will be removed.
>
> >
> > > + if (IS_ERR(intr_ctrl))
> > > + return PTR_ERR(intr_ctrl);
> > > +
> > > + return devm_add_action_or_reset(&pdev->dev, devm_pci_dev_remove_intr_ctrl, intr_ctrl);
> > > +}
> >
> > ...
> >
> > > +static int lan966x_pci_load_overlay(struct lan966x_pci *data)
> > > +{
> > > + u32 dtbo_size = __dtbo_lan966x_pci_end - __dtbo_lan966x_pci_begin;
> > > + void *dtbo_start = __dtbo_lan966x_pci_begin;
> > > + int ret;
> > > +
> > > + ret = of_overlay_fdt_apply(dtbo_start, dtbo_size, &data->ovcs_id, data->dev->of_node);
> >
> > dev_of_node() ?
>
> Yes indeed.
>
> >
> > > + if (ret)
> > > + return ret;
> > > +
> > > + return 0;
> > > +}
> >
> > ...
> >
> > > +static int lan966x_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
> > > +{
> > > + struct device *dev = &pdev->dev;
> > > + struct lan966x_pci *data;
> > > + int ret;
> >
> > > + if (!dev->of_node) {
> > > + dev_err(dev, "Missing of_node for device\n");
> > > + return -EINVAL;
> > > + }
> >
> > Why do you need this? The code you have in _create_intr_ctrl() will take care
> > already for this case.
>
> The code in _create_intr_ctrl checks for fwnode and not an of_node.
>
> The check here is to ensure that an of_node is available as it will be use
> for DT overlay loading.
>
> I will keep the check here and use dev_of_node() instead of dev->of_node.
>
> >
> > > + /* Need to be done before devm_pci_dev_create_intr_ctrl.
> > > + * It allocates an IRQ and so pdev->irq is updated
> >
> > Missing period at the end.
>
> Will be added.
>
> >
> > > + */
> > > + ret = pcim_enable_device(pdev);
> > > + if (ret)
> > > + return ret;
> > > +
> > > + ret = devm_pci_dev_create_intr_ctrl(pdev);
> > > + if (ret)
> > > + return ret;
> > > +
> > > + data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
> > > + if (!data)
> > > + return -ENOMEM;
> > > +
> > > + dev_set_drvdata(dev, data);
> > > + data->dev = dev;
> > > + data->pci_dev = pdev;
> > > +
> > > + ret = lan966x_pci_load_overlay(data);
> > > + if (ret)
> > > + return ret;
> >
> > > + pci_set_master(pdev);
> >
> > You don't use MSI, what is this for?
>
> DMA related.
> Allows the PCI device to be master on the bus and so initiate transactions.
>
> Did I misunderstood ?
>
> >
> > > + ret = of_platform_default_populate(dev->of_node, NULL, dev);
> >
> > dev_of_node()
>
> Yes, sure.
>
> >
> > > + if (ret)
> > > + goto err_unload_overlay;
> > > +
> > > + return 0;
> > > +
> > > +err_unload_overlay:
> > > + lan966x_pci_unload_overlay(data);
> > > + return ret;
> > > +}
> >
> > ...
> >
> > > +static void lan966x_pci_remove(struct pci_dev *pdev)
> > > +{
> > > + struct device *dev = &pdev->dev;
> > > + struct lan966x_pci *data = dev_get_drvdata(dev);
> >
> > platform_get_drvdata()
>
> platform_get_drvdata() is related to platform_device.
> There is no platform_device here but a pci_dev.
>
> I will use pci_get_drvdata() here and update probe() to
> use pci_set_drvdata() for consistency.
>
> >
> > > + of_platform_depopulate(dev);
> > > +
> > > + lan966x_pci_unload_overlay(data);
> >
> > > + pci_clear_master(pdev);
> >
> > No need to call this excplicitly when pcim_enable_device() was called.
>
> You're right. I will remove this call.
>
> >
> > > +}
> >
> > ...
> >
> > > +static struct pci_device_id lan966x_pci_ids[] = {
> > > + { PCI_DEVICE(0x1055, 0x9660) },
> >
> > Don't you have VENDOR_ID defined somewhere?
>
> No and 0x1055 is taken by PCI_VENDOR_ID_EFAR in pci-ids.h
> but SMSC acquired EFAR late 1990's and MCHP acquired SMSC in 2012
> https://elixir.bootlin.com/linux/latest/source/drivers/net/ethernet/microchip/lan743x_main.h#L851
>
> I will patch pci-ids.h to create:
> #define PCI_VENDOR_ID_SMSC PCI_VENDOR_ID_EFAR
> #define PCI_VENDOR_ID_MCHP PCI_VENDOR_ID_SMSC
> As part of this patch, I will update lan743x_main.h to remove its own #define
>
> And use PCI_VENDOR_ID_MCHP in this series.
>
> >
> > > + { 0, }
> >
> > Unneeded ' 0, ' part
>
> Will be removed.
>
> >
> > > +};
> >
>
> Thanks a lot for your review.
>
> Best regards,
> Hervé
next prev parent reply other threads:[~2024-06-20 16:43 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-27 16:14 [PATCH v2 00/19] Add support for the LAN966x PCI device using a DT overlay Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 01/19] mfd: syscon: Add reference counting and device managed support Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-18 14:53 ` Arnd Bergmann
2024-06-18 15:55 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 02/19] reset: mchp: sparx5: Remove dependencies and allow building as a module Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 03/19] reset: mchp: sparx5: Release syscon when not use anymore Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 04/19] reset: core: add get_device()/put_device on rcdev Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 05/19] reset: mchp: sparx5: set the dev member of the reset controller Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 06/19] dt-bindings: net: mscc-miim: Add resets property Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 19:14 ` Andrew Lunn
2024-05-27 19:14 ` Andrew Lunn
2024-05-28 6:44 ` Krzysztof Kozlowski
2024-05-28 6:44 ` Krzysztof Kozlowski
2024-05-27 16:14 ` [PATCH v2 07/19] net: mdio: mscc-miim: Handle the switch reset Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 19:16 ` Andrew Lunn
2024-05-27 19:16 ` Andrew Lunn
2024-05-27 16:14 ` [PATCH v2 08/19] dt-bindings: interrupt-controller: Add support for Microchip LAN966x OIC Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 09/19] irqdomain: Add missing parameter descriptions in docs Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-04 19:02 ` Thomas Gleixner
2024-06-04 19:02 ` Thomas Gleixner
2024-06-05 15:44 ` [tip: irq/core] irqdomain: Add missing parameter descriptions in kernel-doc comments tip-bot2 for Herve Codina
2024-06-05 20:02 ` [PATCH v2 09/19] irqdomain: Add missing parameter descriptions in docs Andy Shevchenko
2024-06-05 20:02 ` Andy Shevchenko
2024-06-06 7:14 ` Herve Codina
2024-06-06 7:14 ` Herve Codina
2024-06-06 8:46 ` Andy Shevchenko
2024-06-06 8:46 ` Andy Shevchenko
2024-06-06 10:16 ` Herve Codina
2024-06-06 10:16 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 10/19] irqdomain: Introduce irq_domain_alloc() and irq_domain_publish() Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-04 19:59 ` Thomas Gleixner
2024-06-04 19:59 ` Thomas Gleixner
2024-06-05 13:02 ` Thomas Gleixner
2024-06-05 13:02 ` Thomas Gleixner
2024-06-06 15:52 ` Herve Codina
2024-06-06 15:52 ` Herve Codina
2024-06-06 18:11 ` Thomas Gleixner
2024-06-06 18:11 ` Thomas Gleixner
2024-06-07 8:06 ` Herve Codina
2024-06-07 8:06 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 11/19] irqchip: Add support for LAN966x OIC Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-05 14:17 ` Thomas Gleixner
2024-06-05 14:17 ` Thomas Gleixner
2024-06-05 20:14 ` Andy Shevchenko
2024-06-05 20:14 ` Andy Shevchenko
2024-06-06 15:53 ` Herve Codina
2024-06-06 15:53 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 12/19] MAINTAINERS: Add the Microchip LAN966x OIC driver entry Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 13/19] of: dynamic: Constify parameter in of_changeset_add_prop_string_array() Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 14/19] of: unittest: Add tests for changeset properties adding Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 15/19] of: dynamic: Introduce of_changeset_add_prop_bool() Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 16/19] of: unittest: Add a test case for of_changeset_add_prop_bool() Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-27 16:14 ` [PATCH v2 17/19] PCI: of_property: Add interrupt-controller property in PCI device nodes Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-06 19:26 ` Bjorn Helgaas
2024-06-06 19:26 ` Bjorn Helgaas
2024-06-10 21:37 ` Rob Herring
2024-06-10 21:37 ` Rob Herring
2024-06-11 17:13 ` Bjorn Helgaas
2024-05-27 16:14 ` [PATCH v2 18/19] mfd: Add support for LAN966x PCI device Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-06-05 20:24 ` Andy Shevchenko
2024-06-05 20:24 ` Andy Shevchenko
[not found] ` <20240620175646.24455efb@bootlin.com>
2024-06-20 16:43 ` Herve Codina [this message]
[not found] ` <CAHp75VdDkv-dxWa60=OLfXAQ8T5CkFiKALbDHaVVKQOK3gJehA@mail.gmail.com>
2024-06-20 16:43 ` Herve Codina
2024-06-20 17:19 ` Herve Codina
2024-06-21 15:45 ` Andy Shevchenko
2024-06-21 18:49 ` Bjorn Helgaas
2024-06-24 11:46 ` Steen Hegelund
2024-06-26 6:52 ` Herve Codina
2024-06-26 7:17 ` Steen Hegelund
2024-06-24 8:20 ` Herve Codina
2024-06-05 21:34 ` Bjorn Helgaas
2024-06-05 21:34 ` Bjorn Helgaas
2024-05-27 16:14 ` [PATCH v2 19/19] MAINTAINERS: Add the Microchip LAN966x PCI driver entry Herve Codina
2024-05-27 16:14 ` Herve Codina
2024-05-30 0:08 ` [PATCH v2 00/19] Add support for the LAN966x PCI device using a DT overlay Jakub Kicinski
2024-05-30 0:08 ` Jakub Kicinski
2024-06-11 19:33 ` Rob Herring
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=20240620184301.2e768c02@bootlin.com \
--to=herve.codina@bootlin.com \
--cc=Steen.Hegelund@microchip.com \
--cc=UNGLinuxDriver@microchip.com \
--cc=alexandre.belloni@bootlin.com \
--cc=allan.nielsen@microchip.com \
--cc=andrew@lunn.ch \
--cc=andy.shevchenko@gmail.com \
--cc=arnd@arndb.de \
--cc=bhelgaas@google.com \
--cc=conor+dt@kernel.org \
--cc=daniel.machon@microchip.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=hkallweit1@gmail.com \
--cc=horatiu.vultur@microchip.com \
--cc=horms@kernel.org \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=lars.povlsen@microchip.com \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=luca.ceresoli@bootlin.com \
--cc=netdev@vger.kernel.org \
--cc=p.zabel@pengutronix.de \
--cc=pabeni@redhat.com \
--cc=robh@kernel.org \
--cc=saikrishnag@marvell.com \
--cc=saravanak@google.com \
--cc=tglx@linutronix.de \
--cc=thomas.petazzoni@bootlin.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.