Custom DTB during flashing

I have a custom carrier which requires minor changes to the DTS/DTB compared to the official p3768-0000 development board. My target is Orin Nano 8GB and I’m using Jetpack 6.2. I’ve created DTBs following guidance from the developer manual. I have located and followed the instructions to include the modified DTB in the extlinux.conf (from Jetson Orin NX and Nano Series — NVIDIA Jetson Linux Developer Guide) once the system is installed. This results in a booting system which enables the additional hardware on my carrier board thus validating my DTB modifications.

For the next step of the integration I need to include the modified DTB as part of the flashing process but I have not located instructions or documentation on how to do this.

I’ve tried updating our flash.sh configuration file using guidance from Flashing Support — NVIDIA Jetson Linux Developer Guide and Partition Configuration — NVIDIA Jetson Linux Developer Guide but am unable to arrive at a system which successfully completes the flashing procedure and boots using the modified DTB.

Is there a supported method to boot using the modified DTB directly from flashing (without having to manually modify extlinux.conf on a running system)?

Hi adrian.hill1,

You have to create a custom board config, which should include the custom DTB file specified.

You can also check the flash log to know which DTB is in use.
Please share the full flash log for further check.

Sure.

I can see evidence of the problem in the first few lines of the flash log. My config file (below) tries to set the DTB_FILE variable to point to my modified DTB but when initrd_flash.sh is run the kernel DTB setting is somehow reset to tegra234-p3768-0000+p3767-0003-nv.dtb.

From the log:

****************************************************
*                                                  *
*  Step 2: Boot the device with flash initrd image *
*                                                  *
****************************************************
/home/adrian/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra/temp_initrdflash/bootloader0 /home/adrian/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra
./tegraflash.py --bl uefi_jetson_minimal_with_dtb_sigheader.bin.encrypt --bct br_bct_BR.bct --securedev  --bldtb tegra234-p3768-0000+p3767-0003-nv.dtb --applet rcm_2_encrypt.rcm --applet_softfuse rcm_1_encrypt.rcm --instance 1-2 --cmd "rcmboot"  --cfg secureflash.xml --chip 0x23 --mb1_bct mb1_bct_MB1_sigheader.bct.encrypt --mem_bct mem_rcm_sigheader.bct.encrypt --mb1_cold_boot_bct mb1_cold_boot_bct_MB1_sigheader.bct.encrypt --mb1_bin mb1_t234_prod_aligned_sigheader.bin.encrypt --psc_bl1_bin psc_bl1_t234_prod_aligned_sigheader.bin.encrypt --mem_bct_cold_boot mem_coldboot_sigheader.bct.encrypt  --bins "psc_fw pscfw_t234_prod_sigheader.bin.encrypt; mts_mce mce_flash_o10_cr_prod_sigheader.bin.encrypt; tsec_fw tsec_t234_sigheader.bin.encrypt; mb2_applet applet_t234_sigheader.bin.encrypt; mb2_bootloader mb2_t234_with_mb2_cold_boot_bct_MB2_sigheader.bin.encrypt; xusb_fw xusb_t234_prod_sigheader.bin.encrypt; pva_fw nvpva_020_sigheader.fw.encrypt; dce_fw display-t234-dce_sigheader.bin.encrypt; nvdec nvdec_t234_prod_sigheader.fw.encrypt; bpmp_fw bpmp_t234-TE950M-A1_prod_sigheader.bin.encrypt; bpmp_fw_dtb tegra234-bpmp-3767-0003-3509-a02_with_odm_sigheader.dtb.encrypt; rce_fw camera-rtcpu-t234-rce_sigheader.img.encrypt; ape_fw adsp-fw_sigheader.bin.encrypt; spe_fw spe_t234_sigheader.bin.encrypt; tos tos-optee_t234_sigheader.img.encrypt; eks eks_t234_sigheader.img.encrypt; kernel boot0.img; **kernel_dtb tegra234-p3768-0000+p3767-0003-nv.dtb**"    --bct_backup
Welcome to Tegra Flash
version 1.0.0
Type ? or help for help and q or quit to exit
Use ! to execute system commands

Our flash.conf:

source "${LDK_DIR}/p3768-0000-p3767-0000-a0.conf"

PINMUX_CONFIG="Orin-mach_04281-pinmux.dtsi";
PMC_CONFIG="Orin-mach_04281-padvoltage-default.dtsi";
DTB_FILE="orin-nano_mach-04821.dtb";
EMMC_CFG="flash_t234_qspi_nvme.xml";

