xref: /linux/Documentation/admin-guide/thunderbolt.rst (revision 762f99f4f3cb41a775b5157dd761217beba65873)
1ea81896dSMika Westerberg.. SPDX-License-Identifier: GPL-2.0
2ea81896dSMika Westerberg
3ea81896dSMika Westerberg======================
4ea81896dSMika Westerberg USB4 and Thunderbolt
5ea81896dSMika Westerberg======================
6ea81896dSMika WesterbergUSB4 is the public specification based on Thunderbolt 3 protocol with
7ea81896dSMika Westerbergsome differences at the register level among other things. Connection
8ea81896dSMika Westerbergmanager is an entity running on the host router (host controller)
9ea81896dSMika Westerbergresponsible for enumerating routers and establishing tunnels. A
10ea81896dSMika Westerbergconnection manager can be implemented either in firmware or software.
11ea81896dSMika WesterbergTypically PCs come with a firmware connection manager for Thunderbolt 3
12ea81896dSMika Westerbergand early USB4 capable systems. Apple systems on the other hand use
13ea81896dSMika Westerbergsoftware connection manager and the later USB4 compliant devices follow
14ea81896dSMika Westerbergthe suit.
15ea81896dSMika Westerberg
16ea81896dSMika WesterbergThe Linux Thunderbolt driver supports both and can detect at runtime which
17ea81896dSMika Westerbergconnection manager implementation is to be used. To be on the safe side the
18ea81896dSMika Westerbergsoftware connection manager in Linux also advertises security level
19ea81896dSMika Westerberg``user`` which means PCIe tunneling is disabled by default. The
20ea81896dSMika Westerbergdocumentation below applies to both implementations with the exception that
21ea81896dSMika Westerbergthe software connection manager only supports ``user`` security level and
22ea81896dSMika Westerbergis expected to be accompanied with an IOMMU based DMA protection.
23ea81896dSMika Westerberg
24ea81896dSMika WesterbergSecurity levels and how to use them
25ea81896dSMika Westerberg-----------------------------------
26163f1511SMika WesterbergThe interface presented here is not meant for end users. Instead there
27163f1511SMika Westerbergshould be a userspace tool that handles all the low-level details, keeps
2854e36a2dSRandy Dunlapa database of the authorized devices and prompts users for new connections.
29163f1511SMika Westerberg
30163f1511SMika WesterbergMore details about the sysfs interface for Thunderbolt devices can be
31163f1511SMika Westerbergfound in ``Documentation/ABI/testing/sysfs-bus-thunderbolt``.
32163f1511SMika Westerberg
33163f1511SMika WesterbergThose users who just want to connect any device without any sort of
3454e36a2dSRandy Dunlapmanual work can add following line to
35163f1511SMika Westerberg``/etc/udev/rules.d/99-local.rules``::
36163f1511SMika Westerberg
37163f1511SMika Westerberg  ACTION=="add", SUBSYSTEM=="thunderbolt", ATTR{authorized}=="0", ATTR{authorized}="1"
38163f1511SMika Westerberg
39163f1511SMika WesterbergThis will authorize all devices automatically when they appear. However,
40163f1511SMika Westerbergkeep in mind that this bypasses the security levels and makes the system
41163f1511SMika Westerbergvulnerable to DMA attacks.
42163f1511SMika Westerberg
4354e36a2dSRandy DunlapStarting with Intel Falcon Ridge Thunderbolt controller there are 4
446fc14e1aSMika Westerbergsecurity levels available. Intel Titan Ridge added one more security level
456fc14e1aSMika Westerberg(usbonly). The reason for these is the fact that the connected devices can
466fc14e1aSMika Westerbergbe DMA masters and thus read contents of the host memory without CPU and OS
476fc14e1aSMika Westerbergknowing about it. There are ways to prevent this by setting up an IOMMU but
486fc14e1aSMika Westerbergit is not always available for various reasons.
49163f1511SMika Westerberg
503cd542e6SMika WesterbergSome USB4 systems have a BIOS setting to disable PCIe tunneling. This is
513cd542e6SMika Westerbergtreated as another security level (nopcie).
523cd542e6SMika Westerberg
53163f1511SMika WesterbergThe security levels are as follows:
54163f1511SMika Westerberg
55163f1511SMika Westerberg  none
56163f1511SMika Westerberg    All devices are automatically connected by the firmware. No user
57163f1511SMika Westerberg    approval is needed. In BIOS settings this is typically called
58163f1511SMika Westerberg    *Legacy mode*.
59163f1511SMika Westerberg
60163f1511SMika Westerberg  user
61163f1511SMika Westerberg    User is asked whether the device is allowed to be connected.
62163f1511SMika Westerberg    Based on the device identification information available through
6354e36a2dSRandy Dunlap    ``/sys/bus/thunderbolt/devices``, the user then can make the decision.
64163f1511SMika Westerberg    In BIOS settings this is typically called *Unique ID*.
65163f1511SMika Westerberg
66163f1511SMika Westerberg  secure
67163f1511SMika Westerberg    User is asked whether the device is allowed to be connected. In
68163f1511SMika Westerberg    addition to UUID the device (if it supports secure connect) is sent
69163f1511SMika Westerberg    a challenge that should match the expected one based on a random key
7054e36a2dSRandy Dunlap    written to the ``key`` sysfs attribute. In BIOS settings this is
71163f1511SMika Westerberg    typically called *One time saved key*.
72163f1511SMika Westerberg
73163f1511SMika Westerberg  dponly
74163f1511SMika Westerberg    The firmware automatically creates tunnels for Display Port and
75163f1511SMika Westerberg    USB. No PCIe tunneling is done. In BIOS settings this is
76163f1511SMika Westerberg    typically called *Display Port Only*.
77163f1511SMika Westerberg
786fc14e1aSMika Westerberg  usbonly
796fc14e1aSMika Westerberg    The firmware automatically creates tunnels for the USB controller and
806fc14e1aSMika Westerberg    Display Port in a dock. All PCIe links downstream of the dock are
816fc14e1aSMika Westerberg    removed.
826fc14e1aSMika Westerberg
833cd542e6SMika Westerberg  nopcie
843cd542e6SMika Westerberg    PCIe tunneling is disabled/forbidden from the BIOS. Available in some
853cd542e6SMika Westerberg    USB4 systems.
863cd542e6SMika Westerberg
87163f1511SMika WesterbergThe current security level can be read from
88163f1511SMika Westerberg``/sys/bus/thunderbolt/devices/domainX/security`` where ``domainX`` is
89163f1511SMika Westerbergthe Thunderbolt domain the host controller manages. There is typically
90163f1511SMika Westerbergone domain per Thunderbolt host controller.
91163f1511SMika Westerberg
92163f1511SMika WesterbergIf the security level reads as ``user`` or ``secure`` the connected
93163f1511SMika Westerbergdevice must be authorized by the user before PCIe tunnels are created
94163f1511SMika Westerberg(e.g the PCIe device appears).
95163f1511SMika Westerberg
96163f1511SMika WesterbergEach Thunderbolt device plugged in will appear in sysfs under
97163f1511SMika Westerberg``/sys/bus/thunderbolt/devices``. The device directory carries
98163f1511SMika Westerberginformation that can be used to identify the particular device,
99163f1511SMika Westerbergincluding its name and UUID.
100163f1511SMika Westerberg
101163f1511SMika WesterbergAuthorizing devices when security level is ``user`` or ``secure``
102163f1511SMika Westerberg-----------------------------------------------------------------
103163f1511SMika WesterbergWhen a device is plugged in it will appear in sysfs as follows::
104163f1511SMika Westerberg
105163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-1/authorized	- 0
106163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-1/device	- 0x8004
107163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-1/device_name	- Thunderbolt to FireWire Adapter
108163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-1/vendor	- 0x1
109163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-1/vendor_name	- Apple, Inc.
110163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-1/unique_id	- e0376f00-0300-0100-ffff-ffffffffffff
111163f1511SMika Westerberg
112163f1511SMika WesterbergThe ``authorized`` attribute reads 0 which means no PCIe tunnels are
11354e36a2dSRandy Dunlapcreated yet. The user can authorize the device by simply entering::
114163f1511SMika Westerberg
115163f1511SMika Westerberg  # echo 1 > /sys/bus/thunderbolt/devices/0-1/authorized
116163f1511SMika Westerberg
117163f1511SMika WesterbergThis will create the PCIe tunnels and the device is now connected.
118163f1511SMika Westerberg
119163f1511SMika WesterbergIf the device supports secure connect, and the domain security level is
120163f1511SMika Westerbergset to ``secure``, it has an additional attribute ``key`` which can hold
12154e36a2dSRandy Dunlapa random 32-byte value used for authorization and challenging the device in
122163f1511SMika Westerbergfuture connects::
123163f1511SMika Westerberg
124163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-3/authorized	- 0
125163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-3/device	- 0x305
126163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-3/device_name	- AKiTiO Thunder3 PCIe Box
127163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-3/key		-
128163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-3/vendor	- 0x41
129163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-3/vendor_name	- inXtron
130163f1511SMika Westerberg  /sys/bus/thunderbolt/devices/0-3/unique_id	- dc010000-0000-8508-a22d-32ca6421cb16
131163f1511SMika Westerberg
132163f1511SMika WesterbergNotice the key is empty by default.
133163f1511SMika Westerberg
13454e36a2dSRandy DunlapIf the user does not want to use secure connect they can just ``echo 1``
135163f1511SMika Westerbergto the ``authorized`` attribute and the PCIe tunnels will be created in
13654e36a2dSRandy Dunlapthe same way as in the ``user`` security level.
137163f1511SMika Westerberg
138163f1511SMika WesterbergIf the user wants to use secure connect, the first time the device is
13954e36a2dSRandy Dunlapplugged a key needs to be created and sent to the device::
140163f1511SMika Westerberg
141163f1511SMika Westerberg  # key=$(openssl rand -hex 32)
142163f1511SMika Westerberg  # echo $key > /sys/bus/thunderbolt/devices/0-3/key
143163f1511SMika Westerberg  # echo 1 > /sys/bus/thunderbolt/devices/0-3/authorized
144163f1511SMika Westerberg
145163f1511SMika WesterbergNow the device is connected (PCIe tunnels are created) and in addition
146163f1511SMika Westerbergthe key is stored on the device NVM.
147163f1511SMika Westerberg
148163f1511SMika WesterbergNext time the device is plugged in the user can verify (challenge) the
149163f1511SMika Westerbergdevice using the same key::
150163f1511SMika Westerberg
151163f1511SMika Westerberg  # echo $key > /sys/bus/thunderbolt/devices/0-3/key
152163f1511SMika Westerberg  # echo 2 > /sys/bus/thunderbolt/devices/0-3/authorized
153163f1511SMika Westerberg
154163f1511SMika WesterbergIf the challenge the device returns back matches the one we expect based
155163f1511SMika Westerbergon the key, the device is connected and the PCIe tunnels are created.
15654e36a2dSRandy DunlapHowever, if the challenge fails no tunnels are created and error is
157163f1511SMika Westerbergreturned to the user.
158163f1511SMika Westerberg
15954e36a2dSRandy DunlapIf the user still wants to connect the device they can either approve
16054e36a2dSRandy Dunlapthe device without a key or write a new key and write 1 to the
161163f1511SMika Westerberg``authorized`` file to get the new key stored on the device NVM.
162163f1511SMika Westerberg
1633da88be2SMika WesterbergDe-authorizing devices
1643da88be2SMika Westerberg----------------------
1653da88be2SMika WesterbergIt is possible to de-authorize devices by writing ``0`` to their
1663da88be2SMika Westerberg``authorized`` attribute. This requires support from the connection
1673da88be2SMika Westerbergmanager implementation and can be checked by reading domain
1683da88be2SMika Westerberg``deauthorization`` attribute. If it reads ``1`` then the feature is
1693da88be2SMika Westerbergsupported.
1703da88be2SMika Westerberg
1713da88be2SMika WesterbergWhen a device is de-authorized the PCIe tunnel from the parent device
1723da88be2SMika WesterbergPCIe downstream (or root) port to the device PCIe upstream port is torn
1733da88be2SMika Westerbergdown. This is essentially the same thing as PCIe hot-remove and the PCIe
1743da88be2SMika Westerbergtoplogy in question will not be accessible anymore until the device is
1753da88be2SMika Westerbergauthorized again. If there is storage such as NVMe or similar involved,
1763da88be2SMika Westerbergthere is a risk for data loss if the filesystem on that storage is not
1773da88be2SMika Westerbergproperly shut down. You have been warned!
1783da88be2SMika Westerberg
179dcc3c9e3SMika WesterbergDMA protection utilizing IOMMU
180dcc3c9e3SMika Westerberg------------------------------
181dcc3c9e3SMika WesterbergRecent systems from 2018 and forward with Thunderbolt ports may natively
182dcc3c9e3SMika Westerbergsupport IOMMU. This means that Thunderbolt security is handled by an IOMMU
183dcc3c9e3SMika Westerbergso connected devices cannot access memory regions outside of what is
184dcc3c9e3SMika Westerbergallocated for them by drivers. When Linux is running on such system it
185dcc3c9e3SMika Westerbergautomatically enables IOMMU if not enabled by the user already. These
186dcc3c9e3SMika Westerbergsystems can be identified by reading ``1`` from
187dcc3c9e3SMika Westerberg``/sys/bus/thunderbolt/devices/domainX/iommu_dma_protection`` attribute.
188dcc3c9e3SMika Westerberg
189dcc3c9e3SMika WesterbergThe driver does not do anything special in this case but because DMA
190dcc3c9e3SMika Westerbergprotection is handled by the IOMMU, security levels (if set) are
191dcc3c9e3SMika Westerbergredundant. For this reason some systems ship with security level set to
192dcc3c9e3SMika Westerberg``none``. Other systems have security level set to ``user`` in order to
193dcc3c9e3SMika Westerbergsupport downgrade to older OS, so users who want to automatically
194dcc3c9e3SMika Westerbergauthorize devices when IOMMU DMA protection is enabled can use the
195dcc3c9e3SMika Westerbergfollowing ``udev`` rule::
196dcc3c9e3SMika Westerberg
197dcc3c9e3SMika Westerberg  ACTION=="add", SUBSYSTEM=="thunderbolt", ATTRS{iommu_dma_protection}=="1", ATTR{authorized}=="0", ATTR{authorized}="1"
198dcc3c9e3SMika Westerberg
199dacb1287SKranthi KuntalaUpgrading NVM on Thunderbolt device, host or retimer
200dacb1287SKranthi Kuntala----------------------------------------------------
20154e36a2dSRandy DunlapSince most of the functionality is handled in firmware running on a
202163f1511SMika Westerberghost controller or a device, it is important that the firmware can be
203163f1511SMika Westerbergupgraded to the latest where possible bugs in it have been fixed.
204163f1511SMika WesterbergTypically OEMs provide this firmware from their support site.
205163f1511SMika Westerberg
20654e36a2dSRandy DunlapThere is also a central site which has links where to download firmware
207163f1511SMika Westerbergfor some machines:
208163f1511SMika Westerberg
209163f1511SMika Westerberg  `Thunderbolt Updates <https://thunderbolttechnology.net/updates>`_
210163f1511SMika Westerberg
211dacb1287SKranthi KuntalaBefore you upgrade firmware on a device, host or retimer, please make
212dacb1287SKranthi Kuntalasure it is a suitable upgrade. Failing to do that may render the device
213dacb1287SKranthi Kuntalain a state where it cannot be used properly anymore without special
214dacb1287SKranthi Kuntalatools!
215163f1511SMika Westerberg
216163f1511SMika WesterbergHost NVM upgrade on Apple Macs is not supported.
217163f1511SMika Westerberg
218163f1511SMika WesterbergOnce the NVM image has been downloaded, you need to plug in a
219163f1511SMika WesterbergThunderbolt device so that the host controller appears. It does not
220163f1511SMika Westerbergmatter which device is connected (unless you are upgrading NVM on a
221163f1511SMika Westerbergdevice - then you need to connect that particular device).
222163f1511SMika Westerberg
22354e36a2dSRandy DunlapNote an OEM-specific method to power the controller up ("force power") may
224163f1511SMika Westerbergbe available for your system in which case there is no need to plug in a
225163f1511SMika WesterbergThunderbolt device.
226163f1511SMika Westerberg
227163f1511SMika WesterbergAfter that we can write the firmware to the non-active parts of the NVM
228163f1511SMika Westerbergof the host or device. As an example here is how Intel NUC6i7KYK (Skull
229163f1511SMika WesterbergCanyon) Thunderbolt controller NVM is upgraded::
230163f1511SMika Westerberg
231163f1511SMika Westerberg  # dd if=KYK_TBT_FW_0018.bin of=/sys/bus/thunderbolt/devices/0-0/nvm_non_active0/nvmem
232163f1511SMika Westerberg
233163f1511SMika WesterbergOnce the operation completes we can trigger NVM authentication and
234163f1511SMika Westerbergupgrade process as follows::
235163f1511SMika Westerberg
236163f1511SMika Westerberg  # echo 1 > /sys/bus/thunderbolt/devices/0-0/nvm_authenticate
237163f1511SMika Westerberg
238163f1511SMika WesterbergIf no errors are returned, the host controller shortly disappears. Once
239163f1511SMika Westerbergit comes back the driver notices it and initiates a full power cycle.
240163f1511SMika WesterbergAfter a while the host controller appears again and this time it should
241163f1511SMika Westerbergbe fully functional.
242163f1511SMika Westerberg
24354e36a2dSRandy DunlapWe can verify that the new NVM firmware is active by running the following
244163f1511SMika Westerbergcommands::
245163f1511SMika Westerberg
246163f1511SMika Westerberg  # cat /sys/bus/thunderbolt/devices/0-0/nvm_authenticate
247163f1511SMika Westerberg  0x0
248163f1511SMika Westerberg  # cat /sys/bus/thunderbolt/devices/0-0/nvm_version
249163f1511SMika Westerberg  18.0
250163f1511SMika Westerberg
25154e36a2dSRandy DunlapIf ``nvm_authenticate`` contains anything other than 0x0 it is the error
252163f1511SMika Westerbergcode from the last authentication cycle, which means the authentication
253163f1511SMika Westerbergof the NVM image failed.
254163f1511SMika Westerberg
255163f1511SMika WesterbergNote names of the NVMem devices ``nvm_activeN`` and ``nvm_non_activeN``
25654e36a2dSRandy Dunlapdepend on the order they are registered in the NVMem subsystem. N in
257163f1511SMika Westerbergthe name is the identifier added by the NVMem subsystem.
258163f1511SMika Westerberg
259*3fb10ea4SRajmohan ManiUpgrading on-board retimer NVM when there is no cable connected
260*3fb10ea4SRajmohan Mani---------------------------------------------------------------
261*3fb10ea4SRajmohan ManiIf the platform supports, it may be possible to upgrade the retimer NVM
262*3fb10ea4SRajmohan Manifirmware even when there is nothing connected to the USB4
263*3fb10ea4SRajmohan Maniports. When this is the case the ``usb4_portX`` devices have two special
264*3fb10ea4SRajmohan Maniattributes: ``offline`` and ``rescan``. The way to upgrade the firmware
265*3fb10ea4SRajmohan Maniis to first put the USB4 port into offline mode::
266*3fb10ea4SRajmohan Mani
267*3fb10ea4SRajmohan Mani  # echo 1 > /sys/bus/thunderbolt/devices/0-0/usb4_port1/offline
268*3fb10ea4SRajmohan Mani
269*3fb10ea4SRajmohan ManiThis step makes sure the port does not respond to any hotplug events,
270*3fb10ea4SRajmohan Maniand also ensures the retimers are powered on. The next step is to scan
271*3fb10ea4SRajmohan Manifor the retimers::
272*3fb10ea4SRajmohan Mani
273*3fb10ea4SRajmohan Mani  # echo 1 > /sys/bus/thunderbolt/devices/0-0/usb4_port1/rescan
274*3fb10ea4SRajmohan Mani
275*3fb10ea4SRajmohan ManiThis enumerates and adds the on-board retimers. Now retimer NVM can be
276*3fb10ea4SRajmohan Maniupgraded in the same way than with cable connected (see previous
277*3fb10ea4SRajmohan Manisection). However, the retimer is not disconnected as we are offline
278*3fb10ea4SRajmohan Manimode) so after writing ``1`` to ``nvm_authenticate`` one should wait for
279*3fb10ea4SRajmohan Mani5 or more seconds before running rescan again::
280*3fb10ea4SRajmohan Mani
281*3fb10ea4SRajmohan Mani  # echo 1 > /sys/bus/thunderbolt/devices/0-0/usb4_port1/rescan
282*3fb10ea4SRajmohan Mani
283*3fb10ea4SRajmohan ManiThis point if everything went fine, the port can be put back to
284*3fb10ea4SRajmohan Manifunctional state again::
285*3fb10ea4SRajmohan Mani
286*3fb10ea4SRajmohan Mani  # echo 0 > /sys/bus/thunderbolt/devices/0-0/usb4_port1/offline
287*3fb10ea4SRajmohan Mani
288163f1511SMika WesterbergUpgrading NVM when host controller is in safe mode
289163f1511SMika Westerberg--------------------------------------------------
290163f1511SMika WesterbergIf the existing NVM is not properly authenticated (or is missing) the
29154e36a2dSRandy Dunlaphost controller goes into safe mode which means that the only available
29254e36a2dSRandy Dunlapfunctionality is flashing a new NVM image. When in this mode, reading
293163f1511SMika Westerberg``nvm_version`` fails with ``ENODATA`` and the device identification
294163f1511SMika Westerberginformation is missing.
295163f1511SMika Westerberg
296163f1511SMika WesterbergTo recover from this mode, one needs to flash a valid NVM image to the
29754e36a2dSRandy Dunlaphost controller in the same way it is done in the previous chapter.
298e69b6c02SAmir Levy
299e69b6c02SAmir LevyNetworking over Thunderbolt cable
300e69b6c02SAmir Levy---------------------------------
30154e36a2dSRandy DunlapThunderbolt technology allows software communication between two hosts
302e69b6c02SAmir Levyconnected by a Thunderbolt cable.
303e69b6c02SAmir Levy
30454e36a2dSRandy DunlapIt is possible to tunnel any kind of traffic over a Thunderbolt link but
305e69b6c02SAmir Levycurrently we only support Apple ThunderboltIP protocol.
306e69b6c02SAmir Levy
30754e36a2dSRandy DunlapIf the other host is running Windows or macOS, the only thing you need to
30854e36a2dSRandy Dunlapdo is to connect a Thunderbolt cable between the two hosts; the
30954e36a2dSRandy Dunlap``thunderbolt-net`` driver is loaded automatically. If the other host is
31054e36a2dSRandy Dunlapalso Linux you should load ``thunderbolt-net`` manually on one host (it
31154e36a2dSRandy Dunlapdoes not matter which one)::
312e69b6c02SAmir Levy
313e69b6c02SAmir Levy  # modprobe thunderbolt-net
314e69b6c02SAmir Levy
315e69b6c02SAmir LevyThis triggers module load on the other host automatically. If the driver
316e69b6c02SAmir Levyis built-in to the kernel image, there is no need to do anything.
317e69b6c02SAmir Levy
318e69b6c02SAmir LevyThe driver will create one virtual ethernet interface per Thunderbolt
319e69b6c02SAmir Levyport which are named like ``thunderbolt0`` and so on. From this point
320e69b6c02SAmir Levyyou can either use standard userspace tools like ``ifconfig`` to
32154e36a2dSRandy Dunlapconfigure the interface or let your GUI handle it automatically.
32207c455eeSLinus Torvalds
323ce6a9002SMario LimoncielloForcing power
324ce6a9002SMario Limonciello-------------
325ce6a9002SMario LimoncielloMany OEMs include a method that can be used to force the power of a
32654e36a2dSRandy DunlapThunderbolt controller to an "On" state even if nothing is connected.
327ce6a9002SMario LimoncielloIf supported by your machine this will be exposed by the WMI bus with
328ce6a9002SMario Limoncielloa sysfs attribute called "force_power".
329ce6a9002SMario Limonciello
330ce6a9002SMario LimoncielloFor example the intel-wmi-thunderbolt driver exposes this attribute in:
331cce1fea5SAndy Shevchenko  /sys/bus/wmi/devices/86CCFD48-205E-4A77-9C48-2021CBEDE341/force_power
332ce6a9002SMario Limonciello
333ce6a9002SMario Limonciello  To force the power to on, write 1 to this attribute file.
334ce6a9002SMario Limonciello  To disable force power, write 0 to this attribute file.
335ce6a9002SMario Limonciello
336ce6a9002SMario LimoncielloNote: it's currently not possible to query the force power state of a platform.
337