Skip to content
  • Vivien Didelot's avatar
    net: dsa: mv88e6xxx: add port's MAC speed setter · 96a2b40c
    Vivien Didelot authored
    
    
    While the two bits for link, duplex or RGMII delays are used the same
    way on chips supporting the said feature, the two bits for speed have
    different meaning for most of the chips out there.
    
    Speed value is stored in bits 1:0, 0x3 means unforce (normal detection).
    
    Some chips reuse values for alternative speeds when bit 12 is set.
    
    Newer chips with speed > 1Gbps reuse value 0x3 thus need a new bit 13.
    
    Here are the values to write in register 0x1 to (un)force speed:
    
        | Speed   | 88E6065 | 88E6185 | 88E6352 | 88E6390 | 88E6390X |
        | ------- | ------- | ------- | ------- | ------- | -------- |
        | 10      | 0x0000  | 0x0000  | 0x0000  | 0x2000  | 0x2000   |
        | 100     | 0x0001  | 0x0001  | 0x0001  | 0x2001  | 0x2001   |
        | 200     | 0x0002  | NA      | 0x1001  | 0x3001  | 0x3001   |
        | 1000    | NA      | 0x0002  | 0x0002  | 0x2002  | 0x2002   |
        | 2500    | NA      | NA      | NA      | 0x3003  | 0x3003   |
        | 10000   | NA      | NA      | NA      | NA      | 0x2003   |
        | unforce | 0x0003  | 0x0003  | 0x0003  | 0x0000  | 0x0000   |
    
    This patch implements a generic mv88e6xxx_port_set_speed() function used
    by chip-specific wrappers to filter supported ports and speeds.
    
    Signed-off-by: default avatarVivien Didelot <vivien.didelot@savoirfairelinux.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    96a2b40c