if [ "${UPHYLANE}" = "c7x1" ]; then                                                                                                                                                                                      UPHYLANE_CONFIG="tegra234-mb1-bct-uphylane-si-c7x1.dtsi";
        EMMC_CFG="flash_t234_qspi_nvme_c7.xml";
elif [ "${UPHYLANE}" = "c7x2" ]; then
        UPHYLANE_CONFIG="tegra234-mb1-bct-uphylane-si-c7x2.dtsi";
        EMMC_CFG="flash_t234_qspi_nvme_c7.xml";
fi

Initrd_flash command line:

sudo ./tools/kernel_flash/l4t_initrd_flash.sh --external-device nvme0n1p1 -p "-c ./bootloader/generic/cfg/flash_t234_qspi.xml" -c ./tools/kernel_flash/flash_l4t_t234_nvme.xml --network usb0 mach-04821_orin-nano8g external

Please share your custom board config (i.e. mach-04821_orin-nano8g.conf) and full flash log as file here for further check.

Have you also referred to Board Configuration to create custom board config?

KevinFFF,
Please see attached.

flash_1-2_0_20250714-152100.log (48.0 KB)

mach-04821_orin-nano8g.conf.txt (2.1 KB)

This flash log only includes the flashing part.
There should be another log including generating the image before flash and it would indicate which dtb in use.

Okay, I found a potential issue in your configuration.
Your custom board config will include p3768-0000-p3767-0000-a0.conf.
You can find the following lines in this config.

DTB_FILE=tegra234-p3768-0000+p3767-0000-nv.dtb;
TBCDTB_FILE="${DTB_FILE}";

DTB_FILE is the DTB used for kernel.
TBCDTB_FILE is the DTB used for bootloader(UEFI).
We will assign them with the same dtb by default.

In your custom board config, you’ve specified DTB_FILE with your custom board config while you don’t assign it for TBCDTB_FILE.
As a result, TBCDTB_FILE will still use tegra234-p3768-0000+p3767-0000-nv.dtb.
In R36.x, we will use device tree from UEFI-DTB by default if FDT is not specified in extlinux.conf.
Please refer to DTB Support for details.

Kevin,

I’ve updated mach-04821_orin-nano8g.conf to included assignment of variable TBCDTB_FILE.

I’ve rerun the initrd_flash process and captured the entire terminal output.

I note that the image generation still seems to ignore the DTB_FILE and TBCDTB_FILE settings and proceeds with the default tegra234-p3768-0000+p3767-0000-nv.dtb for both.

flash.txt (357.9 KB)
mach-04821_orin-nano8g.conf.txt (2.1 KB)

Thanks,
-Adrian

I don’t see you’ve specified TBCDTB_FILE in mach-04821_orin-nano8g.conf.txt you shared.

copying dtbfile(/home/adrian/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra/kernel/dtb/tegra234-p3768-0000+p3767-0003-nv.dtb)... done.
..
copying tbcdtbfile(/home/adrian/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra/kernel/dtb/tegra234-p3768-0000+p3767-0003-nv.dtb)... done.

From the log you shared, it uses tegra234-p3768-0000+p3767-0003-nv.dtb for both kernel and bootloader DTB.

Please provide the result of the following command on your host.

$ cd <Linux_for_Tegra>/
$ ls -l mach-04821_orin-nano8g.conf

and also p3768-0000-p3767-0000-a0.conf and p3767.conf.common under <Linux_for_Tegra>/

Kevin,

My apologies. I have attached the incorrect version of my config file–they reside on a different host and must be copied manually to post here. I’ve captured the terminal output and attached:

adrian@devone:~/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra$ ls -l mach-04821_orin-nano8g.conf
-rw-r--r-- 1 adrian adrian 2229 Jul 21 14:52 mach-04821_orin-nano8g.conf
adrian@devone:~/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra$ cat !$
cat mach-04821_orin-nano8g.conf
# SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: BSD-3-Clause
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

source "${LDK_DIR}/p3768-0000-p3767-0000-a0.conf"
#source "${LDK_DIR}/p3767.conf.common";

PINMUX_CONFIG="Orin-mach_04281-pinmux.dtsi";
PMC_CONFIG="Orin-mach_04281-padvoltage-default.dtsi";
DTB_FILE="orin-nano_mach-04821.dtb";
TBCDTB_FILE="orin-nano_mach-04821.dtb";
EMMC_CFG="flash_t234_qspi_nvme.xml";
#EMMC_CFG="flash_t234_qspi.xml";

