• Alex Elder's avatar
    net: ipa: signal when tag transfer completes · 51c48ce2
    Alex Elder authored
    There are times, such as when the modem crashes, when we issue
    commands to clear the IPA hardware pipeline.  These commands include
    a data transfer command that delivers a small packet directly to the
    default (AP<-LAN RX) endpoint.
    
    The places that do this wait for the transactions that contain these
    commands to complete, but the pipeline can't be assumed clear until
    the sent packet has been *received*.
    
    The small transfer will be delivered with a status structure, and
    that status will indicate its tag is valid.  This is the only place
    we send a tagged packet, so we use the tag to determine when the
    pipeline clear packet has arrived.
    
    Add a completion to the IPA structure to to be used to signal
    the receipt of a pipeline clear packet.  Create a new function
    ipa_cmd_pipeline_clear_wait() that will wait for that completion.
    
    Reinitialize the completion whenever pipeline clear commands are
    added to a transaction.  Extend ipa_endpoint_status_tag() to check
    whether a packet whose status contains a valid tag was sent from the
    AP->command TX endpoint, and if so, signal the new IPA completion.
    
    Have all callers of ipa_cmd_pipeline_clear_add() wait for the
    pipeline clear indication after the transaction that clears the
    pipeline has completed.
    Signed-off-by: default avatarAlex Elder <elder@linaro.org>
    Acked-by: default avatarWillem de Bruijn <willemb@google.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    51c48ce2
ipa_main.c 28.2 KB