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