# Enable the I2C interface Enable an I^2^C instance for the application processor (HLOS and UEFI) by granting TrustZone access and then enabling the instance in each subsystem device tree. Grant TrustZone access permission, and then set the node status in the Linux kernel, UEFI, and XBL device trees. Complete the following steps for each subsystem that uses the instance. Note Remove any existing configuration before you reconfigure an instance. To configure an instance as I^2^C when it was previously set as SPI, review every location where it’s configured as SPI, remove those settings, and then continue. 1. Grant access permission in TrustZone in the `oem_qupac_config.h` file. File location //trustzone_images/core/settings/buses/qup_access_control/config/glymur/oem_qupac_config.h Copy to clipboard Add or update the security permissions entry #define QUPV3_SE_SECURITY_PERMISSIONS_TABLE_DEFAULT \ + { QUPV3_1_SE0, QUPV3_PROTOCOL_I2C, QUPV3_MODE_FIFO, AC_HLOS, TRUE, TRUE, FALSE }, /*Touchscreen I2C*/ \ Copy to clipboard 1. Confirm that the subsystem mapping matches the security permissions configuration. #define QUPV3_AC_SE_MAPPING_TABLE \ + { QUPV3_1_SE0, AC_HLOS }, \ Copy to clipboard 2. Enable the instance in the Linux kernel device tree. 1. Open the Linux kernel device tree file: /arch/arm64/boot/dts/qcom/glymur.dtsi Copy to clipboard 2. Set the node status to `okay`. i2c0: i2c@b80000 { compatible = "qcom,geni-i2c"; reg = <0x0 0x00b80000 0x0 0x4000>; interrupts = ; clocks = <&gcc GCC_QUPV3_WRAP0_S0_CLK>; clock-names = "se"; dmas = <&gpi_dma0 0 0 QCOM_GPI_I2C>, <&gpi_dma0 1 0 QCOM_GPI_I2C>; dma-names = "tx", "rx"; pinctrl-0 = <&qup_i2c0_data_clk>; pinctrl-names = "default"; status = "disabled"; }; Copy to clipboard 3. For a UEFI use case, enable the instance in the UEFI device tree. 1. Open the UEFI device tree file. All UEFI I^2^C instances are declared in: edk2-non-oss-qualcomm\Silicon\Qualcomm\Glymur\GlymurSiliconPkg\Settings\DeviceTree\Core\Buses\qup_common\qupv3.dtsi Copy to clipboard 2. Change the node status from `disabled` to `okay`. 3. Enable the required instance in the following header file: Silicon/Qualcomm/Glymur/GlymurSiliconPkg/Settings/DeviceTree/Include/qup_defines.h Copy to clipboard 4. Enable the required instance, for example: #define ENABLE\_QUP0\_SE0 5. For information about using the instance in UEFI, see the open source EDK [I2cMaster.h](https://github.com/tianocore/edk2/blob/master/MdePkg/Include/Protocol/I2cMaster.h). 4. For an XBL use case, enable the instance in the XBL device tree. 1. Open the XBL device tree file. All XBL I^2^C instances are declared in: Settings\Soc\Glymur\Core\Buses\qup_common\qupv3.dtsi Copy to clipboard 2. Change the node status from `disabled` to `okay`. 3. Enable the required instance in the following header file: Settings\Soc\Glymur\Include\qup_defines.h Copy to clipboard 4. Enable the required instance, for example #define ENABLE\_QUP0\_SE0 5. Note that no I^2^C use case is currently enabled in XBL by default. After you enable the instance in each subsystem device tree, the I^2^C bus is available to the owning subsystem. ## Related - [Enable the SPI interface](https://docs.qualcomm.com/doc/80-A0399-8/topic/enable-spi-interface.html) - [Enable the UART interface](https://docs.qualcomm.com/doc/80-A0399-8/topic/enable-uart-interface.html) - [Enable a peripheral interface in TrustZone](https://docs.qualcomm.com/doc/80-A0399-8/topic/enable-peripheral-interface-trustzone.html) Last Published: Sep 17, 2026 [Previous Topic Provide HLOS access to the SMMU](https://docs.qualcomm.com/bundle/publicresource/80-A0399-8/topics/provide-hlos-access-to-smmu.md) [Next Topic Enable the SPI interface](https://docs.qualcomm.com/bundle/publicresource/80-A0399-8/topics/enable-spi-interface.md)