A counter is maintained for power domains that can be powered-off or deactivated. When this counter is non-zero, the corresponding power domain is not powered-off, even if it is idle. Other agents (e.g., circuits or software running in other power domains) can write to an address that increments the counter, and to another address that decrements the counter. When an agent wants another power domain to remain powered-up (e.g., because that agent is about to use or communicate with the target power domain), it increments the count. When the agent no longer needs the target power domain to remain on, it decrements the count. Thus, as long as the count is non-zero, the target domain is maintained in an active (e.g. on) state. When the count reaches zero, it indicates that no agents need the target domain to remain active and therefore the target domain can be powered-off.