tech-net archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: ep driver
On Mon, 28 Jun 2021 16:32:48 +0900, Masanobu SAITOH wrote:
> Hi.
>
> On 2021/06/27 20:49, Rin Okuyama wrote:
>> Hi,
>>
>> On 2021/06/27 19:44, T wrote:
>>> Hi,
>>> I have recently upgraded a NetBSD/prep machine from 8.1 to 9.2 and the
>>> ep NIC no longer seems to work after the upgrade, it worked in
>>> previous 7 and 8 versions. The NIC is a 3Com 3c515-TX (ISA 10/100).
>>> Here are a few dmesg segments from different kernel versions for this
>>> card:
>>>
>>> For 7.1.1_PATCH:
>>> isapnp0: read port 0x203 ep0 at isapnp0 port 0x280/32 irq 5 drq 3 ep0:
>>> 3Com Fast EtherLink ISA ep0: address xx:xx:xx:xx:xx:xx, 64KB word-wide
>>> FIFO, 1:1 Rx:Tx split ukphy1 at ep0 phy 24: OUI 0x1000e8, model
>>> 0x0000, rev. 1 ukphy1: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX,
>>> auto vmmask 73000000 schedmask 73000000 highmask 7f000000
>>>
>>>
>>> For 8.1:
>>> isapnp0: read port 0x203 ...
>>> ep0 at isapnp0 port 0x280/32 irq 11 drq 3 3Com Fast EtherLink ISA ep0:
>>> address xx:xx:xx:xx:xx:xx, 64KB word-wide FIFO, 1:1 Rx:Tx split nsphy0
>>> at ep0 phy 24: DP83840 10/100 media interface, rev. 1 nsphy0: 10baseT,
>>> 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto vmmask 71400000 schedmask
>>> 71c00000 highmask 7fc00000
>>>
>>>
>>> For 9.2:
>>>
>>> [ 1.000000] isapnp0: read port 0x203 [ 1.000000] ep0 at
>>> isapnp0 port 0x280/32 irq 5 drq 3 [ 1.000000] 3Com Fast EtherLink
>>> ISA [ 1.000000] ep0: autoconfiguration error: wrote 0x7ff to
>>> TX_AVAIL_THRESH, read back 0x0. Interface disabled [ 1.000000]
>>> vmmask 73000000 schedmask 73000000 highmask 7f000000
>>>
>>> The error message originates from line 382 in this file:
>>> http://cvsweb.netbsd.org/bsdweb.cgi/src/sys/dev/ic/elink3.c?
>>> annotate=1.152&only_with_tag=MAIN
>>>
>>> and figure something happened between these two revisions:
>>> --- src/sys/dev/ic/elink3.c 2018/07/26 23:55:29 1.140.8.1
>>> netbsd-8-1-RELEASE +++ src/sys/dev/ic/elink3.c 2019/05/29
>>> 06:17:28 1.149 netbsd-9-2-
>>> RELEASE
>>>
>>> Does anyone have any idea what's going on here?
>>>
>>>
>> A variant of ep(4) for PCMCIA works just fine for amiga:
>>
>> ---
>> NetBSD 9.99.85 (A1200_WSCONS) #14: Wed Jun 16 07:44:49 JST 2021
>> rin@latipes:/sys/arch/amiga/compile/A1200_WSCONS
>> ...
>> pcmcia0 at pccard0 ep0 at pcmcia0 function 0: <3Com, Megahertz 589E,
>> TP/BNC LAN PC Card, 005>
>> ep0: address 00:50:04:cc:ee:7e, 8KB byte-wide FIFO, 5:3 Rx:Tx split
>> ep0: 10baseT, 10base5, 10base2 (default 10baseT)
>> ---
>>
>> This model does not have MII, and it seems that differences b/w
>> netbsd-8 and -9 are mostly in MII part.
>>
>> Saitoh-san, do you have any idea?
>>
>> Thanks,
>> rin
>
> isapnp/if_ep_isapnp.c
> both 8.1 and 9.2 have rev. 1.35
> ic/elink3reg.h
> both 8.1 and 9.2 have rev. 1.31
> ic/elink3var.h
> both 8.1 and 9.2 have rev. 1.39
>
> In isapnp/if_ep_isapnp.c: -------------------------------------------
> void ep_isapnp_attach(device_t parent, device_t self, void *aux)
> {
> struct ep_softc *sc = device_private(self);
> struct isapnp_attach_args *ipa = aux;
> int chipset;
>
> aprint_naive("\n");
> aprint_normal("\n");
>
> sc->sc_dev = self;
> if (isapnp_config(ipa->ipa_iot, ipa->ipa_memt, ipa)) {
> aprint_error_dev(sc->sc_dev, "error in region
allocation\n");
> return;
> }
>
> aprint_normal("%s %s\n", ipa->ipa_devident, ipa->ipa_devclass);
>
> sc->sc_iot = ipa->ipa_iot;
> sc->sc_ioh = ipa->ipa_io[0].h;
> sc->bustype = ELINK_BUS_ISA;
>
> sc->sc_ih = isa_intr_establish(ipa->ipa_ic, ipa->ipa_irq[0].num,
> ipa->ipa_irq[0].type, IPL_NET, epintr, sc);
>
> sc->enable = NULL;
> sc->disable = NULL;
> sc->enabled = 1;
>
> if (strcmp(ipa->ipa_devlogic, "TCM5051") == 0) {
> /* 3c515 */
> chipset = ELINK_CHIPSET_CORKSCREW;
> } else {
> /* 3c509 */
> chipset = ELINK_CHIPSET_3C509;
> }
>
> epconfig(sc, chipset, NULL);
> }
> -------------------------------------------
> Nothing special.
>
> epconfig() in elink3.c is: -------------------------------------------
> /*
> * Back-end attach and configure.
> */
> int epconfig(struct ep_softc *sc, u_short chipset, u_int8_t *enaddr)
> {
> struct ifnet *ifp = &sc->sc_ethercom.ec_if;
> bus_space_tag_t iot = sc->sc_iot;
> bus_space_handle_t ioh = sc->sc_ioh;
> struct mii_data *mii = &sc->sc_mii;
> u_int16_t i;
> u_int8_t myla[ETHER_ADDR_LEN];
>
> callout_init(&sc->sc_mii_callout, 0);
> callout_setfunc(&sc->sc_mii_callout, ep_tick, sc);
>
> callout_init(&sc->sc_mbuf_callout, 0);
> callout_setfunc(&sc->sc_mbuf_callout, epmbuffill, sc);
>
> sc->ep_chipset = chipset;
>
> /*
> * We could have been groveling around in other register *
windows in
> the front-end; make sure we're in window 0 * to read the EEPROM.
> */
> GO_WINDOW(0);
>
> if (enaddr == NULL) {
> /*
> * Read the station address from the eeprom.
> */
> for (i = 0; i < ETHER_ADDR_LEN / 2; i++) {
> u_int16_t x = ep_read_eeprom(sc, i);
> myla[(i << 1)] = x >> 8;
> myla[(i << 1) + 1] = x;
> }
> enaddr = myla;
> }
>
> /*
> * Vortex-based (3c59x pci,eisa) and Boomerang (3c900) cards *
allow
> FDDI-sized (4500) byte packets. Commands only take an * 11-bit
> parameter, and 11 bits isn't enough to hold a full-size * packet
> length.
> * Commands to these cards implicitly upshift a packet size * or
> threshold by 2 bits.
> * To detect cards with large-packet support, we probe by
setting *
> the transmit threshold register, then change windows and * read
back
> the threshold register directly, and see if the * threshold
value was
> shifted or not.
> */
> bus_space_write_2(iot, ioh, ELINK_COMMAND,
> SET_TX_AVAIL_THRESH | ELINK_LARGEWIN_PROBE);
> GO_WINDOW(5);
> i = bus_space_read_2(iot, ioh, ELINK_W5_TX_AVAIL_THRESH);
GO_WINDOW(1);
> switch (i) {
> case ELINK_LARGEWIN_PROBE:
> case (ELINK_LARGEWIN_PROBE & ELINK_LARGEWIN_MASK):
> sc->ep_pktlenshift = 0;
> break;
>
> case (ELINK_LARGEWIN_PROBE << 2):
> sc->ep_pktlenshift = 2;
> break;
>
> default:
> aprint_error_dev(sc->sc_dev,
> "wrote 0x%x to TX_AVAIL_THRESH, read back 0x%x. "
> "Interface disabled\n",
> ELINK_LARGEWIN_PROBE, (int) i);
> return (1);
> }
> -------------------------------------------
>
> 0) GO_WINDOW(0)
> 1) read mac address 2) write ELINK_COMMAND 3) GO_WINDOW(5)
> 4) read ELINK_W5_TX_AVAIL_THRESH (***)
> 5) GO_WINDOW(1)
>
> and a read value of ELINK_W5_TX_AVAIL_THRESH in "4)" was incorrect.
> Has the bus_space_read*() problem in isapnp(4)?
>
> I think it would worth to see if the read value
> of the MAC address correct. Could you try it?
Hello,
I applied the following patch to the file and recompiled. It did indeed read,
and print, the same MAC address as in dmesg from prior released versions.
--------------------------------------------------------------------------------
--- /usr/src/sys/dev/ic/elink3.c.orig 2020-03-19 16:35:52.000000000 -0600
+++ /usr/src/sys/dev/ic/elink3.c 2021-06-28 15:46:39.069734750 -0600
@@ -345,6 +345,12 @@
myla[(i << 1) + 1] = x;
}
enaddr = myla;
+ printf("eeprom enaddr: ");
+ for (i = 0; i < ETHER_ADDR_LEN; i++)
+ if (i < ETHER_ADDR_LEN - 1)
+ printf("%x:", myla[i]);
+ else
+ printf("%x\n", myla[i]);
}
/*
--------------------------------------------------------------------------------
One thing to note, I originally tried using the INSTALL_SMALL kernel (with
mkbootimage), and loaded using netbooting over tftp, but the ep device gave this
error: ignoring resource conflict
https://nxr.netbsd.org/xref/src/sys/dev/isapnp/isapnp.c#983
It could be an unrelated issue, it did not occur when booting the GENERIC
(secondary) kernel from boot().
The relevant output with 'options DEBUG_ISAPNP' for GENERIC kernel:
[ 1.000000] isapnp0 at isa0 port 0x279
[ 1.000000] attimer0: attached to pcppi0
[ 1.000000] isapnp0: Trying port 203isapnp0: read port 0x203
[ 1.000000] PnP version 1.0, Vendor version 1.0
[ 1.000000] ANSI Ident: 3Com Fast EtherLink ISA
[ 1.000000] Logical device id TCM5051
[ 1.000000] IRQ's supported: 3 5 7 9 10 11 12 15 E+
[ 1.000000] DRQ's supported: 3 5 6 7 Width: 16-bit Speed: compat Attributes:
bus master
[ 1.000000] 32 IO Ports: 10 address bits, alignment 32 min 0x280, max 0x3e0
[ 1.000000] Selecting attachments
[ 1.000000] Found <3Com Fast EtherLink ISA, TCM5051, , > config: acceptable
[ 1.000000] 32 IO Ports: 10 address bits, alignment 32 min 0x280, max 0x3e0
[ 1.000000] IRQ's supported: 3 5 7 9 10 11 12 15 E+
[ 1.000000] DRQ's supported: 3 5 6 7 Width: 16-bit Speed: compat Attributes:
bus master
[ 1.000000] Register configuration:
[ 1.000000] io[0]: 0x280/0
[ 1.000000] irq[0]: 5
[ 1.000000] drq[0]: 3
[ 1.000000] isapnp0: configuring <3Com Fast EtherLink ISA, TCM5051, , >
[ 1.000000] ep0 at isapnp0 port 0x280/32 irq 5 drq 3
[ 1.000000] Found <3Com Fast EtherLink ISA, TCM5051, , > config: acceptable
[ 1.000000] 32 IO Ports: 10 address bits, alignment 32 min 0x280, max 0x3e0
[ 1.000000] IRQ's supported: 3 5 7 9 10 11 12 15 E+
[ 1.000000] DRQ's supported: 3 5 6 7 Width: 16-bit Speed: compat Attributes:
bus master
[ 1.000000] 3Com Fast EtherLink ISA
[ 1.000000] eeprom enaddr: 0:10:4b:28:76:c8
[ 1.000000] ep0: autoconfiguration error: wrote 0x7ff to TX_AVAIL_THRESH,
read back 0x0. Interface disabled
[ 1.000000] vmmask 73000000 schedmask 73000000 highmask 7f000000
Home |
Main Index |
Thread Index |
Old Index