工具/软件:TI-RTOS
我正在尝试了解在 IPU 逻辑地址和物理地址之间应用的内存映射和虚拟化。 我知道 MMU 有几层、AMMU 最接近 IPU 内核。 我的 AMmu 配置通过配置文件在我的 SYS/BIOS 项目中进行设置。 我还了解到 AMmu 上方的 MMU 由 Linux 中的 Remoteproc 驱动程序根据我构建到 IPU 二进制映像中的资源表的内容进行设置。
我一直在使用 TI RTOS SDK 示例中的 Ammu 和资源表实现作为指南、但对于配置存储器映射有一些问题:
1.我了解到需要将地址虚拟化到外部 DDR,因为我们并不一定会提前知道 Linux 将 DDR 段映射到 IPU 的方式。 但是、当涉及 L4外设存储器和本地 IPU RAM/ROM/MMU 寄存器等时、这些示例都对这些地址应用偏移量、但这种转换对我来说似乎完全没有必要。 我缺少什么吗? 我们应该这样做吗? 不同地说、在没有转换的情况下将外设和本地存储器地址直接传递到 IPU 是否有任何不良影响?
2.我一直使用 IPC MessageQ 示例中的 IpuAmmu.cfg 文件(\IPC_3_47_00_00\examples\DRA7XX_Linux_elf\ex02_MessageQ\ipu2\IpuAmmu.cfg)作为我自己配置文件的基准。 我注意到、此配置中存在一些重叠页。 具体而言、请考虑以下内容、其中一些小页面在中等页面内重叠:
/* ISS:对各种 ISP 寄存器使用3个小页(1 4K 和2 16K);不可高速缓冲;已转换*/* 配置小页[6]以将16K VA 0x50000000映射到 PA 0x55040000 */* 默认情况下为不可高速缓冲*/ Ammu.smallPages[6]= Ammu.Enable_Amilages[0x500mu.Amilages[0x500mu.Amilation].Amilages[0x500mu.Amilages].Amilages[0x500mu.Amilation].Amilages[0x500mu.Amages].Amilation]=0x500mu.Am64006.Am6400.Amates[ Ammu.smallPages [6]。size = Ammu.small_16K; /*配置小页[7]以将16K VA 0x50010000映射到 PA 0x55050000 */* 默认情况下不可高速缓冲*/ Ammu.smallPages [7]页 Enabled = Ammu.Enable_Yes; Ammu.smallPages [7]:amallAddress = 0x50010000;Amical.smallPages [7] = ammu.translatedma.Amages[7];Ammu.amages[7]= 0x550mu.amages[7];amages[amages.amages.amages.amages.amages.amages.amages.amages.amages.amages[a.amages].am /*配置小页面[8]以将4K VA 0x50020000映射到 PA 0x55060000 */* 默认情况下不可高速缓存*/ Ammu.smallPages [8].pageEnabled = Ammu.Enable_Yes; Ammu.smallPages [8].logsmallAddress = 0x50020000;Amical.smallPages [8].translationmu.Amages[8]= 0x550mu.Ammu.Amages[8] /******* 中页 / //* ISS:使用媒体页面(256K)的整个 ISS 寄存器空间;可高速缓冲;已转换*/ *配置媒体页面[0]以将256K VA 0x50000000映射到 PA 0x55040000 * //*使其 L1可高速缓冲* / Amlatum.pages[0]启用 Ammu.mu_Yes;AM640.AMum.Ammediages= 0x550000.Amiled.AmumPages[AM640.AM.Amum.Amed.Amed.Amages]0;AM640.AM640.AM.Amum.Ammu.Amed.Amed.AmumPages[AM640.AM.Amum.Amed.Amed.Amed.Amed.Amed.AmumPages].Amed.Amed.AmumPages[AM640.AM.Am Ammu.mediumPosings[0].L1_cacheable = Ammu.cachepolical_cacheable; Ammu.mediumPosings[0].L1_posted= Ammu.PostedPolicy_posted;
此类内容的最终影响是什么、其中多页定义似乎重新映射相同的存储器空间? 我还想知道为什么重新映射这些存储器、因为 TRM 在 L3_MAIN 存储器映射中将范围0x55030000至0x5507FFFF 显示为"保留"。
