@@ -167,10 +167,6 @@ static void hccs_pcc_rx_callback(struct mbox_client *cl, void *mssg)
167
167
168
168
static void hccs_unregister_pcc_channel (struct hccs_dev * hdev )
169
169
{
170
- struct hccs_mbox_client_info * cl_info = & hdev -> cl_info ;
171
-
172
- if (cl_info -> pcc_comm_addr )
173
- iounmap (cl_info -> pcc_comm_addr );
174
170
pcc_mbox_free_channel (hdev -> cl_info .pcc_chan );
175
171
}
176
172
@@ -179,6 +175,7 @@ static int hccs_register_pcc_channel(struct hccs_dev *hdev)
179
175
struct hccs_mbox_client_info * cl_info = & hdev -> cl_info ;
180
176
struct mbox_client * cl = & cl_info -> client ;
181
177
struct pcc_mbox_chan * pcc_chan ;
178
+ struct mbox_chan * mbox_chan ;
182
179
struct device * dev = hdev -> dev ;
183
180
int rc ;
184
181
@@ -196,7 +193,7 @@ static int hccs_register_pcc_channel(struct hccs_dev *hdev)
196
193
goto out ;
197
194
}
198
195
cl_info -> pcc_chan = pcc_chan ;
199
- cl_info -> mbox_chan = pcc_chan -> mchan ;
196
+ mbox_chan = pcc_chan -> mchan ;
200
197
201
198
/*
202
199
* pcc_chan->latency is just a nominal value. In reality the remote
@@ -206,34 +203,24 @@ static int hccs_register_pcc_channel(struct hccs_dev *hdev)
206
203
cl_info -> deadline_us =
207
204
HCCS_PCC_CMD_WAIT_RETRIES_NUM * pcc_chan -> latency ;
208
205
if (!hdev -> verspec_data -> has_txdone_irq &&
209
- cl_info -> mbox_chan -> mbox -> txdone_irq ) {
206
+ mbox_chan -> mbox -> txdone_irq ) {
210
207
dev_err (dev , "PCC IRQ in PCCT is enabled.\n" );
211
208
rc = - EINVAL ;
212
209
goto err_mbx_channel_free ;
213
210
} else if (hdev -> verspec_data -> has_txdone_irq &&
214
- !cl_info -> mbox_chan -> mbox -> txdone_irq ) {
211
+ !mbox_chan -> mbox -> txdone_irq ) {
215
212
dev_err (dev , "PCC IRQ in PCCT isn't supported.\n" );
216
213
rc = - EINVAL ;
217
214
goto err_mbx_channel_free ;
218
215
}
219
216
220
- if (!pcc_chan -> shmem_base_addr ||
221
- pcc_chan -> shmem_size != HCCS_PCC_SHARE_MEM_BYTES ) {
222
- dev_err (dev , "The base address or size (%llu) of PCC communication region is invalid.\n" ,
223
- pcc_chan -> shmem_size );
217
+ if (pcc_chan -> shmem_size != HCCS_PCC_SHARE_MEM_BYTES ) {
218
+ dev_err (dev , "Base size (%llu) of PCC communication region must be %d bytes.\n" ,
219
+ pcc_chan -> shmem_size , HCCS_PCC_SHARE_MEM_BYTES );
224
220
rc = - EINVAL ;
225
221
goto err_mbx_channel_free ;
226
222
}
227
223
228
- cl_info -> pcc_comm_addr = ioremap (pcc_chan -> shmem_base_addr ,
229
- pcc_chan -> shmem_size );
230
- if (!cl_info -> pcc_comm_addr ) {
231
- dev_err (dev , "Failed to ioremap PCC communication region for channel-%u.\n" ,
232
- hdev -> chan_id );
233
- rc = - ENOMEM ;
234
- goto err_mbx_channel_free ;
235
- }
236
-
237
224
return 0 ;
238
225
239
226
err_mbx_channel_free :
@@ -246,7 +233,7 @@ static int hccs_wait_cmd_complete_by_poll(struct hccs_dev *hdev)
246
233
{
247
234
struct hccs_mbox_client_info * cl_info = & hdev -> cl_info ;
248
235
struct acpi_pcct_shared_memory __iomem * comm_base =
249
- cl_info -> pcc_comm_addr ;
236
+ cl_info -> pcc_chan -> shmem ;
250
237
u16 status ;
251
238
int ret ;
252
239
@@ -289,7 +276,7 @@ static inline void hccs_fill_pcc_shared_mem_region(struct hccs_dev *hdev,
289
276
.status = 0 ,
290
277
};
291
278
292
- memcpy_toio (hdev -> cl_info .pcc_comm_addr , (void * )& tmp ,
279
+ memcpy_toio (hdev -> cl_info .pcc_chan -> shmem , (void * )& tmp ,
293
280
sizeof (struct acpi_pcct_shared_memory ));
294
281
295
282
/* Copy the message to the PCC comm space */
@@ -309,7 +296,7 @@ static inline void hccs_fill_ext_pcc_shared_mem_region(struct hccs_dev *hdev,
309
296
.command = cmd ,
310
297
};
311
298
312
- memcpy_toio (hdev -> cl_info .pcc_comm_addr , (void * )& tmp ,
299
+ memcpy_toio (hdev -> cl_info .pcc_chan -> shmem , (void * )& tmp ,
313
300
sizeof (struct acpi_pcct_ext_pcc_shared_memory ));
314
301
315
302
/* Copy the message to the PCC comm space */
@@ -321,20 +308,21 @@ static int hccs_pcc_cmd_send(struct hccs_dev *hdev, u8 cmd,
321
308
{
322
309
const struct hccs_verspecific_data * verspec_data = hdev -> verspec_data ;
323
310
struct hccs_mbox_client_info * cl_info = & hdev -> cl_info ;
311
+ struct mbox_chan * mbox_chan = cl_info -> pcc_chan -> mchan ;
324
312
struct hccs_fw_inner_head * fw_inner_head ;
325
313
void __iomem * comm_space ;
326
314
u16 space_size ;
327
315
int ret ;
328
316
329
- comm_space = cl_info -> pcc_comm_addr + verspec_data -> shared_mem_size ;
317
+ comm_space = cl_info -> pcc_chan -> shmem + verspec_data -> shared_mem_size ;
330
318
space_size = HCCS_PCC_SHARE_MEM_BYTES - verspec_data -> shared_mem_size ;
331
319
verspec_data -> fill_pcc_shared_mem (hdev , cmd , desc ,
332
320
comm_space , space_size );
333
321
if (verspec_data -> has_txdone_irq )
334
322
reinit_completion (& cl_info -> done );
335
323
336
324
/* Ring doorbell */
337
- ret = mbox_send_message (cl_info -> mbox_chan , & cmd );
325
+ ret = mbox_send_message (mbox_chan , & cmd );
338
326
if (ret < 0 ) {
339
327
dev_err (hdev -> dev , "Send PCC mbox message failed, ret = %d.\n" ,
340
328
ret );
@@ -356,9 +344,9 @@ static int hccs_pcc_cmd_send(struct hccs_dev *hdev, u8 cmd,
356
344
357
345
end :
358
346
if (verspec_data -> has_txdone_irq )
359
- mbox_chan_txdone (cl_info -> mbox_chan , ret );
347
+ mbox_chan_txdone (mbox_chan , ret );
360
348
else
361
- mbox_client_txdone (cl_info -> mbox_chan , ret );
349
+ mbox_client_txdone (mbox_chan , ret );
362
350
return ret ;
363
351
}
364
352
0 commit comments