Hi - I would like to make sure I understand your question. Are you saying the C startup code appears to enable the D cache, but the D cache don’t actually get enabled unless you call Xil_DCacheEnable()?
If that is the case, what happens to the D cache bits in the control register when the C startup code attempts to enable it? Do you see it getting enabled, but later disabled?