Commit ba27ec66 authored by Giuseppe CAVALLARO's avatar Giuseppe CAVALLARO Committed by David S. Miller

stmmac: fix driver Kconfig when built as module

This patches fixes the driver when built as dynamic module.
In fact, the platform part cannot be built and the probe fails
(thanks to Bob Liu that reported this bug).

v2: as D. Miller suggested, it is not necessary to make the
pci and the platform code mutually exclusive.
Having both could also help, at built time ,to verify that
all the code is validated and compiles fine.

v3: removed wrong Reviewed-by from the patch
Reported-by: default avatarBob Liu <lliubbo@gmail.com>
cc: Rayagond Kokatanur <rayagond@vayavyalabs.com>
Signed-off-by: default avatarGiuseppe Cavallaro <peppe.cavallaro@st.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3d237714
...@@ -13,9 +13,8 @@ config STMMAC_ETH ...@@ -13,9 +13,8 @@ config STMMAC_ETH
if STMMAC_ETH if STMMAC_ETH
config STMMAC_PLATFORM config STMMAC_PLATFORM
tristate "STMMAC platform bus support" bool "STMMAC Platform bus support"
depends on STMMAC_ETH depends on STMMAC_ETH
default y
---help--- ---help---
This selects the platform specific bus support for This selects the platform specific bus support for
the stmmac device driver. This is the driver used the stmmac device driver. This is the driver used
...@@ -26,7 +25,7 @@ config STMMAC_PLATFORM ...@@ -26,7 +25,7 @@ config STMMAC_PLATFORM
If unsure, say N. If unsure, say N.
config STMMAC_PCI config STMMAC_PCI
tristate "STMMAC support on PCI bus (EXPERIMENTAL)" bool "STMMAC PCI bus support (EXPERIMENTAL)"
depends on STMMAC_ETH && PCI && EXPERIMENTAL depends on STMMAC_ETH && PCI && EXPERIMENTAL
---help--- ---help---
This is to select the Synopsys DWMAC available on PCI devices, This is to select the Synopsys DWMAC available on PCI devices,
......
...@@ -95,7 +95,8 @@ extern int stmmac_mdio_register(struct net_device *ndev); ...@@ -95,7 +95,8 @@ extern int stmmac_mdio_register(struct net_device *ndev);
extern void stmmac_set_ethtool_ops(struct net_device *netdev); extern void stmmac_set_ethtool_ops(struct net_device *netdev);
extern const struct stmmac_desc_ops enh_desc_ops; extern const struct stmmac_desc_ops enh_desc_ops;
extern const struct stmmac_desc_ops ndesc_ops; extern const struct stmmac_desc_ops ndesc_ops;
extern struct pci_driver stmmac_pci_driver;
extern struct platform_driver stmmac_pltfr_driver;
int stmmac_freeze(struct net_device *ndev); int stmmac_freeze(struct net_device *ndev);
int stmmac_restore(struct net_device *ndev); int stmmac_restore(struct net_device *ndev);
int stmmac_resume(struct net_device *ndev); int stmmac_resume(struct net_device *ndev);
......
...@@ -42,6 +42,7 @@ ...@@ -42,6 +42,7 @@
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/prefetch.h> #include <linux/prefetch.h>
#include <linux/pci.h>
#ifdef CONFIG_STMMAC_DEBUG_FS #ifdef CONFIG_STMMAC_DEBUG_FS
#include <linux/debugfs.h> #include <linux/debugfs.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
...@@ -2093,6 +2094,30 @@ int stmmac_restore(struct net_device *ndev) ...@@ -2093,6 +2094,30 @@ int stmmac_restore(struct net_device *ndev)
} }
#endif /* CONFIG_PM */ #endif /* CONFIG_PM */
static int __init stmmac_init(void)
{
int err = 0;
err = platform_driver_register(&stmmac_pltfr_driver);
if (!err) {
err = pci_register_driver(&stmmac_pci_driver);
if (err)
platform_driver_unregister(&stmmac_pltfr_driver);
}
return err;
}
static void __exit stmmac_exit(void)
{
pci_unregister_driver(&stmmac_pci_driver);
platform_driver_unregister(&stmmac_pltfr_driver);
}
module_init(stmmac_init);
module_exit(stmmac_exit);
#ifndef MODULE #ifndef MODULE
static int __init stmmac_cmdline_opt(char *str) static int __init stmmac_cmdline_opt(char *str)
{ {
......
...@@ -179,7 +179,7 @@ static DEFINE_PCI_DEVICE_TABLE(stmmac_id_table) = { ...@@ -179,7 +179,7 @@ static DEFINE_PCI_DEVICE_TABLE(stmmac_id_table) = {
MODULE_DEVICE_TABLE(pci, stmmac_id_table); MODULE_DEVICE_TABLE(pci, stmmac_id_table);
static struct pci_driver stmmac_driver = { struct pci_driver stmmac_pci_driver = {
.name = STMMAC_RESOURCE_NAME, .name = STMMAC_RESOURCE_NAME,
.id_table = stmmac_id_table, .id_table = stmmac_id_table,
.probe = stmmac_pci_probe, .probe = stmmac_pci_probe,
...@@ -190,33 +190,6 @@ static struct pci_driver stmmac_driver = { ...@@ -190,33 +190,6 @@ static struct pci_driver stmmac_driver = {
#endif #endif
}; };
/**
* stmmac_init_module - Entry point for the driver
* Description: This function is the entry point for the driver.
*/
static int __init stmmac_init_module(void)
{
int ret;
ret = pci_register_driver(&stmmac_driver);
if (ret < 0)
pr_err("%s: ERROR: driver registration failed\n", __func__);
return ret;
}
/**
* stmmac_cleanup_module - Cleanup routine for the driver
* Description: This function is the cleanup routine for the driver.
*/
static void __exit stmmac_cleanup_module(void)
{
pci_unregister_driver(&stmmac_driver);
}
module_init(stmmac_init_module);
module_exit(stmmac_cleanup_module);
MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet PCI driver"); MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet PCI driver");
MODULE_AUTHOR("Rayagond Kokatanur <rayagond.kokatanur@vayavyalabs.com>"); MODULE_AUTHOR("Rayagond Kokatanur <rayagond.kokatanur@vayavyalabs.com>");
MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>"); MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>");
......
...@@ -255,7 +255,7 @@ static const struct of_device_id stmmac_dt_ids[] = { ...@@ -255,7 +255,7 @@ static const struct of_device_id stmmac_dt_ids[] = {
}; };
MODULE_DEVICE_TABLE(of, stmmac_dt_ids); MODULE_DEVICE_TABLE(of, stmmac_dt_ids);
static struct platform_driver stmmac_driver = { struct platform_driver stmmac_pltfr_driver = {
.probe = stmmac_pltfr_probe, .probe = stmmac_pltfr_probe,
.remove = stmmac_pltfr_remove, .remove = stmmac_pltfr_remove,
.driver = { .driver = {
...@@ -266,8 +266,6 @@ static struct platform_driver stmmac_driver = { ...@@ -266,8 +266,6 @@ static struct platform_driver stmmac_driver = {
}, },
}; };
module_platform_driver(stmmac_driver);
MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet PLATFORM driver"); MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet PLATFORM driver");
MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>"); MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>");
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment