* the switch doesn't confuse them with one another.
         */
        struct mutex mgmt_lock;
+       /* Serializes access to the dynamic config interface */
+       struct mutex dynamic_config_lock;
        struct devlink_region **regions;
        struct sja1105_cbs_entry *cbs;
        struct mii_bus *mdio_base_t1;
 
                ops->entry_packing(packed_buf, entry, PACK);
 
        /* Send SPI write operation: read config table entry */
+       mutex_lock(&priv->dynamic_config_lock);
        rc = sja1105_xfer_buf(priv, SPI_WRITE, ops->addr, packed_buf,
                              ops->packed_size);
-       if (rc < 0)
+       if (rc < 0) {
+               mutex_unlock(&priv->dynamic_config_lock);
                return rc;
+       }
 
        rc = sja1105_dynamic_config_wait_complete(priv, &cmd, ops);
+       mutex_unlock(&priv->dynamic_config_lock);
        if (rc < 0)
                return rc;
 
                ops->entry_packing(packed_buf, entry, PACK);
 
        /* Send SPI write operation: read config table entry */
+       mutex_lock(&priv->dynamic_config_lock);
        rc = sja1105_xfer_buf(priv, SPI_WRITE, ops->addr, packed_buf,
                              ops->packed_size);
-       if (rc < 0)
+       if (rc < 0) {
+               mutex_unlock(&priv->dynamic_config_lock);
                return rc;
+       }
 
        rc = sja1105_dynamic_config_wait_complete(priv, &cmd, ops);
+       mutex_unlock(&priv->dynamic_config_lock);
        if (rc < 0)
                return rc;