提交 d19c64b3 编写于 作者: G Greg Kroah-Hartman

Merge tag 'thunderbolt-for-v5.8' of...

Merge tag 'thunderbolt-for-v5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt into usb-next

Mika writes:

thunderbolt: Changes for v5.8 merge window

This adds support for Intel Tiger Lake Thunderbolt controller using
firmware based connection manager. In addition the driver can now be
built on non-x86 architectures as well. Then there are a couple of
commits that make the driver work across kexec, replace a zero length
array with flexible one, and revert one change that is not needed
anymore because of NVMem subsystem improvements.

* tag 'thunderbolt-for-v5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt:
  thunderbolt: Add trivial .shutdown
  thunderbolt: Update Kconfig to allow building on other architectures.
  thunderbolt: Replace zero-length array with flexible-array
  thunderbolt: Add support for Intel Tiger Lake
  Revert "thunderbolt: Prevent crash if non-active NVMem file is read"
...@@ -2,7 +2,6 @@ ...@@ -2,7 +2,6 @@
menuconfig USB4 menuconfig USB4
tristate "Unified support for USB4 and Thunderbolt" tristate "Unified support for USB4 and Thunderbolt"
depends on PCI depends on PCI
depends on X86 || COMPILE_TEST
select APPLE_PROPERTIES if EFI_STUB && X86 select APPLE_PROPERTIES if EFI_STUB && X86
select CRC32 select CRC32
select CRYPTO select CRYPTO
......
...@@ -1633,6 +1633,15 @@ static void icm_icl_rtd3_veto(struct tb *tb, const struct icm_pkg_header *hdr) ...@@ -1633,6 +1633,15 @@ static void icm_icl_rtd3_veto(struct tb *tb, const struct icm_pkg_header *hdr)
icm_veto_end(tb); 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) static void icm_handle_notification(struct work_struct *work)
{ {
struct icm_notification *n = container_of(work, typeof(*n), work); struct icm_notification *n = container_of(work, typeof(*n), work);
...@@ -2269,6 +2278,19 @@ struct tb *icm_probe(struct tb_nhi *nhi) ...@@ -2269,6 +2278,19 @@ struct tb *icm_probe(struct tb_nhi *nhi)
icm->rtd3_veto = icm_icl_rtd3_veto; icm->rtd3_veto = icm_icl_rtd3_veto;
tb->cm_ops = &icm_icl_ops; tb->cm_ops = &icm_icl_ops;
break; 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)) { if (!icm->is_supported || !icm->is_supported(tb)) {
......
...@@ -1270,6 +1270,10 @@ static struct pci_device_id nhi_ids[] = { ...@@ -1270,6 +1270,10 @@ static struct pci_device_id nhi_ids[] = {
.driver_data = (kernel_ulong_t)&icl_nhi_ops }, .driver_data = (kernel_ulong_t)&icl_nhi_ops },
{ PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICL_NHI1), { PCI_VDEVICE(INTEL, PCI_DEVICE_ID_INTEL_ICL_NHI1),
.driver_data = (kernel_ulong_t)&icl_nhi_ops }, .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 */ /* Any USB4 compliant host */
{ PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_USB4, ~0) }, { PCI_DEVICE_CLASS(PCI_CLASS_SERIAL_USB_USB4, ~0) },
...@@ -1285,6 +1289,7 @@ static struct pci_driver nhi_driver = { ...@@ -1285,6 +1289,7 @@ static struct pci_driver nhi_driver = {
.id_table = nhi_ids, .id_table = nhi_ids,
.probe = nhi_probe, .probe = nhi_probe,
.remove = nhi_remove, .remove = nhi_remove,
.shutdown = nhi_remove,
.driver.pm = &nhi_pm_ops, .driver.pm = &nhi_pm_ops,
}; };
......
...@@ -73,6 +73,8 @@ extern const struct tb_nhi_ops icl_nhi_ops; ...@@ -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_TITAN_RIDGE_DD_BRIDGE 0x15ef
#define PCI_DEVICE_ID_INTEL_ICL_NHI1 0x8a0d #define PCI_DEVICE_ID_INTEL_ICL_NHI1 0x8a0d
#define PCI_DEVICE_ID_INTEL_ICL_NHI0 0x8a17 #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 #define PCI_CLASS_SERIAL_USB_USB4 0x0c0340
......
...@@ -348,12 +348,6 @@ static int tb_switch_nvm_read(void *priv, unsigned int offset, void *val, ...@@ -348,12 +348,6 @@ static int tb_switch_nvm_read(void *priv, unsigned int offset, void *val,
return ret; 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, static int tb_switch_nvm_write(void *priv, unsigned int offset, void *val,
size_t bytes) size_t bytes)
{ {
...@@ -399,7 +393,6 @@ static struct nvmem_device *register_nvmem(struct tb_switch *sw, int id, ...@@ -399,7 +393,6 @@ static struct nvmem_device *register_nvmem(struct tb_switch *sw, int id,
config.read_only = true; config.read_only = true;
} else { } else {
config.name = "nvm_non_active"; config.name = "nvm_non_active";
config.reg_read = tb_switch_nvm_no_read;
config.reg_write = tb_switch_nvm_write; config.reg_write = tb_switch_nvm_write;
config.root_only = true; config.root_only = true;
} }
......
...@@ -80,7 +80,7 @@ struct tb { ...@@ -80,7 +80,7 @@ struct tb {
int index; int index;
enum tb_security_level security_level; enum tb_security_level security_level;
size_t nboot_acl; size_t nboot_acl;
unsigned long privdata[0]; unsigned long privdata[];
}; };
extern struct bus_type tb_bus_type; extern struct bus_type tb_bus_type;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册