Add module parameter and PCMCIA reset code required to support 100 Mbit PCMCIA ethernet cards on Amiga. 10 Mbit and 100 Mbit mode are supported by the same module. A module parameter switches Amiga ISA IO accessors to word access by changing isa_type at runtime. Code to reset the PCMCIA hardware required for 16 bit cards is also added to the driver probe. This patch depends on patch "m68k: io_mm.h - add APNE 100 MBit support" sent to linux-m68k, and must not be applied before that one! Patch modified after patch "[PATCH RFC net-next] Amiga PCMCIA 100 MBit card support" submitted to netdev 2018/09/16 by Alex Kazik <alex@xxxxxxxx>. CC: netdev@xxxxxxxxxxxxxxx Link: https://lore.kernel.org/r/1622958877-2026-1-git-send-email-schmitzmic@xxxxxxxxx Tested-by: Alex Kazik <alex@xxxxxxxx> Signed-off-by: Michael Schmitz <schmitzmic@xxxxxxxxx> -- Changes from v5: - move autoprobe code to new patch in this series Geert Uytterhoeven: - reword Kconfig help text Finn Thain: - style fixes, use msec_to_jiffies in timeout calc Alex Kazik: - revert module parameter permission change Changes from v4: Geert Uytterhoeven: - remove APNE100MBIT config option, always include 16 bit support - change module parameter permissions - try autoprobing for 16 bit mode early on in device probe Changes from v3: - change module parameter name to match Kconfig help Finn Thain: - fix coding style in new card reset code block - allow reset of isa_type by module parameter Changes from v1: - fix module parameter name in Kconfig help text Alex Kazik: - change module parameter type to bool, fix module parameter permission Changes from RFC: Geert Uytterhoeven: - change APNE_100MBIT to depend on APNE - change '---help---' to 'help' (former no longer supported) - fix whitespace errors - fix module_param_named() arg count - protect all added code by #ifdef CONFIG_APNE_100MBIT --- drivers/net/ethernet/8390/Kconfig | 5 +++++ drivers/net/ethernet/8390/apne.c | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/drivers/net/ethernet/8390/Kconfig b/drivers/net/ethernet/8390/Kconfig index 9f4b302..4c3f7b6 100644 --- a/drivers/net/ethernet/8390/Kconfig +++ b/drivers/net/ethernet/8390/Kconfig @@ -143,6 +143,11 @@ config APNE To compile this driver as a module, choose M here: the module will be called apne. + The driver also supports 10/100Mbit cards (e.g. Netgear FA411, + CNet Singlepoint). To activate 100 Mbit support, use the kernel + option apne.100mbit=1 (builtin) at boot time, or the apne.100mbit + module parameter. + config PCMCIA_PCNET tristate "NE2000 compatible PCMCIA support" depends on PCMCIA diff --git a/drivers/net/ethernet/8390/apne.c b/drivers/net/ethernet/8390/apne.c index fe6c834..4dd721e 100644 --- a/drivers/net/ethernet/8390/apne.c +++ b/drivers/net/ethernet/8390/apne.c @@ -120,6 +120,10 @@ static u32 apne_msg_enable; module_param_named(msg_enable, apne_msg_enable, uint, 0444); MODULE_PARM_DESC(msg_enable, "Debug message level (see linux/netdevice.h for bitmap)"); +static bool apne_100_mbit; +module_param_named(100_mbit, apne_100_mbit, bool, 0444); +MODULE_PARM_DESC(100_mbit, "Enable 100 Mbit support"); + struct net_device * __init apne_probe(int unit) { struct net_device *dev; @@ -139,6 +143,11 @@ struct net_device * __init apne_probe(int unit) if ( !(AMIGAHW_PRESENT(PCMCIA)) ) return ERR_PTR(-ENODEV); + if (apne_100_mbit) + isa_type = ISA_TYPE_AG16; + else + isa_type = ISA_TYPE_AG; + pr_info("Looking for PCMCIA ethernet card : "); /* check if a card is inserted */ @@ -590,6 +599,15 @@ static int init_pcmcia(void) #endif u_long offset; + /* reset card (idea taken from CardReset by Artur Pogoda) */ + if (isa_type == ISA_TYPE_AG16) { + u_char tmp = gayle.intreq; + gayle.intreq = 0xff; + mdelay(1); + gayle.intreq = tmp; + mdelay(300); + } + pcmcia_reset(); pcmcia_program_voltage(PCMCIA_0V); pcmcia_access_speed(PCMCIA_SPEED_250NS); -- 2.7.4