------- 

ADM6996FC / ADM6996M switch chip driver


1. General information

  This driver supports the FC and M models only. The ADM6996F and L are
  completely different chips.
  
  Support for the FC model is extremely limited at the moment. There is no VLAN
  support as of yet. The driver will not offer an swconfig interface for the FC
  chip.
 
1.1 VLAN IDs

  It is possible to define 16 different VLANs. Every VLAN has an identifier, its
  VLAN ID. It is easiest if you use at most VLAN IDs 0-15. In that case, the
  swconfig based configuration is very straightforward. To define two VLANs with
  IDs 4 and 5, you can invoke, for example:
  
      # swconfig dev ethX vlan 4 set ports '0 1t 2 5t' 
      # swconfig dev ethX vlan 5 set ports '0t 1t 5t'
  
  The swconfig framework will automatically invoke 'port Y set pvid Z' for every
  port that is an untagged member of VLAN Y, setting its Primary VLAN ID. In
  this example, ports 0 and 2 would get "pvid 4". The Primary VLAN ID of a port
  is the VLAN ID associated with untagged packets coming in on that port.
  
  But if you wish to use VLAN IDs outside the range 0-15, this automatic
  behaviour of the swconfig framework becomes a problem. The 16 VLANs that
  swconfig can configure on the ADM6996 also have a "vid" setting. By default,
  this is the same as the number of the VLAN entry, to make the simple behaviour
  above possible. To still support a VLAN with a VLAN ID higher than 15
  (presumably because you are in a network where such VLAN IDs are already in
  use), you can change the "vid" setting of the VLAN to anything in the range
  0-1023. But suppose you did the following:
  
      # swconfig dev ethX vlan 0 set vid 998 
      # swconfig dev ethX vlan 0 set ports '0 2 5t'
 
  Now the swconfig framework will issue 'port 0 set pvid 0' and 'port 2 set pvid
  0'. But the "pvid" should be set to 998, so you are responsible for manually
  fixing this!

1.2 VLAN filtering

  The switch is configured to apply source port filtering. This means that
  packets are only accepted when the port the packets came in on is a member of
  the VLAN the packet should go to.

  Only membership of a VLAN is tested, it does not matter whether it is a tagged
  or untagged membership.

  For untagged packets, the destination VLAN is the Primary VLAN ID of the
  incoming port. So if the PVID of a port is 0, but that port is not a member of
  the VLAN with ID 0, this means that untagged packets on that port are dropped.
  This can be used as a roundabout way of dropping untagged packets from a port,
  a mode often referred to as "Admit only tagged packets".

1.3 Reset

  The two supported chip models do not have a sofware-initiated reset. When the
  driver is initialised, as well as when the 'reset' swconfig option is invoked,
  the driver will set those registers it knows about and supports to the correct
  default value. But there are a lot of registers in the chip that the driver
  does not support. If something changed those registers, invoking 'reset' or
  performing a warm reboot might still leave the chip in a "broken" state. Only
  a hardware reset will bring it back in the default state.

2. Technical details on PHYs and the ADM6996

  From the viewpoint of the Linux kernel, it is common that an Ethernet adapter
  can be seen as a separate MAC entity and a separate PHY entity. The PHY entity
  can be queried and set through registers accessible via an MDIO bus. A PHY
  normally has a single address on that bus, in the range 0 through 31.

  The ADM6996 has special-purpose registers in the range of PHYs 0 through 10.
  Even though all these registers control a single ADM6996 chip, the Linux
  kernel treats this as 11 separate PHYs.  The driver will bind to these
  addresses to prevent a different PHY driver from binding and corrupting these
  registers.

  What Linux sees as the PHY on address 0 is meant for the Ethernet MAC
  connected to the CPU port of the ADM6996 switch chip (port 5). This is the
  Ethernet MAC you will use to send and receive data through the switch.

  The PHYs at addresses 16 through 20 map to the PHYs on ports 0 through 4 of
  the switch chip. These can be accessed with the Generic PHY driver, as the
  registers have the common layout.

  If a second Ethernet MAC on your board is wired to the port 4 PHY, that MAC
  needs to bind to PHY address 20 for the port to work correctly.

  The ADM6996 switch driver will reset the ports 0 through 3 on startup and when
  'reset' is invoked. This could clash with a different PHY driver if the kernel
  binds a PHY driver to address 16 through 19.

  If Linux binds a PHY on addresses 1 through 10 to an Ethernet MAC, the ADM6996
  driver will simply always report a connected 100 Mbit/s full-duplex link for
  that PHY, and provide no other functionality. This is most likely not what you
  want. So if you see a message in your log

  	ethX: PHY overlaps ADM6996, providing fixed PHY yy.

  This is most likely an indication that ethX will not work properly, and your
  kernel needs to be configured to attach a different PHY to that Ethernet MAC.

  Controlling the mapping between MACs and PHYs is usually done in platform- or
  board-specific fixup code. The ADM6996 driver has no influence over this.
