6155 ddr

1.memory map header file

Z:\x155\qnx-base-902\hqx-spf-0-1_902-qnx\qnx_ap\target\hypervisor\host\create_images.sh

if [ ${ext_name} == '_la' ] || [ ${ext_name} == '_lv' ] || [ ${ext_name} == '_qnx' ]; then
cat ./fdt_config/public/amss/memory_host_map_common.h ./fdt_config/public/amss/memory_host_map-${SOC_NAME}_sgvm.h > ./fdt_config/public/amss/memory_host_map-${SOC_NAME}.h
cp ./fdt_config/public/amss/memory_host_map-${SOC_NAME}.h ./${OUT_DIR}/memory_host_map-${SOC_NAME}.h
elif [ ${ext_name} == '_fdn' ] || [ ${ext_name} == '_multi' ]; then
cat ./fdt_config/public/amss/memory_host_map_common.h ./fdt_config/public/amss/memory_host_map-${SOC_NAME}${ext_name}.h > ./fdt_config/public/amss/memory_host_map-${SOC_NAME}.h
cp ./fdt_config/public/amss/memory_host_map-${SOC_NAME}.h ./${OUT_DIR}/memory_host_map-${SOC_NAME}${ext_name}.h
fi

根据脚本使用了memory_host_map-6155_sgvm.h 和 memory_host_map_common.h 组合成一个文件memory_host_map-6155.h

文件路径:

Z:\x155\qnx-base-902\hqx-spf-0-1_902-qnx\qnx_ap\target\hypervisor\host\out_6155\memory_host_map-6155.h

Z:\x155\qnx-base-902\hqx-spf-0-1_902-qnx\qnx_ap\target\hypervisor\host\fdt_config\public\amss\memory_host_map-6155_sgvm.h

Z:\x155\qnx-base-902\hqx-spf-0-1_902-qnx\qnx_ap\target\hypervisor\host\fdt_config\public\amss\memory_host_map_common.h

2.memory assign

对于6155, 在文件Z:\x155\qnx-base-902\hqx-spf-0-1_902-qnx\qnx_ap\target\hypervisor\host\fdt_config\dtb\sdm-host.dts 中标明了分配的内存

