<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel.git/drivers/thunderbolt/icm.c, branch linux-5.5.y</title>
<subtitle>Hosts the 0x221E linux distro kernel.
</subtitle>
<id>https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.5.y</id>
<link rel='self' href='https://git.0xinfinity.dev/distro/kernel.git/atom?h=linux-5.5.y'/>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/'/>
<updated>2019-11-02T09:13:31Z</updated>
<entry>
<title>thunderbolt: Do not start firmware unless asked by the user</title>
<updated>2019-11-02T09:13:31Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2019-03-21T13:31:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=354a7a7716edb377953a324421915d7788e0bca9'/>
<id>urn:sha1:354a7a7716edb377953a324421915d7788e0bca9</id>
<content type='text'>
Since now we can do pretty much the same thing in the software
connection manager than the firmware would do, there is no point
starting it by default. Instead we can just continue using the software
connection manager.

Make it possible for user to switch between the two by adding a module
pararameter (start_icm) which is by default false. Having this ability
to enable the firmware may be useful at least when debugging possible
issues with the software connection manager implementation.

Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
</content>
</entry>
<entry>
<title>thunderbolt: Add support for lane bonding</title>
<updated>2019-11-02T09:13:31Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2019-03-21T17:03:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=91c0c12080d0f40ee7275485221b06b4e1e289e1'/>
<id>urn:sha1:91c0c12080d0f40ee7275485221b06b4e1e289e1</id>
<content type='text'>
Lane bonding allows aggregating two 10/20 Gb/s (depending on the
generation) lanes into a single 20/40 Gb/s bonded link. This allows
sharing the full bandwidth more efficiently. In order to establish lane
bonding we need to check that lane bonding is possible through link
controller and that both ends of the link actually supports 2x widths.
This also means that all the paths should be established through the
primary port so update tb_path_alloc() to handle this as well.

Lane bonding is supported starting from Falcon Ridge (2nd generation)
controllers.

We also expose the current speed and number of lanes under each device
except the host router following similar attribute naming than USB bus.
Expose speed and number of lanes for both directions to allow possibility
of asymmetric link in the future.

Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
</content>
</entry>
<entry>
<title>thunderbolt: Refactor add_switch() into two functions</title>
<updated>2019-11-01T11:32:00Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2019-10-08T16:03:34Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b5db76dba0642ea6f2391374f3b2b479014e5bf0'/>
<id>urn:sha1:b5db76dba0642ea6f2391374f3b2b479014e5bf0</id>
<content type='text'>
Currently add_switch() takes a huge amount of parameters that makes it
hard to maintain. Instead of passing all those parameters we can split
the function into two parts (alloc and add) and fill the additional
switch fields directly in the functions calling those.

While there remove redundant error logging in case kmemdup() fails.

No functional changes.

Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
</content>
</entry>
<entry>
<title>thunderbolt: Add helper macro to iterate over switch ports</title>
<updated>2019-11-01T11:32:00Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2019-09-30T11:07:22Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=b433d0100562233b21beb13c0139feeff350bc68'/>
<id>urn:sha1:b433d0100562233b21beb13c0139feeff350bc68</id>
<content type='text'>
There are quite many places in the driver where we iterate over each
port in the switch. To make it bit more convenient, add a macro that can
be used to iterate over each port and convert existing call sites to use it.

This is based on code by Lukas Wunner.

No functional changes.

Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
</content>
</entry>
<entry>
<title>thunderbolt: Add support for Intel Ice Lake</title>
<updated>2019-08-26T09:15:06Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2018-01-16T20:19:00Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=3cdb9446a117d5d63af823bde6fe6babc312e77b'/>
<id>urn:sha1:3cdb9446a117d5d63af823bde6fe6babc312e77b</id>
<content type='text'>
The Thunderbolt controller is integrated into the Ice Lake CPU itself
and requires special flows to power it on and off using force power bit
in NHI VSEC registers. Runtime PM (RTD3) and Sx flows also differ from
the discrete solutions. Now the firmware notifies the driver whether
RTD3 entry or exit are possible. The driver is responsible of sending
Go2Sx command through link controller mailbox when system enters Sx
states (suspend-to-mem/disk). Rest of the ICM firwmare flows follow
Titan Ridge.