if [ "${UPHYLANE}" = "c7x1" ]; then
        UPHYLANE_CONFIG="tegra234-mb1-bct-uphylane-si-c7x1.dtsi";
        EMMC_CFG="flash_t234_qspi_nvme_c7.xml";
elif [ "${UPHYLANE}" = "c7x2" ]; then
        UPHYLANE_CONFIG="tegra234-mb1-bct-uphylane-si-c7x2.dtsi";
        EMMC_CFG="flash_t234_qspi_nvme_c7.xml";
fi

Also:

adrian@devone:~/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra$ ls -l p3768-0000-p3767-0000-a0.conf
-rw-rw-r-- 1 adrian adrian 4652 Jul 10 16:49 p3768-0000-p3767-0000-a0.conf
adrian@devone:~/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra$ cat !$
cat p3768-0000-p3767-0000-a0.conf
# SPDX-FileCopyrightText: Copyright (c) 2023-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: BSD-3-Clause
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

source "${LDK_DIR}/p3767.conf.common";

# update_flash_args_common:
update_flash_args_common()
{
        local emcfuse_bin="${1}";
        local emcpredefvalue="${2}"

        if [ ${EMC_OPT_DISABLE_FUSE_OVERRIDE} -eq 0 ]; then
                return;
        fi

        # EMCFUSE_VALUE can be passed by user
        emc_opt_disable_fuse="${DEFAULT_EMC_FUSE}";

        if [ -n "${emcpredefvalue}" ]; then
                emc_opt_disable_fuse="${emcpredefvalue}";
        elif [ -f "${emcfuse_bin}" ]; then
                emc_opt_disable_fuse=`xxd -ps "${emcfuse_bin}" | xxd -p -r | grep "OptEmcDisable" | awk '{print $2}' | sed 's/.*\(.\)/\1/'`;
        fi

        echo "emc_opt_disable_fuse:(${emc_opt_disable_fuse})"

        # Select bpmp-dtb and kernel-dtb based on SKU
        if [ "${board_sku}" = "0000" ] || [ "${board_sku}" = "0002" ]; then
                # use default DTB and CFG files except for TS1 & EB1 revisions
                if [ "${board_FAB}" = "TS1" ] || [ "${board_FAB}" = "EB1" ]; then
                        PINMUX_CONFIG="tegra234-mb1-bct-pinmux-p3767-dp-a01.dtsi";
                        PMC_CONFIG="tegra234-mb1-bct-padvoltage-p3767-dp-a01.dtsi";
                        BPFDTB_FILE="tegra234-bpmp-3767-0000-a00-3509-a02.dtb";
                fi
                DTB_FILE=tegra234-p3768-0000+p3767-0000-nv.dtb;
        elif [ "${board_sku}" = "0001" ]; then
                BPFDTB_FILE="tegra234-bpmp-3767-0001-3509-a02.dtb";
                DTB_FILE=tegra234-p3768-0000+p3767-0001-nv.dtb;
        elif [ "${board_sku}" = "0003" ]; then
                BPFDTB_FILE="tegra234-bpmp-3767-0003-3509-a02.dtb";
                DTB_FILE=tegra234-p3768-0000+p3767-0003-nv.dtb;
        elif [ "${board_sku}" = "0004" ]; then
                BPFDTB_FILE="tegra234-bpmp-3767-0004-3509-a02.dtb";
                DTB_FILE=tegra234-p3768-0000+p3767-0004-nv.dtb;
        elif [ "${board_sku}" = "0005" ]; then
                BPFDTB_FILE="tegra234-bpmp-3767-0003-3509-a02.dtb";
                DTB_FILE=tegra234-p3768-0000+p3767-0005-nv.dtb;
        else
                echo "Error: Unrecognized module SKU ${board_sku}";
                exit 1;
        fi
        TBCDTB_FILE="${DTB_FILE}";
}

# update_flash_args:
update_flash_args()
{
        # All updates should go into update_flash_args_common to allow
        # for other files to include this file and override variables.
        update_flash_args_common
}

# update_emmc_cfg_for_bup:
update_emmc_cfg_for_bup()
{
        local bup_type="${1}"

        if [ "${bup_blob}" -ne 0 ] && [ "${bup_type}" == "bl" ]; then
                EMMC_CFG="flash_t234_qspi.xml";
        fi
}

