thunderbolt: Provide tb_retimer_nvm_read() analogous to tb_switch_nvm_read()
authorMika Westerberg <mika.westerberg@linux.intel.com>
Sat, 3 Sep 2022 07:43:25 +0000 (10:43 +0300)
committerMika Westerberg <mika.westerberg@linux.intel.com>
Wed, 7 Sep 2022 06:06:51 +0000 (09:06 +0300)
As we are moving the NVM vendor specifics into nvm.c we need to deal
witht he retimer NVM formats too. For this reason provide retimer
specific function that can be used to read the contents of the NVM and
rename the internal ones accordingly analogous to what we do with
routers.

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

index dc0fc90e81cfe41b254864ddce6117ac9d481c16..bec02ad4cb3bab8cc04b09e1b5ca0e92b21b0de8 100644 (file)
 
 #define TB_MAX_RETIMER_INDEX   6
 
-static int tb_retimer_nvm_read(void *priv, unsigned int offset, void *val,
-                              size_t bytes)
+/**
+ * tb_retimer_nvm_read() - Read contents of retimer NVM
+ * @rt: Retimer device
+ * @address: NVM address (in bytes) to start reading
+ * @buf: Data read from NVM is stored here
+ * @size: Number of bytes to read
+ *
+ * Reads retimer NVM and copies the contents to @buf. Returns %0 if the
+ * read was successful and negative errno in case of failure.
+ */
+int tb_retimer_nvm_read(struct tb_retimer *rt, unsigned int address, void *buf,
+                       size_t size)
+{
+       return usb4_port_retimer_nvm_read(rt->port, rt->index, address, buf, size);
+}
+
+static int nvm_read(void *priv, unsigned int offset, void *val, size_t bytes)
 {
        struct tb_nvm *nvm = priv;
        struct tb_retimer *rt = tb_to_retimer(nvm->dev);
@@ -30,7 +45,7 @@ static int tb_retimer_nvm_read(void *priv, unsigned int offset, void *val,
                goto out;
        }
 
-       ret = usb4_port_retimer_nvm_read(rt->port, rt->index, offset, val, bytes);
+       ret = tb_retimer_nvm_read(rt, offset, val, bytes);
        mutex_unlock(&rt->tb->lock);
 
 out:
@@ -40,8 +55,7 @@ out:
        return ret;
 }
 
-static int tb_retimer_nvm_write(void *priv, unsigned int offset, void *val,
-                               size_t bytes)
+static int nvm_write(void *priv, unsigned int offset, void *val, size_t bytes)
 {
        struct tb_nvm *nvm = priv;
        struct tb_retimer *rt = tb_to_retimer(nvm->dev);
@@ -82,11 +96,11 @@ static int tb_retimer_nvm_add(struct tb_retimer *rt)
        nvm_size = (SZ_1M << (val & 7)) / 8;
        nvm_size = (nvm_size - SZ_16K) / 2;
 
-       ret = tb_nvm_add_active(nvm, nvm_size, tb_retimer_nvm_read);
+       ret = tb_nvm_add_active(nvm, nvm_size, nvm_read);
        if (ret)
                goto err_nvm;
 
-       ret = tb_nvm_add_non_active(nvm, NVM_MAX_SIZE, tb_retimer_nvm_write);
+       ret = tb_nvm_add_non_active(nvm, NVM_MAX_SIZE, nvm_write);
        if (ret)
                goto err_nvm;
 
index f797adf8c7f41ed38e9eeff904400abd522da8b8..75b6ad5923ad52213e14852ae07049aab247918f 100644 (file)
@@ -1144,6 +1144,8 @@ static inline struct tb_switch *tb_xdomain_parent(struct tb_xdomain *xd)
        return tb_to_switch(xd->dev.parent);
 }
 
+int tb_retimer_nvm_read(struct tb_retimer *rt, unsigned int address, void *buf,
+                       size_t size);
 int tb_retimer_scan(struct tb_port *port, bool add);
 void tb_retimer_remove_all(struct tb_port *port);