Skip to content

Commit

Permalink
cs89x0: rework driver configuration
Browse files Browse the repository at this point in the history
There are two drivers in the cs89x0 file, with the CONFIG_CS89x0_PLATFORM
symbol deciding which one is getting built. This is somewhat confusing
and makes it more likely ton configure a driver that works nowhere.

Split up the Kconfig option into separate ISA and PLATFORM drivers,
with the ISA symbol explicitly connecting to the static probing in
drivers/net/Space.c

The two drivers are still mutually incompatible at compile time,
which could be lifted by splitting them into multiple files,
but in practice this will make no difference.

The platform driver can now be enabled for compile-testing on
non-ARM machines.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
arndb authored and davem330 committed Aug 3, 2021
1 parent 8bbdf1b commit 47fd22f
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 26 deletions.
4 changes: 1 addition & 3 deletions drivers/net/Space.c
Original file line number Diff line number Diff line change
Expand Up @@ -77,11 +77,9 @@ static struct devprobe2 isa_probes[] __initdata = {
#ifdef CONFIG_SMC9194
{smc_init, 0},
#endif
#ifdef CONFIG_CS89x0
#ifndef CONFIG_CS89x0_PLATFORM
#ifdef CONFIG_CS89x0_ISA
{cs89x0_probe, 0},
#endif
#endif
#if defined(CONFIG_MVME16x_NET) || defined(CONFIG_BVME6000_NET) /* Intel */
{i82596_probe, 0}, /* I82596 */
#endif
Expand Down
26 changes: 16 additions & 10 deletions drivers/net/ethernet/cirrus/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
config NET_VENDOR_CIRRUS
bool "Cirrus devices"
default y
depends on ISA || EISA || ARM || MAC
depends on ISA || EISA || ARM || MAC || COMPILE_TEST
help
If you have a network (Ethernet) card belonging to this class, say Y.

Expand All @@ -18,9 +18,15 @@ config NET_VENDOR_CIRRUS
if NET_VENDOR_CIRRUS

config CS89x0
tristate "CS89x0 support"
depends on ISA || EISA || ARM
tristate

config CS89x0_ISA
tristate "CS89x0 ISA driver support"
depends on HAS_IOPORT_MAP
depends on ISA
depends on !PPC32
depends on CS89x0_PLATFORM=n
select CS89x0
help
Support for CS89x0 chipset based Ethernet cards. If you have a
network (Ethernet) card of this type, say Y and read the file
Expand All @@ -30,15 +36,15 @@ config CS89x0
will be called cs89x0.

config CS89x0_PLATFORM
bool "CS89x0 platform driver support" if HAS_IOPORT_MAP
default !HAS_IOPORT_MAP
depends on CS89x0
tristate "CS89x0 platform driver support"
depends on ARM || COMPILE_TEST
select CS89x0
help
Say Y to compile the cs89x0 driver as a platform driver. This
makes this driver suitable for use on certain evaluation boards
such as the iMX21ADS.
Say Y to compile the cs89x0 platform driver. This makes this driver
suitable for use on certain evaluation boards such as the iMX21ADS.

If you are unsure, say N.
To compile this driver as a module, choose M here. The module
will be called cs89x0.

config EP93XX_ETH
tristate "EP93xx Ethernet support"
Expand Down
24 changes: 11 additions & 13 deletions drivers/net/ethernet/cirrus/cs89x0.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ static char version[] __initdata =
* them to system IRQ numbers. This mapping is card specific and is set to
* the configuration of the Cirrus Eval board for this chip.
*/
#ifndef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_ISA)
static unsigned int netcard_portlist[] __used __initdata = {
0x300, 0x320, 0x340, 0x360, 0x200, 0x220, 0x240,
0x260, 0x280, 0x2a0, 0x2c0, 0x2e0, 0
Expand Down Expand Up @@ -292,7 +292,7 @@ write_irq(struct net_device *dev, int chip_type, int irq)
int i;

if (chip_type == CS8900) {
#ifndef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_ISA)
/* Search the mapping table for the corresponding IRQ pin. */
for (i = 0; i != ARRAY_SIZE(cs8900_irq_map); i++)
if (cs8900_irq_map[i] == irq)
Expand Down Expand Up @@ -859,7 +859,7 @@ net_open(struct net_device *dev)
goto bad_out;
}
} else {
#if !defined(CONFIG_CS89x0_PLATFORM)
#if IS_ENABLED(CONFIG_CS89x0_ISA)
if (((1 << dev->irq) & lp->irq_map) == 0) {
pr_err("%s: IRQ %d is not in our map of allowable IRQs, which is %x\n",
dev->name, dev->irq, lp->irq_map);
Expand Down Expand Up @@ -1523,7 +1523,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
dev->irq = i;
} else {
i = lp->isa_config & INT_NO_MASK;
#ifndef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_ISA)
if (lp->chip_type == CS8900) {
/* Translate the IRQ using the IRQ mapping table. */
if (i >= ARRAY_SIZE(cs8900_irq_map))
Expand Down Expand Up @@ -1576,7 +1576,7 @@ cs89x0_probe1(struct net_device *dev, void __iomem *ioaddr, int modular)
return retval;
}

#ifndef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_ISA)
/*
* This function converts the I/O port address used by the cs89x0_probe() and
* init_module() functions to the I/O memory address used by the
Expand Down Expand Up @@ -1682,11 +1682,7 @@ struct net_device * __init cs89x0_probe(int unit)
pr_warn("no cs8900 or cs8920 detected. Be sure to disable PnP with SETUP\n");
return ERR_PTR(err);
}
#endif
#endif

#if defined(MODULE) && !defined(CONFIG_CS89x0_PLATFORM)

#else
static struct net_device *dev_cs89x0;

/* Support the 'debug' module parm even if we're compiled for non-debug to
Expand Down Expand Up @@ -1759,7 +1755,7 @@ MODULE_LICENSE("GPL");

int __init init_module(void)
{
struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
struct net_device *dev;
struct net_local *lp;
int ret = 0;

Expand All @@ -1768,6 +1764,7 @@ int __init init_module(void)
#else
debug = 0;
#endif
dev = alloc_etherdev(sizeof(struct net_local));
if (!dev)
return -ENOMEM;

Expand Down Expand Up @@ -1838,9 +1835,10 @@ cleanup_module(void)
release_region(dev_cs89x0->base_addr, NETCARD_IO_EXTENT);
free_netdev(dev_cs89x0);
}
#endif /* MODULE && !CONFIG_CS89x0_PLATFORM */
#endif /* MODULE */
#endif /* CONFIG_CS89x0_ISA */

#ifdef CONFIG_CS89x0_PLATFORM
#if IS_ENABLED(CONFIG_CS89x0_PLATFORM)
static int __init cs89x0_platform_probe(struct platform_device *pdev)
{
struct net_device *dev = alloc_etherdev(sizeof(struct net_local));
Expand Down

0 comments on commit 47fd22f

Please sign in to comment.