Device Tree Configuration#

Overview#

This document provides guidance to define Device Tree (DT) configurations for:

  • Power Management Server (PM Server)

  • Life Cycle Management Server (LCM Server)

  • Life Cycle Management Client (LCM Client)

  • Guest VM power profile

DT Configuration for PM Server#

Purpose#

Defines the SoC operating point (OP) configuration for PM Server. The PM server uses a separate DTS for the HVRTOS process.

System-Level Properties (Required)#

  • compatible: String value that must be nvidia,{soc}-op-pm-server. Here {soc} could be t264 or t234, for example.

  • soc_sys_boot_op: Cell value containing system boot OP reference. This indicates the system will move to this SoC OP when boot is finished.

  • soc_sys_suspend_op: Cell value containing system suspend OP reference. This indicates the SoC OP which defines system suspend power mode.

  • soc_sys_shutdown_op: Cell value containing system shutdown OP reference. This indicates the SoC OP which defines system shutdown.

  • vm_boot_op: Cell value containing guest VM boot OP reference. This indicates the guest VM will move to this VM OP when the boot of the VM is finished.

  • vm_suspend_op: Cell value containing guest VM suspend OP reference. This indicates the guest VM OP which defines VM suspend power profile.

  • vm_shutdown_op: Cell value containing guest VM shutdown OP reference. This indicates the guest VM OP which defines VM shutdown power profile.

Operating Point Properties (Required)#

  • allowed_op_mode: Cell list containing allowed operating modes. This is used to define allowed SoC OP transitions.

  • soc_op: Cell value containing SoC OP identifier.

  • vmid: Cell value containing guest VM identifier.

  • vm_op: Cell value containing VM OP for the guest VM.

Optional Properties#

  • boot_sequence: Node defining boot order for guest VM and delays. This can be defined in a SoC OP X definition based on the guest VM boot sequence requirement while transitioning to that SoC OP X.

    • Format: sequence = <VM_ID0 DELAY_MS VM_ID1 DELAY_MS>. Total entries in this list will be (2*n) - 1, where N is the number of guest VM.

    • VM_ID: Guest VM identifier.

    • DELAY_MS: Delay in milliseconds for trigger to start guest VM boot.

  • resume_sequence: Node defining resume order after suspend. This can be defined in a SoC OP X definition based on the resume sequence requirement while transitioning to that SoC OP X.

    • Format: sequence = <VM_ID0 DELAY_MS VM_ID1 DELAY_MS>. Total entries in this list will be (2*n) - 1, where N is the number of guest VM.

    • VM_ID: Guest VM identifier.

    • DELAY_MS: Delay in milliseconds for trigger to resume guest VM boot.

  • system_suspend: Flag property that marks suspend OP. This is required in system suspend SoC OP definition for triggering system suspend.

  • system_shutdown: Flag property that marks shutdown OP. This is required in system shutdown SoC OP definition for triggering system shutdown.

Timeout Properties (Required)#

These properties are defined inside the operating_point node and control PM Server timing behavior during SoC OP operation transitions.

All timeout values are validated at parse time and must not exceed 3600000 milliseconds (1 hour). Values beyond this limit are treated as device tree configuration errors.

  • timeout_ms_txn_book_keeping: Timeout in milliseconds for transaction bookkeeping. The PM Server starts a timer after initiating a SOC operation transaction. If all per-VM operation completions are not received within this duration, the PM Server treats the transaction as failed and enters the error state. This timeout applies to the following scenarios:

    • SoC operation initiation guards the wait for all VM operation completions from the system manager.

    • VM force recovery shutdown guards the wait for shutdown completion from the system manager.

    • VM force recovery boot guards the wait for boot completion from the system manager.

    • Customizable: Yes

    • Default: 120000 (120 seconds)

    • Maximum: 3600000 (1 hour)

    • Value: Timeout in milliseconds

  • timeout_ms_lcm_err_notif_msg: Timeout in milliseconds for LCM error notification message. Reserved for future use.

    • Customizable: Yes

    • Default: 100

    • Maximum: 3600000 (1 hour)

    • Value: Timeout in milliseconds

  • timeout_ms_sysmgr_txn_msg: Timeout in milliseconds for system manager transaction message. Reserved for future use.

    • Customizable: Yes

    • Default: 1000

    • Maximum: 3600000 (1 hour)

    • Value: Timeout in milliseconds

Debug Logging Configuration (Required)#

The pm_server_control_dbg_logging node is a top-level sibling of the operating_point node in the PM Server device tree. It controls the PM Server’s runtime logging levels and event library behaviour.

Available Log Level Values#

  • CRITICAL_LOG (1): Critical errors only

  • ERR_LOG (2): Error messages

  • WARNING_LOG (3): Warning messages

  • DEBUG_LOG (4): Debug messages

  • DEBUG_EXTRA_LOG (5): Extra debug messages

  • DEBUG_FULL_LOG (6): Full verbose debug messages

  • EXTRA_VERBOSE_LOG (7): Maximum verbosity, all messages printed

Available Event Library Values#

  • ENABLE_EVENTLIB (0): Event library tracing enabled

  • DISABLE_EVENTLIB (1): Event library tracing disabled

The following properties are defined inside the pm_server_control_dbg_logging node:

  • max_nvlog_level: Maximum NVLog logging level. Controls the verbosity of NVLog output. Only messages at or below this level are logged.

    • Customizable: Yes

    • Default: DEBUG_LOG (4)

    • Value: 1-7 (CRITICAL_LOG to EXTRA_VERBOSE_LOG)

  • max_console_log_level: Maximum console logging level. Controls the verbosity of console output. Only messages at or below this level are printed to the console.

    • Customizable: Yes

    • Default: DEBUG_LOG (4)

    • Value: 1-7 (CRITICAL_LOG to EXTRA_VERBOSE_LOG)

  • max_eventlib_log_level: Maximum event library logging level. Controls the verbosity of eventlib trace output. Only messages at or below this level are traced via eventlib.

    • Customizable: Yes

    • Default: DEBUG_LOG (4)

    • Value: 1-7 (CRITICAL_LOG to EXTRA_VERBOSE_LOG)

  • eventlib_override: Event library enable/disable control. When set to DISABLE_EVENTLIB, the PM Server suppresses all eventlib trace output regardless of the log level setting.

    • Customizable: Yes

    • Default: ENABLE_EVENTLIB (0)

    • Value: ENABLE_EVENTLIB (0) or DISABLE_EVENTLIB (1)

Note

  • Provides SoC to guest VM OP mappings.

  • Provides the base guest VM to VM OP mappings.

  • Defines system-wide OP references.

  • Defines allowed SoC OP transitions from a given SoC OP.

Example DT Layout for 3 Guest VM#

/ {
    compatible = "nvidia,tegra264-pm-server";

    pm_server_control_dbg_logging {
        max_nvlog_level = <DEBUG_LOG>;
        max_console_log_level = <DEBUG_LOG>;
        max_eventlib_log_level = <DEBUG_LOG>;
        eventlib_override = <ENABLE_EVENTLIB>;
    };

    operating_point {
        compatible = "nvidia,t264-op-pm-server";
        soc_sys_boot_op = <PWR_SOC_OP_0>;
        soc_sys_suspend_op = <PWR_SOC_OP_254>;
        soc_sys_shutdown_op = <PWR_SOC_OP_255>;
        vm_boot_op = <PWR_VM_OP_0>;
        vm_suspend_op = <PWR_VM_OP_62>;
        vm_shutdown_op = <PWR_VM_OP_63>;
        timeout_ms_lcm_err_notif_msg = <100>;
        timeout_ms_sysmgr_txn_msg = <1000>;
        timeout_ms_txn_book_keeping = <120000>;

        soc_op_0 {
            allowed_op_mode = < PWR_SOC_OP_2 PWR_SOC_OP_255>;
            soc_op = <PWR_SOC_OP_0>;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_0>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_63>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_63>;
            };
            boot_sequence {
                sequence = <0>;
            };
        };

        soc_op_2 {
            allowed_op_mode = <PWR_SOC_OP_0 PWR_SOC_OP_4 PWR_SOC_OP_254 PWR_SOC_OP_255>;
            soc_op = <PWR_SOC_OP_2>;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_0>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_0>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_0>;
            };
            boot_sequence {
                sequence = <2 100 1>;
            };
            resume_sequence {
                sequence = <0 10 2 10 1>;
            };
        };

        soc_op_4 {
            allowed_op_mode = <PWR_SOC_OP_2 PWR_SOC_OP_254 PWR_SOC_OP_255>;
            soc_op = <PWR_SOC_OP_4>;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_0>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_62>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_62>;
            };
            resume_sequence {
                sequence = <0>;
            };
        };

        soc_op_254 {
            allowed_op_mode = <PWR_SOC_OP_2 PWR_SOC_OP_4>;
            soc_op = <PWR_SOC_OP_254>;
            system_suspend;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_62>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_62>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_62>;
            };
        };

        soc_op_255 {
            allowed_op_mode = <PWR_SOC_OP_0 PWR_SOC_OP_2>;
            soc_op = <PWR_SOC_OP_255>;
            system_shutdown;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_63>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_63>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_63>;
            };
        };
    };
};

DT Configuration for LCM Server#

