Re: [PATCH RFC 2/2] net/8390: apne.c - add 100 Mbit support to apne.c driver

Michael Schmitz
2021-06-07T08:41:03Z

Hi Geert,

Am 07.06.2021 um 20:08 schrieb Geert Uytterhoeven:
> Hi Michael,
>
> On Sun, Jun 6, 2021 at 7:54 AM Michael Schmitz <schmitzmic@gmail.com> wrote:
>> Add Kconfig option, 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. Additional code to
>> reset the PCMCIA hardware is also added to the driver probe.
>>
>> Patch modified after patch "[PATCH RFC net-next] Amiga PCMCIA
>> 100 MBit card support" submitted to netdev 2018/09/16 by Alex
>> Kazik <alex@kazik.de>.
>>
>> Signed-off-by: Michael Schmitz <schmitzmic@gmail.com>
>
> Thanks for your patch!
>
>> --- a/drivers/net/ethernet/8390/Kconfig
>> +++ b/drivers/net/ethernet/8390/Kconfig
>> @@ -143,6 +143,19 @@ config APNE
>> To compile this driver as a module, choose M here: the module
>> will be called apne.
>>
>> +if APNE
>
> Please use "depends on APNE" instead of an if/endif block, as there's
> only a single symbol to cover.

True - I had copied that straight from Alex' patch ..

>
>> +config APNE100MBIT
>> + bool "PCMCIA NE2000 100MBit support"
>> + default n
>> + ---help---
>> + This changes the driver to support 10/100Mbit cards (e.g. Netgear
>> + FA411, CNet Singlepoint). 10 MBit cards and 100 MBit cards are
>> + supported by the same driver.
>> +
>> + To activate 100 Mbit support at runtime, use the apne100 module
>> + parameter.
>
> Trailing space.

And ---help--- did confuse kbuild, as I found out.

>> +endif
>> +
>> 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..9648e45 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 u32 apne_100_mbit;
>> +module_param_named(apne_100_mbit, uint, 0);
>> +MODULE_PARM_DESC(apne_100_mbit, "Enable 100 Mbit support");
>
> Shouldn't this depend on CONFIG_APNE100MBIT, too?
> Perhaps we shouldn't bother with the config symbol, and include this
> unconditionally?

At least the parameter should not hurt - this is entirely untested so
I'd hate to break APNE by including the io_mm.h changes unconditionally.

>> +
>> struct net_device * __init apne_probe(int unit)
>> {
>> struct net_device *dev;
>> @@ -139,6 +143,9 @@ struct net_device * __init apne_probe(int unit)
>> if ( !(AMIGAHW_PRESENT(PCMCIA)) )
>> return ERR_PTR(-ENODEV);
>>
>> + if (apne_100_mbit)
>> + isa_type = ISA_TYPE_AG100;
>
> Likewise.

And that one breaks if 16 bit support isn't always enabled. I'll
conditionalize it.

> Can we enable this automatically when needed, based on the chip
> detected?

I wondered about that - we'd have to poke the chip with 16 bit IO if 8
bit IO fails, no idea what side effects that would have.

Maybe retrying the card reset in apne_probe1 again after changing
isa_type would work, but someone would have to try that and report back.

> + spaces instead of TABs (scripts/checkpatch.pl is your friend).

Thanks, I'll fix that. Got sloppy with checkpatch, sorry.

>
>> +
>> pr_info("Looking for PCMCIA ethernet card : ");
>>
>> /* check if a card is inserted */
>> @@ -590,6 +597,16 @@ static int init_pcmcia(void)
>> #endif
>> u_long offset;
>>
>> +#ifdef CONFIG_APNE100MBIT
>> + /* reset card (idea taken from CardReset by Artur Pogoda) */
>> + {
>> + u_char tmp = gayle.intreq;
>> +
>> + gayle.intreq = 0xff; mdelay(1);
>> + gayle.intreq = tmp; mdelay(300);
>> + }
>
> Is this safe for all cards?

I _think_ so, but this really is a question for Alex and others involved
in developing the original patch. (The original patch had that
conditionalized as well so I might be wrong ...)

I'll send v2 once I've fixed these all up...

Cheers,

Michael

>> +#endif
>> +
>> pcmcia_reset();
>> pcmcia_program_voltage(PCMCIA_0V);
>> pcmcia_access_speed(PCMCIA_SPEED_250NS);
>
> Gr{oetje,eeting}s,
>
> Geert
>