DEFAULT_EMC_FUSE="0";
PINMUX_CONFIG="tegra234-mb1-bct-pinmux-p3767-dp-a03.dtsi";
PMC_CONFIG="tegra234-mb1-bct-padvoltage-p3767-dp-a03.dtsi";
BPFDTB_FILE="tegra234-bpmp-3767-0000-a02-3509-a02.dtb";
EMMC_CFG="flash_t234_qspi_sd.xml";
DTB_FILE=tegra234-p3768-0000+p3767-0000-nv.dtb;
TBCDTB_FILE="${DTB_FILE}";
OVERLAY_DTB_FILE+=",tegra234-p3768-0000+p3767-0000-dynamic.dtbo";

# Note: the lines below are used for reference only. It is not
# recommended for production.
# Rootfs A/B:
if [[ "${ROOTFS_AB}" == 1 && "${ROOTFS_ENC}" == "" ]]; then
        EMMC_CFG=flash_t234_qspi_sd_rootfs_ab.xml;
# Disk encryption support:
elif [[ "${ROOTFS_AB}" == "" && "${ROOTFS_ENC}" == 1 ]]; then
        EMMC_CFG=flash_t234_qspi_sd_enc_rfs.xml;
# Rootfs A/B + Disk encryption support:
elif [[ "${ROOTFS_AB}" == 1 && "${ROOTFS_ENC}" == 1 ]]; then
        EMMC_CFG=flash_t234_qspi_sd_enc_rootfs_ab.xml;
fi;
adrian@devone:~/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra$ ls -l p3767.conf.common
-rw-rw-r-- 1 adrian adrian 8359 Jan  7  2025 p3767.conf.common
adrian@devone:~/nvidia/nvidia_sdk/JetPack_6.2_Linux_JETSON_ORIN_NANO_TARGETS/Linux_for_Tegra$ cat !$
cat p3767.conf.common
# SPDX-FileCopyrightText: Copyright (c) 2022-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: BSD-3-Clause
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice, this
# list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its
# contributors may be used to endorse or promote products derived from
# this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

sub_var_token()
{
        local var="$1";
        local from="$2";
        local to="$3";
        if [ "${var}" != "" -a "${!var}" != "" ]; then
                if [[ "${!var}" =~ "${from}" ]]; then
                        local val=`echo "${!var}" | sed -e s/${from}/${to}/`;
                        eval "${var}=${val}";
                fi;
        fi;
}

# process_chip_sku_version:
#
process_chip_sku_version()
{
        local chip_sku="${1}";
        local chip_minor_revision_id="${2}";
        local bootrom_revision_id="${3}";
        local ramcode="${4}";
        local fuselevel="${5}";
        local board_FAB="${6}";
        declare -A bpmp_fw_binary;
        bpmp_fw_binary['D3']="TE980M-A1";
        bpmp_fw_binary['D4']="TE980M-A1";
        bpmp_fw_binary['D5']="TE950M-A1";
        bpmp_fw_binary['D6']="TE950M-A1";

        chip_sku="${chip_sku:-${DEFAULT_CHIP_SKU}}"

        if [[ "${chip_sku}" =~ ":" ]]; then
                chip_SKU=`echo "${chip_sku}" | awk -F ":" '{print $4}'`;
        fi;

        # do not override BPFFILE for INT SKU "00"
        if [ "${chip_SKU}" != "00" ]; then
                BPFFILE=`echo "${BPFFILE}" | sed "s|T.*-A1|${bpmp_fw_binary[${chip_SKU}]}|"`;
        fi;

        echo "Chip SKU(${chip_sku}) ramcode(${ramcode}) fuselevel(${fuselevel}) board_FAB(${board_FAB})"
}

