#if defined(FEATURE_SATA_DIPM_PARTIAL_FIRST)
SATA Link Power Management,顾名思义是让SATA Link的PHY进入Lower Power State,与硬盘或者SSD的其他部分(CPU,DDR,后端)的电源管理是完全独立的。以硬盘为例,SATA Link的电源状态与盘片的转数快慢是独立的。
SATA提供了两种低功耗模式:Partial和Slumber。
Partial下去快,起来也快,return Latency大约10us,让link在不太影响传输性能的情况下忙里偷闲休息一下。
Slumber要慢一些,return latency大约10ms,预计link有一段相对长的Idle时间时,好好休息一下。
在Link Power Management方面,SATA一视同仁,Host和Device都可以发起,分别称为:
HIPM(Host Initiated Power Management)
DIPM (Device Initiated Power Management)
发起归发起,还是需要对方配合,才能让Link进入Partial 或者 Slumber。具体做法是这样的,以Host发起为例:
- Host发送一个 PMREQ_P(请求进入Partial)给Device 【如果发PMREQ_S就是请求进Slumber】;
- Device回复PMACK(同意)或者PMNAK(不同意);
- 如果Device回复同意,两边一起进Partial(一般接收方都会发送多个PMACK以确保发起方收到
- 如果回复的不同意,那就什么都不发生;
如果需要退出partial或者Slumber, 需要通过OOB重新建立链接。
Maxio的code里,电量节省模式只会是partial和slumber mode的其中之一。
#if defined(FEATURE_SATA_DIPM_PARTIAL_FIRST)
status = enter_partial_mode();
#else
status = enter_slumber_mode();
#endif