近日,有个疑问。发觉Imagecfg.h里定义的display FrameBuffer物理地址与config.bib里reserve的display 地址mapping不上。
即:
Imagecfg.h:
#define IMAGE_FRAMEBUFFER_UA_BASE 0xAFF75000
#define IMAGE_FRAMEBUFFER_DMA_BASE 0x3BF75000
config.bib:
RAM 8C000000 03F75000 RAM
DISPLAY 8FF75000 00080000 RESERVED
oemaddrtab_cfg.inc:
DCD 0x88000000, 0x30000000, 64 ; 64 MB DRAM BANK 6
DCD 0x8C000000, 0x38000000, 64 ; 64 MB DRAM BANK 7
DCD 0x82000000, 0x08000000, 32
DCD 0x84000000, 0x10000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 2
DCD 0x86000000, 0x18000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 3
DCD 0x90800000, 0x48000000, 1 ; SDRAM control register
DCD 0x90900000, 0x48800000, 1 ; EBI control register
DCD 0x90A00000, 0x49000000, 1 ; USB Host control register
DCD 0x90B00000, 0x49800000, 1 ; USB Device control register
DCD 0x90C00000, 0x4A000000, 1 ; Interrupt control register
DCD 0x90D00000, 0x4A800000, 1 ; HS-MMC1 control register
DCD 0x90E00000, 0x4B000000, 1 ; DMA control register
DCD 0x90F00000, 0x4B800000, 1 ; CF Card control register
DCD 0x91000000, 0x4C000000, 1 ; SYSCON register
DCD 0x91100000, 0x4C800000, 1 ; TFT-LCD control register
; DCD 0x91200000, 0x4D000000, 1 ; STN-LCD control register
DCD 0x91200000, 0x4AC00000, 1 ; HS-MMC2 control register ;fax080312
DCD 0x91300000, 0x4D800000, 1 ; Camera control register
DCD 0x91400000, 0x4E000000, 1 ; NAND flash control register
DCD 0x91500000, 0x4E800000, 1 ; Matrix control register
DCD 0x91600000, 0x4F000000, 1 ; SSMC control register
DCD 0x91700000, 0x4F800000, 1 ; TIC control register
DCD 0x91800000, 0x50000000, 1 ; UART control register
DCD 0x91C00000, 0x51000000, 1 ; PWM control register
DCD 0x91D00000, 0x52000000, 1 ; HS-SPI and SPI0 control register
DCD 0x91E00000, 0x53000000, 1 ; WDT control register
DCD 0x91F00000, 0x54000000, 1 ; IIC control register
DCD 0x92000000, 0x55000000, 1 ; IIS control register
DCD 0x92100000, 0x56000000, 1 ; I/O Port register
DCD 0x92200000, 0x57000000, 1 ; RTC Port register
DCD 0x92300000, 0x58000000, 1 ; TSADC Port register
DCD 0x92400000, 0x59000000, 1 ; SPI Port register
DCD 0x92500000, 0x5A000000, 1 ; SDI Port register
DCD 0x92600000, 0x5B000000, 1 ; AC97 Port register
DCD 0x92700000, 0x5C000000, 1 ; PCM Port register ;fax080312
DCD 0x92800000, 0x4D400000, 1 ; 2D Port register offset 0x8000 ;fax080312
IF BSP_INAND = "1"
DCD 0x93000000, 0x40000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 0
ELSE
DCD 0x93000000, 0x00000000, 32 ; 32 MB SROM(SRAM/ROM) BANK 0
ENDIF
DCD 0x00000000, 0x00000000, 0 ; end of table
正确分析:
0x3BF75000应该在“ DCD 0x8C000000, 0x38000000, 64 ; 64 MB DRAM BANK 7”里,故只能基于此基址mapping:
Cached Virtual Address of Display= 0x8C000000 + (0x3BF75000 - 0x38000000) = 8FF75000;(同config.bib)
注意:虚拟地址是连续的,但物理地址不连续;
先估计在哪个bank,再基于此bank运算。