Re: [RFC PATCH 2/2] PCI: j721e: Add support to build pci-j721e as a kernel module
From: Bjorn Helgaas
Date: Thu Aug 17 2023 - 13:05:09 EST
On Thu, Aug 17, 2023 at 05:38:23PM +0530, Achal Verma wrote:
> pci-j721e driver can be build as a in-built kernel driver only, which is
> not required as it is not used during boot time in most cases.
> This change add support to build pci-j721e as a kernel loadable module.
>
> J721e PCIe controller can work in both host mode and end-point mode.
> In order to enable host mode driver and endpoint driver to be built
> independently either as built-in or kernel module, the pcie-j721e.c driver
> is refactored into following components:
>
> 1) pci-j721e-host.c: Driver used when PCIe controller has to be
> initialized in host mode.
>
> 2) pci-j721e-ep.c: Driver used when PCIe controller has to be
> initialized in endpoint mode.
>
> 3) pci-j721e.c: contains common code required in both modes.
Sounds like at least two commits (I'm not sure what the best order
would be):
1) Split into separate host mode and endpoint mode drivers
2) Make both drivers tristate
It looks like you implement both module loading and removal. Do we
now think removal of these modules is safe? IIRC there used to be a
question related to irq_desc lifetimes, e.g., there's some discussion
here: https://lore.kernel.org/linux-pci/87k085xekg.wl-maz@xxxxxxxxxx/
The ability to *load* drivers as modules is definitely useful. The
ability to *remove* them is useful for developers but not really
useful for users.
But I guess j721e_pcie_remove() already exists, so maybe you're not
changing anything as far as irq_desc lifetimes
Since you're splitting into new files, maybe this is an opportunity to
fix my naming mistake of suggesting a "pci-" prefix instead of
"pcie-"?
Bjorn
> config PCI_J721E_HOST
> - bool "TI J721E PCIe controller (host mode)"
> + tristate "TI J721E PCIe controller (host mode)"
> depends on OF
> select PCIE_CADENCE_HOST
> select PCI_J721E
> @@ -56,7 +56,7 @@ config PCI_J721E_HOST
> core.
>
> config PCI_J721E_EP
> - bool "TI J721E PCIe controller (endpoint mode)"
> + tristate "TI J721E PCIe controller (endpoint mode)"
> depends on OF
> depends on PCI_ENDPOINT
> select PCIE_CADENCE_EP
> +static struct platform_driver j721e_pcie_ep_driver = {
> + .probe = j721e_pcie_probe,
> + .remove_new = j721e_pcie_remove,
> + .driver = {
> + .name = "j721e-pcie-ep",
> + .of_match_table = of_j721e_pcie_ep_match,
> + .suppress_bind_attrs = true,
> + },
> +};
> +static struct platform_driver j721e_pcie_host_driver = {
> + .probe = j721e_pcie_probe,
> + .remove_new = j721e_pcie_remove,
> + .driver = {
> + .name = "j721e-pcie-host",
> + .of_match_table = of_j721e_pcie_host_match,
> + .suppress_bind_attrs = true,
> + },
> +};