Message ID | 20200619111313.485309-2-vicamo.yang@canonical.com |
---|---|
State | New |
Headers | show |
Series | support Tiger Lake Thunderbolt/USB4 controller | expand |
On 2020-06-19 13:13, You-Sheng Yang wrote: > From: Mika Westerberg <mika.westerberg@linux.intel.com> > > BugLink: https://bugs.launchpad.net/bugs/1844410 > > 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 <mika.westerberg@linux.intel.com> > Acked-by: Yehezkel Bernat <yehezkelshb@gmail.com> > (cherry picked from commit 57d8df68eb53cc15e5bdfc14bfb28a18543109eb) > Signed-off-by: You-Sheng Yang <vicamo.yang@canonical.com> Acked-by: Kleber Sacilotto de Souza <kleber.souza@canonical.com> > --- > drivers/thunderbolt/icm.c | 22 ++++++++++++++++++++++ > drivers/thunderbolt/nhi.c | 4 ++++ > drivers/thunderbolt/nhi.h | 2 ++ > 3 files changed, 28 insertions(+) > > 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 > >
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