From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mgamail.intel.com (mgamail.intel.com [198.175.65.9]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D1CA72BE7DD for ; Tue, 24 Feb 2026 07:01:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=198.175.65.9 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771916516; cv=none; b=KHkWiwjvFvySXjYvcOPfnH6ap1MmD2l2CYGqbsVqnVCKLdaKn8l0q1tPNbRXTfKyGZhXSztdZ9IlYlQdbofwhcB4bCOqsAnoS/zwST/pexmBF715BGzJ9INDitT8HEfePdwA2GEBi9902DlBrUI7zTZ1LqaptiZQVrQmWQKNKrc= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1771916516; c=relaxed/simple; bh=ssR2ACQbzkKteKkJQaC4nDfQEv0fKbnfoZ9GNwGIHDw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XZuptWdsyPcGR3AXnxb4i9zbQlPdDR7sRob7zEEeIs8DF2im/ogWCWZc+qImT0uP+jQLwliTmUdro+o8SN/kqoOXeQDrGVixhPKcj505Qk3VlbUsGiq30kjDarJJ/3FxOLliBMwXw2VguoG9Dv+RUiYFoVZfGo7miTOTOuG9EMQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=iG+xSD7h; arc=none smtp.client-ip=198.175.65.9 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="iG+xSD7h" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1771916515; x=1803452515; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ssR2ACQbzkKteKkJQaC4nDfQEv0fKbnfoZ9GNwGIHDw=; b=iG+xSD7hsxOrDs6oXQts1PpkxWR9yYMn6j+1bJm6+0aPPMSMF5W82Sad F1ZQ+haOBz17BJ+MQ1Exs4FMyuIFI29daa7cYxKuJV/vvD0BqVKBK0LMK 5P2pVVfOHpDYgpHUmfAiYZ1bwwwEAwoOORGBpqCEvD7PGkuFFhrOIsHz/ uVq6ZBiAds6gLJlpehe8yypWVAHYYBvP43b2E/E+CLkyR+IKZsr8ovJrQ q70pRkaAXAQ9ZnRt70+aysorpQz/toKNsGLCafjL/fK3gkaGSY9+D2KmW BxBoUqy7zYGyA/mElkB1ECEbvIiYFpc7vlIKA0wR/PlmigwizehiTWSlh g==; X-CSE-ConnectionGUID: CMFUjc1IQTqra9hy8uYvnw== X-CSE-MsgGUID: infT80xVQuO6TN82vqLMZg== X-IronPort-AV: E=McAfee;i="6800,10657,11710"; a="95539951" X-IronPort-AV: E=Sophos;i="6.21,308,1763452800"; d="scan'208";a="95539951" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Feb 2026 23:01:53 -0800 X-CSE-ConnectionGUID: 208KvUejQmCB4Wq1IUzsOg== X-CSE-MsgGUID: zNJyDI4YQ0CZXG0n8HCzhQ== X-ExtLoop1: 1 Received: from black.igk.intel.com ([10.91.253.5]) by fmviesa003.fm.intel.com with ESMTP; 23 Feb 2026 23:01:51 -0800 Received: by black.igk.intel.com (Postfix, from userid 1001) id 8954F98; Tue, 24 Feb 2026 08:01:50 +0100 (CET) From: Mika Westerberg To: linux-usb@vger.kernel.org Cc: Yehezkel Bernat , Lukas Wunner , Andreas Noever , Rene Sapiens , Mika Westerberg Subject: [PATCH 1/2] thunderbolt: Read router NVM version before applying quirks Date: Tue, 24 Feb 2026 08:01:49 +0100 Message-ID: <20260224070150.3320641-2-mika.westerberg@linux.intel.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20260224070150.3320641-1-mika.westerberg@linux.intel.com> References: <20260224070150.3320641-1-mika.westerberg@linux.intel.com> Precedence: bulk X-Mailing-List: linux-usb@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit From: Rene Sapiens The router NVM version is currently only available after the NVMem devices have been registered. This is too late for firmware-dependent quirks that are evaluated during tb_switch_add() before device registration. Split router NVM handling into two phases: - tb_switch_nvm_init() allocates the NVM object and reads the version - tb_switch_nvm_add() registers the NVMem devices using the pre-read NVM This makes the NVM major/minor version available before tb_check_quirks() without changing when the NVMem devices are registered. Signed-off-by: Rene Sapiens Signed-off-by: Mika Westerberg --- drivers/thunderbolt/switch.c | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c index e5b48a331c58..c2ad58b19e7b 100644 --- a/drivers/thunderbolt/switch.c +++ b/drivers/thunderbolt/switch.c @@ -347,7 +347,7 @@ static int nvm_write(void *priv, unsigned int offset, void *val, size_t bytes) return ret; } -static int tb_switch_nvm_add(struct tb_switch *sw) +static int tb_switch_nvm_init(struct tb_switch *sw) { struct tb_nvm *nvm; int ret; @@ -365,6 +365,26 @@ static int tb_switch_nvm_add(struct tb_switch *sw) if (ret) goto err_nvm; + sw->nvm = nvm; + return 0; + +err_nvm: + tb_sw_dbg(sw, "NVM upgrade disabled\n"); + sw->no_nvm_upgrade = true; + if (!IS_ERR(nvm)) + tb_nvm_free(nvm); + + return ret; +} + +static int tb_switch_nvm_add(struct tb_switch *sw) +{ + struct tb_nvm *nvm = sw->nvm; + int ret; + + if (!nvm) + return 0; + /* * If the switch is in safe-mode the only accessible portion of * the NVM is the non-active one where userspace is expected to @@ -383,14 +403,12 @@ static int tb_switch_nvm_add(struct tb_switch *sw) goto err_nvm; } - sw->nvm = nvm; return 0; err_nvm: tb_sw_dbg(sw, "NVM upgrade disabled\n"); sw->no_nvm_upgrade = true; - if (!IS_ERR(nvm)) - tb_nvm_free(nvm); + tb_nvm_free(nvm); return ret; } @@ -3311,6 +3329,10 @@ int tb_switch_add(struct tb_switch *sw) return ret; } + ret = tb_switch_nvm_init(sw); + if (ret) + return ret; + if (!sw->safe_mode) { tb_switch_credits_init(sw); -- 2.50.1