A method of powering-off a power domain unit, comprising:
- connecting requests from an initiator to a target, through a master side manager, a first asynchronous clock domain adapter sender, a first asynchronous clock domain adapter receiver, and a slave side manager;
- connecting responses to the requests, from the target to the initiator, through the slave side manager, a second asynchronous clock domain adapter sender, a second asynchronous clock domain adapter receiver, and the master side manager;
- receiving a request to power off a first power domain;
- upon receiving the request to power off the first power domain,
- fencing new requests received from the initiator, and
- draining pending responses to the requests from the slave side manager, wherein fencing new requests received from the initiator includes sending an error to the initiator, or stalling the request datapath;
- upon draining pending responses to the requests, resetting the second asynchronous clock domain adapter sender;
- and turning off power to the first power domain,
- wherein the master side manager, the first asynchronous clock domain adapter sender and the second asynchronous clock domain adapter receiver are in the first power domain, and wherein the slave side manager, the second asynchronous clock domain adapter sender and the first asynchronous clock domain adapter receiver are in a second power domain.