Nxp imx93: Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

Hello there,

I'm working on getting OpenWrt v22.03 running on NXP's imx93 eval kit. The board came with a U-boot and Linux build on it. I copied the Uboot onto an SD card and have been using that as my bootloader and building OpenWrt with NXP's ls1012a-frwy as the target device as to my knowledge that's the most similar device. I'm still new to embedded work so correct me if I'm wrong on that and should be choosing a different target. Anyways, after putting the build onto my SD and booting, I get the error Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) I've ensured my partition, filesystem, and boot args all use ext4. Can someone explain why its unable to mount the filesystem and point me in the right direction? I can provide further info if needed. Thanks in advance!

My bootloader environment

arch=arm
auth_os=auth_cntr ${cntr_addr}
baudrate=115200
board=imx93_evk
board_name=11X11_EVK
board_rev=iMX93
boot_a_script=load ${devtype} ${devnum}:${distro_bootpart} ${scriptaddr} ${prefix}${script}; source ${scriptaddr}
boot_efi_binary=load ${devtype} ${devnum}:${distro_bootpart} ${kernel_addr_r} efi/boot/bootaa64.efi; if fdt addr ${fdt_addr_r}; then bootefi ${kernel_addr_r} ${fdt_addr_r};else bootefi ${kernel_addr_r} ${fdtcontroladdr};fi
boot_efi_bootmgr=if fdt addr ${fdt_addr_r}; then bootefi bootmgr ${fdt_addr_r};else bootefi bootmgr;fi
boot_extlinux=sysboot ${devtype} ${devnum}:${distro_bootpart} any ${scriptaddr} ${prefix}${boot_syslinux_conf}
boot_fit=no
boot_net_usb_start=usb start
boot_os=booti 0x80400000 - 0x83000000
boot_prefixes=/ /boot/
boot_script_dhcp=boot.scr.uimg
boot_scripts=boot.scr.uimg boot.scr
boot_syslinux_conf=extlinux/extlinux.conf
boot_targets=mmc0 mmc1 usb0 
bootargs=console=ttyS0,115200 earlycon root=/dev/mmcblk1p2
bootcmd=mmc dev 1; if run loadimage; then run mmcboot; else run netboot; fi
bootcmd_mfg=run mfgtool_args;if iminfo ${initrd_addr}; then if test ${tee} = yes; then bootm ${tee_addr} ${initrd_addr} ${fdt_addr}; else booti ${loadaddr} ${initrd_addr} ${fdt_addr}; fi; else echo "Run fastboot ..."; fastboot auto; fi;
bootcmd_mmc0=devnum=0; run mmc_boot
bootcmd_mmc1=devnum=1; run mmc_boot
bootcmd_usb0=devnum=0; run usb_boot
bootdelay=2
bootfstype=fat
bootm_size=0x10000000
bootscript=echo Running bootscript from mmc ...; source
bsp_bootcmd=echo Running BSP bootcmd ...; mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if test ${sec_boot} = yes; then if run loadcntr; then run mmcboot; else run netboot; fi; else if run loadimage; then run mmcboot; else run netboot; fi; fi; fi; fi;
cntr_addr=0x98000000
cntr_file=os_cntr_signed.bin
console=ttyS0,115200 earlycon
cpu=armv8
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
efi_dtb_prefixes=/ /dtb/ /dtb/current/
emmc_dev=0
eth1addr=00:04:9f:08:00:27
ethact=ethernet@428a0000
ethaddr=00:04:9f:08:00:28
ethprime=eth1
fastboot_dev=mmc1
fdt_addr=0x83000000
fdt_addr_r=0x90000000
fdt_high=0xffffffffffffffff
fdtaddr=83000000
fdtcontroladdr=fceec0d0
fdtfile=imx93-11x11-evk.dtb
fdtheader_addr_r=0x80100000
fileaddr=83000000
filesize=ab19
image=Image
initrd_addr=0x83800000
initrd_high=0xffffffffffffffff
jh_mmcboot=setenv fdtfile imx93-11x11-evk-root.dtb; setenv jh_clk clk_ignore_unused mem=1248MB kvm-arm.mode=nvhe; if run loadimage; then run mmcboot;else run jh_netboot; fi; 
jh_netboot=setenv fdtfile imx93-11x11-evk-root.dtb; setenv jh_clk clk_ignore_unused mem=1248MB kvm-arm.mode=nvhe; run netboot; 
kboot=booti 
kernel_addr_r=0x92000000
kernel_addr_sd=0x8000
kernel_size=0x2800000
kernel_size_sd=0x16000
kernelhdr_addr_sd=0x4000
kernelhdr_size_sd=0x000
kernelheader_addr=0x1fc000
kernelheader_addr_r=0x80200000
kernelheader_size=0x40000
load_addr=0x92000000
load_efi_dtb=load ${devtype} ${devnum}:${distro_bootpart} ${fdt_addr_r} ${prefix}${efi_fdtfile}
loadaddr=0x80400000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadcntr=fatload mmc ${mmcdev}:${mmcpart} ${cntr_addr} ${cntr_file}
loadfdt=ext4load mmc 1:2 0x83000000 imx93-11x11-evk.dtb
loadimage=ext4load mmc 1:2 0x80400000 Image
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc clk_ignore_unused 
mmc_boot=if mmc dev ${devnum}; then devtype=mmc; run scan_dev_for_boot_part; fi
mmcargs=setenv bootargs console=ttyS0,115200 earlycon root=/dev/mmcblk1p2
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${sec_boot} = yes; then if run auth_os; then run boot_os; else echo ERR: failed to authenticate; fi; else if test ${boot_fit} = yes || test ${boot_fit} = try; then bootm ${loadaddr}; else if run loadfdt; then run boot_os; else echo WARN: Cannot load the DT; fi; fi;fi;
mmcdev=1
mmcpart=2
mmcroot=/dev/mmcblk1p2 rootwait rw
netargs=setenv bootargs ${jh_clk} console=${console} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs;  if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; if test ${sec_boot} = yes; then ${get_cmd} ${cntr_addr} ${cntr_file}; if run auth_os; then run boot_os; else echo ERR: failed to authenticate; fi; else ${get_cmd} ${loadaddr} ${image}; if test ${boot_fit} = yes || test ${boot_fit} = try; then bootm ${loadaddr}; else if ${get_cmd} ${fdt_addr_r} ${fdtfile}; then run boot_os; else echo WARN: Cannot load the DT; fi; fi;fi;
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${distro_bootpart}...; for prefix in ${boot_prefixes}; do run scan_dev_for_extlinux; run scan_dev_for_scripts; done;run scan_dev_for_efi;
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv devplist 1; for distro_bootpart in ${devplist}; do if fstype ${devtype} ${devnum}:${distro_bootpart} bootfstype; then run scan_dev_for_boot; fi; done; setenv devplist
scan_dev_for_efi=setenv efi_fdtfile ${fdtfile}; for prefix in ${efi_dtb_prefixes}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${efi_fdtfile}; then run load_efi_dtb; fi;done;run boot_efi_bootmgr;if test -e ${devtype} ${devnum}:${distro_bootpart} efi/boot/bootaa64.efi; then echo Found EFI removable media binary efi/boot/bootaa64.efi; run boot_efi_binary; echo EFI LOAD FAILED: continuing...; fi; setenv efi_fdtfile
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${boot_syslinux_conf}; then echo Found ${prefix}${boot_syslinux_conf}; run boot_extlinux; echo SCRIPT FAILED: continuing...; fi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${distro_bootpart} ${prefix}${script}; then echo Found U-Boot script ${prefix}${script}; run boot_a_script; echo SCRIPT FAILED: continuing...; fi; done
scriptaddr=0x80000000
scripthdraddr=0x80080000
sd_bootcmd=echo Trying load from sd card..; mmcinfo; mmc read 0x80400000 0x8000 0x16000; env exists secureboot && mmc read 0x80200000 0x4000 0x000 && esbc_validate 0x80200000; bootm 0x92000000#BOARD
sd_dev=1
sec_boot=no
serial#=13c1411c71c92c70
soc=imx9
soc_type=imx93
splashimage=0x90000000
usb_boot=usb start; if usb dev ${devnum}; then devtype=usb; run scan_dev_for_boot_part; fi
vendor=freescale
verify=no

