@@ -195,7 +195,8 @@ static void __iomem *__map_region(const char *name)
195
195
return ptr ;
196
196
}
197
197
198
- static int __issue_avs_command (struct private_data * priv , int cmd , bool is_send ,
198
+ static int __issue_avs_command (struct private_data * priv , unsigned int cmd ,
199
+ unsigned int num_in , unsigned int num_out ,
199
200
u32 args [])
200
201
{
201
202
unsigned long time_left = msecs_to_jiffies (AVS_TIMEOUT );
@@ -225,11 +226,9 @@ static int __issue_avs_command(struct private_data *priv, int cmd, bool is_send,
225
226
/* Clear status before we begin. */
226
227
writel (AVS_STATUS_CLEAR , base + AVS_MBOX_STATUS );
227
228
228
- /* We need to send arguments for this command. */
229
- if (args && is_send ) {
230
- for (i = 0 ; i < AVS_MAX_CMD_ARGS ; i ++ )
231
- writel (args [i ], base + AVS_MBOX_PARAM (i ));
232
- }
229
+ /* Provide input parameters */
230
+ for (i = 0 ; i < num_in ; i ++ )
231
+ writel (args [i ], base + AVS_MBOX_PARAM (i ));
233
232
234
233
/* Protect from spurious interrupts. */
235
234
reinit_completion (& priv -> done );
@@ -256,11 +255,9 @@ static int __issue_avs_command(struct private_data *priv, int cmd, bool is_send,
256
255
goto out ;
257
256
}
258
257
259
- /* This command returned arguments, so we read them back. */
260
- if (args && !is_send ) {
261
- for (i = 0 ; i < AVS_MAX_CMD_ARGS ; i ++ )
262
- args [i ] = readl (base + AVS_MBOX_PARAM (i ));
263
- }
258
+ /* Process returned values */
259
+ for (i = 0 ; i < num_out ; i ++ )
260
+ args [i ] = readl (base + AVS_MBOX_PARAM (i ));
264
261
265
262
/* Clear status to tell AVS co-processor we are done. */
266
263
writel (AVS_STATUS_CLEAR , base + AVS_MBOX_STATUS );
@@ -338,7 +335,7 @@ static int brcm_avs_get_pmap(struct private_data *priv, struct pmap *pmap)
338
335
u32 args [AVS_MAX_CMD_ARGS ];
339
336
int ret ;
340
337
341
- ret = __issue_avs_command (priv , AVS_CMD_GET_PMAP , false , args );
338
+ ret = __issue_avs_command (priv , AVS_CMD_GET_PMAP , 0 , 4 , args );
342
339
if (ret || !pmap )
343
340
return ret ;
344
341
@@ -359,15 +356,15 @@ static int brcm_avs_set_pmap(struct private_data *priv, struct pmap *pmap)
359
356
args [2 ] = pmap -> p2 ;
360
357
args [3 ] = pmap -> state ;
361
358
362
- return __issue_avs_command (priv , AVS_CMD_SET_PMAP , true , args );
359
+ return __issue_avs_command (priv , AVS_CMD_SET_PMAP , 4 , 0 , args );
363
360
}
364
361
365
362
static int brcm_avs_get_pstate (struct private_data * priv , unsigned int * pstate )
366
363
{
367
364
u32 args [AVS_MAX_CMD_ARGS ];
368
365
int ret ;
369
366
370
- ret = __issue_avs_command (priv , AVS_CMD_GET_PSTATE , false , args );
367
+ ret = __issue_avs_command (priv , AVS_CMD_GET_PSTATE , 0 , 1 , args );
371
368
if (ret )
372
369
return ret ;
373
370
* pstate = args [0 ];
@@ -381,7 +378,8 @@ static int brcm_avs_set_pstate(struct private_data *priv, unsigned int pstate)
381
378
382
379
args [0 ] = pstate ;
383
380
384
- return __issue_avs_command (priv , AVS_CMD_SET_PSTATE , true, args );
381
+ return __issue_avs_command (priv , AVS_CMD_SET_PSTATE , 1 , 0 , args );
382
+
385
383
}
386
384
387
385
static u32 brcm_avs_get_voltage (void __iomem * base )
@@ -593,7 +591,7 @@ static int brcm_avs_cpufreq_init(struct cpufreq_policy *policy)
593
591
/* All cores share the same clock and thus the same policy. */
594
592
cpumask_setall (policy -> cpus );
595
593
596
- ret = __issue_avs_command (priv , AVS_CMD_ENABLE , false , NULL );
594
+ ret = __issue_avs_command (priv , AVS_CMD_ENABLE , 0 , 0 , NULL );
597
595
if (!ret ) {
598
596
unsigned int pstate ;
599
597
0 commit comments