Waitrequest *is* required if the slave port does not have a fix read latency or may block write accesses. Even if it's variable latency your component can only accept a pre-determined number of read accesses and must assert waitrequest if it has not returned any of the data if another read is attempted.
Readdatavalid is only required if the slave port supports pipelined reads but does not have a fixed latency. As soon as you add a readdatavalid signal to your interface it *cannot* be fixed latency.
Last but not least if your component supports variable read latency using the readdatavalid signal your slave port *must not* assert readdatavalid the same cycle that the read address phase completes. The read address phase is considered complete when read == 1 and waitrequest == 0.