• Martin Blumenstingl's avatar
    net: stmmac: dwmac-meson8b: add support for the RX delay configuration · 9308c476
    Martin Blumenstingl authored
    Configure the PRG_ETH0_ADJ_* bits to enable or disable the RX delay
    based on the various RGMII PHY modes. For now the only supported RX
    delay settings are:
    - disabled, use for example for phy-mode "rgmii-id"
    - 0ns - this is treated identical to "disabled", used for example on
      boards where the PHY provides 2ns TX delay and the PCB trace length
      already adds 2ns RX delay
    - 2ns - for whenever the PHY cannot add the RX delay and the traces on
      the PCB don't add any RX delay
    
    Disabling the RX delay (in case u-boot enables it, which is the case
    for example on Meson8b Odroid-C1) simply means that PRG_ETH0_ADJ_ENABLE,
    PRG_ETH0_ADJ_SETUP, PRG_ETH0_ADJ_DELAY and PRG_ETH0_ADJ_SKEW should be
    disabled (just disabling PRG_ETH0_ADJ_ENABLE may be enough, since that
    disables the whole re-timing logic - but I find it makes more sense to
    clear the other bits as well since they depend on that setting).
    
    u-boot on Odroid-C1 uses the following steps to enable a 2ns RX delay:
    - enabling enabling the timing adjustment clock
    - enabling the timing adjustment logic by setting PRG_ETH0_ADJ_ENABLE
    - setting the PRG_ETH0_ADJ_SETUP bit
    
    The documentation for the PRG_ETH0_ADJ_DELAY and PRG_ETH0_ADJ_SKEW
    registers indicates that we can even set different RX delays. However,
    I could not find out how this works exactly, so for now we only support
    a 2ns RX delay using the exact same way that Odroid-C1's u-boot does.
    Signed-off-by: default avatarMartin Blumenstingl <martin.blumenstingl@googlemail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    9308c476
dwmac-meson8b.c 13.5 KB