From 93c04ddbffd8fbb78eeca7b92c606e0a3cffa8b8 Mon Sep 17 00:00:00 2001 From: theshy <2241061863@qq.com> Date: Thu, 29 Aug 2024 20:16:37 -0700 Subject: [PATCH 1/2] paddlelite --- samples/_zvm/boards/roc_rk3568_pc_smp.overlay | 12 +++++-- samples/_zvm/prj.conf | 2 +- soc/arm64/rockchip/rk3568/mmu_regions.c | 5 +++ .../vdev/pt_device_roc_rk3568_pc.c | 35 +++++++++++++++++++ 4 files changed, 51 insertions(+), 3 deletions(-) diff --git a/samples/_zvm/boards/roc_rk3568_pc_smp.overlay b/samples/_zvm/boards/roc_rk3568_pc_smp.overlay index 91ef2638a..248ef2308 100644 --- a/samples/_zvm/boards/roc_rk3568_pc_smp.overlay +++ b/samples/_zvm/boards/roc_rk3568_pc_smp.overlay @@ -14,6 +14,7 @@ ptdevice5 = "/soc/pass_through_device/pwm@fe6f0000"; ptdevice6 = "/soc/pass_through_device/linuxdev@103000"; ptdevice7 = "/soc/pass_through_device/serial@fe6c0000"; + ptdevice8 = "/soc/pass_through_device/model@90000000"; linuxdebugger = "/soc/fiq-debugger"; vmvirtmem = "/soc/virtmem@bf000000"; vmshmemrw = "/soc/shmem_rw@bd000000"; @@ -116,6 +117,13 @@ label = "LINUXDEV"; }; + model: model@90000000 { + compatible = "zephyr,model"; + reg = <0x0 0x90000000 0x0 DT_SIZE_M(120)>; + interrupts = ; + interrupt-names = "irq_0"; + }; + }; debug_uart: fiq-debugger { @@ -161,8 +169,8 @@ memmap_type = "dirct"; address_type = "normal_memory"; vm_reg_base = <0x40000000>; - vm_reg_size = ; - reg = <0x0 0x48000000 0x0 DT_SIZE_M(2)>; + vm_reg_size = ; + reg = <0x0 0x48000000 0x0 DT_SIZE_M(12)>; label = "VM0_MEM"; }; diff --git a/samples/_zvm/prj.conf b/samples/_zvm/prj.conf index fc7af7007..20875e3df 100644 --- a/samples/_zvm/prj.conf +++ b/samples/_zvm/prj.conf @@ -67,7 +67,7 @@ CONFIG_HEAP_MEM_POOL_SIZE=385875968 CONFIG_MAX_DOMAIN_PARTITIONS=32 # MAX table -CONFIG_MAX_XLAT_TABLES=10240 +CONFIG_MAX_XLAT_TABLES=20480 # dynamic memory allocation CONFIG_VM_DYNAMIC_MEMORY=n diff --git a/soc/arm64/rockchip/rk3568/mmu_regions.c b/soc/arm64/rockchip/rk3568/mmu_regions.c index a776a3449..0004445a5 100644 --- a/soc/arm64/rockchip/rk3568/mmu_regions.c +++ b/soc/arm64/rockchip/rk3568/mmu_regions.c @@ -56,6 +56,11 @@ static const struct arm_mmu_region mmu_regions[] = { DT_REG_ADDR(DT_ALIAS(vmshmemrw)), DT_REG_SIZE(DT_ALIAS(vmshmemrw)), MT_DEVICE_nGnRnE | MT_P_RW_U_NA | MT_DEFAULT_SECURE_STATE), + + MMU_REGION_FLAT_ENTRY("MODEL", + DT_REG_ADDR_BY_IDX(DT_INST(0, zephyr_model), 0), + DT_REG_SIZE_BY_IDX(DT_INST(0, zephyr_model), 0), + MT_DEVICE_nGnRnE | MT_P_RW_U_NA | MT_DEFAULT_SECURE_STATE), #endif }; diff --git a/subsys/virtualization/vdev/pt_device_roc_rk3568_pc.c b/subsys/virtualization/vdev/pt_device_roc_rk3568_pc.c index 69091460b..1ed502842 100644 --- a/subsys/virtualization/vdev/pt_device_roc_rk3568_pc.c +++ b/subsys/virtualization/vdev/pt_device_roc_rk3568_pc.c @@ -92,7 +92,42 @@ static const struct virt_device_api virt_ptdevice_api = { /*---------------------Date for each pt device---------------------------*/ /*irq exist? set this configuration.*/ +static void ptdevice_irq_config_func_8(const struct device *dev) +{ + IRQ_CONNECT(DT_IRQN(DT_ALIAS(ptdevice8)), + DT_IRQ(DT_ALIAS(ptdevice8), priority), + pass_through_device_isr, + DEVICE_DT_GET(DT_ALIAS(ptdevice8)), + 0); +} +/*irq exist? if not, set function NULL.*/ +static struct pass_through_device_config ptdevice_cfg_port_8 = { + .irq_config_func = ptdevice_irq_config_func_8, + .ptdev_spec_init_func = NULL, + .ptdev_spec_irq_func = NULL, +}; +static struct virt_device_config virt_ptdevice_cfg_8 = { + .reg_base = DT_REG_ADDR(DT_ALIAS(ptdevice8)), + .reg_size = DT_REG_SIZE(DT_ALIAS(ptdevice8)), + .hirq_num = DT_IRQN(DT_ALIAS(ptdevice8)), + .device_config = &ptdevice_cfg_port_8, +}; + +static struct virt_device_data virt_ptdevice_data_port_8 = { + .device_data = NULL, +}; + +DEVICE_DT_DEFINE(DT_ALIAS(ptdevice8), + &pass_through_device_init, + NULL, &virt_ptdevice_data_port_8, &virt_ptdevice_cfg_8, + POST_KERNEL, + CONFIG_SERIAL_INIT_PRIORITY, + &virt_ptdevice_api); +/*------------------------cut line---------------------------------------*/ + +/*---------------------Date for each pt device---------------------------*/ +/*irq exist? set this configuration.*/ static void ptdevice_irq_config_func_7(const struct device *dev) { IRQ_CONNECT(DT_IRQN(DT_ALIAS(ptdevice7)), -- Gitee From fb30700720543684a311689b7dc29b80e26afe35 Mon Sep 17 00:00:00 2001 From: theshy <2241061863@qq.com> Date: Sun, 1 Sep 2024 02:01:02 -0700 Subject: [PATCH 2/2] paddlelite support --- samples/_zvm/boards/roc_rk3568_pc_smp.overlay | 2 +- zvm_doc/4_Run_on_ROC_RK3568_PC.rst | 48 ++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/samples/_zvm/boards/roc_rk3568_pc_smp.overlay b/samples/_zvm/boards/roc_rk3568_pc_smp.overlay index 248ef2308..9727270b0 100644 --- a/samples/_zvm/boards/roc_rk3568_pc_smp.overlay +++ b/samples/_zvm/boards/roc_rk3568_pc_smp.overlay @@ -169,7 +169,7 @@ memmap_type = "dirct"; address_type = "normal_memory"; vm_reg_base = <0x40000000>; - vm_reg_size = ; + vm_reg_size = ; reg = <0x0 0x48000000 0x0 DT_SIZE_M(12)>; label = "VM0_MEM"; }; diff --git a/zvm_doc/4_Run_on_ROC_RK3568_PC.rst b/zvm_doc/4_Run_on_ROC_RK3568_PC.rst index e91d5be2f..3ce93cb05 100644 --- a/zvm_doc/4_Run_on_ROC_RK3568_PC.rst +++ b/zvm_doc/4_Run_on_ROC_RK3568_PC.rst @@ -130,7 +130,53 @@ rk3568板卡通电,使用串口助手连接板卡后,启动时长按`ctrl + 此时,打开uart3串口,即可使用zvm的shell来输入命令并启动虚拟机。 -3. 注意 +3. RK3568平台的ZVM上运行Paddle Lite +----------------------- + +修改/zvm/samples/_zvm/boards/roc_rk3568_pc_smp.overlay的zephyr_ddr的vm_reg_size为600: + +.. code:: shell + + vm_reg_size = ; + +1) 使用脚本文件构建ZVM镜像: + +.. code:: shell + + ./auto_zvm.sh build roc_rk3568_pc_smp + +或者使用命令行构建镜像: + +.. code:: shell + + west build -b roc_rk3568_pc_smp samples/_zvm + + +2) 生成ZVM镜像文件如下: + +.. code:: shell + + build/zephyr/zvm_host.bin + +3) 参照RK3568 平台运行ZVM步骤,相关文件在AI文件夹下,运行如下命令: + +.. code:: shell + + tftp 0x10000000 zvm_host.bin #下载zvm镜像 + tftp 0x48000000 zephyr.bin #下载zephyr vm镜像 + tftp 0x80000000 Image #下载linux vm镜像 + tftp 0x48000000 rk3568-firefly-roc-pc-simple.dtb #下载linux 设备树镜像 + tftp 0x90000000 mobilenet_v1.nb #下载mobilenetv1模型 + +运行镜像: + +.. code:: shell + + dcache flush; icache flush #刷新数据和指令cache + dcache off;icache off;go 0x10000000 #关闭数据和指令cache + go 0x10000000 #将pc指针指0x10000000 + +4. 注意 ----------------------- 由于zvm运行需要使用到多个串口,因此主机必须连接至少两个串口, -- Gitee