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
I went through the email-thread you have shared.
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,
+ },
+};