On 2022-03-04 5:24 PM, Ranjani Sridharan wrote:
On Fri, 2022-03-04 at 15:57 +0100, Cezary Rojewski wrote:
...
+int avs_ipc_set_dx(struct avs_dev *adev, u32 core_mask, bool powerup)
a description for this function would be helpful.
Both relevant fields have comments as requested by Pierre.
We put quite an effort - which was triggered thanks to the feedback received - to have plain, simple delegates in form of: set necessary bits and let firmware to its job. I believe SET_DX is a good example of such.
+{
- union avs_module_msg msg = AVS_MODULE_REQUEST(SET_DX);
- struct avs_ipc_msg request;
- struct avs_dxstate_info dx;
- int ret;
- dx.core_mask = core_mask;
- dx.dx_mask = powerup ? core_mask : 0;
- request.header = msg.val;
- request.data = &dx;
- request.size = sizeof(dx);
- ret = avs_dsp_send_msg(adev, &request, NULL);
- if (ret)
avs_ipc_err(adev, &request, "set dx", ret);
- return ret;
+}
+/*
- avs_ipc_set_d0ix - Set power gating policy (entering D0IX
substates)
- @enable_pg: Whether to enable or disable power gating
- @streaming: Whether a stream is running when transitioning
- */
What do you mean why "whether a stream is running" does it mean any stream? What is the difference between a D0ix transition with a stream running compared to not running?
Precisely, any stream. The transition details are found within the firmware. Host (the driver) is responsible for scheduling and requesting the transition. Nothing more, nothing less.
Regards, Czarek