Bug 27995

Summary: [if_pcn] src/sys/pci if_pcn.c revision 1.21 resp. 1.5.2.7 breaks pcn device on HP Vectra
Product: Base System Reporter: send-pr <send-pr>
Component: kernAssignee: freebsd-bugs (Nobody) <bugs>
Status: Closed FIXED    
Severity: Affects Only Me    
Priority: Normal    
Version: 4.3-STABLE   
Hardware: Any   
OS: Any   

Description send-pr 2001-06-09 21:50:00 UTC
The commits for these revisions properly turned on autonegotiation
handling through miibus and disabled the PHY's autonegotiation.
Unfortunately miibus autoneg handling doesn't work on this Vectra:

During device probe the nsphy says "no media present" if *anything* is
connected to either the 10 or the 100 port. Workaround: disconnect from
the hub/switch during boot. This is probably kern/25959.

Before the commit the PHY was doing autoneg. This led to the strange
effect that a 10BaseT hub on the "100" Port worked fine (but not on the
"10" port).

After this commit miibus is responsible for autonegotiation. This
doesn't work at all. The "10" port doesn't, and the "100" port doesn't
either. While with the hub at the "10" port the link is down (which the
hub doesn't grok, as it sees it link up), at the "100" port the link is
up but no packets get transmitted. Seems that the MII autonegotiation
stuff is broken. The pcn device is just unusable now.
Comment 1 lists 2005-02-15 00:29:58 UTC
Hello,

following up on non-closed PRs.

| The commits for these revisions properly turned on autonegotiation
| handling through miibus and disabled the PHY's autonegotiation.
| Unfortunately miibus autoneg handling doesn't work on this Vectra:

This seems rather ancient now, does that problem still persist?

Regards,
Mario
Comment 2 Mark Linimon freebsd_committer freebsd_triage 2005-09-14 00:07:06 UTC
State Changed
From-To: open->closed

Feedback timeout (> 6 months).
Comment 3 dfilter service freebsd_committer freebsd_triage 2006-11-28 05:35:50 UTC
marius      2006-11-28 01:33:18 UTC

  FreeBSD src repository

  Modified files:
    sys/pci              if_pcn.c if_pcnreg.h 
  Log:
  - Clear the PCN_MISC_ASEL bit so the media port can be actually set
    via the PCN_CSR_MODE register. Along with sys/dev/mii/nsphy.c 1.26
    this fixes the case of certain Am79c971-based HP cards and on-board
    ones in IBM machines reporting link but not actually passing any
    traffic. [1]
  - Add support for the internal 10baseT PHY, which actually is used on
    at least said HP cards (together with an external DP83840A in a
    multiple PHYs configuration). With cards that don't make use of this
    internal PHY it'll also show up in FreeBSD but not cause any harm.
    This is still missing support for multiple PHYs configuration using
    the internal 100baseTX and/or HomePNA PHYs together with external
    PHYs or multiple external PHYs though.
  - In pcn_ifmedia_upd() call pcn_reset() as otherwise the Am79C971 of
    at least said HP cards can wedge when switching from the internal
    10baseT PHY to the external PHY. This means that we need to also
    initialize and possibly start the chip again in pcn_ifmedia_upd(),
    which isn't that bad though as for setting the media port the chip
    has to be powered down or stopped anyway and unlike documented
    doesn't take effect until the next initialization.
  
  PR:             27995, 25959, 72966 (likely) [1]
  MFC after:      2 weeks
  
  Revision  Changes    Path
  1.81      +66 -12    src/sys/pci/if_pcn.c
  1.15      +8 -4      src/sys/pci/if_pcnreg.h
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
Comment 4 dfilter service freebsd_committer freebsd_triage 2007-02-25 19:02:08 UTC
marius      2007-02-25 19:02:01 UTC

  FreeBSD src repository

  Modified files:        (Branch: RELENG_6)
    sys/pci              if_pcn.c if_pcnreg.h 
  Log:
  MFC: if_pcn.c 1.76, 1.81, 1.82; if_pcnreg.h 1.15
  
  - In detach method, move if_free() after bus_teardown_intr().
  - Clear the PCN_MISC_ASEL bit so the media port can be actually set
    via the PCN_CSR_MODE register. Along with sys/dev/mii/nsphy.c 1.23.2.3
    this fixes the case of certain Am79c971-based HP cards and on-board
    ones in IBM machines reporting link but not actually passing any
    traffic. [1]
  - Add support for the internal 10baseT PHY, which actually is used on
    at least said HP cards (together with an external DP83840A in a
    multiple PHYs configuration). With cards that don't make use of this
    internal PHY it'll also show up in FreeBSD but not cause any harm.
    This is still missing support for multiple PHYs configuration using
    the internal 100baseTX and/or HomePNA PHYs together with external
    PHYs or multiple external PHYs though.
  - Allow multiple (external) PHYs with Am79C97{2,6}, which actually
    only support external PHYs (besides not connectable internal ones
    which respond at the usual addresses, but which don't hurt if we
    let them show up) and don't wedge when isolating PHYs. Actually,
    this change special cases limiting PHYs to Am79C97{3,5,8}, for
    which this driver doesn't implement swiching between the internal
    and external PHYs, yet, and Am79C971, where isolating the external
    PHY (at least in case it's a DP83840A) wedges the chip. Together
    with sys/dev/mii/acphy.c rev. 1.16.2.5 this adds support for the
    100baseFX port of AT-2700 series adaptors, which use two AC101,
    one for the copper and one for the fibre port (there might be
    variants which only use one PHY though).
  - In pcn_ifmedia_upd() call pcn_reset() as otherwise the Am79C971 of
    at least said HP cards can wedge when switching from the internal
    10baseT PHY to the external PHY. This means that we need to also
    initialize and possibly start the chip again in pcn_ifmedia_upd(),
    which isn't that bad though as for setting the media port the chip
    has to be powered down or stopped anyway and unlike documented
    doesn't take effect until the next initialization.
  - Don't bother to set if_mtu to ETHERMTU, ether_ifattach() does that.
  
  PR:             27995, 25959, 72966 (likely) [1]
  
  Revision  Changes    Path
  1.69.2.7  +80 -15    src/sys/pci/if_pcn.c
  1.11.2.3  +8 -4      src/sys/pci/if_pcnreg.h
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"