如何修改DisplayPort EDID

作者:Nathan Xu,AMD工程师;来源:AMD开发者社区

在最新的DisplayPort 1.4 RX Subsystem IP GUI界面, 有使能Video EDID的选项, 如下:

Video EDID的选项.png

如果用户使能了这个选项, Video EDID这个core是来存取Sink的EDID, 因此只需要用户去改写该EDID内容。

因为Video EDID是DisplayPort 1.4 RX Subsysystem的sub-core, 因此, 该Video EDID的绝对地址是DisplayPort 1.4 RX Subsysystem的base address, 加上 "Video EDID" (如果Video EDID选项勾上) 的偏移地址是0x6000, Video EDID的地址空间大小是4K. 用户可以按照上述计算得到的Video EDID绝对地址通过AXI-lite接口修改EDID内容。

还有一个办法是通过host application, 用户可以参考AMD的DisplayPort RX only demo, 该demo在host application定义了loadEDID这个函数, 用户可以直接用loadEDID该函数, 也可以 按照此函数,用” XDp_WriteReg”直接修改EDID内容。

void LoadEDID(void)

 {

    int i=0;

    int j=0;

 

            u8 edid[256] = {

                        0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,

                        0x61, 0x2C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                        0x0E, 0x19, 0x01, 0x04, 0xB5, 0x3C, 0x22, 0x78,

                        0x3A, 0x4D, 0xD5, 0xA7, 0x55, 0x4A, 0x9D, 0x24,

                        0x0E, 0x50, 0x54, 0xBF, 0xEF, 0x00, 0xD1, 0xC0,

                        0x81, 0x40, 0x81, 0x80, 0x95, 0x00, 0xB3, 0x00,

                        0x71, 0x4F, 0x81, 0xC0, 0x01, 0x01, 0x4D, 0xD0,

                        0x00, 0xA0, 0xF0, 0x70, 0x3E, 0x80, 0x30, 0x20,

                        0x35, 0x00, 0x54, 0x4F, 0x21, 0x00, 0x00, 0x1A,

                        0x04, 0x74, 0x00, 0x30, 0xF2, 0x70, 0x5A, 0x80,

                        0xB0, 0x58, 0x8A, 0x00, 0x54, 0x4F, 0x21, 0x00,

                        0x00, 0x1A, 0x00, 0x00, 0x00, 0xFD, 0x00, 0x1D,

                        0x50, 0x18, 0xA0, 0x3C, 0x04, 0x11, 0x00, 0xF0,

                        0xF8, 0x38, 0xF0, 0x3C, 0x00, 0x00, 0x00, 0xFC,

                        0x00, 0x58, 0x49, 0x4C, 0x49, 0x4E, 0x58, 0x20,

                        0x44, 0x50, 0x0A, 0x20, 0x20, 0x20, 0x01, 0x19,

 

                        0x02, 0x03, 0x27, 0x71, 0x4F, 0x01, 0x02, 0x03,

                        0x11, 0x12, 0x13, 0x04, 0x14, 0x05, 0x1F, 0x90,

                        0x0E, 0x0F, 0x1D, 0x1E, 0x23, 0x09, 0x17, 0x07,

                        0x83, 0x01, 0x00, 0x00, 0x6A, 0x03, 0x0C, 0x00,

                        0x00, 0x00, 0x00, 0x78, 0x20, 0x00, 0x00, 0x56,

                        0x5E, 0x00, 0xA0, 0xA0, 0xA0, 0x29, 0x50, 0x30,

                        0x20, 0x35, 0x00, 0x54, 0x4F, 0x21, 0x00, 0x00,

                        0x1E, 0xE2, 0x68, 0x00, 0xA0, 0xA0, 0x40, 0x2E,

                        0x60, 0x30, 0x20, 0x36, 0x00, 0x54, 0x4F, 0x21,

                        0x00, 0x00, 0x1A, 0x01, 0x1D, 0x00, 0xBC, 0x52,

                        0xD0, 0x1E, 0x20, 0xB8, 0x28, 0x55, 0x40, 0x54,

                        0x4F, 0x21, 0x00, 0x00, 0x1E, 0x8C, 0x0A, 0xD0,

                        0x90, 0x20, 0x40, 0x31, 0x20, 0x0C, 0x40, 0x55,

                        0x00, 0x54, 0x4F, 0x21, 0x00, 0x00, 0x18, 0x00,

                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,

                        0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0

            };

 

    for(i=0;i<(256*4);i=i+(16*4)){

        for(j=i;j<(i+(16*4));j=j+4){

            XDp_WriteReg (VID_EDID_BASEADDR, j, edid[(i/4)+1]);

        }

    }

    for(i=0;i<(256*4);i=i+4){

        XDp_WriteReg (VID_EDID_BASEADDR, i, edid[i/4]);

    }

 }


最新文章

最新文章