Purpose#

Defines the SoC OP configuration for LCM server. The LCM server has a node in the privileged guest VM device tree.

System-Level Properties (Required)#

  • compatible: String value that must be nvidia,{soc}-op-lcm-server. Here {soc} could be t264 or t234, for example.

  • soc_sys_boot_op: Cell value containing system boot OP reference. This indicates the system will move to this SoC OP when boot is finished.

  • soc_sys_suspend_op: Cell value containing system suspend OP reference. This indicates the SoC OP which defines system suspend power mode.

  • soc_sys_shutdown_op: Cell value containing system shutdown OP reference. This indicates the SoC OP which defines system shutdown.

  • vm_boot_op: Cell value containing guest VM boot OP reference. This indicates the guest VM will move to this VM OP when the boot of the VM is finished.

  • vm_suspend_op: Cell value containing guest VM suspend OP reference. This indicates the guest VM OP which defines VM suspend power profile.

  • vm_shutdown_op: Cell value containing guest VM shutdown OP reference. This indicates the guest VM OP which defines VM shutdown power profile.

Operating Point Properties (Required)#

  • allowed_op_mode: Cell list containing allowed operating modes. This is used to define allowed SoC OP transitions.

  • soc_op: Cell value containing SoC OP identifier.

  • vmid: Cell value containing guest VM identifier.

  • vm_op: Cell value containing VM OP for the guest VM.

  • vm_state: Cell value defining NvDVMS defined guest VM functional states.

Available DVMS States#

  • NVDVMS_INIT (1): Initialization state

  • NVDVMS_INIT_DONE (2): Initialization complete

  • NVDVMS_OPERATIONAL (4): Normal operational state

  • NVDVMS_SUSPEND (6): Suspend state

  • NVDVMS_DEINIT_PREPARE (10): Preparing for deinitialization

  • NVDVMS_DEINIT (12): Deinitialization state

  • NVDVMS_REINIT (15): Reinitialization state

Note

  • Provides SoC to VM OP mappings.

  • Provides the base VM-to-operating-point mappings.

  • Defines system-wide OP references.

  • Defines allowed SoC OP transitions from a given SoC OP.

  • Defines SoC OP to guest VM functional state mapping.

Example DT Layout for 3 Guest VM#

/ {
    operating_point {
        compatible = "nvidia,t264-op-lcm-server";
        soc_sys_boot_op = <PWR_SOC_OP_0>;
        soc_sys_suspend_op = <PWR_SOC_OP_254>;
        soc_sys_shutdown_op = <PWR_SOC_OP_255>;
        vm_boot_op = <PWR_VM_OP_0>;
        vm_suspend_op = <PWR_VM_OP_62>;
        vm_shutdown_op = <PWR_VM_OP_63>;

        soc_op_0 {
            allowed_op_mode = < PWR_SOC_OP_2 PWR_SOC_OP_255>;
            soc_op = <PWR_SOC_OP_0>;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_0>;
                vm_state = <NVDVMS_INIT_DONE>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_63>;
                vm_state = <NVDVMS_DEINIT>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_63>;
                vm_state = <NVDVMS_DEINIT>;
            };
        };

        soc_op_2 {
            allowed_op_mode = <PWR_SOC_OP_0 PWR_SOC_OP_4 PWR_SOC_OP_254 PWR_SOC_OP_255>;
            soc_op = <PWR_SOC_OP_2>;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_0>;
                vm_state = <NVDVMS_INIT_DONE>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_0>;
                vm_state = <NVDVMS_INIT_DONE>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_0>;
                vm_state = <NVDVMS_INIT_DONE>;
            };
        };

        soc_op_4 {
            allowed_op_mode = <PWR_SOC_OP_2 PWR_SOC_OP_254>;
            soc_op = <PWR_SOC_OP_4>;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_0>;
                vm_state = <NVDVMS_INIT_DONE>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_62>;
                vm_state = <NVDVMS_SUSPEND>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_62>;
                vm_state = <NVDVMS_SUSPEND>;
            };
        };

        soc_op_254 {
            allowed_op_mode = <PWR_SOC_OP_2 PWR_SOC_OP_4>;
            soc_op = <PWR_SOC_OP_254>;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_62>;
                vm_state = <NVDVMS_SUSPEND>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_62>;
                vm_state = <NVDVMS_SUSPEND>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_62>;
                vm_state = <NVDVMS_SUSPEND>;
            };
        };

        soc_op_255 {
            allowed_op_mode = <PWR_SOC_OP_0 PWR_SOC_OP_2>;
            soc_op = <PWR_SOC_OP_255>;
            vm_0 {
                vmid = <0>;
                vm_op = <PWR_VM_OP_63>;
                vm_state = <NVDVMS_DEINIT>;
            };
            vm_1 {
                vmid = <1>;
                vm_op = <PWR_VM_OP_63>;
                vm_state = <NVDVMS_DEINIT>;
            };
            vm_2 {
                vmid = <2>;
                vm_op = <PWR_VM_OP_63>;
                vm_state = <NVDVMS_DEINIT>;
            };
        };
    };
};

