I have a zc706 system which has the adi hdl blocks instantiated. When I power the system or plug in the monitor quite rarely I get the two-penguins logo correctly with the resolution read from axi-hdmi-tx driver correctly setup. Most of the time, I see many split penguins on the screen and the values I read from the axi-hdmi-tx registers are incorrect.
When I see the penguins correctly, the values in the adi-hdmi-tx regs are set for 1024x768 and it see smeared penguins the settings are for 1920x1080. I wrote a small program which mmaps the hdmi-tx axi slave and wrote the working values into HSYNC1, HSYNC2 etc registers but this doesn't work as I can never change the value of the clock frequency register at offset 0x15(0x54). I guess the axi-hdmi-tx driver is overriding this.
Any idea why this is happening and how to fix it ?