Linux 6.7-rc7
[linux-modified.git] / drivers / misc / mei / hw-me.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2003-2022, Intel Corporation. All rights reserved.
4  * Intel Management Engine Interface (Intel MEI) Linux driver
5  */
6
7 #include <linux/pci.h>
8
9 #include <linux/kthread.h>
10 #include <linux/interrupt.h>
11 #include <linux/pm_runtime.h>
12 #include <linux/sizes.h>
13 #include <linux/delay.h>
14
15 #include "mei_dev.h"
16 #include "hbm.h"
17
18 #include "hw-me.h"
19 #include "hw-me-regs.h"
20
21 #include "mei-trace.h"
22
23 /**
24  * mei_me_reg_read - Reads 32bit data from the mei device
25  *
26  * @hw: the me hardware structure
27  * @offset: offset from which to read the data
28  *
29  * Return: register value (u32)
30  */
31 static inline u32 mei_me_reg_read(const struct mei_me_hw *hw,
32                                unsigned long offset)
33 {
34         return ioread32(hw->mem_addr + offset);
35 }
36
37
38 /**
39  * mei_me_reg_write - Writes 32bit data to the mei device
40  *
41  * @hw: the me hardware structure
42  * @offset: offset from which to write the data
43  * @value: register value to write (u32)
44  */
45 static inline void mei_me_reg_write(const struct mei_me_hw *hw,
46                                  unsigned long offset, u32 value)
47 {
48         iowrite32(value, hw->mem_addr + offset);
49 }
50
51 /**
52  * mei_me_mecbrw_read - Reads 32bit data from ME circular buffer
53  *  read window register
54  *
55  * @dev: the device structure
56  *
57  * Return: ME_CB_RW register value (u32)
58  */
59 static inline u32 mei_me_mecbrw_read(const struct mei_device *dev)
60 {
61         return mei_me_reg_read(to_me_hw(dev), ME_CB_RW);
62 }
63
64 /**
65  * mei_me_hcbww_write - write 32bit data to the host circular buffer
66  *
67  * @dev: the device structure
68  * @data: 32bit data to be written to the host circular buffer
69  */
70 static inline void mei_me_hcbww_write(struct mei_device *dev, u32 data)
71 {
72         mei_me_reg_write(to_me_hw(dev), H_CB_WW, data);
73 }
74
75 /**
76  * mei_me_mecsr_read - Reads 32bit data from the ME CSR
77  *
78  * @dev: the device structure
79  *
80  * Return: ME_CSR_HA register value (u32)
81  */
82 static inline u32 mei_me_mecsr_read(const struct mei_device *dev)
83 {
84         u32 reg;
85
86         reg = mei_me_reg_read(to_me_hw(dev), ME_CSR_HA);
87         trace_mei_reg_read(dev->dev, "ME_CSR_HA", ME_CSR_HA, reg);
88
89         return reg;
90 }
91
92 /**
93  * mei_hcsr_read - Reads 32bit data from the host CSR
94  *
95  * @dev: the device structure
96  *
97  * Return: H_CSR register value (u32)
98  */
99 static inline u32 mei_hcsr_read(const struct mei_device *dev)
100 {
101         u32 reg;
102
103         reg = mei_me_reg_read(to_me_hw(dev), H_CSR);
104         trace_mei_reg_read(dev->dev, "H_CSR", H_CSR, reg);
105
106         return reg;
107 }
108
109 /**
110  * mei_hcsr_write - writes H_CSR register to the mei device
111  *
112  * @dev: the device structure
113  * @reg: new register value
114  */
115 static inline void mei_hcsr_write(struct mei_device *dev, u32 reg)
116 {
117         trace_mei_reg_write(dev->dev, "H_CSR", H_CSR, reg);
118         mei_me_reg_write(to_me_hw(dev), H_CSR, reg);
119 }
120
121 /**
122  * mei_hcsr_set - writes H_CSR register to the mei device,
123  * and ignores the H_IS bit for it is write-one-to-zero.
124  *
125  * @dev: the device structure
126  * @reg: new register value
127  */
128 static inline void mei_hcsr_set(struct mei_device *dev, u32 reg)
129 {
130         reg &= ~H_CSR_IS_MASK;
131         mei_hcsr_write(dev, reg);
132 }
133
134 /**
135  * mei_hcsr_set_hig - set host interrupt (set H_IG)
136  *
137  * @dev: the device structure
138  */
139 static inline void mei_hcsr_set_hig(struct mei_device *dev)
140 {
141         u32 hcsr;
142
143         hcsr = mei_hcsr_read(dev) | H_IG;
144         mei_hcsr_set(dev, hcsr);
145 }
146
147 /**
148  * mei_me_d0i3c_read - Reads 32bit data from the D0I3C register
149  *
150  * @dev: the device structure
151  *
152  * Return: H_D0I3C register value (u32)
153  */
154 static inline u32 mei_me_d0i3c_read(const struct mei_device *dev)
155 {
156         u32 reg;
157
158         reg = mei_me_reg_read(to_me_hw(dev), H_D0I3C);
159         trace_mei_reg_read(dev->dev, "H_D0I3C", H_D0I3C, reg);
160
161         return reg;
162 }
163
164 /**
165  * mei_me_d0i3c_write - writes H_D0I3C register to device
166  *
167  * @dev: the device structure
168  * @reg: new register value
169  */
170 static inline void mei_me_d0i3c_write(struct mei_device *dev, u32 reg)
171 {
172         trace_mei_reg_write(dev->dev, "H_D0I3C", H_D0I3C, reg);
173         mei_me_reg_write(to_me_hw(dev), H_D0I3C, reg);
174 }
175
176 /**
177  * mei_me_trc_status - read trc status register
178  *
179  * @dev: mei device
180  * @trc: trc status register value
181  *
182  * Return: 0 on success, error otherwise
183  */
184 static int mei_me_trc_status(struct mei_device *dev, u32 *trc)
185 {
186         struct mei_me_hw *hw = to_me_hw(dev);
187
188         if (!hw->cfg->hw_trc_supported)
189                 return -EOPNOTSUPP;
190
191         *trc = mei_me_reg_read(hw, ME_TRC);
192         trace_mei_reg_read(dev->dev, "ME_TRC", ME_TRC, *trc);
193
194         return 0;
195 }
196
197 /**
198  * mei_me_fw_status - read fw status register from pci config space
199  *
200  * @dev: mei device
201  * @fw_status: fw status register values
202  *
203  * Return: 0 on success, error otherwise
204  */
205 static int mei_me_fw_status(struct mei_device *dev,
206                             struct mei_fw_status *fw_status)
207 {
208         struct mei_me_hw *hw = to_me_hw(dev);
209         const struct mei_fw_status *fw_src = &hw->cfg->fw_status;
210         int ret;
211         int i;
212
213         if (!fw_status || !hw->read_fws)
214                 return -EINVAL;
215
216         fw_status->count = fw_src->count;
217         for (i = 0; i < fw_src->count && i < MEI_FW_STATUS_MAX; i++) {
218                 ret = hw->read_fws(dev, fw_src->status[i],
219                                    &fw_status->status[i]);
220                 trace_mei_pci_cfg_read(dev->dev, "PCI_CFG_HFS_X",
221                                        fw_src->status[i],
222                                        fw_status->status[i]);
223                 if (ret)
224                         return ret;
225         }
226
227         return 0;
228 }
229
230 /**
231  * mei_me_hw_config - configure hw dependent settings
232  *
233  * @dev: mei device
234  *
235  * Return:
236  *  * -EINVAL when read_fws is not set
237  *  * 0 on success
238  *
239  */
240 static int mei_me_hw_config(struct mei_device *dev)
241 {
242         struct mei_me_hw *hw = to_me_hw(dev);
243         u32 hcsr, reg;
244
245         if (WARN_ON(!hw->read_fws))
246                 return -EINVAL;
247
248         /* Doesn't change in runtime */
249         hcsr = mei_hcsr_read(dev);
250         hw->hbuf_depth = (hcsr & H_CBD) >> 24;
251
252         reg = 0;
253         hw->read_fws(dev, PCI_CFG_HFS_1, &reg);
254         trace_mei_pci_cfg_read(dev->dev, "PCI_CFG_HFS_1", PCI_CFG_HFS_1, reg);
255         hw->d0i3_supported =
256                 ((reg & PCI_CFG_HFS_1_D0I3_MSK) == PCI_CFG_HFS_1_D0I3_MSK);
257
258         hw->pg_state = MEI_PG_OFF;
259         if (hw->d0i3_supported) {
260                 reg = mei_me_d0i3c_read(dev);
261                 if (reg & H_D0I3C_I3)
262                         hw->pg_state = MEI_PG_ON;
263         }
264
265         return 0;
266 }
267
268 /**
269  * mei_me_pg_state  - translate internal pg state
270  *   to the mei power gating state
271  *
272  * @dev:  mei device
273  *
274  * Return: MEI_PG_OFF if aliveness is on and MEI_PG_ON otherwise
275  */
276 static inline enum mei_pg_state mei_me_pg_state(struct mei_device *dev)
277 {
278         struct mei_me_hw *hw = to_me_hw(dev);
279
280         return hw->pg_state;
281 }
282
283 static inline u32 me_intr_src(u32 hcsr)
284 {
285         return hcsr & H_CSR_IS_MASK;
286 }
287
288 /**
289  * me_intr_disable - disables mei device interrupts
290  *      using supplied hcsr register value.
291  *
292  * @dev: the device structure
293  * @hcsr: supplied hcsr register value
294  */
295 static inline void me_intr_disable(struct mei_device *dev, u32 hcsr)
296 {
297         hcsr &= ~H_CSR_IE_MASK;
298         mei_hcsr_set(dev, hcsr);
299 }
300
301 /**
302  * me_intr_clear - clear and stop interrupts
303  *
304  * @dev: the device structure
305  * @hcsr: supplied hcsr register value
306  */
307 static inline void me_intr_clear(struct mei_device *dev, u32 hcsr)
308 {
309         if (me_intr_src(hcsr))
310                 mei_hcsr_write(dev, hcsr);
311 }
312
313 /**
314  * mei_me_intr_clear - clear and stop interrupts
315  *
316  * @dev: the device structure
317  */
318 static void mei_me_intr_clear(struct mei_device *dev)
319 {
320         u32 hcsr = mei_hcsr_read(dev);
321
322         me_intr_clear(dev, hcsr);
323 }
324 /**
325  * mei_me_intr_enable - enables mei device interrupts
326  *
327  * @dev: the device structure
328  */
329 static void mei_me_intr_enable(struct mei_device *dev)
330 {
331         u32 hcsr;
332
333         if (mei_me_hw_use_polling(to_me_hw(dev)))
334                 return;
335
336         hcsr = mei_hcsr_read(dev) | H_CSR_IE_MASK;
337         mei_hcsr_set(dev, hcsr);
338 }
339
340 /**
341  * mei_me_intr_disable - disables mei device interrupts
342  *
343  * @dev: the device structure
344  */
345 static void mei_me_intr_disable(struct mei_device *dev)
346 {
347         u32 hcsr = mei_hcsr_read(dev);
348
349         me_intr_disable(dev, hcsr);
350 }
351
352 /**
353  * mei_me_synchronize_irq - wait for pending IRQ handlers
354  *
355  * @dev: the device structure
356  */
357 static void mei_me_synchronize_irq(struct mei_device *dev)
358 {
359         struct mei_me_hw *hw = to_me_hw(dev);
360
361         if (mei_me_hw_use_polling(hw))
362                 return;
363
364         synchronize_irq(hw->irq);
365 }
366
367 /**
368  * mei_me_hw_reset_release - release device from the reset
369  *
370  * @dev: the device structure
371  */
372 static void mei_me_hw_reset_release(struct mei_device *dev)
373 {
374         u32 hcsr = mei_hcsr_read(dev);
375
376         hcsr |= H_IG;
377         hcsr &= ~H_RST;
378         mei_hcsr_set(dev, hcsr);
379 }
380
381 /**
382  * mei_me_host_set_ready - enable device
383  *
384  * @dev: mei device
385  */
386 static void mei_me_host_set_ready(struct mei_device *dev)
387 {
388         u32 hcsr = mei_hcsr_read(dev);
389
390         if (!mei_me_hw_use_polling(to_me_hw(dev)))
391                 hcsr |= H_CSR_IE_MASK;
392
393         hcsr |=  H_IG | H_RDY;
394         mei_hcsr_set(dev, hcsr);
395 }
396
397 /**
398  * mei_me_host_is_ready - check whether the host has turned ready
399  *
400  * @dev: mei device
401  * Return: bool
402  */
403 static bool mei_me_host_is_ready(struct mei_device *dev)
404 {
405         u32 hcsr = mei_hcsr_read(dev);
406
407         return (hcsr & H_RDY) == H_RDY;
408 }
409
410 /**
411  * mei_me_hw_is_ready - check whether the me(hw) has turned ready
412  *
413  * @dev: mei device
414  * Return: bool
415  */
416 static bool mei_me_hw_is_ready(struct mei_device *dev)
417 {
418         u32 mecsr = mei_me_mecsr_read(dev);
419
420         return (mecsr & ME_RDY_HRA) == ME_RDY_HRA;
421 }
422
423 /**
424  * mei_me_hw_is_resetting - check whether the me(hw) is in reset
425  *
426  * @dev: mei device
427  * Return: bool
428  */
429 static bool mei_me_hw_is_resetting(struct mei_device *dev)
430 {
431         u32 mecsr = mei_me_mecsr_read(dev);
432
433         return (mecsr & ME_RST_HRA) == ME_RST_HRA;
434 }
435
436 /**
437  * mei_gsc_pxp_check - check for gsc firmware entering pxp mode
438  *
439  * @dev: the device structure
440  */
441 static void mei_gsc_pxp_check(struct mei_device *dev)
442 {
443         struct mei_me_hw *hw = to_me_hw(dev);
444         u32 fwsts5 = 0;
445
446         if (!kind_is_gsc(dev) && !kind_is_gscfi(dev))
447                 return;
448
449         hw->read_fws(dev, PCI_CFG_HFS_5, &fwsts5);
450         trace_mei_pci_cfg_read(dev->dev, "PCI_CFG_HFS_5", PCI_CFG_HFS_5, fwsts5);
451
452         if ((fwsts5 & GSC_CFG_HFS_5_BOOT_TYPE_MSK) == GSC_CFG_HFS_5_BOOT_TYPE_PXP) {
453                 if (dev->gsc_reset_to_pxp == MEI_DEV_RESET_TO_PXP_DEFAULT)
454                         dev->gsc_reset_to_pxp = MEI_DEV_RESET_TO_PXP_PERFORMED;
455         } else {
456                 dev->gsc_reset_to_pxp = MEI_DEV_RESET_TO_PXP_DEFAULT;
457         }
458
459         if (dev->pxp_mode == MEI_DEV_PXP_DEFAULT)
460                 return;
461
462         if ((fwsts5 & GSC_CFG_HFS_5_BOOT_TYPE_MSK) == GSC_CFG_HFS_5_BOOT_TYPE_PXP) {
463                 dev_dbg(dev->dev, "pxp mode is ready 0x%08x\n", fwsts5);
464                 dev->pxp_mode = MEI_DEV_PXP_READY;
465         } else {
466                 dev_dbg(dev->dev, "pxp mode is not ready 0x%08x\n", fwsts5);
467         }
468 }
469
470 /**
471  * mei_me_hw_ready_wait - wait until the me(hw) has turned ready
472  *  or timeout is reached
473  *
474  * @dev: mei device
475  * Return: 0 on success, error otherwise
476  */
477 static int mei_me_hw_ready_wait(struct mei_device *dev)
478 {
479         mutex_unlock(&dev->device_lock);
480         wait_event_timeout(dev->wait_hw_ready,
481                         dev->recvd_hw_ready,
482                         dev->timeouts.hw_ready);
483         mutex_lock(&dev->device_lock);
484         if (!dev->recvd_hw_ready) {
485                 dev_err(dev->dev, "wait hw ready failed\n");
486                 return -ETIME;
487         }
488
489         mei_gsc_pxp_check(dev);
490
491         mei_me_hw_reset_release(dev);
492         dev->recvd_hw_ready = false;
493         return 0;
494 }
495
496 /**
497  * mei_me_check_fw_reset - check for the firmware reset error and exception conditions
498  *
499  * @dev: mei device
500  */
501 static void mei_me_check_fw_reset(struct mei_device *dev)
502 {
503         struct mei_fw_status fw_status;
504         char fw_sts_str[MEI_FW_STATUS_STR_SZ] = {0};
505         int ret;
506         u32 fw_pm_event = 0;
507
508         if (!dev->saved_fw_status_flag)
509                 goto end;
510
511         if (dev->gsc_reset_to_pxp == MEI_DEV_RESET_TO_PXP_PERFORMED) {
512                 ret = mei_fw_status(dev, &fw_status);
513                 if (!ret) {
514                         fw_pm_event = fw_status.status[1] & PCI_CFG_HFS_2_PM_EVENT_MASK;
515                         if (fw_pm_event != PCI_CFG_HFS_2_PM_CMOFF_TO_CMX_ERROR &&
516                             fw_pm_event != PCI_CFG_HFS_2_PM_CM_RESET_ERROR)
517                                 goto end;
518                 } else {
519                         dev_err(dev->dev, "failed to read firmware status: %d\n", ret);
520                 }
521         }
522
523         mei_fw_status2str(&dev->saved_fw_status, fw_sts_str, sizeof(fw_sts_str));
524         dev_warn(dev->dev, "unexpected reset: fw_pm_event = 0x%x, dev_state = %u fw status = %s\n",
525                  fw_pm_event, dev->saved_dev_state, fw_sts_str);
526
527 end:
528         if (dev->gsc_reset_to_pxp == MEI_DEV_RESET_TO_PXP_PERFORMED)
529                 dev->gsc_reset_to_pxp = MEI_DEV_RESET_TO_PXP_DONE;
530         dev->saved_fw_status_flag = false;
531 }
532
533 /**
534  * mei_me_hw_start - hw start routine
535  *
536  * @dev: mei device
537  * Return: 0 on success, error otherwise
538  */
539 static int mei_me_hw_start(struct mei_device *dev)
540 {
541         int ret = mei_me_hw_ready_wait(dev);
542
543         if (kind_is_gsc(dev) || kind_is_gscfi(dev))
544                 mei_me_check_fw_reset(dev);
545         if (ret)
546                 return ret;
547         dev_dbg(dev->dev, "hw is ready\n");
548
549         mei_me_host_set_ready(dev);
550         return ret;
551 }
552
553
554 /**
555  * mei_hbuf_filled_slots - gets number of device filled buffer slots
556  *
557  * @dev: the device structure
558  *
559  * Return: number of filled slots
560  */
561 static unsigned char mei_hbuf_filled_slots(struct mei_device *dev)
562 {
563         u32 hcsr;
564         char read_ptr, write_ptr;
565
566         hcsr = mei_hcsr_read(dev);
567
568         read_ptr = (char) ((hcsr & H_CBRP) >> 8);
569         write_ptr = (char) ((hcsr & H_CBWP) >> 16);
570
571         return (unsigned char) (write_ptr - read_ptr);
572 }
573
574 /**
575  * mei_me_hbuf_is_empty - checks if host buffer is empty.
576  *
577  * @dev: the device structure
578  *
579  * Return: true if empty, false - otherwise.
580  */
581 static bool mei_me_hbuf_is_empty(struct mei_device *dev)
582 {
583         return mei_hbuf_filled_slots(dev) == 0;
584 }
585
586 /**
587  * mei_me_hbuf_empty_slots - counts write empty slots.
588  *
589  * @dev: the device structure
590  *
591  * Return: -EOVERFLOW if overflow, otherwise empty slots count
592  */
593 static int mei_me_hbuf_empty_slots(struct mei_device *dev)
594 {
595         struct mei_me_hw *hw = to_me_hw(dev);
596         unsigned char filled_slots, empty_slots;
597
598         filled_slots = mei_hbuf_filled_slots(dev);
599         empty_slots = hw->hbuf_depth - filled_slots;
600
601         /* check for overflow */
602         if (filled_slots > hw->hbuf_depth)
603                 return -EOVERFLOW;
604
605         return empty_slots;
606 }
607
608 /**
609  * mei_me_hbuf_depth - returns depth of the hw buffer.
610  *
611  * @dev: the device structure
612  *
613  * Return: size of hw buffer in slots
614  */
615 static u32 mei_me_hbuf_depth(const struct mei_device *dev)
616 {
617         struct mei_me_hw *hw = to_me_hw(dev);
618
619         return hw->hbuf_depth;
620 }
621
622 /**
623  * mei_me_hbuf_write - writes a message to host hw buffer.
624  *
625  * @dev: the device structure
626  * @hdr: header of message
627  * @hdr_len: header length in bytes: must be multiplication of a slot (4bytes)
628  * @data: payload
629  * @data_len: payload length in bytes
630  *
631  * Return: 0 if success, < 0 - otherwise.
632  */
633 static int mei_me_hbuf_write(struct mei_device *dev,
634                              const void *hdr, size_t hdr_len,
635                              const void *data, size_t data_len)
636 {
637         unsigned long rem;
638         unsigned long i;
639         const u32 *reg_buf;
640         u32 dw_cnt;
641         int empty_slots;
642
643         if (WARN_ON(!hdr || hdr_len & 0x3))
644                 return -EINVAL;
645
646         if (!data && data_len) {
647                 dev_err(dev->dev, "wrong parameters null data with data_len = %zu\n", data_len);
648                 return -EINVAL;
649         }
650
651         dev_dbg(dev->dev, MEI_HDR_FMT, MEI_HDR_PRM((struct mei_msg_hdr *)hdr));
652
653         empty_slots = mei_hbuf_empty_slots(dev);
654         dev_dbg(dev->dev, "empty slots = %d.\n", empty_slots);
655
656         if (empty_slots < 0)
657                 return -EOVERFLOW;
658
659         dw_cnt = mei_data2slots(hdr_len + data_len);
660         if (dw_cnt > (u32)empty_slots)
661                 return -EMSGSIZE;
662
663         reg_buf = hdr;
664         for (i = 0; i < hdr_len / MEI_SLOT_SIZE; i++)
665                 mei_me_hcbww_write(dev, reg_buf[i]);
666
667         reg_buf = data;
668         for (i = 0; i < data_len / MEI_SLOT_SIZE; i++)
669                 mei_me_hcbww_write(dev, reg_buf[i]);
670
671         rem = data_len & 0x3;
672         if (rem > 0) {
673                 u32 reg = 0;
674
675                 memcpy(&reg, (const u8 *)data + data_len - rem, rem);
676                 mei_me_hcbww_write(dev, reg);
677         }
678
679         mei_hcsr_set_hig(dev);
680         if (!mei_me_hw_is_ready(dev))
681                 return -EIO;
682
683         return 0;
684 }
685
686 /**
687  * mei_me_count_full_read_slots - counts read full slots.
688  *
689  * @dev: the device structure
690  *
691  * Return: -EOVERFLOW if overflow, otherwise filled slots count
692  */
693 static int mei_me_count_full_read_slots(struct mei_device *dev)
694 {
695         u32 me_csr;
696         char read_ptr, write_ptr;
697         unsigned char buffer_depth, filled_slots;
698
699         me_csr = mei_me_mecsr_read(dev);
700         buffer_depth = (unsigned char)((me_csr & ME_CBD_HRA) >> 24);
701         read_ptr = (char) ((me_csr & ME_CBRP_HRA) >> 8);
702         write_ptr = (char) ((me_csr & ME_CBWP_HRA) >> 16);
703         filled_slots = (unsigned char) (write_ptr - read_ptr);
704
705         /* check for overflow */
706         if (filled_slots > buffer_depth)
707                 return -EOVERFLOW;
708
709         dev_dbg(dev->dev, "filled_slots =%08x\n", filled_slots);
710         return (int)filled_slots;
711 }
712
713 /**
714  * mei_me_read_slots - reads a message from mei device.
715  *
716  * @dev: the device structure
717  * @buffer: message buffer will be written
718  * @buffer_length: message size will be read
719  *
720  * Return: always 0
721  */
722 static int mei_me_read_slots(struct mei_device *dev, unsigned char *buffer,
723                              unsigned long buffer_length)
724 {
725         u32 *reg_buf = (u32 *)buffer;
726
727         for (; buffer_length >= MEI_SLOT_SIZE; buffer_length -= MEI_SLOT_SIZE)
728                 *reg_buf++ = mei_me_mecbrw_read(dev);
729
730         if (buffer_length > 0) {
731                 u32 reg = mei_me_mecbrw_read(dev);
732
733                 memcpy(reg_buf, &reg, buffer_length);
734         }
735
736         mei_hcsr_set_hig(dev);
737         return 0;
738 }
739
740 /**
741  * mei_me_pg_set - write pg enter register
742  *
743  * @dev: the device structure
744  */
745 static void mei_me_pg_set(struct mei_device *dev)
746 {
747         struct mei_me_hw *hw = to_me_hw(dev);
748         u32 reg;
749
750         reg = mei_me_reg_read(hw, H_HPG_CSR);
751         trace_mei_reg_read(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg);
752
753         reg |= H_HPG_CSR_PGI;
754
755         trace_mei_reg_write(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg);
756         mei_me_reg_write(hw, H_HPG_CSR, reg);
757 }
758
759 /**
760  * mei_me_pg_unset - write pg exit register
761  *
762  * @dev: the device structure
763  */
764 static void mei_me_pg_unset(struct mei_device *dev)
765 {
766         struct mei_me_hw *hw = to_me_hw(dev);
767         u32 reg;
768
769         reg = mei_me_reg_read(hw, H_HPG_CSR);
770         trace_mei_reg_read(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg);
771
772         WARN(!(reg & H_HPG_CSR_PGI), "PGI is not set\n");
773
774         reg |= H_HPG_CSR_PGIHEXR;
775
776         trace_mei_reg_write(dev->dev, "H_HPG_CSR", H_HPG_CSR, reg);
777         mei_me_reg_write(hw, H_HPG_CSR, reg);
778 }
779
780 /**
781  * mei_me_pg_legacy_enter_sync - perform legacy pg entry procedure
782  *
783  * @dev: the device structure
784  *
785  * Return: 0 on success an error code otherwise
786  */
787 static int mei_me_pg_legacy_enter_sync(struct mei_device *dev)
788 {
789         struct mei_me_hw *hw = to_me_hw(dev);
790         int ret;
791
792         dev->pg_event = MEI_PG_EVENT_WAIT;
793
794         ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_ENTRY_REQ_CMD);
795         if (ret)
796                 return ret;
797
798         mutex_unlock(&dev->device_lock);
799         wait_event_timeout(dev->wait_pg,
800                 dev->pg_event == MEI_PG_EVENT_RECEIVED,
801                 dev->timeouts.pgi);
802         mutex_lock(&dev->device_lock);
803
804         if (dev->pg_event == MEI_PG_EVENT_RECEIVED) {
805                 mei_me_pg_set(dev);
806                 ret = 0;
807         } else {
808                 ret = -ETIME;
809         }
810
811         dev->pg_event = MEI_PG_EVENT_IDLE;
812         hw->pg_state = MEI_PG_ON;
813
814         return ret;
815 }
816
817 /**
818  * mei_me_pg_legacy_exit_sync - perform legacy pg exit procedure
819  *
820  * @dev: the device structure
821  *
822  * Return: 0 on success an error code otherwise
823  */
824 static int mei_me_pg_legacy_exit_sync(struct mei_device *dev)
825 {
826         struct mei_me_hw *hw = to_me_hw(dev);
827         int ret;
828
829         if (dev->pg_event == MEI_PG_EVENT_RECEIVED)
830                 goto reply;
831
832         dev->pg_event = MEI_PG_EVENT_WAIT;
833
834         mei_me_pg_unset(dev);
835
836         mutex_unlock(&dev->device_lock);
837         wait_event_timeout(dev->wait_pg,
838                 dev->pg_event == MEI_PG_EVENT_RECEIVED,
839                 dev->timeouts.pgi);
840         mutex_lock(&dev->device_lock);
841
842 reply:
843         if (dev->pg_event != MEI_PG_EVENT_RECEIVED) {
844                 ret = -ETIME;
845                 goto out;
846         }
847
848         dev->pg_event = MEI_PG_EVENT_INTR_WAIT;
849         ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_EXIT_RES_CMD);
850         if (ret)
851                 return ret;
852
853         mutex_unlock(&dev->device_lock);
854         wait_event_timeout(dev->wait_pg,
855                 dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED,
856                 dev->timeouts.pgi);
857         mutex_lock(&dev->device_lock);
858
859         if (dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED)
860                 ret = 0;
861         else
862                 ret = -ETIME;
863
864 out:
865         dev->pg_event = MEI_PG_EVENT_IDLE;
866         hw->pg_state = MEI_PG_OFF;
867
868         return ret;
869 }
870
871 /**
872  * mei_me_pg_in_transition - is device now in pg transition
873  *
874  * @dev: the device structure
875  *
876  * Return: true if in pg transition, false otherwise
877  */
878 static bool mei_me_pg_in_transition(struct mei_device *dev)
879 {
880         return dev->pg_event >= MEI_PG_EVENT_WAIT &&
881                dev->pg_event <= MEI_PG_EVENT_INTR_WAIT;
882 }
883
884 /**
885  * mei_me_pg_is_enabled - detect if PG is supported by HW
886  *
887  * @dev: the device structure
888  *
889  * Return: true is pg supported, false otherwise
890  */
891 static bool mei_me_pg_is_enabled(struct mei_device *dev)
892 {
893         struct mei_me_hw *hw = to_me_hw(dev);
894         u32 reg = mei_me_mecsr_read(dev);
895
896         if (hw->d0i3_supported)
897                 return true;
898
899         if ((reg & ME_PGIC_HRA) == 0)
900                 goto notsupported;
901
902         if (!dev->hbm_f_pg_supported)
903                 goto notsupported;
904
905         return true;
906
907 notsupported:
908         dev_dbg(dev->dev, "pg: not supported: d0i3 = %d HGP = %d hbm version %d.%d ?= %d.%d\n",
909                 hw->d0i3_supported,
910                 !!(reg & ME_PGIC_HRA),
911                 dev->version.major_version,
912                 dev->version.minor_version,
913                 HBM_MAJOR_VERSION_PGI,
914                 HBM_MINOR_VERSION_PGI);
915
916         return false;
917 }
918
919 /**
920  * mei_me_d0i3_set - write d0i3 register bit on mei device.
921  *
922  * @dev: the device structure
923  * @intr: ask for interrupt
924  *
925  * Return: D0I3C register value
926  */
927 static u32 mei_me_d0i3_set(struct mei_device *dev, bool intr)
928 {
929         u32 reg = mei_me_d0i3c_read(dev);
930
931         reg |= H_D0I3C_I3;
932         if (intr)
933                 reg |= H_D0I3C_IR;
934         else
935                 reg &= ~H_D0I3C_IR;
936         mei_me_d0i3c_write(dev, reg);
937         /* read it to ensure HW consistency */
938         reg = mei_me_d0i3c_read(dev);
939         return reg;
940 }
941
942 /**
943  * mei_me_d0i3_unset - clean d0i3 register bit on mei device.
944  *
945  * @dev: the device structure
946  *
947  * Return: D0I3C register value
948  */
949 static u32 mei_me_d0i3_unset(struct mei_device *dev)
950 {
951         u32 reg = mei_me_d0i3c_read(dev);
952
953         reg &= ~H_D0I3C_I3;
954         reg |= H_D0I3C_IR;
955         mei_me_d0i3c_write(dev, reg);
956         /* read it to ensure HW consistency */
957         reg = mei_me_d0i3c_read(dev);
958         return reg;
959 }
960
961 /**
962  * mei_me_d0i3_enter_sync - perform d0i3 entry procedure
963  *
964  * @dev: the device structure
965  *
966  * Return: 0 on success an error code otherwise
967  */
968 static int mei_me_d0i3_enter_sync(struct mei_device *dev)
969 {
970         struct mei_me_hw *hw = to_me_hw(dev);
971         int ret;
972         u32 reg;
973
974         reg = mei_me_d0i3c_read(dev);
975         if (reg & H_D0I3C_I3) {
976                 /* we are in d0i3, nothing to do */
977                 dev_dbg(dev->dev, "d0i3 set not needed\n");
978                 ret = 0;
979                 goto on;
980         }
981
982         /* PGI entry procedure */
983         dev->pg_event = MEI_PG_EVENT_WAIT;
984
985         ret = mei_hbm_pg(dev, MEI_PG_ISOLATION_ENTRY_REQ_CMD);
986         if (ret)
987                 /* FIXME: should we reset here? */
988                 goto out;
989
990         mutex_unlock(&dev->device_lock);
991         wait_event_timeout(dev->wait_pg,
992                 dev->pg_event == MEI_PG_EVENT_RECEIVED,
993                 dev->timeouts.pgi);
994         mutex_lock(&dev->device_lock);
995
996         if (dev->pg_event != MEI_PG_EVENT_RECEIVED) {
997                 ret = -ETIME;
998                 goto out;
999         }
1000         /* end PGI entry procedure */
1001
1002         dev->pg_event = MEI_PG_EVENT_INTR_WAIT;
1003
1004         reg = mei_me_d0i3_set(dev, true);
1005         if (!(reg & H_D0I3C_CIP)) {
1006                 dev_dbg(dev->dev, "d0i3 enter wait not needed\n");
1007                 ret = 0;
1008                 goto on;
1009         }
1010
1011         mutex_unlock(&dev->device_lock);
1012         wait_event_timeout(dev->wait_pg,
1013                 dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED,
1014                 dev->timeouts.d0i3);
1015         mutex_lock(&dev->device_lock);
1016
1017         if (dev->pg_event != MEI_PG_EVENT_INTR_RECEIVED) {
1018                 reg = mei_me_d0i3c_read(dev);
1019                 if (!(reg & H_D0I3C_I3)) {
1020                         ret = -ETIME;
1021                         goto out;
1022                 }
1023         }
1024
1025         ret = 0;
1026 on:
1027         hw->pg_state = MEI_PG_ON;
1028 out:
1029         dev->pg_event = MEI_PG_EVENT_IDLE;
1030         dev_dbg(dev->dev, "d0i3 enter ret = %d\n", ret);
1031         return ret;
1032 }
1033
1034 /**
1035  * mei_me_d0i3_enter - perform d0i3 entry procedure
1036  *   no hbm PG handshake
1037  *   no waiting for confirmation; runs with interrupts
1038  *   disabled
1039  *
1040  * @dev: the device structure
1041  *
1042  * Return: 0 on success an error code otherwise
1043  */
1044 static int mei_me_d0i3_enter(struct mei_device *dev)
1045 {
1046         struct mei_me_hw *hw = to_me_hw(dev);
1047         u32 reg;
1048
1049         reg = mei_me_d0i3c_read(dev);
1050         if (reg & H_D0I3C_I3) {
1051                 /* we are in d0i3, nothing to do */
1052                 dev_dbg(dev->dev, "already d0i3 : set not needed\n");
1053                 goto on;
1054         }
1055
1056         mei_me_d0i3_set(dev, false);
1057 on:
1058         hw->pg_state = MEI_PG_ON;
1059         dev->pg_event = MEI_PG_EVENT_IDLE;
1060         dev_dbg(dev->dev, "d0i3 enter\n");
1061         return 0;
1062 }
1063
1064 /**
1065  * mei_me_d0i3_exit_sync - perform d0i3 exit procedure
1066  *
1067  * @dev: the device structure
1068  *
1069  * Return: 0 on success an error code otherwise
1070  */
1071 static int mei_me_d0i3_exit_sync(struct mei_device *dev)
1072 {
1073         struct mei_me_hw *hw = to_me_hw(dev);
1074         int ret;
1075         u32 reg;
1076
1077         dev->pg_event = MEI_PG_EVENT_INTR_WAIT;
1078
1079         reg = mei_me_d0i3c_read(dev);
1080         if (!(reg & H_D0I3C_I3)) {
1081                 /* we are not in d0i3, nothing to do */
1082                 dev_dbg(dev->dev, "d0i3 exit not needed\n");
1083                 ret = 0;
1084                 goto off;
1085         }
1086
1087         reg = mei_me_d0i3_unset(dev);
1088         if (!(reg & H_D0I3C_CIP)) {
1089                 dev_dbg(dev->dev, "d0i3 exit wait not needed\n");
1090                 ret = 0;
1091                 goto off;
1092         }
1093
1094         mutex_unlock(&dev->device_lock);
1095         wait_event_timeout(dev->wait_pg,
1096                 dev->pg_event == MEI_PG_EVENT_INTR_RECEIVED,
1097                 dev->timeouts.d0i3);
1098         mutex_lock(&dev->device_lock);
1099
1100         if (dev->pg_event != MEI_PG_EVENT_INTR_RECEIVED) {
1101                 reg = mei_me_d0i3c_read(dev);
1102                 if (reg & H_D0I3C_I3) {
1103                         ret = -ETIME;
1104                         goto out;
1105                 }
1106         }
1107
1108         ret = 0;
1109 off:
1110         hw->pg_state = MEI_PG_OFF;
1111 out:
1112         dev->pg_event = MEI_PG_EVENT_IDLE;
1113
1114         dev_dbg(dev->dev, "d0i3 exit ret = %d\n", ret);
1115         return ret;
1116 }
1117
1118 /**
1119  * mei_me_pg_legacy_intr - perform legacy pg processing
1120  *                         in interrupt thread handler
1121  *
1122  * @dev: the device structure
1123  */
1124 static void mei_me_pg_legacy_intr(struct mei_device *dev)
1125 {
1126         struct mei_me_hw *hw = to_me_hw(dev);
1127
1128         if (dev->pg_event != MEI_PG_EVENT_INTR_WAIT)
1129                 return;
1130
1131         dev->pg_event = MEI_PG_EVENT_INTR_RECEIVED;
1132         hw->pg_state = MEI_PG_OFF;
1133         if (waitqueue_active(&dev->wait_pg))
1134                 wake_up(&dev->wait_pg);
1135 }
1136
1137 /**
1138  * mei_me_d0i3_intr - perform d0i3 processing in interrupt thread handler
1139  *
1140  * @dev: the device structure
1141  * @intr_source: interrupt source
1142  */
1143 static void mei_me_d0i3_intr(struct mei_device *dev, u32 intr_source)
1144 {
1145         struct mei_me_hw *hw = to_me_hw(dev);
1146
1147         if (dev->pg_event == MEI_PG_EVENT_INTR_WAIT &&
1148             (intr_source & H_D0I3C_IS)) {
1149                 dev->pg_event = MEI_PG_EVENT_INTR_RECEIVED;
1150                 if (hw->pg_state == MEI_PG_ON) {
1151                         hw->pg_state = MEI_PG_OFF;
1152                         if (dev->hbm_state != MEI_HBM_IDLE) {
1153                                 /*
1154                                  * force H_RDY because it could be
1155                                  * wiped off during PG
1156                                  */
1157                                 dev_dbg(dev->dev, "d0i3 set host ready\n");
1158                                 mei_me_host_set_ready(dev);
1159                         }
1160                 } else {
1161                         hw->pg_state = MEI_PG_ON;
1162                 }
1163
1164                 wake_up(&dev->wait_pg);
1165         }
1166
1167         if (hw->pg_state == MEI_PG_ON && (intr_source & H_IS)) {
1168                 /*
1169                  * HW sent some data and we are in D0i3, so
1170                  * we got here because of HW initiated exit from D0i3.
1171                  * Start runtime pm resume sequence to exit low power state.
1172                  */
1173                 dev_dbg(dev->dev, "d0i3 want resume\n");
1174                 mei_hbm_pg_resume(dev);
1175         }
1176 }
1177
1178 /**
1179  * mei_me_pg_intr - perform pg processing in interrupt thread handler
1180  *
1181  * @dev: the device structure
1182  * @intr_source: interrupt source
1183  */
1184 static void mei_me_pg_intr(struct mei_device *dev, u32 intr_source)
1185 {
1186         struct mei_me_hw *hw = to_me_hw(dev);
1187
1188         if (hw->d0i3_supported)
1189                 mei_me_d0i3_intr(dev, intr_source);
1190         else
1191                 mei_me_pg_legacy_intr(dev);
1192 }
1193
1194 /**
1195  * mei_me_pg_enter_sync - perform runtime pm entry procedure
1196  *
1197  * @dev: the device structure
1198  *
1199  * Return: 0 on success an error code otherwise
1200  */
1201 int mei_me_pg_enter_sync(struct mei_device *dev)
1202 {
1203         struct mei_me_hw *hw = to_me_hw(dev);
1204
1205         if (hw->d0i3_supported)
1206                 return mei_me_d0i3_enter_sync(dev);
1207         else
1208                 return mei_me_pg_legacy_enter_sync(dev);
1209 }
1210
1211 /**
1212  * mei_me_pg_exit_sync - perform runtime pm exit procedure
1213  *
1214  * @dev: the device structure
1215  *
1216  * Return: 0 on success an error code otherwise
1217  */
1218 int mei_me_pg_exit_sync(struct mei_device *dev)
1219 {
1220         struct mei_me_hw *hw = to_me_hw(dev);
1221
1222         if (hw->d0i3_supported)
1223                 return mei_me_d0i3_exit_sync(dev);
1224         else
1225                 return mei_me_pg_legacy_exit_sync(dev);
1226 }
1227
1228 /**
1229  * mei_me_hw_reset - resets fw via mei csr register.
1230  *
1231  * @dev: the device structure
1232  * @intr_enable: if interrupt should be enabled after reset.
1233  *
1234  * Return: 0 on success an error code otherwise
1235  */
1236 static int mei_me_hw_reset(struct mei_device *dev, bool intr_enable)
1237 {
1238         struct mei_me_hw *hw = to_me_hw(dev);
1239         int ret;
1240         u32 hcsr;
1241
1242         if (intr_enable) {
1243                 mei_me_intr_enable(dev);
1244                 if (hw->d0i3_supported) {
1245                         ret = mei_me_d0i3_exit_sync(dev);
1246                         if (ret)
1247                                 return ret;
1248                 } else {
1249                         hw->pg_state = MEI_PG_OFF;
1250                 }
1251         }
1252
1253         pm_runtime_set_active(dev->dev);
1254
1255         hcsr = mei_hcsr_read(dev);
1256         /* H_RST may be found lit before reset is started,
1257          * for example if preceding reset flow hasn't completed.
1258          * In that case asserting H_RST will be ignored, therefore
1259          * we need to clean H_RST bit to start a successful reset sequence.
1260          */
1261         if ((hcsr & H_RST) == H_RST) {
1262                 dev_warn(dev->dev, "H_RST is set = 0x%08X", hcsr);
1263                 hcsr &= ~H_RST;
1264                 mei_hcsr_set(dev, hcsr);
1265                 hcsr = mei_hcsr_read(dev);
1266         }
1267
1268         hcsr |= H_RST | H_IG | H_CSR_IS_MASK;
1269
1270         if (!intr_enable || mei_me_hw_use_polling(to_me_hw(dev)))
1271                 hcsr &= ~H_CSR_IE_MASK;
1272
1273         dev->recvd_hw_ready = false;
1274         mei_hcsr_write(dev, hcsr);
1275
1276         /*
1277          * Host reads the H_CSR once to ensure that the
1278          * posted write to H_CSR completes.
1279          */
1280         hcsr = mei_hcsr_read(dev);
1281
1282         if ((hcsr & H_RST) == 0)
1283                 dev_warn(dev->dev, "H_RST is not set = 0x%08X", hcsr);
1284
1285         if ((hcsr & H_RDY) == H_RDY)
1286                 dev_warn(dev->dev, "H_RDY is not cleared 0x%08X", hcsr);
1287
1288         if (!intr_enable) {
1289                 mei_me_hw_reset_release(dev);
1290                 if (hw->d0i3_supported) {
1291                         ret = mei_me_d0i3_enter(dev);
1292                         if (ret)
1293                                 return ret;
1294                 }
1295         }
1296         return 0;
1297 }
1298
1299 /**
1300  * mei_me_irq_quick_handler - The ISR of the MEI device
1301  *
1302  * @irq: The irq number
1303  * @dev_id: pointer to the device structure
1304  *
1305  * Return: irqreturn_t
1306  */
1307 irqreturn_t mei_me_irq_quick_handler(int irq, void *dev_id)
1308 {
1309         struct mei_device *dev = (struct mei_device *)dev_id;
1310         u32 hcsr;
1311
1312         hcsr = mei_hcsr_read(dev);
1313         if (!me_intr_src(hcsr))
1314                 return IRQ_NONE;
1315
1316         dev_dbg(dev->dev, "interrupt source 0x%08X\n", me_intr_src(hcsr));
1317
1318         /* disable interrupts on device */
1319         me_intr_disable(dev, hcsr);
1320         return IRQ_WAKE_THREAD;
1321 }
1322 EXPORT_SYMBOL_GPL(mei_me_irq_quick_handler);
1323
1324 /**
1325  * mei_me_irq_thread_handler - function called after ISR to handle the interrupt
1326  * processing.
1327  *
1328  * @irq: The irq number
1329  * @dev_id: pointer to the device structure
1330  *
1331  * Return: irqreturn_t
1332  *
1333  */
1334 irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
1335 {
1336         struct mei_device *dev = (struct mei_device *) dev_id;
1337         struct list_head cmpl_list;
1338         s32 slots;
1339         u32 hcsr;
1340         int rets = 0;
1341
1342         dev_dbg(dev->dev, "function called after ISR to handle the interrupt processing.\n");
1343         /* initialize our complete list */
1344         mutex_lock(&dev->device_lock);
1345
1346         hcsr = mei_hcsr_read(dev);
1347         me_intr_clear(dev, hcsr);
1348
1349         INIT_LIST_HEAD(&cmpl_list);
1350
1351         /* check if ME wants a reset */
1352         if (!mei_hw_is_ready(dev) && dev->dev_state != MEI_DEV_RESETTING) {
1353                 if (kind_is_gsc(dev) || kind_is_gscfi(dev)) {
1354                         dev_dbg(dev->dev, "FW not ready: resetting: dev_state = %d\n",
1355                                 dev->dev_state);
1356                 } else {
1357                         dev_warn(dev->dev, "FW not ready: resetting: dev_state = %d\n",
1358                                  dev->dev_state);
1359                 }
1360                 if (dev->dev_state == MEI_DEV_POWERING_DOWN ||
1361                     dev->dev_state == MEI_DEV_POWER_DOWN)
1362                         mei_cl_all_disconnect(dev);
1363                 else if (dev->dev_state != MEI_DEV_DISABLED)
1364                         schedule_work(&dev->reset_work);
1365                 goto end;
1366         }
1367
1368         if (mei_me_hw_is_resetting(dev))
1369                 mei_hcsr_set_hig(dev);
1370
1371         mei_me_pg_intr(dev, me_intr_src(hcsr));
1372
1373         /*  check if we need to start the dev */
1374         if (!mei_host_is_ready(dev)) {
1375                 if (mei_hw_is_ready(dev)) {
1376                         dev_dbg(dev->dev, "we need to start the dev.\n");
1377                         dev->recvd_hw_ready = true;
1378                         wake_up(&dev->wait_hw_ready);
1379                 } else {
1380                         dev_dbg(dev->dev, "Spurious Interrupt\n");
1381                 }
1382                 goto end;
1383         }
1384         /* check slots available for reading */
1385         slots = mei_count_full_read_slots(dev);
1386         while (slots > 0) {
1387                 dev_dbg(dev->dev, "slots to read = %08x\n", slots);
1388                 rets = mei_irq_read_handler(dev, &cmpl_list, &slots);
1389                 /* There is a race between ME write and interrupt delivery:
1390                  * Not all data is always available immediately after the
1391                  * interrupt, so try to read again on the next interrupt.
1392                  */
1393                 if (rets == -ENODATA)
1394                         break;
1395
1396                 if (rets) {
1397                         dev_err(dev->dev, "mei_irq_read_handler ret = %d, state = %d.\n",
1398                                 rets, dev->dev_state);
1399                         if (dev->dev_state != MEI_DEV_RESETTING &&
1400                             dev->dev_state != MEI_DEV_DISABLED &&
1401                             dev->dev_state != MEI_DEV_POWERING_DOWN &&
1402                             dev->dev_state != MEI_DEV_POWER_DOWN)
1403                                 schedule_work(&dev->reset_work);
1404                         goto end;
1405                 }
1406         }
1407
1408         dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
1409
1410         /*
1411          * During PG handshake only allowed write is the replay to the
1412          * PG exit message, so block calling write function
1413          * if the pg event is in PG handshake
1414          */
1415         if (dev->pg_event != MEI_PG_EVENT_WAIT &&
1416             dev->pg_event != MEI_PG_EVENT_RECEIVED) {
1417                 rets = mei_irq_write_handler(dev, &cmpl_list);
1418                 dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
1419         }
1420
1421         mei_irq_compl_handler(dev, &cmpl_list);
1422
1423 end:
1424         dev_dbg(dev->dev, "interrupt thread end ret = %d\n", rets);
1425         mei_me_intr_enable(dev);
1426         mutex_unlock(&dev->device_lock);
1427         return IRQ_HANDLED;
1428 }
1429 EXPORT_SYMBOL_GPL(mei_me_irq_thread_handler);
1430
1431 #define MEI_POLLING_TIMEOUT_ACTIVE 100
1432 #define MEI_POLLING_TIMEOUT_IDLE   500
1433
1434 /**
1435  * mei_me_polling_thread - interrupt register polling thread
1436  *
1437  * @_dev: mei device
1438  *
1439  * The thread monitors the interrupt source register and calls
1440  * mei_me_irq_thread_handler() to handle the firmware
1441  * input.
1442  *
1443  * The function polls in MEI_POLLING_TIMEOUT_ACTIVE timeout
1444  * in case there was an event, in idle case the polling
1445  * time increases yet again by MEI_POLLING_TIMEOUT_ACTIVE
1446  * up to MEI_POLLING_TIMEOUT_IDLE.
1447  *
1448  * Return: always 0
1449  */
1450 int mei_me_polling_thread(void *_dev)
1451 {
1452         struct mei_device *dev = _dev;
1453         irqreturn_t irq_ret;
1454         long polling_timeout = MEI_POLLING_TIMEOUT_ACTIVE;
1455
1456         dev_dbg(dev->dev, "kernel thread is running\n");
1457         while (!kthread_should_stop()) {
1458                 struct mei_me_hw *hw = to_me_hw(dev);
1459                 u32 hcsr;
1460
1461                 wait_event_timeout(hw->wait_active,
1462                                    hw->is_active || kthread_should_stop(),
1463                                    msecs_to_jiffies(MEI_POLLING_TIMEOUT_IDLE));
1464
1465                 if (kthread_should_stop())
1466                         break;
1467
1468                 hcsr = mei_hcsr_read(dev);
1469                 if (me_intr_src(hcsr)) {
1470                         polling_timeout = MEI_POLLING_TIMEOUT_ACTIVE;
1471                         irq_ret = mei_me_irq_thread_handler(1, dev);
1472                         if (irq_ret != IRQ_HANDLED)
1473                                 dev_err(dev->dev, "irq_ret %d\n", irq_ret);
1474                 } else {
1475                         /*
1476                          * Increase timeout by MEI_POLLING_TIMEOUT_ACTIVE
1477                          * up to MEI_POLLING_TIMEOUT_IDLE
1478                          */
1479                         polling_timeout = clamp_val(polling_timeout + MEI_POLLING_TIMEOUT_ACTIVE,
1480                                                     MEI_POLLING_TIMEOUT_ACTIVE,
1481                                                     MEI_POLLING_TIMEOUT_IDLE);
1482                 }
1483
1484                 schedule_timeout_interruptible(msecs_to_jiffies(polling_timeout));
1485         }
1486
1487         return 0;
1488 }
1489 EXPORT_SYMBOL_GPL(mei_me_polling_thread);
1490
1491 static const struct mei_hw_ops mei_me_hw_ops = {
1492
1493         .trc_status = mei_me_trc_status,
1494         .fw_status = mei_me_fw_status,
1495         .pg_state  = mei_me_pg_state,
1496
1497         .host_is_ready = mei_me_host_is_ready,
1498
1499         .hw_is_ready = mei_me_hw_is_ready,
1500         .hw_reset = mei_me_hw_reset,
1501         .hw_config = mei_me_hw_config,
1502         .hw_start = mei_me_hw_start,
1503
1504         .pg_in_transition = mei_me_pg_in_transition,
1505         .pg_is_enabled = mei_me_pg_is_enabled,
1506
1507         .intr_clear = mei_me_intr_clear,
1508         .intr_enable = mei_me_intr_enable,
1509         .intr_disable = mei_me_intr_disable,
1510         .synchronize_irq = mei_me_synchronize_irq,
1511
1512         .hbuf_free_slots = mei_me_hbuf_empty_slots,
1513         .hbuf_is_ready = mei_me_hbuf_is_empty,
1514         .hbuf_depth = mei_me_hbuf_depth,
1515
1516         .write = mei_me_hbuf_write,
1517
1518         .rdbuf_full_slots = mei_me_count_full_read_slots,
1519         .read_hdr = mei_me_mecbrw_read,
1520         .read = mei_me_read_slots
1521 };
1522
1523 /**
1524  * mei_me_fw_type_nm() - check for nm sku
1525  *
1526  * @pdev: pci device
1527  *
1528  * Read ME FW Status register to check for the Node Manager (NM) Firmware.
1529  * The NM FW is only signaled in PCI function 0.
1530  * __Note__: Deprecated by PCH8 and newer.
1531  *
1532  * Return: true in case of NM firmware
1533  */
1534 static bool mei_me_fw_type_nm(const struct pci_dev *pdev)
1535 {
1536         u32 reg;
1537         unsigned int devfn;
1538
1539         devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0);
1540         pci_bus_read_config_dword(pdev->bus, devfn, PCI_CFG_HFS_2, &reg);
1541         trace_mei_pci_cfg_read(&pdev->dev, "PCI_CFG_HFS_2", PCI_CFG_HFS_2, reg);
1542         /* make sure that bit 9 (NM) is up and bit 10 (DM) is down */
1543         return (reg & 0x600) == 0x200;
1544 }
1545
1546 #define MEI_CFG_FW_NM                           \
1547         .quirk_probe = mei_me_fw_type_nm
1548
1549 /**
1550  * mei_me_fw_type_sps_4() - check for sps 4.0 sku
1551  *
1552  * @pdev: pci device
1553  *
1554  * Read ME FW Status register to check for SPS Firmware.
1555  * The SPS FW is only signaled in the PCI function 0.
1556  * __Note__: Deprecated by SPS 5.0 and newer.
1557  *
1558  * Return: true in case of SPS firmware
1559  */
1560 static bool mei_me_fw_type_sps_4(const struct pci_dev *pdev)
1561 {
1562         u32 reg;
1563         unsigned int devfn;
1564
1565         devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0);
1566         pci_bus_read_config_dword(pdev->bus, devfn, PCI_CFG_HFS_1, &reg);
1567         trace_mei_pci_cfg_read(&pdev->dev, "PCI_CFG_HFS_1", PCI_CFG_HFS_1, reg);
1568         return (reg & PCI_CFG_HFS_1_OPMODE_MSK) == PCI_CFG_HFS_1_OPMODE_SPS;
1569 }
1570
1571 #define MEI_CFG_FW_SPS_4                          \
1572         .quirk_probe = mei_me_fw_type_sps_4
1573
1574 /**
1575  * mei_me_fw_type_sps_ign() - check for sps or ign sku
1576  *
1577  * @pdev: pci device
1578  *
1579  * Read ME FW Status register to check for SPS or IGN Firmware.
1580  * The SPS/IGN FW is only signaled in pci function 0
1581  *
1582  * Return: true in case of SPS/IGN firmware
1583  */
1584 static bool mei_me_fw_type_sps_ign(const struct pci_dev *pdev)
1585 {
1586         u32 reg;
1587         u32 fw_type;
1588         unsigned int devfn;
1589
1590         devfn = PCI_DEVFN(PCI_SLOT(pdev->devfn), 0);
1591         pci_bus_read_config_dword(pdev->bus, devfn, PCI_CFG_HFS_3, &reg);
1592         trace_mei_pci_cfg_read(&pdev->dev, "PCI_CFG_HFS_3", PCI_CFG_HFS_3, reg);
1593         fw_type = (reg & PCI_CFG_HFS_3_FW_SKU_MSK);
1594
1595         dev_dbg(&pdev->dev, "fw type is %d\n", fw_type);
1596
1597         return fw_type == PCI_CFG_HFS_3_FW_SKU_IGN ||
1598                fw_type == PCI_CFG_HFS_3_FW_SKU_SPS;
1599 }
1600
1601 #define MEI_CFG_KIND_ITOUCH                     \
1602         .kind = "itouch"
1603
1604 #define MEI_CFG_TYPE_GSC                        \
1605         .kind = "gsc"
1606
1607 #define MEI_CFG_TYPE_GSCFI                      \
1608         .kind = "gscfi"
1609
1610 #define MEI_CFG_FW_SPS_IGN                      \
1611         .quirk_probe = mei_me_fw_type_sps_ign
1612
1613 #define MEI_CFG_FW_VER_SUPP                     \
1614         .fw_ver_supported = 1
1615
1616 #define MEI_CFG_ICH_HFS                      \
1617         .fw_status.count = 0
1618
1619 #define MEI_CFG_ICH10_HFS                        \
1620         .fw_status.count = 1,                   \
1621         .fw_status.status[0] = PCI_CFG_HFS_1
1622
1623 #define MEI_CFG_PCH_HFS                         \
1624         .fw_status.count = 2,                   \
1625         .fw_status.status[0] = PCI_CFG_HFS_1,   \
1626         .fw_status.status[1] = PCI_CFG_HFS_2
1627
1628 #define MEI_CFG_PCH8_HFS                        \
1629         .fw_status.count = 6,                   \
1630         .fw_status.status[0] = PCI_CFG_HFS_1,   \
1631         .fw_status.status[1] = PCI_CFG_HFS_2,   \
1632         .fw_status.status[2] = PCI_CFG_HFS_3,   \
1633         .fw_status.status[3] = PCI_CFG_HFS_4,   \
1634         .fw_status.status[4] = PCI_CFG_HFS_5,   \
1635         .fw_status.status[5] = PCI_CFG_HFS_6
1636
1637 #define MEI_CFG_DMA_128 \
1638         .dma_size[DMA_DSCR_HOST] = SZ_128K, \
1639         .dma_size[DMA_DSCR_DEVICE] = SZ_128K, \
1640         .dma_size[DMA_DSCR_CTRL] = PAGE_SIZE
1641
1642 #define MEI_CFG_TRC \
1643         .hw_trc_supported = 1
1644
1645 /* ICH Legacy devices */
1646 static const struct mei_cfg mei_me_ich_cfg = {
1647         MEI_CFG_ICH_HFS,
1648 };
1649
1650 /* ICH devices */
1651 static const struct mei_cfg mei_me_ich10_cfg = {
1652         MEI_CFG_ICH10_HFS,
1653 };
1654
1655 /* PCH6 devices */
1656 static const struct mei_cfg mei_me_pch6_cfg = {
1657         MEI_CFG_PCH_HFS,
1658 };
1659
1660 /* PCH7 devices */
1661 static const struct mei_cfg mei_me_pch7_cfg = {
1662         MEI_CFG_PCH_HFS,
1663         MEI_CFG_FW_VER_SUPP,
1664 };
1665
1666 /* PCH Cougar Point and Patsburg with quirk for Node Manager exclusion */
1667 static const struct mei_cfg mei_me_pch_cpt_pbg_cfg = {
1668         MEI_CFG_PCH_HFS,
1669         MEI_CFG_FW_VER_SUPP,
1670         MEI_CFG_FW_NM,
1671 };
1672
1673 /* PCH8 Lynx Point and newer devices */
1674 static const struct mei_cfg mei_me_pch8_cfg = {
1675         MEI_CFG_PCH8_HFS,
1676         MEI_CFG_FW_VER_SUPP,
1677 };
1678
1679 /* PCH8 Lynx Point and newer devices - iTouch */
1680 static const struct mei_cfg mei_me_pch8_itouch_cfg = {
1681         MEI_CFG_KIND_ITOUCH,
1682         MEI_CFG_PCH8_HFS,
1683         MEI_CFG_FW_VER_SUPP,
1684 };
1685
1686 /* PCH8 Lynx Point with quirk for SPS Firmware exclusion */
1687 static const struct mei_cfg mei_me_pch8_sps_4_cfg = {
1688         MEI_CFG_PCH8_HFS,
1689         MEI_CFG_FW_VER_SUPP,
1690         MEI_CFG_FW_SPS_4,
1691 };
1692
1693 /* LBG with quirk for SPS (4.0) Firmware exclusion */
1694 static const struct mei_cfg mei_me_pch12_sps_4_cfg = {
1695         MEI_CFG_PCH8_HFS,
1696         MEI_CFG_FW_VER_SUPP,
1697         MEI_CFG_FW_SPS_4,
1698 };
1699
1700 /* Cannon Lake and newer devices */
1701 static const struct mei_cfg mei_me_pch12_cfg = {
1702         MEI_CFG_PCH8_HFS,
1703         MEI_CFG_FW_VER_SUPP,
1704         MEI_CFG_DMA_128,
1705 };
1706
1707 /* Cannon Lake with quirk for SPS 5.0 and newer Firmware exclusion */
1708 static const struct mei_cfg mei_me_pch12_sps_cfg = {
1709         MEI_CFG_PCH8_HFS,
1710         MEI_CFG_FW_VER_SUPP,
1711         MEI_CFG_DMA_128,
1712         MEI_CFG_FW_SPS_IGN,
1713 };
1714
1715 /* Cannon Lake itouch with quirk for SPS 5.0 and newer Firmware exclusion
1716  * w/o DMA support.
1717  */
1718 static const struct mei_cfg mei_me_pch12_itouch_sps_cfg = {
1719         MEI_CFG_KIND_ITOUCH,
1720         MEI_CFG_PCH8_HFS,
1721         MEI_CFG_FW_VER_SUPP,
1722         MEI_CFG_FW_SPS_IGN,
1723 };
1724
1725 /* Tiger Lake and newer devices */
1726 static const struct mei_cfg mei_me_pch15_cfg = {
1727         MEI_CFG_PCH8_HFS,
1728         MEI_CFG_FW_VER_SUPP,
1729         MEI_CFG_DMA_128,
1730         MEI_CFG_TRC,
1731 };
1732
1733 /* Tiger Lake with quirk for SPS 5.0 and newer Firmware exclusion */
1734 static const struct mei_cfg mei_me_pch15_sps_cfg = {
1735         MEI_CFG_PCH8_HFS,
1736         MEI_CFG_FW_VER_SUPP,
1737         MEI_CFG_DMA_128,
1738         MEI_CFG_TRC,
1739         MEI_CFG_FW_SPS_IGN,
1740 };
1741
1742 /* Graphics System Controller */
1743 static const struct mei_cfg mei_me_gsc_cfg = {
1744         MEI_CFG_TYPE_GSC,
1745         MEI_CFG_PCH8_HFS,
1746         MEI_CFG_FW_VER_SUPP,
1747 };
1748
1749 /* Graphics System Controller Firmware Interface */
1750 static const struct mei_cfg mei_me_gscfi_cfg = {
1751         MEI_CFG_TYPE_GSCFI,
1752         MEI_CFG_PCH8_HFS,
1753         MEI_CFG_FW_VER_SUPP,
1754 };
1755
1756 /*
1757  * mei_cfg_list - A list of platform platform specific configurations.
1758  * Note: has to be synchronized with  enum mei_cfg_idx.
1759  */
1760 static const struct mei_cfg *const mei_cfg_list[] = {
1761         [MEI_ME_UNDEF_CFG] = NULL,
1762         [MEI_ME_ICH_CFG] = &mei_me_ich_cfg,
1763         [MEI_ME_ICH10_CFG] = &mei_me_ich10_cfg,
1764         [MEI_ME_PCH6_CFG] = &mei_me_pch6_cfg,
1765         [MEI_ME_PCH7_CFG] = &mei_me_pch7_cfg,
1766         [MEI_ME_PCH_CPT_PBG_CFG] = &mei_me_pch_cpt_pbg_cfg,
1767         [MEI_ME_PCH8_CFG] = &mei_me_pch8_cfg,
1768         [MEI_ME_PCH8_ITOUCH_CFG] = &mei_me_pch8_itouch_cfg,
1769         [MEI_ME_PCH8_SPS_4_CFG] = &mei_me_pch8_sps_4_cfg,
1770         [MEI_ME_PCH12_CFG] = &mei_me_pch12_cfg,
1771         [MEI_ME_PCH12_SPS_4_CFG] = &mei_me_pch12_sps_4_cfg,
1772         [MEI_ME_PCH12_SPS_CFG] = &mei_me_pch12_sps_cfg,
1773         [MEI_ME_PCH12_SPS_ITOUCH_CFG] = &mei_me_pch12_itouch_sps_cfg,
1774         [MEI_ME_PCH15_CFG] = &mei_me_pch15_cfg,
1775         [MEI_ME_PCH15_SPS_CFG] = &mei_me_pch15_sps_cfg,
1776         [MEI_ME_GSC_CFG] = &mei_me_gsc_cfg,
1777         [MEI_ME_GSCFI_CFG] = &mei_me_gscfi_cfg,
1778 };
1779
1780 const struct mei_cfg *mei_me_get_cfg(kernel_ulong_t idx)
1781 {
1782         BUILD_BUG_ON(ARRAY_SIZE(mei_cfg_list) != MEI_ME_NUM_CFG);
1783
1784         if (idx >= MEI_ME_NUM_CFG)
1785                 return NULL;
1786
1787         return mei_cfg_list[idx];
1788 }
1789 EXPORT_SYMBOL_GPL(mei_me_get_cfg);
1790
1791 /**
1792  * mei_me_dev_init - allocates and initializes the mei device structure
1793  *
1794  * @parent: device associated with physical device (pci/platform)
1795  * @cfg: per device generation config
1796  * @slow_fw: configure longer timeouts as FW is slow
1797  *
1798  * Return: The mei_device pointer on success, NULL on failure.
1799  */
1800 struct mei_device *mei_me_dev_init(struct device *parent,
1801                                    const struct mei_cfg *cfg, bool slow_fw)
1802 {
1803         struct mei_device *dev;
1804         struct mei_me_hw *hw;
1805         int i;
1806
1807         dev = devm_kzalloc(parent, sizeof(*dev) + sizeof(*hw), GFP_KERNEL);
1808         if (!dev)
1809                 return NULL;
1810
1811         hw = to_me_hw(dev);
1812
1813         for (i = 0; i < DMA_DSCR_NUM; i++)
1814                 dev->dr_dscr[i].size = cfg->dma_size[i];
1815
1816         mei_device_init(dev, parent, slow_fw, &mei_me_hw_ops);
1817         hw->cfg = cfg;
1818
1819         dev->fw_f_fw_ver_supported = cfg->fw_ver_supported;
1820
1821         dev->kind = cfg->kind;
1822
1823         return dev;
1824 }
1825 EXPORT_SYMBOL_GPL(mei_me_dev_init);