Signed-off-by: Raanan Avargil &lt;raanan.avargil@intel.com&gt;
Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
Reviewed-by: Yehezkel Bernat &lt;YehezkelShB@gmail.com&gt;
Tested-by: Mario Limonciello &lt;mario.limonciello@dell.com&gt;
</content>
</entry>
<entry>
<title>thunderbolt: Move NVM upgrade support flag to struct icm</title>
<updated>2019-08-26T09:14:32Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2018-01-16T20:30:40Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=f437c24bf694b0293f835dea8c25e3a5c1433d07'/>
<id>urn:sha1:f437c24bf694b0293f835dea8c25e3a5c1433d07</id>
<content type='text'>
This is depends on the controller and on the platform/CPU we are
running. Move it to struct icm so we can set it per controller.

Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
Reviewed-by: Yehezkel Bernat &lt;YehezkelShB@gmail.com&gt;
Tested-by: Mario Limonciello &lt;mario.limonciello@dell.com&gt;
</content>
</entry>
<entry>
<title>thunderbolt: Implement CIO reset correctly for Titan Ridge</title>
<updated>2019-06-14T11:25:43Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2019-05-31T10:31:54Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=0d53827d7c172f1345140f7638fe658bda1bb25d'/>
<id>urn:sha1:0d53827d7c172f1345140f7638fe658bda1bb25d</id>
<content type='text'>
When starting ICM firmware on Apple systems we need to perform CIO reset
as part of the flow. However, it turns out that the reset register has
changed to another location in Titan Ridge.

Fix this by introducing -&gt;cio_reset() callback with corresponding
implementations for Alpine and Titan Ridge.

Fixes: c4630d6ae6e3 ("thunderbolt: Start firmware on Titan Ridge Apple systems")
Reported-by: Peter Bowen &lt;pzb@amazon.com&gt;
Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
</content>
</entry>
<entry>
<title>thunderbolt: Make sure device runtime resume completes before taking domain lock</title>
<updated>2019-06-12T10:30:46Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2019-05-28T15:56:20Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=4f7c2e0d8765a0266b920c66ffc495fde44c1ec8'/>
<id>urn:sha1:4f7c2e0d8765a0266b920c66ffc495fde44c1ec8</id>
<content type='text'>
When a device is authorized from userspace by writing to authorized
attribute we first take the domain lock and then runtime resume the
device in question. There are two issues with this.

First is that the device connected notifications are blocked during this
time which means we get them only after the authorization operation is
complete. Because of this the authorization needed flag from the
firmware notification is not reflecting the real authorization status
anymore. So what happens is that the "authorized" keeps returning 0 even
if the device was already authorized properly.

Second issue is that each time the controller is runtime resumed the
connection_id field of device connected notification may be different
than in the previous resume. We need to use the latest connection_id
otherwise the firmware rejects the authorization command.

Fix these by moving runtime resume operations to happen before the
domain lock is taken, and waiting for the updated device connected
notification from the firmware before we allow runtime resume of a
device to complete.

While there add missing locking to tb_switch_nvm_read().

Fixes: 09f11b6c99fe ("thunderbolt: Take domain lock in switch sysfs attribute callbacks")
Reported-by: Pengfei Xu &lt;pengfei.xu@intel.com&gt;
Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
</content>
</entry>
<entry>
<title>thunderbolt: Start firmware on Titan Ridge Apple systems</title>
<updated>2019-04-18T08:18:54Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2019-01-21T13:41:27Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=c4630d6ae6e33b76fedde5c15bdfc7fa579eac32'/>
<id>urn:sha1:c4630d6ae6e33b76fedde5c15bdfc7fa579eac32</id>
<content type='text'>
Titan Ridge flow to start the firmware is the same as Alpine Ridge so we
can do the same on Titan Ridge based Apple systems.

Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
</content>
</entry>
<entry>
<title>thunderbolt: Make rest of the logging to happen at debug level</title>
<updated>2019-04-18T08:18:53Z</updated>
<author>
<name>Mika Westerberg</name>
</author>
<published>2018-09-17T13:32:13Z</published>
<link rel='alternate' type='text/html' href='https://git.0xinfinity.dev/distro/kernel.git/commit/?id=62efe699a7f666b48e1d41511147017e13e8d230'/>
<id>urn:sha1:62efe699a7f666b48e1d41511147017e13e8d230</id>
<content type='text'>
Now that the driver can handle every possible tunnel types there is no
point to log everything as info level so turn these to happen at debug
level instead.

While at it remove duplicated tunnel activation log message
(tb_tunnel_activate() calls tb_tunnel_restart() which print the same
message) and add one missing '\n' termination.

Signed-off-by: Mika Westerberg &lt;mika.westerberg@linux.intel.com&gt;
</content>
</entry>
</feed>