# Process_board_version:
# Trigger to read the board id and board version from EEPROM on main board.
# undef for non eeprom boards.
process_board_version()
{
        local board_id="${1}";
        local board_version="${2}";
        local board_sku="${3}";
        local board_revision="${4}";
        local chiprev="${5}";

        if [ "${board_sku}" = "0004" ]; then
                RAMCODE=4; # Micron
                # RAMCODE=5; # Samsung
        fi
        echo "Board ID(${board_id}) version(${board_version}) sku(${board_sku}) revision(${board_revision})"

        if [ "${board_sku}" = "0000" ] || [ "${board_sku}" = "0002" ]; then
                if [ "${board_FAB}" = "TS1" ] || [ "${board_FAB}" = "EB1" ]; then
                        PMIC_CONFIG="tegra234-mb1-bct-pmic-p3767-0000-a00.dts";
                fi
        fi

        if [ "${board_sku}" = "0001" ] || [ "${board_sku}" = "0003" ] || \
                [ "${board_sku}" = "0005" ]; then
                        EMMC_BCT="tegra234-p3767-0001-sdram-l4t.dts";
                        WB0SDRAM_BCT="tegra234-p3767-0001-wb0sdram-l4t.dts";
        elif [ "${board_sku}" = "0004" ]; then
                EMMC_BCT="tegra234-p3767-0004-sdram-l4t.dts";
                WB0SDRAM_BCT="tegra234-p3767-0004-wb0sdram-l4t.dts";
        fi
}

process_fuse_level()
{
        local fuselevel="${1}";
        local srctoken="_dev";
        local trgtoken="_prod";

        # fuselevel:
        #       "fuselevel_unknown"
        #       "fuselevel_nofuse"
        #       "fuselevel_production"
        #
        case ${fuselevel} in
        fuselevel_unknown)
                return;
                ;;
        fuselevel_nofuse)
                srctoken="_prod";
                trgtoken="_dev";
                ;;
        *)
                ;;
        esac;
        sub_var_token "MB1FILE"    "${srctoken}" "${trgtoken}";
        sub_var_token "SOSFILE"    "${srctoken}" "${trgtoken}";
        sub_var_token "NVHOSTNVDEC" "${srctoken}" "${trgtoken}";
        sub_var_token "BPFFILE" "${srctoken}" "${trgtoken}";
        sub_var_token "MTSMCEFILE" "${srctoken}" "${trgtoken}";
        sub_var_token "PSCFW" "${srctoken}" "${trgtoken}";
        sub_var_token "PSCBL1FILE" "${srctoken}" "${trgtoken}";
        sub_var_token "WB0BOOT" "${srctoken}" "${trgtoken}";
        sub_var_token "PSC_RF" "${srctoken}" "${trgtoken}";
        sub_var_token "XUSBFILE" "${srctoken}" "${trgtoken}";
        sub_var_token "READINFOFILE" "${srctoken}" "${trgtoken}";
        sub_var_token "NVKEY_FILE" "${srctoken}" "${trgtoken}";
        sub_var_token "NVENCRYPTKEY_FILE" "${srctoken}" "${trgtoken}";
}

# Common values and/or defaults across P3767:

ODMDATA="gbe-uphy-config-8,hsstp-lane-map-3,hsio-uphy-config-0";
CHIPID=0x23;
ITS_FILE=;
OVERLAY_DTB_FILE="L4TConfiguration.dtbo,tegra234-carveouts.dtbo,tegra-optee.dtbo";
CMDLINE_ADD="mminit_loglevel=4 console=ttyTCU0,115200 firmware_class.path=/etc/firmware fbcon=map:0 nospectre_bhb video=efifb:off console=tty0"
target_board="generic";
ROOTFSSIZE=55GiB;
ROOT_DEV="mmcblk0p1 ------------ internal eMMC.
        sda1 ----------------- external USB devices. (USB memory stick, HDD)
        eth0 ----------------- nfsroot via RJ45 Ethernet port.
        eth1 ----------------- nfsroot via USB Ethernet interface.";
TEGRABOOT="bootloader/mb2_t234.bin";
BOOTLOADER="bootloader/mb2_t234.bin";
UEFIBL="uefi_jetson_with_dtb.bin";
RCM_UEFIBL="uefi_jetson_minimal_with_dtb.bin";
TBCFILE="bootloader/uefi_jetson.bin";
RCM_TBCFILE="bootloader/uefi_jetson_minimal.bin";
BPFFILE="bootloader/bpmp_t234-TE980M-A1_prod.bin";
TOSFILE="bootloader/tos_t234.img";
EKSFILE="bootloader/eks_t234.img";
PSCBL1FILE="bootloader/psc_bl1_t234_prod.bin";
PSCFW="bootloader/pscfw_t234_prod.bin";
TSECFW="bootloader/tsec_t234.bin";
NVHOSTNVDEC="bootloader/nvdec_t234_prod.fw";
DCE="bootloader/display-t234-dce.bin";
MB1FILE="bootloader/mb1_t234_prod.bin";
SOSFILE="bootloader/mb1_t234_prod.bin";
MB2BLFILE="bootloader/mb2_t234.bin";
SPEFILE="bootloader/spe_t234.bin";
CAMERAFW="bootloader/camera-rtcpu-t234-rce.img";
EMCFUSE="fuse_t234.xml";
NVKEY_FILE="bootloader/t234_rsa_prod.key";
NVENCRYPTKEY_FILE="bootloader/t234_sbk_prod.key";
MTSMCEFILE="bootloader/mce_flash_o10_cr_prod.bin";
APPLET="bootloader/applet_t234.bin";
APEFILE="bootloader/adsp-fw.bin";
XUSBFILE="bootloader/xusb_t234_prod.bin";
EMC_OPT_DISABLE_FUSE_OVERRIDE="1";
WB0BOOT="bootloader/sc7_t234_prod.bin";
MB2_RF="bootloader/mb2rf_t234.bin";
PSC_RF="bootloader/psc_rf_t234_prod.bin";
DFLT_CUSTOMER_INFO="bootloader/default_custinfo.bin"
UEFI_OS_LAUNCHER=1;

