• Ansuel Smith's avatar
    net: dsa: qca8k: add support for mgmt read/write in Ethernet packet · 5950c7c0
    Ansuel Smith authored
    Add qca8k side support for mgmt read/write in Ethernet packet.
    qca8k supports some specially crafted Ethernet packet that can be used
    for mgmt read/write instead of the legacy method uart/internal mdio.
    This add support for the qca8k side to craft the packet and enqueue it.
    Each port and the qca8k_priv have a special struct to put data in it.
    The completion API is used to wait for the packet to be received back
    with the requested data.
    
    The various steps are:
    1. Craft the special packet with the qca hdr set to mgmt read/write
       mode.
    2. Set the lock in the dedicated mgmt struct.
    3. Increment the seq number and set it in the mgmt pkt
    4. Reinit the completion.
    5. Enqueue the packet.
    6. Wait the packet to be received.
    7. Use the data set by the tagger to complete the mdio operation.
    
    If the completion timeouts or the ack value is not true, the legacy
    mdio way is used.
    
    It has to be considered that in the initial setup mdio is still used and
    mdio is still used until DSA is ready to accept and tag packet.
    
    tag_proto_connect() is used to fill the required handler for the tagger
    to correctly parse and elaborate the special Ethernet mdio packet.
    
    Locking is added to qca8k_master_change() to make sure no mgmt Ethernet
    are in progress.
    Signed-off-by: default avatarAnsuel Smith <ansuelsmth@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    5950c7c0
qca8k.c 70.4 KB