#ifdef __HOST__
/ {
model = "Qualcomm Technologies, Inc. MSM 8996";
compatible = "qcom,msm8996";
reserved-memory {
#address-cells = <2>;
#size-cells = <1>;
#define ul
RSV_MEM(__GVM_PMEM_START__,__GVM_PMEM_SIZE__,gvm_pmem);

RSV_MEM(__GVM_SYSRAM2_START__,__GVM_SYSRAM2_SIZE__,gvm_sysram2);
RSV_MEM(__GVM_SYSRAM1_START__,__GVM_SYSRAM1_SIZE__,gvm_sysram1);
RSV_MEM(__GVM_ION_AUDIO_MEM_START__,__GVM_ION_AUDIO_MEM_SIZE__,gvm_ion_audio_mem);
RSV_MEM(__DMA_POOL_START__,__DMA_POOL_SIZE__,dma);
RSV_MEM(__SMMU_S1_PT_START__,__SMMU_S1_PT_SIZE__,smmu_s1_pt);
RSV_MEM(__MM_DMA_POOL_START__, __MM_DMA_POOL_SIZE__, mm_dma);

#undef ul
};

RSV_MEM() 标明了起始地址, 大小,以及内存区域的名字,大小和起始地址再在memory_host_map-6155.h 中有定义

最终会生成文件\host\fdt_config\dtb\host.dts ,然后生成为host.dtb

可以通过pidin syspage=asinfo 在板子上查看所有的内存页的情况

 

以地址 0x100000000 (4 GB) 为界限, qnx把内存分为 /memory/below4G/ram  和   /memory/ram  2大部分

对于分配内存块, 只允许分配在上面2块内存区域中的一块, 不允许内存地址跨上面2块区域, 也就是说内存分配, 起始地址+size < 4G 或者 起始地址>=4G

qcom_gvms {
qcom_gvm1 {

#if defined(__GUEST_TYPE_LA__) || defined(__GUEST_TYPE_MULTI__) || defined (__GUEST_TYPE_FDN__)
compatible = "qcom,gvm__IVI_VMID__";
vmid = <__IVI_VMID__>;
vm_name = "la";
secpol_type = "gvm_host_la_t";
vm_restart_mode_manual = <0>;
vm_client_timeout = <2>;
vm_config = "/vm/images/linux-la.config";
vm_starts_by_default = <1>;
#endif
memory-regions =
"gvm_sysram1" ,
"gvm_sysram2" ,
"gvm_ion_audio_mem" ,
"gvm_pmem";

};
};

memory-regions 定义了分配给gvm的内存区域,

3.memory passthrough

上面只是指定了内存大小,分配了内存给gvm, 然后需要在文件Z:\x155\qnx-base-902\hqx-spf-0-1_902-qnx\qnx_ap\target\hypervisor\host\build_files\system.build.tmpl 中把这些内存passthrough 给android

#ifdef __GUEST_TYPE_LA__
# DDR for LA
pass loc mem:$asinfo_start{gvm_sysram1\},$asinfo_length{gvm_sysram1\},rwcxm
pass loc mem:$asinfo_start{gvm_sysram2\},$asinfo_length{gvm_sysram2\},rwcxm
#pass loc mem:$asinfo_start{gvm_ion_audio_mem\},$asinfo_length{gvm_ion_audio_mem\},rwcxm

#else

pass loc mem:$asinfo_start{highmem.0\},$asinfo_length{highmem.0\},rwcxm
pass loc mem:$asinfo_start{android_sysram2\},$asinfo_length{android_sysram2\},rwcxm
pass loc mem:$asinfo_start{android_ion_audio_mem\},$asinfo_length{android_ion_audio_mem\},rwcxm
#endif

pass loc mem:$asinfo_start{gvm_pmem\},$asinfo_length{gvm_pmem\},rwcm

4.qcpe rule

qcpe 中指定了可以访问这些内存区域

#if defined(__GUEST_TYPE_LA__) || defined(__GUEST_TYPE_MULTI__) || defined (__GUEST_TYPE_FDN__)
<vm id='2' smmu_trap="true">
<hv_range_ref id="gvm_pmem" perm="RWX" tz_bridge="true" assignable="true" /> <!-- Host DMA -->
<hv_range_ref id="gvm_sysram1" perm="RWX" tz_bridge="true" assignable="true" /> <!-- Android guest memory -->
<hv_range_ref id="gvm_sysram2" perm="RWX" tz_bridge="true" assignable="true" /> <!-- Android guest memory -->
#ifdef __GUEST_TYPE_LA__
<range id="pciemsi" ipa='0x17a00000' pa='0x17a00000' size='0x1000' perm="RWX"/>
#endif
</vm>
#endif

<dma_domains>
<!-- Host domain is based on vmid="HOST" mem config -->
<dma_domain id="VM_HOST">
<!-- Default mapping in SMMU S2 page table for VM_HOST domain -->
<vm_ref id="HOST" />
</dma_domain>

#if defined(__GUEST_TYPE_LA__) || defined(__GUEST_TYPE_MULTI__) || defined (__GUEST_TYPE_FDN__)
<dma_domain id="VM_GVM2">
<!-- Default mapping in SMMU S2 page table for VM_GVM2 domain -->
<vm_ref id="2" />
</dma_domain>
#endif

ref to :80-pm231-1_a_qnx_hypervisor_customization_guide.pdf



0XA0000000
-----------
UEFI 8MB
-----------
0X9F800000
-----------
QSEECOM 20MB
-----------
0X9E400000
-----------
APSS 109MB
-----------
0X97700000
-----------
PIL_REGION 192 MB
-----------
0x8B700000
-----------
APSS/piMEM EXT 28MB
-----------
0X89B00000
-----------
PIMEM Valut 56MB
-----------
0X86300000
-----------
TZ_STAT 1MB
-----------
0X86200000
-----------
SMEM 2MB
-----------
0X86000000
-----------
Flexsku/APSS 8KB
-----------
0X85FFE000
-----------
secdata/APSS 4KB
-----------
0X85FFD000
-----------
APSS 756KB
-----------
0X85f40000
-----------
AOP CMD DB 128KB
-----------
0x85F20000
-----------
AOP Image 128kb
-----------
0x85F00000
-----------
MPSS_EFS/XBL(BOOT)2MB
-----------
0x85D00000
-----------
HYP 6MB  
-----------
0x85700000
-----------
APSS 87MB
-----------
0x80000000

猜你喜欢

转载自www.cnblogs.com/jlmgary/p/12189107.html
ddr
今日推荐