DT Configuration for LCM Client#

Purpose#

Defines SoC OP configuration for LCM Client. The LCM client has a node in each guest VM device tree.

Required Properties#

  • compatible: String value that must be nvidia,{soc}-op-lcm-client.

  • soc_op: Cell value containing SoC OP reference.

  • vm_op: Cell value containing VM OP identifier.

Note

  • Provides client-specific SoC OP mappings to VM OPs.

  • Each client can have different mappings for the same SoC OPs.

Example DT Layout for Guest VM#

Guest VM 0#

/ {
    operating_point_lcm_client {
        compatible = "nvidia,t264-op-lcm-client";

        soc_op_0 {
            soc_op = <PWR_SOC_OP_0>;
            vm_op = <PWR_VM_OP_0>;
        };

        soc_op_2 {
            soc_op = <PWR_SOC_OP_2>;
            vm_op = <PWR_VM_OP_0>;
        };

        soc_op_4 {
            soc_op = <PWR_SOC_OP_4>;
            vm_op = <PWR_VM_OP_0>;
        };

        soc_op_254 {
            soc_op = <PWR_SOC_OP_254>;
            vm_op = <PWR_VM_OP_62>;
        };

        soc_op_255 {
            soc_op = <PWR_SOC_OP_255>;
            vm_op = <PWR_VM_OP_63>;
        };
    };
};

Guest VM 1#

/ {
    operating_point_lcm_client {
        compatible = "nvidia,t264-op-lcm-client";

        soc_op_0 {
            soc_op = <PWR_SOC_OP_0>;
            vm_op = <PWR_VM_OP_63>;
        };

        soc_op_2 {
            soc_op = <PWR_SOC_OP_2>;
            vm_op = <PWR_VM_OP_0>;
        };

        soc_op_4 {
            soc_op = <PWR_SOC_OP_4>;
            vm_op = <PWR_VM_OP_62>;
        };

        soc_op_254 {
            soc_op = <PWR_SOC_OP_254>;
            vm_op = <PWR_VM_OP_62>;
        };

        soc_op_255 {
            soc_op = <PWR_SOC_OP_255>;
            vm_op = <PWR_VM_OP_63>;
        };
    };
};

Guest VM 2#

/ {
    operating_point_lcm_client {
        compatible = "nvidia,t264-op-lcm-client";

        soc_op_0 {
            soc_op = <PWR_SOC_OP_0>;
            vm_op = <PWR_VM_OP_63>;
        };

        soc_op_2 {
            soc_op = <PWR_SOC_OP_2>;
            vm_op = <PWR_VM_OP_0>;
        };

        soc_op_4 {
            soc_op = <PWR_SOC_OP_4>;
            vm_op = <PWR_VM_OP_62>;
        };

        soc_op_254 {
            soc_op = <PWR_SOC_OP_254>;
            vm_op = <PWR_VM_OP_62>;
        };

        soc_op_255 {
            soc_op = <PWR_SOC_OP_255>;
            vm_op = <PWR_VM_OP_63>;
        };
    };
};

DT Configuration for VM OP#

Purpose#

Defines guest VM OP configurations. This configuration is part of each guest VM device tree. It defines the VM OP and functional state transitions.

Required Properties#

  • vm_op: Cell value containing VM power profile reference. Valid for both QNX and Linux VM.

  • allowed_vm_state: Cell listing allowed functional state transition in a guest VM. Valid for both QNX and Linux VM.

  • allowed_profiles: Cell listing allowed VM OP transitions from a VM OP. Valid for both QNX and Linux VM.

Note

  • Defines functional state related state machine.

  • Defines VM OP related state machine.

  • VM OP 62 and VM OP 63 do not need any definition.

Example for VM OP Definition for Linux VM#

/ {
    dvms_sequence {
        pwr_vm_op_0 {
            vm_op = <PWR_VM_OP_0>;
            policy {
                allowed_vm_state = <NVDVMS_DEINIT_PREPARE NVDVMS_REINIT>;
                allowed_profiles = <PWR_VM_OP_62 PWR_VM_OP_63>;
            };
        };
    };
};

Note

VM OP configuration is part of each guest VM device tree. The definition of VM OP can change but the restriction of VM OP transition happening only in NVDVMS_INIT_DONE will apply.