thunderbolt: Do not send UNSET_INBOUND_SBTX when retimer NVM authentication started
authorMika Westerberg <mika.westerberg@linux.intel.com>
Fri, 26 May 2023 11:51:23 +0000 (14:51 +0300)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Mon, 12 Jun 2023 05:38:01 +0000 (08:38 +0300)
Once retimer NVM authentication is started, sending UNSET_INBOUND_SBTX
will fail so avoid doing that. Only send it when we are writing an image
with not authentication or when the authentication failed early.

Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
drivers/thunderbolt/retimer.c

index fb8e113488db448e0c7e9b99de9d15ff560c459d..a273fb02a02c4bbf5d110bc3ebf441edfafc1803 100644 (file)
@@ -244,6 +244,13 @@ static ssize_t nvm_authenticate_store(struct device *dev,
        rt->auth_status = 0;
 
        if (val) {
+               /*
+                * When NVM authentication starts the retimer is not
+                * accessible so calling tb_retimer_unset_inbound_sbtx()
+                * will fail and therefore we do not call it. Exception
+                * is when the validation fails or we only write the new
+                * NVM image without authentication.
+                */
                tb_retimer_set_inbound_sbtx(rt->port);
                if (val == AUTHENTICATE_ONLY) {
                        ret = tb_retimer_nvm_authenticate(rt, true);
@@ -264,7 +271,8 @@ static ssize_t nvm_authenticate_store(struct device *dev,
        }
 
 exit_unlock:
-       tb_retimer_unset_inbound_sbtx(rt->port);
+       if (ret || val == WRITE_ONLY)
+               tb_retimer_unset_inbound_sbtx(rt->port);
        mutex_unlock(&rt->tb->lock);
 exit_rpm:
        pm_runtime_mark_last_busy(&rt->dev);