lkml.org 
[lkml]   [2021]   [Mar]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.11 484/775] soundwire: cadence: fix ACK/NAK handling
    Date
    From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>

    [ Upstream commit db9d9f944f95e7f3aa60ac00cbd502415152c421 ]

    The existing code reports a NAK only when ACK=0
    This is not aligned with the SoundWire 1.x specifications.

    Table 32 in the SoundWire 1.2 specification shows that a Device shall
    not set NAK=1 if ACK=1. But Table 33 shows the Combined Response
    may very well be NAK=1/ACK=1, e.g. if another Device than the one
    addressed reports a parity error.

    NAK=1 signals a 'Command_Aborted', regardless of the ACK bit value.

    Move the tests for NAK so that the NAK=1/ACK=1 combination is properly
    detected according to the specification.

    Fixes: 956baa1992f9a ('soundwire: cdns: Add sdw_master_ops and IO transfer support')
    Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
    Link: https://lore.kernel.org/r/20210115053738.22630-5-yung-chuan.liao@linux.intel.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/soundwire/cadence_master.c | 8 ++++----
    1 file changed, 4 insertions(+), 4 deletions(-)

    diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c
    index 9fa55164354a2..580660599f461 100644
    --- a/drivers/soundwire/cadence_master.c
    +++ b/drivers/soundwire/cadence_master.c
    @@ -484,10 +484,10 @@ cdns_fill_msg_resp(struct sdw_cdns *cdns,
    if (!(cdns->response_buf[i] & CDNS_MCP_RESP_ACK)) {
    no_ack = 1;
    dev_dbg_ratelimited(cdns->dev, "Msg Ack not received\n");
    - if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) {
    - nack = 1;
    - dev_err_ratelimited(cdns->dev, "Msg NACK received\n");
    - }
    + }
    + if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) {
    + nack = 1;
    + dev_err_ratelimited(cdns->dev, "Msg NACK received\n");
    }
    }

    --
    2.27.0


    \
     
     \ /
      Last update: 2021-03-02 05:10    [W:4.044 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site