自定义Versal BSP编译Petalinux
首先设计XSA文件
略
紧接着我们开始编译Petalinux
我的系统版本:
LSB Version: core-11.1.0ubuntu4-noarch:security-11.1.0ubuntu4-noarch Distributor ID: Ubuntu Description: Ubuntu 22.04.4 LTS Release: 22.04 Codename: jammy
建议先运行我的一键脚本配置APT,安装基本依赖 → https://myfpga.cn/index.php/post/318.html
然后配置安装Petalinux tools 2024.2,我没有提前下载依赖文件,因为网络没问题,并且我用不到所有pack,下载完整的太浪费资源
chanra1n@chanra1n-Standard-PC-i440FX-PIIX-1996:~$ source /usr/local/edatools/settings.sh ************************************************************************************************************************************************* The PetaLinux source code and images provided/generated are for demonstration purposes only. Please refer to https://xilinx-wiki.atlassian.net/wiki/spaces/A/pages/2741928025/Moving+from+PetaLinux+to+Production+Deployment for more details ************************************************************************************************************************************************* PetaLinux environment set to '/usr/local/edatools' [INFO] Checking free disk space [INFO] Checking installed tools [INFO] Checking installed development libraries [INFO] Checking network and other services [WARNING] No tftp server found - please refer to "UG1144 2024.2 PetaLinux Tools Documentation Reference Guide" for its impact and solution
紧接着创建Versal Petalinux工程,
petalinux-create project --template versal --name vd100 && cd vd100
其中的项目名vd100你可以改成需要的名字
petalinux-config --get-hw-description ../pcs_led.xsa
其中pcs_led.xsa你可以改成第一步生成的xsa文件,也可以直接指定到../,会自动查找xsa后缀的文件
这里向下找到FPGA Manager,按空格键选中
紧接着打开Devicetree overlay,设备树覆盖允许在不重新编译整个设备树或重启系统的情况下,动态地添加、修改或删除设备节点。这对于需要灵活配置硬件的场景非常有用,比如嵌入式系统中的模块化设计或热插拔设备的支持。
根据你的平台,修改Root系统文件的类似,我的是SD卡
chanra1n@chanra1n-Standard-PC-i440FX-PIIX-1996:~/vd100$ petalinux-config --get-hw-description ../pcs_led.xsa [INFO] Getting hardware description [INFO] Renaming pcs_led.xsa to system.xsa [INFO] Extracting yocto SDK to components/yocto. This may take time! [INFO] Bitbake is not available, some functionality may be reduced. [INFO] Using HW file: /home/chanra1n/vd100/project-spec/hw-description/system.xsa [INFO] Getting Platform info from HW file [INFO] Generating Kconfig for project [INFO] Menuconfig project [INFO] Generating kconfig for rootfs [INFO] Silentconfig rootfs [INFO] Generating configuration files [INFO] Adding user layers [INFO] Generating machine conf file [INFO] Generating plnxtool conf file [INFO] Generating workspace directory NOTE: Starting bitbake server... NOTE: Started PRServer with DBfile: /home/chanra1n/vd100/build/cache/prserv.sqlite3, Address: 127.0.0.1:34149, PID: 1115768 INFO: Specified workspace already set up, leaving as-is INFO: Enabling workspace layer in bblayers.conf [INFO] Successfully configured project chanra1n@chanra1n-Standard-PC-i440FX-PIIX-1996:~/vd100$
紧接着就可以去折腾设备树了,
vim ./project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi
修改成
/include/ "system-conf.dtsi" / { versal_fpga: versal_fpga { compatible = "xlnx,versal-fpga"; }; fpga: fpga { compatible = "fpga-region"; fpga-mgr = <&versal_fpga>; #address-cells = <2>; #size-cells = <2>; }; }; /* SD */ &sdhci1 { disable-wp; no-1-8-v; };
然后保存后编译设备树:
petalinux-build -c device-tree
如果报错了:
chanra1n@chanra1n-Standard-PC-i440FX-PIIX-1996:~/vd100$ petalinux-build -c device-tree [INFO] Building device-tree [INFO] Bitbake is not available, some functionality may be reduced. [INFO] Using HW file: /home/chanra1n/vd100/project-spec/hw-description/system.xsa [INFO] Getting Platform info from HW file [INFO] Silentconfig project [INFO] Silentconfig rootfs [INFO] Generating configuration files [INFO] Generating workspace directory NOTE: Starting bitbake server... NOTE: Started PRServer with DBfile: /home/chanra1n/vd100/build/cache/prserv.sqlite3, Address: 127.0.0.1:46787, PID: 1119248 INFO: Specified workspace already set up, leaving as-is [INFO] bitbake virtual/dtb NOTE: Started PRServer with DBfile: /home/chanra1n/vd100/build/cache/prserv.sqlite3, Address: 127.0.0.1:36525, PID: 1119313 WARNING: XSCT has been deprecated. It will still be available for several releases. In the future, it's recommended to start new projects with SDT workflow. Loading cache: 100% | | ETA: --:--:-- Loaded 0 entries from dependency cache. Parsing recipes: 100% |#########################################################################################| Time: 0:01:27 Parsing of 5800 .bb files complete (0 cached, 5800 parsed). 8454 targets, 998 skipped, 27 masked, 0 errors. NOTE: Resolving any missing task queue dependencies NOTE: Fetching uninative binary shim file:///home/chanra1n/vd100/components/yocto/downloads/uninative/6bf00154c5a7bc48adbf63fd17684bb87eb07f4814fbb482a3fbd817c1ccf4c5/x86_64-nativesdk-libc-4.6.tar.xz;sha256sum=6bf00154c5a7bc48adbf63fd17684bb87eb07f4814fbb482a3fbd817c1ccf4c5 (will check PREMIRRORS first) Checking sstate mirror object availability: 100% |##############################################################| Time: 0:00:09 Sstate summary: Wanted 532 Local 0 Mirrors 504 Missed 28 Current 0 (94% match, 0% complete) NOTE: Executing Tasks ERROR: device-tree-xilinx-v2024.2+git-r0 do_compile: Error executing a python function in exec_func_python() autogenerated: The stack trace of python calls that resulted in this exception/failure was: File: 'exec_func_python() autogenerated', lineno: 2, function: <module> 0001: *** 0002:devicetree_do_compile(d) 0003: File: '/home/chanra1n/vd100/components/yocto/layers/poky/meta/classes-recipe/devicetree.bbclass', lineno: 142, function: devicetree_do_compile 0138: if not(os.path.isfile(dtspath)) or not(dts.endswith(".dts") or devicetree_source_is_overlay(dtspath)): 0139: continue # skip non-.dts files and non-overlay files 0140: except: 0141: continue # skip if can't determine if overlay *** 0142: devicetree_compile(dtspath, includes, d) 0143:} 0144: 0145:devicetree_do_install() { 0146: for DTB_FILE in `ls *.dtb *.dtbo`; do File: '/home/chanra1n/vd100/components/yocto/layers/poky/meta/classes-recipe/devicetree.bbclass', lineno: 127, function: devicetree_compile 0123: dtcargs += ["-i", i] 0124: dtcargs += ["-o", "{0}.{1}".format(dtname, "dtbo" if isoverlay else "dtb")] 0125: dtcargs += ["-I", "dts", "-O", "dtb", "{0}.pp".format(dts)] 0126: bb.note("Running {0}".format(" ".join(dtcargs))) *** 0127: subprocess.run(dtcargs, check = True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 0128: 0129:python devicetree_do_compile() { 0130: import re 0131: includes = expand_includes("DT_INCLUDE", d) File: '/usr/local/edatools/sysroots/x86_64-petalinux-linux/usr/lib/python3.12/subprocess.py', lineno: 571, function: run 0567: # We don't call process.wait() as .__exit__ does that for us. 0568: raise 0569: retcode = process.poll() 0570: if check and retcode: *** 0571: raise CalledProcessError(retcode, process.args, 0572: output=stdout, stderr=stderr) 0573: return CompletedProcess(process.args, retcode, stdout, stderr) 0574: 0575: Exception: subprocess.CalledProcessError: Command '['dtc', '-@', '-@', '-p', '0x1000', '-@', '-i', '/home/chanra1n/vd100/components/plnx_workspace/device-tree/device-tree', '-i', '/home/chanra1n/vd100/build/tmp/work/versal_generic_xcve2302-xilinx-linux/device-tree/xilinx-v2024.2+git/git/device_tree/data/kernel_dtsi/2024.2/include/', '-i', '/home/chanra1n/vd100/build/tmp/work/versal_generic_xcve2302-xilinx-linux/device-tree/xilinx-v2024.2+git', '-i', '/home/chanra1n/vd100/build/tmp/work/versal_generic_xcve2302-xilinx-linux/device-tree/xilinx-v2024.2+git/git/device_tree/data/kernel_dtsi/2024.2/BOARD/', '-o', 'system-top.dtb', '-I', 'dts', '-O', 'dtb', 'system-top.dts.pp']' returned non-zero exit status 2. Subprocess output: /home/chanra1n/vd100/build/tmp/work/versal_generic_xcve2302-xilinx-linux/device-tree/xilinx-v2024.2+git/system-user.dtsi:4.30-6.7: ERROR (duplicate_label): /versal_fpga: Duplicate label 'versal_fpga' on /versal_fpga and /versal-fpga /home/chanra1n/vd100/build/tmp/work/versal_generic_xcve2302-xilinx-linux/device-tree/xilinx-v2024.2+git/system-user.dtsi:8.16-13.7: ERROR (duplicate_label): /fpga: Duplicate label 'fpga' on /fpga and /fpga-region ERROR: Input tree has errors, aborting (use -f to force output) ERROR: Logfile of failure stored in: /home/chanra1n/vd100/build/tmp/work/versal_generic_xcve2302-xilinx-linux/device-tree/xilinx-v2024.2+git/temp/log.do_compile.1139386 ERROR: Task (/home/chanra1n/vd100/components/yocto/layers/meta-xilinx/meta-xilinx-core/recipes-bsp/device-tree/device-tree.bb:do_compile) failed with exit code '1' NOTE: Tasks Summary: Attempted 1311 tasks of which 1180 didn't need to be rerun and 1 failed. Summary: 1 task failed: /home/chanra1n/vd100/components/yocto/layers/meta-xilinx/meta-xilinx-core/recipes-bsp/device-tree/device-tree.bb:do_compile Summary: There was 1 WARNING message. Summary: There was 1 ERROR message, returning a non-zero exit code. [ERROR] Command bitbake virtual/dtb failed
则是因为你用的是新版本的,能自动写入FPGA相关内容,就在上一步写入并保存:
/include/ "system-conf.dtsi" /* SD */ &sdhci1 { disable-wp; no-1-8-v; };
然后再重新编译
chanra1n@chanra1n-Standard-PC-i440FX-PIIX-1996:~/vd100$ petalinux-build -c device-tree [INFO] Building device-tree [INFO] Bitbake is not available, some functionality may be reduced. [INFO] Using HW file: /home/chanra1n/vd100/project-spec/hw-description/system.xsa [INFO] Getting Platform info from HW file [INFO] Silentconfig project [INFO] Silentconfig rootfs [INFO] Generating configuration files [INFO] Generating workspace directory NOTE: Starting bitbake server... NOTE: Started PRServer with DBfile: /home/chanra1n/vd100/build/cache/prserv.sqlite3, Address: 127.0.0.1:35461, PID: 1141458 INFO: Specified workspace already set up, leaving as-is [INFO] bitbake virtual/dtb NOTE: Started PRServer with DBfile: /home/chanra1n/vd100/build/cache/prserv.sqlite3, Address: 127.0.0.1:44589, PID: 1141524 WARNING: XSCT has been deprecated. It will still be available for several releases. In the future, it's recommended to start new projects with SDT workflow. Loading cache: 100% |###########################################################################################| Time: 0:00:03 Loaded 8453 entries from dependency cache. Parsing recipes: 100% |#########################################################################################| Time: 0:00:01 Parsing of 5800 .bb files complete (5799 cached, 1 parsed). 8454 targets, 998 skipped, 27 masked, 0 errors. NOTE: Resolving any missing task queue dependencies Sstate summary: Wanted 96 Local 2 Mirrors 84 Missed 10 Current 436 (89% match, 98% complete)########### | ETA: 0:00:00 Removing 2 stale sstate objects for arch versal_generic_xcve2302: 100% |########################################| Time: 0:00:00 NOTE: Executing Tasks NOTE: Tasks Summary: Attempted 1323 tasks of which 1300 didn't need to be rerun and all succeeded. Summary: There was 1 WARNING message. [INFO] copy to TFTP-boot directory is not enabled [INFO] Successfully built device-tree chanra1n@chanra1n-Standard-PC-i440FX-PIIX-1996:~/vd100$
接下来反编译:
dtc -I dtb -O dts ./images/linux/system.dtb -o ./images/linux/system.dts
查看dts文件:
chanra1n@chanra1n-Standard-PC-i440FX-PIIX-1996:~/vd100$ cat ./images/linux/system.dts /dts-v1/; / { compatible = "xlnx,versal"; #address-cells = <0x02>; #size-cells = <0x02>; model = "Xilinx Versal"; options { u-boot { compatible = "u-boot,config"; bootscr-address = <0x00 0x20000000>; }; }; cpus { #address-cells = <0x01>; #size-cells = <0x00>; phandle = <0x11>; cpu@0 { compatible = "arm,cortex-a72"; device_type = "cpu"; enable-method = "psci"; operating-points-v2 = <0x01>; reg = <0x00>; cpu-idle-states = <0x02>; clocks = <0x03 0x4d>; phandle = <0x12>; }; cpu@1 { compatible = "arm,cortex-a72"; device_type = "cpu"; enable-method = "psci"; operating-points-v2 = <0x01>; reg = <0x01>; cpu-idle-states = <0x02>; phandle = <0x13>; }; idle-states { entry-method = "psci"; cpu-sleep-0 { compatible = "arm,idle-state"; arm,psci-suspend-param = <0x40000000>; local-timer-stop; entry-latency-us = <0x12c>; exit-latency-us = <0x258>; min-residency-us = <0x2710>; phandle = <0x02>; }; }; }; opp-table-cpu { compatible = "operating-points-v2"; opp-shared; phandle = <0x01>; opp-550000000 { clock-latency-ns = <0x7a120>; opp-hz = <0x00 0x20c85580>; opp-microvolt = <0xf4240>; }; opp-275000000 { clock-latency-ns = <0x7a120>; opp-hz = <0x00 0x10642ac0>; opp-microvolt = <0xf4240>; }; opp-183333333 { clock-latency-ns = <0x7a120>; opp-hz = <0x00 0xaed71d5>; opp-microvolt = <0xf4240>; }; opp-137500000 { clock-latency-ns = <0x7a120>; opp-hz = <0x00 0x8321560>; opp-microvolt = <0xf4240>; }; }; dcc { compatible = "arm,dcc"; status = "okay"; bootph-all; phandle = <0x14>; }; fpga-region { compatible = "fpga-region"; fpga-mgr = <0x04>; #address-cells = <0x02>; #size-cells = <0x02>; phandle = <0x15>; }; psci { compatible = "arm,psci-0.2"; method = "smc"; phandle = <0x16>; }; pmu { compatible = "arm,armv8-pmuv3"; interrupt-parent = <0x05>; interrupts = <0x01 0x07 0x304>; }; timer { compatible = "arm,armv8-timer"; interrupt-parent = <0x05>; interrupts = <0x01 0x0d 0x04 0x01 0x0e 0x04 0x01 0x0b 0x04 0x01 0x0a 0x04>; phandle = <0x17>; }; versal-fpga { compatible = "xlnx,versal-fpga"; phandle = <0x04>; }; versal-thermal-sensor { compatible = "xlnx,versal-thermal"; #thermal-sensor-cells = <0x00>; io-channels = <0x06>; io-channel-names = "sysmon-temp-channel"; phandle = <0x07>; }; thermal-zones { versal-thermal { polling-delay-passive = <0xfa>; polling-delay = <0x3e8>; thermal-sensors = <0x07>; phandle = <0x18>; trips { temp-alert { temperature = <0x11170>; hysteresis = <0x00>; type = "passive"; phandle = <0x19>; }; ot-crit { temperature = <0x1e848>; hysteresis = <0x00>; type = "critical"; phandle = <0x1a>; }; }; }; }; axi { compatible = "simple-bus"; #address-cells = <0x02>; #size-cells = <0x02>; ranges; interrupt-parent = <0x05>; bootph-all; phandle = <0x1b>; interrupt-controller@f9000000 { compatible = "arm,gic-v3"; #interrupt-cells = <0x03>; #address-cells = <0x02>; #size-cells = <0x02>; ranges; reg = <0x00 0xf9000000 0x00 0x80000 0x00 0xf9080000 0x00 0x80000>; interrupt-controller; interrupts = <0x01 0x09 0x04>; num_cpus = <0x02>; num_interrupts = <0x60>; phandle = <0x05>; msi-controller@f9020000 { compatible = "arm,gic-v3-its"; status = "okay"; msi-controller; #msi-cells = <0x01>; reg = <0x00 0xf9020000 0x00 0x20000>; phandle = <0x0d>; }; }; can@ff060000 { compatible = "xlnx,canfd-2.0"; status = "disabled"; reg = <0x00 0xff060000 0x00 0x6000>; interrupts = <0x00 0x14 0x04>; clock-names = "can_clk\0s_axi_aclk"; rx-fifo-depth = <0x40>; tx-mailbox-count = <0x20>; clocks = <0x08 0x03 0x52>; power-domains = <0x09 0x1822401f>; phandle = <0x1c>; }; can@ff070000 { compatible = "xlnx,canfd-2.0"; status = "disabled"; reg = <0x00 0xff070000 0x00 0x6000>; interrupts = <0x00 0x15 0x04>; clock-names = "can_clk\0s_axi_aclk"; rx-fifo-depth = <0x40>; tx-mailbox-count = <0x20>; clocks = <0x0a 0x03 0x52>; power-domains = <0x09 0x18224020>; phandle = <0x1d>; }; cci@fd000000 { compatible = "arm,cci-500"; status = "okay"; reg = <0x00 0xfd000000 0x00 0x10000>; ranges = <0x00 0x00 0xfd000000 0xa0000>; #address-cells = <0x01>; #size-cells = <0x01>; phandle = <0x1e>; pmu@10000 { compatible = "arm,cci-500-pmu,r0"; reg = <0x10000 0x90000>; interrupts = <0x00 0x6a 0x04 0x00 0x6a 0x04 0x00 0x6a 0x04 0x00 0x6a 0x04 0x00 0x6a 0x04 0x00 0x6a 0x04 0x00 0x6a 0x04 0x00 0x6a 0x04>; phandle = <0x1f>; }; }; dma-controller@ffa80000 { compatible = "xlnx,zynqmp-dma-1.0"; status = "okay"; reg = <0x00 0xffa80000 0x00 0x1000>; interrupts = <0x00 0x3c 0x04>; clock-names = "clk_main\0clk_apb"; #dma-cells = <0x01>; xlnx,bus-width = <0x40>; clocks = <0x03 0x51 0x03 0x52>; power-domains = <0x09 0x18224035>; phandle = <0x20>; }; dma-controller@ffa90000 { compatible = "xlnx,zynqmp-dma-1.0"; status = "okay"; reg = <0x00 0xffa90000 0x00 0x1000>; interrupts = <0x00 0x3d 0x04>; clock-names = "clk_main\0clk_apb"; #dma-cells = <0x01>; xlnx,bus-width = <0x40>; clocks = <0x03 0x51 0x03 0x52>; power-domains = <0x09 0x18224036>; phandle = <0x21>; }; dma-controller@ffaa0000 { compatible = "xlnx,zynqmp-dma-1.0"; status = "okay"; reg = <0x00 0xffaa0000 0x00 0x1000>; interrupts = <0x00 0x3e 0x04>; clock-names = "clk_main\0clk_apb"; #dma-cells = <0x01>; xlnx,bus-width = <0x40>; clocks = <0x03 0x51 0x03 0x52>; power-domains = <0x09 0x18224037>; phandle = <0x22>; }; dma-controller@ffab0000 { compatible = "xlnx,zynqmp-dma-1.0"; status = "okay"; reg = <0x00 0xffab0000 0x00 0x1000>; interrupts = <0x00 0x3f 0x04>; clock-names = "clk_main\0clk_apb"; #dma-cells = <0x01>; xlnx,bus-width = <0x40>; clocks = <0x03 0x51 0x03 0x52>; power-domains = <0x09 0x18224038>; phandle = <0x23>; }; dma-controller@ffac0000 { compatible = "xlnx,zynqmp-dma-1.0"; status = "okay"; reg = <0x00 0xffac0000 0x00 0x1000>; interrupts = <0x00 0x40 0x04>; clock-names = "clk_main\0clk_apb"; #dma-cells = <0x01>; xlnx,bus-width = <0x40>; clocks = <0x03 0x51 0x03 0x52>; power-domains = <0x09 0x18224039>; phandle = <0x24>; }; dma-controller@ffad0000 { compatible = "xlnx,zynqmp-dma-1.0"; status = "okay"; reg = <0x00 0xffad0000 0x00 0x1000>; interrupts = <0x00 0x41 0x04>; clock-names = "clk_main\0clk_apb"; #dma-cells = <0x01>; xlnx,bus-width = <0x40>; clocks = <0x03 0x51 0x03 0x52>; power-domains = <0x09 0x1822403a>; phandle = <0x25>; }; dma-controller@ffae0000 { compatible = "xlnx,zynqmp-dma-1.0"; status = "okay"; reg = <0x00 0xffae0000 0x00 0x1000>; interrupts = <0x00 0x42 0x04>; clock-names = "clk_main\0clk_apb"; #dma-cells = <0x01>; xlnx,bus-width = <0x40>; clocks = <0x03 0x51 0x03 0x52>; power-domains = <0x09 0x1822403b>; phandle = <0x26>; }; dma-controller@ffaf0000 { compatible = "xlnx,zynqmp-dma-1.0"; status = "okay"; reg = <0x00 0xffaf0000 0x00 0x1000>; interrupts = <0x00 0x43 0x04>; clock-names = "clk_main\0clk_apb"; #dma-cells = <0x01>; xlnx,bus-width = <0x40>; clocks = <0x03 0x51 0x03 0x52>; power-domains = <0x09 0x1822403c>; phandle = <0x27>; }; ethernet@ff0c0000 { compatible = "xlnx,versal-gem\0cdns,gem"; status = "disabled"; reg = <0x00 0xff0c0000 0x00 0x1000>; interrupts = <0x00 0x38 0x04 0x00 0x38 0x04>; clock-names = "pclk\0hclk\0tx_clk\0rx_clk\0tsu_clk"; #address-cells = <0x01>; #size-cells = <0x00>; clocks = <0x03 0x52 0x03 0x58 0x03 0x31 0x03 0x30 0x03 0x2b>; power-domains = <0x09 0x18224019>; phandle = <0x28>; }; ethernet@ff0d0000 { compatible = "xlnx,versal-gem\0cdns,gem"; status = "disabled"; reg = <0x00 0xff0d0000 0x00 0x1000>; interrupts = <0x00 0x3a 0x04 0x00 0x3a 0x04>; clock-names = "pclk\0hclk\0tx_clk\0rx_clk\0tsu_clk"; #address-cells = <0x01>; #size-cells = <0x00>; clocks = <0x03 0x52 0x03 0x59 0x03 0x33 0x03 0x32 0x03 0x2b>; power-domains = <0x09 0x1822401a>; phandle = <0x29>; }; gpio@ff0b0000 { compatible = "xlnx,versal-gpio-1.0"; status = "disabled"; reg = <0x00 0xff0b0000 0x00 0x1000>; interrupts = <0x00 0x0d 0x04>; #gpio-cells = <0x02>; gpio-controller; #interrupt-cells = <0x02>; interrupt-controller; clocks = <0x03 0x52>; power-domains = <0x09 0x18224023>; phandle = <0x2a>; }; gpio@f1020000 { compatible = "xlnx,pmc-gpio-1.0"; status = "disabled"; reg = <0x00 0xf1020000 0x00 0x1000>; interrupts = <0x00 0x7a 0x04>; #gpio-cells = <0x02>; gpio-controller; #interrupt-cells = <0x02>; interrupt-controller; clocks = <0x03 0x3d>; power-domains = <0x09 0x1822402c>; phandle = <0x2b>; }; i2c@ff020000 { compatible = "cdns,i2c-r1p14"; status = "disabled"; reg = <0x00 0xff020000 0x00 0x1000>; interrupts = <0x00 0x0e 0x04>; clock-frequency = <0x186a0>; #address-cells = <0x01>; #size-cells = <0x00>; clocks = <0x03 0x62>; power-domains = <0x09 0x1822401d>; phandle = <0x2c>; }; i2c@ff030000 { compatible = "cdns,i2c-r1p14"; status = "disabled"; reg = <0x00 0xff030000 0x00 0x1000>; interrupts = <0x00 0x0f 0x04>; clock-frequency = <0x186a0>; #address-cells = <0x01>; #size-cells = <0x00>; clocks = <0x03 0x63>; power-domains = <0x09 0x1822401e>; phandle = <0x2d>; }; i2c@f1000000 { compatible = "cdns,i2c-r1p14"; status = "disabled"; reg = <0x00 0xf1000000 0x00 0x1000>; interrupts = <0x00 0x7b 0x04>; clock-frequency = <0x186a0>; #address-cells = <0x01>; #size-cells = <0x00>; clocks = <0x03 0x3e>; power-domains = <0x09 0x1822402d>; phandle = <0x2e>; }; memory-controller@f6150000 { compatible = "xlnx,versal-ddrmc"; status = "disabled"; reg = <0x00 0xf6150000 0x00 0x2000 0x00 0xf6070000 0x00 0x20000>; reg-names = "base\0noc"; interrupts = <0x00 0x93 0x04>; phandle = <0x2f>; }; memory-controller@f62c0000 { compatible = "xlnx,versal-ddrmc"; status = "disabled"; reg = <0x00 0xf62c0000 0x00 0x2000 0x00 0xf6210000 0x00 0x20000>; reg-names = "base\0noc"; interrupts = <0x00 0x93 0x04>; phandle = <0x30>; }; memory-controller@f6430000 { compatible = "xlnx,versal-ddrmc"; status = "disabled"; reg = <0x00 0xf6430000 0x00 0x2000 0x00 0xf6380000 0x00 0x20000>; reg-names = "base\0noc"; interrupts = <0x00 0x93 0x04>; phandle = <0x31>; }; memory-controller@f65a0000 { compatible = "xlnx,versal-ddrmc"; status = "disabled"; reg = <0x00 0xf65a0000 0x00 0x2000 0x00 0xf64f0000 0x00 0x20000>; reg-names = "base\0noc"; interrupts = <0x00 0x93 0x04>; phandle = <0x32>; }; memory-controller@ff960000 { compatible = "xlnx,zynqmp-ocmc-1.0"; reg = <0x00 0xff960000 0x00 0x1000>; interrupts = <0x00 0x0a 0x04>; phandle = <0x33>; }; rtc@f12a0000 { compatible = "xlnx,zynqmp-rtc"; status = "okay"; reg = <0x00 0xf12a0000 0x00 0x100>; interrupt-names = "alarm\0sec"; interrupts = <0x00 0x8e 0x04 0x00 0x8f 0x04>; calibration = <0x7fff>; power-domains = <0x09 0x18224034>; phandle = <0x34>; }; mmc@f1040000 { compatible = "xlnx,versal-8.9a\0arasan,sdhci-8.9a"; status = "disabled"; reg = <0x00 0xf1040000 0x00 0x10000>; interrupts = <0x00 0x7e 0x04>; clock-names = "clk_xin\0clk_ahb\0gate"; #clock-cells = <0x01>; clock-output-names = "clk_out_sd0\0clk_in_sd0"; clocks = <0x03 0x3b 0x03 0x52 0x03 0x4a>; power-domains = <0x09 0x1822402e>; phandle = <0x35>; }; mmc@f1050000 { compatible = "xlnx,versal-8.9a\0arasan,sdhci-8.9a"; status = "disabled"; reg = <0x00 0xf1050000 0x00 0x10000>; interrupts = <0x00 0x80 0x04>; clock-names = "clk_xin\0clk_ahb\0gate"; #clock-cells = <0x01>; clock-output-names = "clk_out_sd1\0clk_in_sd1"; clocks = <0x03 0x3c 0x03 0x52 0x03 0x4a>; power-domains = <0x09 0x1822402f>; disable-wp; no-1-8-v; phandle = <0x36>; }; serial@ff000000 { compatible = "arm,pl011\0arm,primecell"; status = "disabled"; reg = <0x00 0xff000000 0x00 0x1000>; interrupts = <0x00 0x12 0x04>; reg-io-width = <0x04>; clock-names = "uartclk\0apb_pclk"; bootph-all; clocks = <0x03 0x5c 0x03 0x52>; power-domains = <0x09 0x18224021>; phandle = <0x37>; }; serial@ff010000 { compatible = "arm,pl011\0arm,primecell"; status = "disabled"; reg = <0x00 0xff010000 0x00 0x1000>; interrupts = <0x00 0x13 0x04>; reg-io-width = <0x04>; clock-names = "uartclk\0apb_pclk"; bootph-all; clocks = <0x03 0x5d 0x03 0x52>; power-domains = <0x09 0x18224022>; phandle = <0x38>; }; iommu@fd800000 { compatible = "arm,mmu-500"; status = "okay"; reg = <0x00 0xfd800000 0x00 0x40000>; stream-match-mask = <0x7c00>; #iommu-cells = <0x01>; #global-interrupts = <0x01>; interrupts = <0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04 0x00 0x6b 0x04>; phandle = <0x39>; }; spi@f1010000 { compatible = "xlnx,versal-ospi-1.0\0cdns,qspi-nor"; status = "disabled"; reg = <0x00 0xf1010000 0x00 0x10000 0x00 0xc0000000 0x00 0x20000000>; interrupts = <0x00 0x7c 0x04>; cdns,fifo-depth = <0x100>; cdns,fifo-width = <0x04>; cdns,is-dma = <0x01>; cdns,trigger-address = <0xc0000000>; #address-cells = <0x01>; #size-cells = <0x00>; clocks = <0x03 0x3a>; power-domains = <0x09 0x1822402a>; reset-names = "qspi"; resets = <0x0b 0xc10402e>; phandle = <0x3a>; }; spi@f1030000 { compatible = "xlnx,versal-qspi-1.0"; status = "disabled"; reg = <0x00 0xf1030000 0x00 0x1000>; interrupts = <0x00 0x7d 0x04>; clock-names = "ref_clk\0pclk"; #address-cells = <0x01>; #size-cells = <0x00>; clocks = <0x03 0x39 0x03 0x52>; power-domains = <0x09 0x1822402b>; phandle = <0x3b>; }; spi@ff040000 { compatible = "cdns,spi-r1p6"; status = "disabled"; reg = <0x00 0xff040000 0x00 0x1000>; interrupts = <0x00 0x10 0x04>; clock-names = "ref_clk\0pclk"; #address-cells = <0x01>; #size-cells = <0x00>; clocks = <0x03 0x5e 0x03 0x52>; power-domains = <0x09 0x1822401b>; phandle = <0x3c>; }; spi@ff050000 { compatible = "cdns,spi-r1p6"; status = "disabled"; reg = <0x00 0xff050000 0x00 0x1000>; interrupts = <0x00 0x11 0x04>; clock-names = "ref_clk\0pclk"; #address-cells = <0x01>; #size-cells = <0x00>; clocks = <0x03 0x5f 0x03 0x52>; power-domains = <0x09 0x1822401c>; phandle = <0x3d>; }; sysmon@f1270000 { compatible = "xlnx,versal-sysmon"; #io-channel-cells = <0x00>; reg = <0x00 0xf1270000 0x00 0x4000>; interrupts = <0x00 0x90 0x04>; xlnx,numchannels = [00]; #address-cells = <0x02>; #size-cells = <0x02>; xlnx,nodeid = <0x18224055>; xlnx,num-of-slr = <0x01>; xlnx,ssit-device = <0x00>; phandle = <0x06>; }; sysmon@109270000 { compatible = "xlnx,versal-sysmon"; status = "disabled"; reg = <0x01 0x9270000 0x00 0x4000>; xlnx,numchannels = [00]; #address-cells = <0x01>; #size-cells = <0x00>; xlnx,nodeid = <0x18225055>; phandle = <0x3e>; }; sysmon@111270000 { compatible = "xlnx,versal-sysmon"; status = "disabled"; reg = <0x01 0x11270000 0x00 0x4000>; xlnx,numchannels = [00]; #address-cells = <0x01>; #size-cells = <0x00>; xlnx,nodeid = <0x18226055>; phandle = <0x3f>; }; sysmon@119270000 { compatible = "xlnx,versal-sysmon"; status = "disabled"; reg = <0x01 0x19270000 0x00 0x4000>; xlnx,numchannels = [00]; #address-cells = <0x01>; #size-cells = <0x00>; xlnx,nodeid = <0x18227055>; phandle = <0x40>; }; timer@ff0e0000 { compatible = "cdns,ttc"; status = "disabled"; interrupts = <0x00 0x25 0x04 0x00 0x26 0x04 0x00 0x27 0x04>; reg = <0x00 0xff0e0000 0x00 0x1000>; timer-width = <0x20>; clocks = <0x03 0x27 0x03 0x52>; power-domains = <0x09 0x18224024>; phandle = <0x41>; }; timer@ff0f0000 { compatible = "cdns,ttc"; status = "disabled"; interrupts = <0x00 0x28 0x04 0x00 0x29 0x04 0x00 0x2a 0x04>; reg = <0x00 0xff0f0000 0x00 0x1000>; timer-width = <0x20>; clocks = <0x03 0x28 0x03 0x52>; power-domains = <0x09 0x18224025>; phandle = <0x42>; }; timer@ff100000 { compatible = "cdns,ttc"; status = "disabled"; interrupts = <0x00 0x2b 0x04 0x00 0x2c 0x04 0x00 0x2d 0x04>; reg = <0x00 0xff100000 0x00 0x1000>; timer-width = <0x20>; clocks = <0x03 0x29 0x03 0x52>; power-domains = <0x09 0x18224026>; phandle = <0x43>; }; timer@ff110000 { compatible = "cdns,ttc"; status = "disabled"; interrupts = <0x00 0x2e 0x04 0x00 0x2f 0x04 0x00 0x30 0x04>; reg = <0x00 0xff110000 0x00 0x1000>; timer-width = <0x20>; clocks = <0x03 0x2a 0x03 0x52>; power-domains = <0x09 0x18224027>; phandle = <0x44>; }; usb@ff9d0000 { compatible = "xlnx,versal-dwc3"; status = "disabled"; reg = <0x00 0xff9d0000 0x00 0x100>; clock-names = "bus_clk\0ref_clk"; ranges; #address-cells = <0x02>; #size-cells = <0x02>; clocks = <0x03 0x5b 0x03 0x68>; power-domains = <0x09 0x18224018>; resets = <0x0b 0xc104036>; phandle = <0x45>; usb@fe200000 { compatible = "snps,dwc3"; status = "disabled"; reg = <0x00 0xfe200000 0x00 0x10000>; interrupt-names = "host\0peripheral\0otg\0wakeup"; interrupts = <0x00 0x16 0x04 0x00 0x16 0x04 0x00 0x1a 0x04 0x00 0x4a 0x04>; snps,dis_u2_susphy_quirk; snps,dis_u3_susphy_quirk; snps,quirk-frame-length-adjustment = <0x20>; clock-names = "ref"; clocks = <0x03 0x5b>; phandle = <0x46>; }; }; pci@fca10000 { device_type = "pci"; #address-cells = <0x03>; #interrupt-cells = <0x01>; #size-cells = <0x02>; compatible = "xlnx,versal-cpm-host-1.00"; status = "disabled"; interrupt-map = <0x00 0x00 0x00 0x01 0x0c 0x00 0x00 0x00 0x00 0x02 0x0c 0x01 0x00 0x00 0x00 0x03 0x0c 0x02 0x00 0x00 0x00 0x04 0x0c 0x03>; interrupt-map-mask = <0x00 0x00 0x00 0x07>; interrupt-names = "misc"; interrupts = <0x00 0x48 0x04>; interrupt-parent = <0x05>; bus-range = <0x00 0xff>; ranges = <0x2000000 0x00 0xe0010000 0x00 0xe0010000 0x00 0x10000000 0x43000000 0x80 0x00 0x80 0x00 0x00 0x80000000>; msi-map = <0x00 0x0d 0x00 0x10000>; reg = <0x00 0xfca10000 0x00 0x1000 0x06 0x00 0x00 0x1000000>; reg-names = "cpm_slcr\0cfg"; phandle = <0x47>; interrupt-controller { #address-cells = <0x00>; #interrupt-cells = <0x01>; interrupt-controller; phandle = <0x0c>; }; }; pcie@fcdd0000 { device_type = "pci"; #address-cells = <0x03>; #interrupt-cells = <0x01>; #size-cells = <0x02>; compatible = "xlnx,versal-cpm5-host"; status = "disabled"; interrupt-map = <0x00 0x00 0x00 0x01 0x0e 0x00 0x00 0x00 0x00 0x02 0x0e 0x01 0x00 0x00 0x00 0x03 0x0e 0x02 0x00 0x00 0x00 0x04 0x0e 0x03>; interrupt-map-mask = <0x00 0x00 0x00 0x07>; interrupt-names = "misc"; interrupts = <0x00 0x48 0x04>; interrupt-parent = <0x05>; bus-range = <0x00 0xff>; ranges = <0x2000000 0x00 0xe0000000 0x00 0xe0000000 0x00 0x10000000 0x43000000 0x80 0x00 0x80 0x00 0x00 0x80000000>; msi-map = <0x00 0x0d 0x00 0x10000>; reg = <0x00 0xfcdd0000 0x00 0x1000 0x06 0x00 0x00 0x1000000 0x00 0xfce20000 0x00 0x1000000>; reg-names = "cpm_slcr\0cfg\0cpm_csr"; phandle = <0x48>; interrupt-controller { #address-cells = <0x00>; #interrupt-cells = <0x01>; interrupt-controller; phandle = <0x0e>; }; }; watchdog@fd4d0000 { compatible = "xlnx,versal-wwdt"; status = "disabled"; reg = <0x00 0xfd4d0000 0x00 0x10000>; timeout-sec = <0x1e>; clocks = <0x03 0x4c>; power-domains = <0x09 0x18224029>; phandle = <0x49>; }; watchdog@ff120000 { compatible = "xlnx,versal-wwdt"; status = "disabled"; reg = <0x00 0xff120000 0x00 0x10000>; timeout-sec = <0x1e>; clocks = <0x03 0x52>; power-domains = <0x09 0x18224028>; phandle = <0x4a>; }; edac@f2014050 { compatible = "xlnx,versal-xilsem-edac"; status = "disabled"; reg = <0x00 0xf2014050 0x00 0xc4>; phandle = <0x4b>; }; }; pl_alt_ref_clk { bootph-all; compatible = "fixed-clock"; #clock-cells = <0x00>; clock-frequency = <0x1fca055>; phandle = <0x10>; }; ref_clk { bootph-all; compatible = "fixed-clock"; #clock-cells = <0x00>; clock-frequency = <0x1fca055>; phandle = <0x0f>; }; can0_clk { #clock-cells = <0x00>; compatible = "fixed-factor-clock"; clocks = <0x03 0x60>; clock-div = <0x02>; clock-mult = <0x01>; phandle = <0x08>; }; can1_clk { #clock-cells = <0x00>; compatible = "fixed-factor-clock"; clocks = <0x03 0x61>; clock-div = <0x02>; clock-mult = <0x01>; phandle = <0x0a>; }; firmware { versal-firmware { compatible = "xlnx,versal-firmware"; interrupt-parent = <0x05>; bootph-all; method = "smc"; #power-domain-cells = <0x01>; phandle = <0x09>; clock-controller { bootph-all; #clock-cells = <0x01>; compatible = "xlnx,versal-clk"; clocks = <0x0f 0x10>; clock-names = "ref_clk\0pl_alt_ref_clk"; phandle = <0x03>; }; zynqmp-power { compatible = "xlnx,zynqmp-power"; phandle = <0x4c>; }; reset-controller { compatible = "xlnx,versal-reset"; #reset-cells = <0x01>; phandle = <0x0b>; }; pinctrl { compatible = "xlnx,versal-pinctrl"; phandle = <0x4d>; }; versal-sec-cfg { compatible = "xlnx,versal-sec-cfg"; #address-cells = <0x01>; #size-cells = <0x01>; phandle = <0x4e>; bbram-zeroize@4 { reg = <0x04 0x04>; phandle = <0x4f>; }; bbram-key@10 { reg = <0x10 0x20>; phandle = <0x50>; }; bbram-usr@30 { reg = <0x30 0x04>; phandle = <0x51>; }; bbram-lock@48 { reg = <0x48 0x04>; phandle = <0x52>; }; user-key@110 { reg = <0x110 0x20>; phandle = <0x53>; }; user-key@130 { reg = <0x130 0x20>; phandle = <0x54>; }; user-key@150 { reg = <0x150 0x20>; phandle = <0x55>; }; user-key@170 { reg = <0x170 0x20>; phandle = <0x56>; }; user-key@190 { reg = <0x190 0x20>; phandle = <0x57>; }; user-key@1b0 { reg = <0x1b0 0x20>; phandle = <0x58>; }; user-key@1d0 { reg = <0x1d0 0x20>; phandle = <0x59>; }; user-key@1f0 { reg = <0x1f0 0x20>; phandle = <0x5a>; }; }; }; }; chosen { bootargs = "console=hvc0 cpuidle.off=1 maxcpus=1 earlycon=pl011,mmio32,0xFF000000,115200n8 root=/dev/mmcblk1p2 ro rootwait"; stdout-path = "serial0:115200n8"; }; aliases { serial0 = "/dcc"; }; __symbols__ { cpus = "/cpus"; cpu0 = "/cpus/cpu@0"; cpu1 = "/cpus/cpu@1"; CPU_SLEEP_0 = "/cpus/idle-states/cpu-sleep-0"; cpu_opp_table = "/opp-table-cpu"; dcc = "/dcc"; fpga = "/fpga-region"; psci = "/psci"; timer = "/timer"; versal_fpga = "/versal-fpga"; sensor0 = "/versal-thermal-sensor"; versal_thermal = "/thermal-zones/versal-thermal"; temp_alert = "/thermal-zones/versal-thermal/trips/temp-alert"; ot_crit = "/thermal-zones/versal-thermal/trips/ot-crit"; amba = "/axi"; gic = "/axi/interrupt-controller@f9000000"; gic_its = "/axi/interrupt-controller@f9000000/msi-controller@f9020000"; can0 = "/axi/can@ff060000"; can1 = "/axi/can@ff070000"; cci = "/axi/cci@fd000000"; cci_pmu = "/axi/cci@fd000000/pmu@10000"; lpd_dma_chan0 = "/axi/dma-controller@ffa80000"; lpd_dma_chan1 = "/axi/dma-controller@ffa90000"; lpd_dma_chan2 = "/axi/dma-controller@ffaa0000"; lpd_dma_chan3 = "/axi/dma-controller@ffab0000"; lpd_dma_chan4 = "/axi/dma-controller@ffac0000"; lpd_dma_chan5 = "/axi/dma-controller@ffad0000"; lpd_dma_chan6 = "/axi/dma-controller@ffae0000"; lpd_dma_chan7 = "/axi/dma-controller@ffaf0000"; gem0 = "/axi/ethernet@ff0c0000"; gem1 = "/axi/ethernet@ff0d0000"; gpio0 = "/axi/gpio@ff0b0000"; gpio1 = "/axi/gpio@f1020000"; i2c0 = "/axi/i2c@ff020000"; i2c1 = "/axi/i2c@ff030000"; i2c2 = "/axi/i2c@f1000000"; mc0 = "/axi/memory-controller@f6150000"; mc1 = "/axi/memory-controller@f62c0000"; mc2 = "/axi/memory-controller@f6430000"; mc3 = "/axi/memory-controller@f65a0000"; ocm = "/axi/memory-controller@ff960000"; rtc = "/axi/rtc@f12a0000"; sdhci0 = "/axi/mmc@f1040000"; sdhci1 = "/axi/mmc@f1050000"; serial0 = "/axi/serial@ff000000"; serial1 = "/axi/serial@ff010000"; smmu = "/axi/iommu@fd800000"; ospi = "/axi/spi@f1010000"; qspi = "/axi/spi@f1030000"; spi0 = "/axi/spi@ff040000"; spi1 = "/axi/spi@ff050000"; sysmon0 = "/axi/sysmon@f1270000"; sysmon1 = "/axi/sysmon@109270000"; sysmon2 = "/axi/sysmon@111270000"; sysmon3 = "/axi/sysmon@119270000"; ttc0 = "/axi/timer@ff0e0000"; ttc1 = "/axi/timer@ff0f0000"; ttc2 = "/axi/timer@ff100000"; ttc3 = "/axi/timer@ff110000"; usb0 = "/axi/usb@ff9d0000"; dwc3_0 = "/axi/usb@ff9d0000/usb@fe200000"; cpm_pciea = "/axi/pci@fca10000"; pcie_intc_0 = "/axi/pci@fca10000/interrupt-controller"; cpm5_pcie = "/axi/pcie@fcdd0000"; pcie_intc_1 = "/axi/pcie@fcdd0000/interrupt-controller"; watchdog = "/axi/watchdog@fd4d0000"; watchdog1 = "/axi/watchdog@ff120000"; xilsem_edac = "/axi/edac@f2014050"; pl_alt_ref_clk = "/pl_alt_ref_clk"; ref_clk = "/ref_clk"; can0_clk = "/can0_clk"; can1_clk = "/can1_clk"; versal_firmware = "/firmware/versal-firmware"; versal_clk = "/firmware/versal-firmware/clock-controller"; zynqmp_power = "/firmware/versal-firmware/zynqmp-power"; versal_reset = "/firmware/versal-firmware/reset-controller"; pinctrl0 = "/firmware/versal-firmware/pinctrl"; versal_sec_cfg = "/firmware/versal-firmware/versal-sec-cfg"; bbram_zeroize = "/firmware/versal-firmware/versal-sec-cfg/bbram-zeroize@4"; bbram_key = "/firmware/versal-firmware/versal-sec-cfg/bbram-key@10"; bbram_usr = "/firmware/versal-firmware/versal-sec-cfg/bbram-usr@30"; bbram_lock = "/firmware/versal-firmware/versal-sec-cfg/bbram-lock@48"; user_key0 = "/firmware/versal-firmware/versal-sec-cfg/user-key@110"; user_key1 = "/firmware/versal-firmware/versal-sec-cfg/user-key@130"; user_key2 = "/firmware/versal-firmware/versal-sec-cfg/user-key@150"; user_key3 = "/firmware/versal-firmware/versal-sec-cfg/user-key@170"; user_key4 = "/firmware/versal-firmware/versal-sec-cfg/user-key@190"; user_key5 = "/firmware/versal-firmware/versal-sec-cfg/user-key@1b0"; user_key6 = "/firmware/versal-firmware/versal-sec-cfg/user-key@1d0"; user_key7 = "/firmware/versal-firmware/versal-sec-cfg/user-key@1f0"; }; }; chanra1n@chanra1n-Standard-PC-i440FX-PIIX-1996:~/vd100$