Hi,
Have you checked this PCIe IP via Simulations to see if the EP is getting configured correctly. If read/writes work in the simulations , then the IP is not at fault. On the board side, you say that you can get the DeviceID, BAR and Config space of the PCIe EP. Have you checked if link training is happening correctly. I believe that there's a signal from the EP that denotes link training is done. If you check this signal via Probe or route it to a GPIO/LED via the FPGA you will get a visual indication that the EP is configured correctly.
The CPU RP should attempt to read the EP registers and status and be able to configure the EP in the FPGA. This happens via a set of BAR reads and writes. Make sure that the PCIe configuration is done before you attempt to do any data reads/writes. If this is not done, the EP will not know what its supposed to do with the data that is sent to it. Most likely, you will set up another device/IP in the downstream ports of the EP to be configured either as Memory-mapped IO or IO mapped, so that the EP will pass the data from RP CPU to the targeted device downstream.