From cbb5494ebce5dfafab27de01e7e8bfe6d7c6a27f Mon Sep 17 00:00:00 2001 From: Nicholas Johnson Date: Tue, 14 Apr 2020 02:04:25 +0800 Subject: Revert "thunderbolt: Prevent crash if non-active NVMem file is read" This reverts commit 03cd45d2e219301880cabc357e3cf478a500080f. Commit 664f0549380c ("nvmem: core: use is_bin_visible for permissions") incidentally adds support for write-only nvmem. Hence, this workaround is no longer required, so drop it. Signed-off-by: Nicholas Johnson Signed-off-by: Mika Westerberg --- drivers/thunderbolt/switch.c | 7 ------- 1 file changed, 7 deletions(-) (limited to 'drivers/thunderbolt') diff --git a/drivers/thunderbolt/switch.c b/drivers/thunderbolt/switch.c index a2ce99051c51..1ba4050f68ac 100644 --- a/drivers/thunderbolt/switch.c +++ b/drivers/thunderbolt/switch.c @@ -348,12 +348,6 @@ out: return ret; } -static int tb_switch_nvm_no_read(void *priv, unsigned int offset, void *val, - size_t bytes) -{ - return -EPERM; -} - static int tb_switch_nvm_write(void *priv, unsigned int offset, void *val, size_t bytes) { @@ -399,7 +393,6 @@ static struct nvmem_device *register_nvmem(struct tb_switch *sw, int id, config.read_only = true; } else { config.name = "nvm_non_active"; - config.reg_read = tb_switch_nvm_no_read; config.reg_write = tb_switch_nvm_write; config.root_only = true; } -- cgit v1.2.3-59-g8ed1b From 57d8df68eb53cc15e5bdfc14bfb28a18543109eb Mon Sep 17 00:00:00 2001 From: Mika Westerberg Date: Fri, 14 Sep 2018 12:58:37 +0300 Subject: thunderbolt: Add support for Intel Tiger Lake Tiger Lake integrated Thunderbolt/USB4 controller is quite close to Intel Ice Lake. By default it is still using firmware based connection manager so we can use most of the Ice Lake flows in Tiger Lake as well. We check if the firmware connection manager is running and in that case use it, otherwise use the software based connection manager. Signed-off-by: Mika Westerberg Acked-by: Yehezkel Bernat --- drivers/thunderbolt/icm.c | 22 ++++++++++++++++++++++ drivers/thunderbolt/nhi.c | 4 ++++ drivers/thunderbolt/nhi.h | 2 ++ 3 files changed, 28 insertions(+) (limited to 'drivers/thunderbolt') diff --git a/drivers/thunderbolt/icm.c b/drivers/thunderbolt/icm.c index fbbe32ca1e69..ffcc8c3459e5 100644 --- a/drivers/thunderbolt/icm.c +++ b/drivers/thunderbolt/icm.c @@ -1633,6 +1633,15 @@ static void icm_icl_rtd3_veto(struct tb *tb, const struct icm_pkg_header *hdr) icm_veto_end(tb); } +static bool icm_tgl_is_supported(struct tb *tb) +{ + /* + * If the firmware is not running use software CM. This platform + * should fully support both. + */ + return icm_firmware_running(tb->nhi); +} + static void icm_handle_notification(struct work_struct *work) { struct icm_notification *n = container_of(work, typeof(*n), work); @@ -2269,6 +2278,19 @@ struct tb *icm_probe(struct tb_nhi *nhi) icm->rtd3_veto = icm_icl_rtd3_veto; tb->cm_ops = &icm_icl_ops; break; + + case PCI_DEVICE_ID_INTEL_TGL_NHI0: + case PCI_DEVICE_ID_INTEL_TGL_NHI1: + icm->is_supported = icm_tgl_is_supported; + icm->driver_ready = icm_icl_driver_ready; + icm->set_uuid = icm_icl_set_uuid; + icm->device_connected = icm_icl_device_connected; + icm->device_disconnected = icm_tr_device_disconnected; + icm->xdomain_connected = icm_tr_xdomain_connected; + icm->xdomain_disconnected = icm_tr_xdomain_disconnected; + icm->rtd3_veto = icm_icl_rtd3_veto; + tb->cm_ops = &icm_icl_ops; + break; } if (!icm->is_supported || !icm->is_supported(tb)) { diff --git a/drivers/thunderbolt/nhi.c b/drivers/thunderbolt/nhi.c index 1be491ecbb45..2e51d06e8e8d 100644 --- a/drivers/thunderbolt/nhi.c +++ b/drivers/thunderbolt/nhi.c @@ -1270,6 +1270,10 @@ static struct pci_device_id nhi_ids[] = { .driver_data = (kernel_ulong_t)&icl_nhi_ops }, { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICL_NHI1), .driver_data = (kernel_ulong_t)&icl_nhi_ops }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGL_NHI0), + .driver_data = (kernel_ulong_t)&icl_nhi_ops }, + { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_TGL_NHI1), + .driver_data = (kernel_ulong_t)&icl_nhi_ops }, /* Any USB4 compliant host */ { PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_USB4, ~0) }, diff --git a/drivers/thunderbolt/nhi.h b/drivers/thunderbolt/nhi.h index 5d276ee9b38e..80162e4b013f 100644 --- a/drivers/thunderbolt/nhi.h +++ b/drivers/thunderbolt/nhi.h @@ -73,6 +73,8 @@ extern const struct tb_nhi_ops icl_nhi_ops; #define PCI_DEVICE_ID_INTEL_TITAN_RIDGE_DD_BRIDGE 0x15ef #define PCI_DEVICE_ID_INTEL_ICL_NHI1 0x8a0d #define PCI_DEVICE_ID_INTEL_ICL_NHI0 0x8a17 +#define PCI_DEVICE_ID_INTEL_TGL_NHI0 0x9a1b +#define PCI_DEVICE_ID_INTEL_TGL_NHI1 0x9a1d #define PCI_CLASS_SERIAL_USB_USB4 0x0c0340 -- cgit v1.2.3-59-g8ed1b From eb4a6de4962ecacb5717a45057efc60bb2eca892 Mon Sep 17 00:00:00 2001 From: David Manouchehri Date: Mon, 11 May 2020 16:36:23 -0400 Subject: thunderbolt: Update Kconfig to allow building on other architectures. Thunderbolt 3 and USB4 shouldn't be x86 only. Tested on a SolidRun HoneyComb (ARM Cortex-A72) with a Gigabyte Titan Ridge Thunderbolt 3 PCIe card (JHL7540). Signed-off-by: David Manouchehri Signed-off-by: Mika Westerberg --- drivers/thunderbolt/Kconfig | 1 - 1 file changed, 1 deletion(-) (limited to 'drivers/thunderbolt') diff --git a/drivers/thunderbolt/Kconfig b/drivers/thunderbolt/Kconfig index 1eb757e8df3b..f02010738bb6 100644 --- a/drivers/thunderbolt/Kconfig +++ b/drivers/thunderbolt/Kconfig @@ -2,7 +2,6 @@ menuconfig USB4 tristate "Unified support for USB4 and Thunderbolt" depends on PCI - depends on X86 || COMPILE_TEST select APPLE_PROPERTIES if EFI_STUB && X86 select CRC32 select CRYPTO -- cgit v1.2.3-59-g8ed1b From 4caf2511ec498277333d229f8a7ad1fa9331df65 Mon Sep 17 00:00:00 2001 From: Maxim Levitsky Date: Wed, 20 May 2020 21:52:21 +0300 Subject: thunderbolt: Add trivial .shutdown On my machine, a kexec with this driver loaded in the old kernel causes a very long delay on boot in the kexec'ed kernel, most likely due to unclean shutdown prior to that. Unloading thunderbolt driver prior to kexec allows kexec to work as fast as regular kernel boot, as well as adding this .shutdown pointer. Shutting a device prior to the shutdown completely is always a good idea IMHO to help with kexec, and this one-liner patch implements it. Signed-off-by: Maxim Levitsky Signed-off-by: Mika Westerberg --- drivers/thunderbolt/nhi.c | 1 + 1 file changed, 1 insertion(+) (limited to 'drivers/thunderbolt') diff --git a/drivers/thunderbolt/nhi.c b/drivers/thunderbolt/nhi.c index 2e51d06e8e8d..d299dc168147 100644 --- a/drivers/thunderbolt/nhi.c +++ b/drivers/thunderbolt/nhi.c @@ -1289,6 +1289,7 @@ static struct pci_driver nhi_driver = { .id_table = nhi_ids, .probe = nhi_probe, .remove = nhi_remove, + .shutdown = nhi_remove, .driver.pm = &nhi_pm_ops, }; -- cgit v1.2.3-59-g8ed1b