With respect to caches:
1) There's rarely any reason you'd ever need to disable the instruction cache. Almost all exceptions to this rule relate to self-modifying code.
2) For the data cache, the MMU is generally set up to define which areas of the overall address space of the machine are cacheable. There shoudln't be any need to globally disable the data cache, except for very old or badly written code.
Having to disable caches to use a particular bit of hardware doesn't sound correct at all.