1. 获取 flash id:
硬件信息:通过这个节点可以知道当前flash的id,上层根据id找到对应的flash名字。
cat /sys/block/mmcblk0/device/cid
\kernel-4.4\drivers\mmc\core\Mmc.c
MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1]
MT8163_MT8127
GDT42A32ED7_T2E 0x700100543532373332010585581e937d
MT8321 只支持如下方式兼容:
1. EMCP类: 只要emmc id不同,就可以兼容。
2. discrete lp2 类: dram vendor ID不同,就可以兼容(也就是说不同晶圆厂家兼容,具体对应的是datasheet中的MR5值,对应到code中MemoryDeviceList_xxxx.xlsx 表格的MODE_REG5 列)
3. discrete lp3 类: dram vendor ID不同,就可以兼容(也就是说不同晶圆厂家兼容,具体对应的是datasheet中的MR5值,对应到code中MemoryDeviceList_xxxx.xlsx 表格的MODE_REG5 列)
4. PCDDR3类:不支持。
编译脚本
判断哪些ddr可以兼容,编译时会允许这个脚本
vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT8127/emigen.pl
1 if ($scan_idx eq $PartNum) # scan column 2 for Part Number 2 3 { 4 my $boardid ; 5 $boardid = &xls_cell_value($Sheet, $row, $COLUMN_BOARD_ID) ; 6 if ($CustBoard_ID eq $boardid) 7 { 8 $rows_part_found[$num_part_found] = $row; 9 10 print "\nPartNum($PartNum==$scan_idx) found in row $row\n" ; 11 $Total_PART_NUMBER[$TotalCustemChips] = $PartNum; 12 $num_part_found += 1 ; 13 $TotalCustemChips += 1; 14 } 15 }
1 if ($num_part_found == 0) 2 { 3 print "\n[Error]unsupported part number $PartNum\n" ; 4 die "\n[Error]unsupported part number $PartNum\n" ; 5 }
①:Board ID不匹配,不支持
[Error]unsupported part number H9TKNNN8KDMP
所以xls表格里面配置的board id跟当前平台不一致的话,会报不支持。
②:兼容不了LPDDR2和LPDDR3同时选配
TotalCustemChips:2
[Error] LPDDR2 and LPDDR3 are not allowed to be mixed in the Combo Discrete DRAM list.
③:兼容不了多个PCDDR3同时选配
[Error] At most one discrete PCDDR3 DRAM is allowed in the Combo MCP list
④:兼容不了LPDDR3和PCDDR3同时选配
[Error] At most one discrete PCDDR3 DRAM is allowed in the Combo MCP list
编译过后会生成
out/target/product/hiteq8127_ce/obj/PRELOADER_OBJ/inc/custom_emi.h
此文件包含兼容的所有ddr时序,就是将xls表格里的时序信息构建成数组。开机时会利用这个数组emi_settings[]找到指定的ddr。
1 EMI_SETTINGS emi_settings[] = 2 { 3 4 //K4E6E304EE_EGCF 5 { 6 0x0, /* sub_version */ 7 0x0003, /* TYPE */ 8 0, /* EMMC ID/FW ID checking length */ 9 0, /* FW length */ 10 { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, /* NAND_EMMC_ID */ 11 { 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, /* FW_ID */ 12 0x000250A2, /* EMI_CONA_VAL */ 13 0xAA00AA00,