• Alex Elder's avatar
    net: ipa: support enhanced channel flow control · fe68c43c
    Alex Elder authored
    IPA v4.2 introduced GSI channel flow control, used instead of IPA
    endpoint DELAY mode to prevent a TX channel from injecting packets
    into the IPA core.  It used a new FLOW_CONTROLLED channel state
    which could be entered using GSI generic commands.
    
    IPA v4.11 extended the channel flow control model.  Rather than
    having a distinct FLOW_CONTROLLED channel state, each channel has a
    "flow control" property that can be enabled or not--independent of
    the channel state.  The AP (or modem) can modify this property using
    the same GSI generic commands as before.
    
    The AP only uses channel flow control on modem TX channels, and only
    when recovering from a modem crash.  The AP has no way to discover
    the state of a modem channel, so the fact that (starting with IPA
    v4.11) flow control no longer uses a distinct channel state is
    invisible to the AP.  So enhanced flow control generally does not
    change the way AP uses flow control.
    
    There are a few small differences, however:
      - There is a notion of "primary" or "secondary" flow control, and
        when enabling or disabling flow control that must be specified
        in a new field in the GSI generic command register.  For now, we
        always specify 0 (meaning "primary").
      - When disabling flow control, it's possible a request will need
        to be retried.  We retry up to 5 times in this case.
      - Another new generic command allows the current flow control
        state to be queried.  We do not use this.
    
    Other than the need for retries, the code essentially works the same
    way as before.
    Signed-off-by: default avatarAlex Elder <elder@linaro.org>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    fe68c43c
gsi.c 65.9 KB