Serial output while booting:

## Flattened Device Tree blob at 83000000
   Booting using the fdt blob at 0x83000000
   Using Device Tree in place at 0000000083000000, end 000000008300db18
adv7535_mipi2hdmi hdmi@3d: Can't find cec device id=0x3c
fail to probe panel device hdmi@3d
fail to get display timings
probe video device failed, ret -19

Starting kernel ...

[    0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050]
[    0.000000] Linux version 5.10.194 (britney@britney-virtual-machine) (aarch64-openwrt-linux-musl-gcc (OpenWrt GCC 11.2.0 r20220-92a0dd2447) 11.2.0, GNU ld (GNU Binutils) 2.37) #0 SMP PREEMPT Wed Sep 20 13:17:58 2023
[    0.000000] Machine model: NXP i.MX93 11X11 EVK board
[    0.000000] earlycon: lpuart32 at MMIO32 0x0000000044380000 (options '')
[    0.000000] printk: bootconsole [lpuart32] enabled
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000b0000000, size 256 MiB
[    0.000000] OF: reserved mem: initialized node linux,cma, compatible id shared-dma-pool
[    0.000000] Reserved memory: created DMA memory pool at 0x00000000a4020000, size 1 MiB
[    0.000000] OF: reserved mem: initialized node vdevbuffer@a4020000, compatible id shared-dma-pool
[    0.000000] Reserved memory: created DMA memory pool at 0x00000000a4120000, size 1 MiB
[    0.000000] OF: reserved mem: initialized node ele-reserved@a4120000, compatible id shared-dma-pool
[    0.000000] Reserved memory: created CMA memory pool at 0x00000000c0000000, size 256 MiB
[    0.000000] OF: reserved mem: initialized node ethosu_region@C0000000, compatible id shared-dma-pool
[    0.000000] NUMA: No NUMA configuration found
[    0.000000] NUMA: Faking a node at [mem 0x0000000080000000-0x00000000ffffffff]
[    0.000000] NUMA: NODE_DATA [mem 0xffbdf100-0xffbe0fff]
[    0.000000] Zone ranges:
[    0.000000]   DMA      [mem 0x0000000080000000-0x00000000ffffffff]
[    0.000000]   DMA32    empty
[    0.000000]   Normal   empty
[    0.000000] Movable zone start for each node
[    0.000000] Early memory node ranges
[    0.000000]   node   0: [mem 0x0000000080000000-0x0000000095ffffff]
[    0.000000]   node   0: [mem 0x0000000098000000-0x00000000a3ffffff]
[    0.000000]   node   0: [mem 0x00000000a4000000-0x00000000a421ffff]
[    0.000000]   node   0: [mem 0x00000000a4220000-0x00000000ffffffff]
[    0.000000] Initmem setup node 0 [mem 0x0000000080000000-0x00000000ffffffff]
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv1.1 detected in firmware.
[    0.000000] psci: Using standard PSCI v0.2 function IDs
[    0.000000] psci: Trusted OS migration not required
[    0.000000] psci: SMC Calling Convention v1.2
[    0.000000] percpu: Embedded 22 pages/cpu s51736 r8192 d30184 u90112
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] CPU features: detected: GIC system register CPU interface
[    0.000000] CPU features: detected: Virtualization Host Extensions
[    0.000000] CPU features: detected: Hardware dirty bit management
[    0.000000] alternatives: patching kernel code
[    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 507904
[    0.000000] Policy zone: DMA
[    0.000000] Kernel command line: console=ttyS0,115200 earlycon root=/dev/mmcblk1p2
[    0.000000] Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes, linear)
[    0.000000] Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[    0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[    0.000000] Memory: 1481300K/2064384K available (11070K kernel code, 1286K rwdata, 3048K rodata, 512K init, 342K bss, 58796K reserved, 524288K cma-reserved)
[    0.000000] rcu: Preemptible hierarchical RCU implementation.
[    0.000000] rcu: 	RCU restricting CPUs from NR_CPUS=64 to nr_cpu_ids=2.
[    0.000000] 	Trampoline variant of Tasks RCU enabled.
[    0.000000] 	Tracing variant of Tasks RCU enabled.
[    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
[    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
[    0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[    0.000000] GICv3: GIC: Using split EOI/Deactivate mode
[    0.000000] GICv3: 960 SPIs implemented
[    0.000000] GICv3: 0 Extended SPIs implemented
[    0.000000] GICv3: Distributor has no Range Selector support
[    0.000000] GICv3: 16 PPIs implemented
[    0.000000] GICv3: CPU0: found redistributor 0 region 0:0x0000000048040000
[    0.000000] arch_timer: cp15 timer(s) running at 24.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000002] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[    0.008340] Console: colour dummy device 80x25
[    0.012578] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=240000)
[    0.022844] pid_max: default: 32768 minimum: 301
[    0.027546] Mount-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.034804] Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes, linear)
[    0.043762] rcu: Hierarchical SRCU implementation.
[    0.049080] smp: Bringing up secondary CPUs ...
[    0.053857] Detected VIPT I-cache on CPU1
[    0.053886] GICv3: CPU1: found redistributor 100 region 0:0x0000000048060000
[    0.053920] CPU1: Booted secondary processor 0x0000000100 [0x412fd050]
[    0.054021] smp: Brought up 1 node, 2 CPUs
[    0.075374] SMP: Total of 2 processors activated.
[    0.080038] CPU features: detected: Privileged Access Never
[    0.085589] CPU features: detected: User Access Override
[    0.090869] CPU features: detected: 32-bit EL0 Support
[    0.096001] CPU features: detected: Common not Private translations
[    0.102223] CPU features: detected: Data cache clean to the PoU not required for I/D coherence
[    0.110810] CPU features: detected: CRC32 instructions
[    0.115915] CPU features: detected: Speculative Store Bypassing Safe (SSBS)
[    0.124475] CPU: All CPU(s) started at EL2
[    0.134044] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns
[    0.143607] futex hash table entries: 512 (order: 3, 32768 bytes, linear)
[    0.160184] NET: Registered protocol family 16
[    0.165616] DMA: preallocated 256 KiB GFP_KERNEL pool for atomic allocations
[    0.172496] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[    0.180298] DMA: preallocated 256 KiB GFP_KERNEL|GFP_DMA32 pool for atomic allocations
[    0.188665] thermal_sys: Registered thermal governor 'step_wise'
[    0.188901] cpuidle: using governor menu
[    0.198656] ASID allocator initialised with 65536 entries
[    0.204141] Serial: AMBA PL011 UART driver
[    0.253472] HugeTLB registered 1.00 GiB page size, pre-allocated 0 pages
[    0.259981] HugeTLB registered 32.0 MiB page size, pre-allocated 0 pages
[    0.266578] HugeTLB registered 2.00 MiB page size, pre-allocated 0 pages
[    0.274263] HugeTLB registered 64.0 KiB page size, pre-allocated 0 pages
[    0.282583] cryptd: max_cpu_qlen set to 1000
[    0.288200] raid6: skip pq benchmark and using algorithm neonx8
[    0.293856] raid6: using neon recovery algorithm
[    0.299306] iommu: Default domain type: Passthrough 
[    0.304067] vgaarb: loaded
[    0.306925] SCSI subsystem initialized
[    0.311822] pps_core: LinuxPPS API ver. 1 registered
[    0.316655] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[    0.325644] PTP clock support registered
[    0.331020] clocksource: Switched to clocksource arch_sys_counter
[    0.337077] VFS: Disk quotas dquot_6.6.0
[    0.340837] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[    0.350851] NET: Registered protocol family 2
[    0.355192] IP idents hash table entries: 32768 (order: 6, 262144 bytes, linear)
[    0.363328] tcp_listen_portaddr_hash hash table entries: 1024 (order: 2, 16384 bytes, linear)
[    0.371726] TCP established hash table entries: 16384 (order: 5, 131072 bytes, linear)
[    0.379529] TCP bind hash table entries: 16384 (order: 6, 262144 bytes, linear)
[    0.386965] TCP: Hash tables configured (established 16384 bind 16384)
[    0.393384] UDP hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    0.399937] UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes, linear)
[    0.407253] NET: Registered protocol family 1
[    0.411408] PCI: CLS 0 bytes, default 64
[    0.418550] workingset: timestamp_bits=44 max_order=19 bucket_order=0
[    0.425157] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[    0.430739] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
[    0.440635] fuse: init (API version 7.32)
[    0.444507] SGI XFS with security attributes, realtime, no debug enabled
[    0.451754] xor: measuring software checksum speed
[    0.459317]    8regs           :  3253 MB/sec
[    0.465931]    32regs          :  3966 MB/sec
[    0.473070]    arm64_neon      :  3229 MB/sec
[    0.477151] xor: using function: 32regs (3966 MB/sec)
[    0.482227] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 249)
[    0.493967] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[    0.501549] fsl-lpuart 44380000.serial: failed to get uart ipg clk: -517
[    0.508113] fsl-lpuart 42590000.serial: failed to get uart ipg clk: -517
[    0.515573] cacheinfo: Unable to detect cache hierarchy for CPU 0
[    0.527039] brd: module loaded
[    0.533071] loop: module loaded
[    0.540967] VFIO - User Level meta-driver version: 0.3
[    0.548650] mousedev: PS/2 mouse device common for all mice
[    0.555420] i2c /dev entries driver
[    0.561202] sdhci: Secure Digital Host Controller Interface driver
[    0.567111] sdhci: Copyright(c) Pierre Ossman
[    0.571617] sdhci-pltfm: SDHCI platform and OF driver helper
[    0.578871] NET: Registered protocol family 10
[    0.583720] Segment Routing with IPv6
[    0.587168] NET: Registered protocol family 17
[    0.591763] 8021q: 802.1Q VLAN Support v1.8
[    0.597402] Btrfs loaded, crc32c=crc32c-generic
[    0.602222] fsl-lpuart 44380000.serial: failed to get uart ipg clk: -517
[    0.608877] fsl-lpuart 42590000.serial: failed to get uart ipg clk: -517
[    0.615688] fsl-lpuart 44380000.serial: failed to get uart ipg clk: -517
[    0.622445] fsl-lpuart 42590000.serial: failed to get uart ipg clk: -517
[    0.629682] Warning: unable to open an initial console.
[    0.634888] VFS: Cannot open root device "mmcblk1p2" or unknown-block(0,0): error -6
[    0.642403] Please append a correct "root=" boot option; here are the available partitions:
[    0.650679] 0100            4096 ram0 
[    0.650682]  (driver?)
[    0.656744] 0101            4096 ram1 
[    0.656746]  (driver?)
[    0.662815] 0102            4096 ram2 
[    0.662817]  (driver?)
[    0.668877] 0103            4096 ram3 
[    0.668879]  (driver?)
[    0.674944] 0104            4096 ram4 
[    0.674946]  (driver?)
[    0.681015] 0105            4096 ram5 
[    0.681017]  (driver?)
[    0.687077] 0106            4096 ram6 
[    0.687079]  (driver?)
[    0.693148] 0107            4096 ram7 
[    0.693150]  (driver?)
[    0.699211] 0108            4096 ram8 
[    0.699212]  (driver?)
[    0.705278] 0109            4096 ram9 
[    0.705279]  (driver?)
[    0.711348] 010a            4096 ram10 
[    0.711350]  (driver?)
[    0.717497] 010b            4096 ram11 
[    0.717499]  (driver?)
[    0.723651] 010c            4096 ram12 
[    0.723653]  (driver?)
[    0.729804] 010d            4096 ram13 
[    0.729805]  (driver?)
[    0.735957] 010e            4096 ram14 
[    0.735958]  (driver?)
[    0.742114] 010f            4096 ram15 
[    0.742116]  (driver?)
[    0.748267] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
[    0.756498] CPU: 1 PID: 1 Comm: swapper/0 Not tainted 5.10.194 #0
[    0.762561] Hardware name: NXP i.MX93 11X11 EVK board (DT)
[    0.768022] Call trace:
[    0.770455]  dump_backtrace+0x0/0x190
[    0.774089]  show_stack+0x18/0x40
[    0.777385]  dump_stack+0xbc/0xf4
[    0.780677]  panic+0x168/0x330
[    0.783711]  mount_block_root+0x1c0/0x250
[    0.787695]  mount_root+0xcc/0xe0
[    0.790988]  prepare_namespace+0x130/0x16c
[    0.795062]  kernel_init_freeable+0x258/0x280
[    0.799396]  kernel_init+0x14/0x11c
[    0.802862]  ret_from_fork+0x10/0x38
[    0.806418] SMP: stopping secondary CPUs
[    0.810318] Kernel Offset: disabled
[    0.813782] CPU features: 0x00000006,2800aa18
[    0.818114] Memory Limit: none
[    0.821153] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0) ]---

