Received: by 2002:a25:ad19:0:0:0:0:0 with SMTP id y25csp3163993ybi; Fri, 5 Jul 2019 03:01:11 -0700 (PDT) X-Google-Smtp-Source: APXvYqzwkXhFc5aFSoohVyeOMSMiGKolX4WLvc7Ol9IJMIcS8FujkxAOFSvjtd8eSO1xw6WxBg7c X-Received: by 2002:a17:902:654f:: with SMTP id d15mr4144789pln.253.1562320871742; Fri, 05 Jul 2019 03:01:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1562320871; cv=none; d=google.com; s=arc-20160816; b=yUMaSW9M2U4YyzYFadCdcPBrb6zOtp1GbPUEFcZlxkQ+43zseVby+LG3uF9E3kKq/b aHfuXWZeJEBoPBnQwywZ0AJ2SwLgP76qfPx4g9RLDcTDB3CUFHJqC62VQljQtREIkjWG +YemMcyBxXBcESdL9pdfZiha2XQ6C8eQwliMxByKYukVPAAdIc+Rn9rB5xZO3WRwPXIv VexffZTuxCWpbDOFmxyrM3Dv7Kf6s2kK2tU21SvVR5qLWKy4A2NScOAYVGskVCmBuCda 3QCVxZ8DHIF8TZ9mFi3fOkYDhM4iAGOfioXf5cD6KT1bgFK1Nz32h3lCxMbUW4s1+R1e tTPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=RZQvQOkbkrSB56MGDKBl3iL728SFafnDIktTBFf0pLM=; b=nYuew24m7+nt0JPhKOMLmDHfRZhyRVmzRkugW7h3U8295RcHu4pTk8hOLBrvHdRSyo X48ERkFH2w2r4wKabMu9ssdKoWbpOkHlrhKH/J9sWlrZTTMHZ4mu9eePsqBROFofUslj W4cJUXWalcO3wackXnr5/Ikzfhv/ULjHnU1B0jwdovZVqnsNlg/wJOGmKyDwUA3wTZfm g/n3tB0rfpzNFmJtvRO5Mgg+zR1OkMUvDzTDHinF7Gc7ENtX5tqjUEim6l8eSHbZrKRy rPBqH79c7/dALI2H5xDPXi03ip1z+ikFiVqjlUEt4yk76bxCN0mfG3OGLK8uCfo+rztw 9hnw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f20si9667865pfn.166.2019.07.05.03.00.56; Fri, 05 Jul 2019 03:01:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727857AbfGEJ6V (ORCPT + 99 others); Fri, 5 Jul 2019 05:58:21 -0400 Received: from mga14.intel.com ([192.55.52.115]:60661 "EHLO mga14.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728458AbfGEJ6I (ORCPT ); Fri, 5 Jul 2019 05:58:08 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jul 2019 02:58:08 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.63,454,1557212400"; d="scan'208";a="339795702" Received: from black.fi.intel.com ([10.237.72.28]) by orsmga005.jf.intel.com with ESMTP; 05 Jul 2019 02:58:05 -0700 Received: by black.fi.intel.com (Postfix, from userid 1001) id 1689F4C6; Fri, 5 Jul 2019 12:58:01 +0300 (EEST) From: Mika Westerberg To: linux-kernel@vger.kernel.org Cc: Andreas Noever , Michael Jamet , Yehezkel Bernat , "Rafael J . Wysocki" , Len Brown , Lukas Wunner , Mario.Limonciello@dell.com, Anthony Wong , Mika Westerberg , linux-acpi@vger.kernel.org Subject: [PATCH 6/8] thunderbolt: Expose active parts of NVM even if upgrade is not supported Date: Fri, 5 Jul 2019 12:57:58 +0300 Message-Id: <20190705095800.43534-7-mika.westerberg@linux.intel.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190705095800.43534-1-mika.westerberg@linux.intel.com> References: <20190705095800.43534-1-mika.westerberg@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Ice Lake Thunderbolt controller NVM firmware is part of the BIOS image which means it is not writable through the DMA port anymore. However, we can still read it so we can keep nvm_version and active parts of NVM. This way users still can find out the active NVM version and other potentially useful information directly from Linux. Signed-off-by: Mika Westerberg --- drivers/thunderbolt/switch.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c index e84067084dcd..e318e9714a38 100644 --- a/drivers/thunderbolt/switch.c +++ b/drivers/thunderbolt/switch.c @@ -364,12 +364,14 @@ static int tb_switch_nvm_add(struct tb_switch *sw) nvm->active = nvm_dev; } - nvm_dev = register_nvmem(sw, nvm->id, NVM_MAX_SIZE, false); - if (IS_ERR(nvm_dev)) { - ret = PTR_ERR(nvm_dev); - goto err_nvm_active; + if (!sw->no_nvm_upgrade) { + nvm_dev = register_nvmem(sw, nvm->id, NVM_MAX_SIZE, false); + if (IS_ERR(nvm_dev)) { + ret = PTR_ERR(nvm_dev); + goto err_nvm_active; + } + nvm->non_active = nvm_dev; } - nvm->non_active = nvm_dev; sw->nvm = nvm; return 0; @@ -398,7 +400,8 @@ static void tb_switch_nvm_remove(struct tb_switch *sw) if (!nvm->authenticating) nvm_clear_auth_status(sw); - nvmem_unregister(nvm->non_active); + if (nvm->non_active) + nvmem_unregister(nvm->non_active); if (nvm->active) nvmem_unregister(nvm->active); ida_simple_remove(&nvm_ida, nvm->id); @@ -1355,8 +1358,11 @@ static umode_t switch_attr_is_visible(struct kobject *kobj, sw->security_level == TB_SECURITY_SECURE) return attr->mode; return 0; - } else if (attr == &dev_attr_nvm_authenticate.attr || - attr == &dev_attr_nvm_version.attr) { + } else if (attr == &dev_attr_nvm_authenticate.attr) { + if (sw->dma_port && !sw->no_nvm_upgrade) + return attr->mode; + return 0; + } else if (attr == &dev_attr_nvm_version.attr) { if (sw->dma_port) return attr->mode; return 0; @@ -1707,13 +1713,17 @@ static int tb_switch_add_dma_port(struct tb_switch *sw) break; } - if (sw->no_nvm_upgrade) + /* Root switch DMA port requires running firmware */ + if (!tb_route(sw) && sw->config.enabled) return 0; sw->dma_port = dma_port_alloc(sw); if (!sw->dma_port) return 0; + if (sw->no_nvm_upgrade) + return 0; + /* * Check status of the previous flash authentication. If there * is one we need to power cycle the switch in any case to make -- 2.20.1