# BCT args:
#
BCT="--sdram_config";
BINSARGS="--bins \"";
EMMC_BCT="tegra234-p3767-0000-sdram-l4t.dts";
WB0SDRAM_BCT="tegra234-p3767-0000-wb0sdram-l4t.dts";
MISC_CONFIG="tegra234-mb1-bct-misc-p3767-0000.dts";
DEV_PARAMS="tegra234-br-bct-p3767-0000-l4t.dts";
# Booting from chain B
DEV_PARAMS_B="tegra234-br-bct_b-p3767-0000-l4t.dts";
EMC_FUSE_DEV_PARAMS="tegra234-br-bct-diag-boot.dts";
UPHYLANE_CONFIG="tegra234-mb1-bct-uphylane-si.dtsi"
SCR_CONFIG="tegra234-mb2-bct-scr-p3767-0000.dts";
PMIC_CONFIG="tegra234-mb1-bct-pmic-p3767-0000-a02.dts";
DEVICEPROD_CONFIG="tegra234-mb1-bct-cprod-p3767-0000.dts";
PROD_CONFIG="tegra234-mb1-bct-prod-p3767-0000.dts";
BOOTROM_CONFIG="tegra234-mb1-bct-reset-p3767-0000.dts";
DEVICE_CONFIG="tegra234-mb1-bct-device-p3767-0000.dts";
GPIOINT_CONFIG="tegra234-mb1-bct-gpioint-p3767-0000.dts";
MB2_BCT="tegra234-mb2-bct-misc-p3767-0000.dts";
INITRD_IN_BOOTIMG="yes";
INITRD="bootloader/l4t_initrd.img";
FBFILE="fuse_bypass_t234.xml";
DEFAULT_CHIP_SKU="00:00:00:D3";
PVAFILE="bootloader/nvpva_020.fw"

# Default FAB: Force P3767 boards without properly programmed EEPROM.
# Values: A00 ->
DEFAULT_FAB="A00";
VERFILENAME="qspi_bootblob_ver.txt";
OTA_BOOT_DEVICE="/dev/mtdblock0";
OTA_GPT_DEVICE="/dev/mtdblock0";
READINFOFILE="bootloader/readinfo_t234_min_prod.xml";
# Rollback protection
MINRATCHET_CONFIG="tegra234-mb1-bct-ratchet-p3767-0000.dts";

# Rootfs A/B:
if [ "${ROOTFS_AB}" == 1 ]; then
        rootfs_ab=1
        val=$(echo ${ROOTFSSIZE} | sed 's/GiB//g');
        val=`expr ${val} / 2`;
        ROOTFSSIZE="${val}GiB";
fi;

# Disk encryption support:
if [ "${ROOTFS_ENC}" == 1 ]; then
        disk_enc_enable=1
fi;

It seems your DTB may be updated by update_flash_args

Please try updating the following line in p3768-0000-p3767-0000-a0.conf to check if it could help for your case.

        elif [ "${board_sku}" = "0003" ]; then
                BPFDTB_FILE="tegra234-bpmp-3767-0003-3509-a02.dtb";
-                DTB_FILE=tegra234-p3768-0000+p3767-0003-nv.dtb;
+                DTB_FILE=orin-nano_mach-04821.dtb;
+                TBCDTB_FILE=orin-nano_mach-04821.dtb;

This is working now. I can install Jetpack to our NVMe drive and it boots using our device-tree.
Thank you!

-Adrian