What changes have you made to the LS1012 device tree / dts to make it support the i.MX93 hardware?
Just from comparing the data sheet these are very different board;
Arm A55 v A53
2 gig DDR4 v 1 gig DDR3

You will need to start with a compatible dts to make sure the SDIO controller is working correctly and make certain the root partition definition in the bootargs matches what the hardware sees on card.

I should've mentioned I'm using the imx93-11x11-evk.dtb that is available through NXP's website. As for the hardware recognizing the root partition, if I run "ls mmc 1:2" it can see my whole filesystem along with the kernel image and dtb i have there for booting. Is this enough to prove it recognizes the root partition?

=> ls mmc 1:2
<DIR>       4096 .
<DIR>       4096 ..
<DIR>      16384 lost+found
<DIR>       4096 bin
<DIR>       4096 dev
<DIR>       4096 etc
<DIR>       4096 lib
<SYM>          3 lib64
<DIR>       4096 mnt
<DIR>       4096 overlay
<DIR>       4096 proc
<DIR>       4096 rom
<DIR>       4096 root
<DIR>       4096 sbin
<DIR>       4096 sys
<DIR>       4096 tmp
<DIR>       4096 usr
<SYM>          3 var
<DIR>       4096 www
           43801 imx93-11x11-evk.dtb
        16324616 Image

Is that ls from uboot?

Have you tried using NXPs linux builds first to make certain that will boot?
I had a look at their dts' as well - there's a half dozen different dts for this board to enable and disable different components. I suggest asking NXP or their forums which dts is recommended for booting from sd card and whether they support doing that at all.