Merge tag 'char-misc-4.6-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[linux-2.6-block.git] / drivers / misc / mei / hw-txe.c
1 /*
2  *
3  * Intel Management Engine Interface (Intel MEI) Linux driver
4  * Copyright (c) 2013-2014, Intel Corporation.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
13  * more details.
14  *
15  */
16
17 #include <linux/pci.h>
18 #include <linux/jiffies.h>
19 #include <linux/ktime.h>
20 #include <linux/delay.h>
21 #include <linux/kthread.h>
22 #include <linux/irqreturn.h>
23
24 #include <linux/mei.h>
25
26 #include "mei_dev.h"
27 #include "hw-txe.h"
28 #include "client.h"
29 #include "hbm.h"
30
31 #include "mei-trace.h"
32
33
34 /**
35  * mei_txe_reg_read - Reads 32bit data from the txe device
36  *
37  * @base_addr: registers base address
38  * @offset: register offset
39  *
40  * Return: register value
41  */
42 static inline u32 mei_txe_reg_read(void __iomem *base_addr,
43                                         unsigned long offset)
44 {
45         return ioread32(base_addr + offset);
46 }
47
48 /**
49  * mei_txe_reg_write - Writes 32bit data to the txe device
50  *
51  * @base_addr: registers base address
52  * @offset: register offset
53  * @value: the value to write
54  */
55 static inline void mei_txe_reg_write(void __iomem *base_addr,
56                                 unsigned long offset, u32 value)
57 {
58         iowrite32(value, base_addr + offset);
59 }
60
61 /**
62  * mei_txe_sec_reg_read_silent - Reads 32bit data from the SeC BAR
63  *
64  * @hw: the txe hardware structure
65  * @offset: register offset
66  *
67  * Doesn't check for aliveness while Reads 32bit data from the SeC BAR
68  *
69  * Return: register value
70  */
71 static inline u32 mei_txe_sec_reg_read_silent(struct mei_txe_hw *hw,
72                                 unsigned long offset)
73 {
74         return mei_txe_reg_read(hw->mem_addr[SEC_BAR], offset);
75 }
76
77 /**
78  * mei_txe_sec_reg_read - Reads 32bit data from the SeC BAR
79  *
80  * @hw: the txe hardware structure
81  * @offset: register offset
82  *
83  * Reads 32bit data from the SeC BAR and shout loud if aliveness is not set
84  *
85  * Return: register value
86  */
87 static inline u32 mei_txe_sec_reg_read(struct mei_txe_hw *hw,
88                                 unsigned long offset)
89 {
90         WARN(!hw->aliveness, "sec read: aliveness not asserted\n");
91         return mei_txe_sec_reg_read_silent(hw, offset);
92 }
93 /**
94  * mei_txe_sec_reg_write_silent - Writes 32bit data to the SeC BAR
95  *   doesn't check for aliveness
96  *
97  * @hw: the txe hardware structure
98  * @offset: register offset
99  * @value: value to write
100  *
101  * Doesn't check for aliveness while writes 32bit data from to the SeC BAR
102  */
103 static inline void mei_txe_sec_reg_write_silent(struct mei_txe_hw *hw,
104                                 unsigned long offset, u32 value)
105 {
106         mei_txe_reg_write(hw->mem_addr[SEC_BAR], offset, value);
107 }
108
109 /**
110  * mei_txe_sec_reg_write - Writes 32bit data to the SeC BAR
111  *
112  * @hw: the txe hardware structure
113  * @offset: register offset
114  * @value: value to write
115  *
116  * Writes 32bit data from the SeC BAR and shout loud if aliveness is not set
117  */
118 static inline void mei_txe_sec_reg_write(struct mei_txe_hw *hw,
119                                 unsigned long offset, u32 value)
120 {
121         WARN(!hw->aliveness, "sec write: aliveness not asserted\n");
122         mei_txe_sec_reg_write_silent(hw, offset, value);
123 }
124 /**
125  * mei_txe_br_reg_read - Reads 32bit data from the Bridge BAR
126  *
127  * @hw: the txe hardware structure
128  * @offset: offset from which to read the data
129  *
130  * Return: the byte read.
131  */
132 static inline u32 mei_txe_br_reg_read(struct mei_txe_hw *hw,
133                                 unsigned long offset)
134 {
135         return mei_txe_reg_read(hw->mem_addr[BRIDGE_BAR], offset);
136 }
137
138 /**
139  * mei_txe_br_reg_write - Writes 32bit data to the Bridge BAR
140  *
141  * @hw: the txe hardware structure
142  * @offset: offset from which to write the data
143  * @value: the byte to write
144  */
145 static inline void mei_txe_br_reg_write(struct mei_txe_hw *hw,
146                                 unsigned long offset, u32 value)
147 {
148         mei_txe_reg_write(hw->mem_addr[BRIDGE_BAR], offset, value);
149 }
150
151 /**
152  * mei_txe_aliveness_set - request for aliveness change
153  *
154  * @dev: the device structure
155  * @req: requested aliveness value
156  *
157  * Request for aliveness change and returns true if the change is
158  *   really needed and false if aliveness is already
159  *   in the requested state
160  *
161  * Locking: called under "dev->device_lock" lock
162  *
163  * Return: true if request was send
164  */
165 static bool mei_txe_aliveness_set(struct mei_device *dev, u32 req)
166 {
167
168         struct mei_txe_hw *hw = to_txe_hw(dev);
169         bool do_req = hw->aliveness != req;
170
171         dev_dbg(dev->dev, "Aliveness current=%d request=%d\n",
172                                 hw->aliveness, req);
173         if (do_req) {
174                 dev->pg_event = MEI_PG_EVENT_WAIT;
175                 mei_txe_br_reg_write(hw, SICR_HOST_ALIVENESS_REQ_REG, req);
176         }
177         return do_req;
178 }
179
180
181 /**
182  * mei_txe_aliveness_req_get - get aliveness requested register value
183  *
184  * @dev: the device structure
185  *
186  * Extract HICR_HOST_ALIVENESS_RESP_ACK bit from
187  * from HICR_HOST_ALIVENESS_REQ register value
188  *
189  * Return: SICR_HOST_ALIVENESS_REQ_REQUESTED bit value
190  */
191 static u32 mei_txe_aliveness_req_get(struct mei_device *dev)
192 {
193         struct mei_txe_hw *hw = to_txe_hw(dev);
194         u32 reg;
195
196         reg = mei_txe_br_reg_read(hw, SICR_HOST_ALIVENESS_REQ_REG);
197         return reg & SICR_HOST_ALIVENESS_REQ_REQUESTED;
198 }
199
200 /**
201  * mei_txe_aliveness_get - get aliveness response register value
202  *
203  * @dev: the device structure
204  *
205  * Return: HICR_HOST_ALIVENESS_RESP_ACK bit from HICR_HOST_ALIVENESS_RESP
206  *         register
207  */
208 static u32 mei_txe_aliveness_get(struct mei_device *dev)
209 {
210         struct mei_txe_hw *hw = to_txe_hw(dev);
211         u32 reg;
212
213         reg = mei_txe_br_reg_read(hw, HICR_HOST_ALIVENESS_RESP_REG);
214         return reg & HICR_HOST_ALIVENESS_RESP_ACK;
215 }
216
217 /**
218  * mei_txe_aliveness_poll - waits for aliveness to settle
219  *
220  * @dev: the device structure
221  * @expected: expected aliveness value
222  *
223  * Polls for HICR_HOST_ALIVENESS_RESP.ALIVENESS_RESP to be set
224  *
225  * Return: 0 if the expected value was received, -ETIME otherwise
226  */
227 static int mei_txe_aliveness_poll(struct mei_device *dev, u32 expected)
228 {
229         struct mei_txe_hw *hw = to_txe_hw(dev);
230         ktime_t stop, start;
231
232         start = ktime_get();
233         stop = ktime_add(start, ms_to_ktime(SEC_ALIVENESS_WAIT_TIMEOUT));
234         do {
235                 hw->aliveness = mei_txe_aliveness_get(dev);
236                 if (hw->aliveness == expected) {
237                         dev->pg_event = MEI_PG_EVENT_IDLE;
238                         dev_dbg(dev->dev, "aliveness settled after %lld usecs\n",
239                                 ktime_to_us(ktime_sub(ktime_get(), start)));
240                         return 0;
241                 }
242                 usleep_range(20, 50);
243         } while (ktime_before(ktime_get(), stop));
244
245         dev->pg_event = MEI_PG_EVENT_IDLE;
246         dev_err(dev->dev, "aliveness timed out\n");
247         return -ETIME;
248 }
249
250 /**
251  * mei_txe_aliveness_wait - waits for aliveness to settle
252  *
253  * @dev: the device structure
254  * @expected: expected aliveness value
255  *
256  * Waits for HICR_HOST_ALIVENESS_RESP.ALIVENESS_RESP to be set
257  *
258  * Return: 0 on success and < 0 otherwise
259  */
260 static int mei_txe_aliveness_wait(struct mei_device *dev, u32 expected)
261 {
262         struct mei_txe_hw *hw = to_txe_hw(dev);
263         const unsigned long timeout =
264                         msecs_to_jiffies(SEC_ALIVENESS_WAIT_TIMEOUT);
265         long err;
266         int ret;
267
268         hw->aliveness = mei_txe_aliveness_get(dev);
269         if (hw->aliveness == expected)
270                 return 0;
271
272         mutex_unlock(&dev->device_lock);
273         err = wait_event_timeout(hw->wait_aliveness_resp,
274                         dev->pg_event == MEI_PG_EVENT_RECEIVED, timeout);
275         mutex_lock(&dev->device_lock);
276
277         hw->aliveness = mei_txe_aliveness_get(dev);
278         ret = hw->aliveness == expected ? 0 : -ETIME;
279
280         if (ret)
281                 dev_warn(dev->dev, "aliveness timed out = %ld aliveness = %d event = %d\n",
282                         err, hw->aliveness, dev->pg_event);
283         else
284                 dev_dbg(dev->dev, "aliveness settled after = %d msec aliveness = %d event = %d\n",
285                         jiffies_to_msecs(timeout - err),
286                         hw->aliveness, dev->pg_event);
287
288         dev->pg_event = MEI_PG_EVENT_IDLE;
289         return ret;
290 }
291
292 /**
293  * mei_txe_aliveness_set_sync - sets an wait for aliveness to complete
294  *
295  * @dev: the device structure
296  * @req: requested aliveness value
297  *
298  * Return: 0 on success and < 0 otherwise
299  */
300 int mei_txe_aliveness_set_sync(struct mei_device *dev, u32 req)
301 {
302         if (mei_txe_aliveness_set(dev, req))
303                 return mei_txe_aliveness_wait(dev, req);
304         return 0;
305 }
306
307 /**
308  * mei_txe_pg_in_transition - is device now in pg transition
309  *
310  * @dev: the device structure
311  *
312  * Return: true if in pg transition, false otherwise
313  */
314 static bool mei_txe_pg_in_transition(struct mei_device *dev)
315 {
316         return dev->pg_event == MEI_PG_EVENT_WAIT;
317 }
318
319 /**
320  * mei_txe_pg_is_enabled - detect if PG is supported by HW
321  *
322  * @dev: the device structure
323  *
324  * Return: true is pg supported, false otherwise
325  */
326 static bool mei_txe_pg_is_enabled(struct mei_device *dev)
327 {
328         return true;
329 }
330
331 /**
332  * mei_txe_pg_state  - translate aliveness register value
333  *   to the mei power gating state
334  *
335  * @dev: the device structure
336  *
337  * Return: MEI_PG_OFF if aliveness is on and MEI_PG_ON otherwise
338  */
339 static inline enum mei_pg_state mei_txe_pg_state(struct mei_device *dev)
340 {
341         struct mei_txe_hw *hw = to_txe_hw(dev);
342
343         return hw->aliveness ? MEI_PG_OFF : MEI_PG_ON;
344 }
345
346 /**
347  * mei_txe_input_ready_interrupt_enable - sets the Input Ready Interrupt
348  *
349  * @dev: the device structure
350  */
351 static void mei_txe_input_ready_interrupt_enable(struct mei_device *dev)
352 {
353         struct mei_txe_hw *hw = to_txe_hw(dev);
354         u32 hintmsk;
355         /* Enable the SEC_IPC_HOST_INT_MASK_IN_RDY interrupt */
356         hintmsk = mei_txe_sec_reg_read(hw, SEC_IPC_HOST_INT_MASK_REG);
357         hintmsk |= SEC_IPC_HOST_INT_MASK_IN_RDY;
358         mei_txe_sec_reg_write(hw, SEC_IPC_HOST_INT_MASK_REG, hintmsk);
359 }
360
361 /**
362  * mei_txe_input_doorbell_set - sets bit 0 in
363  *    SEC_IPC_INPUT_DOORBELL.IPC_INPUT_DOORBELL.
364  *
365  * @hw: the txe hardware structure
366  */
367 static void mei_txe_input_doorbell_set(struct mei_txe_hw *hw)
368 {
369         /* Clear the interrupt cause */
370         clear_bit(TXE_INTR_IN_READY_BIT, &hw->intr_cause);
371         mei_txe_sec_reg_write(hw, SEC_IPC_INPUT_DOORBELL_REG, 1);
372 }
373
374 /**
375  * mei_txe_output_ready_set - Sets the SICR_SEC_IPC_OUTPUT_STATUS bit to 1
376  *
377  * @hw: the txe hardware structure
378  */
379 static void mei_txe_output_ready_set(struct mei_txe_hw *hw)
380 {
381         mei_txe_br_reg_write(hw,
382                         SICR_SEC_IPC_OUTPUT_STATUS_REG,
383                         SEC_IPC_OUTPUT_STATUS_RDY);
384 }
385
386 /**
387  * mei_txe_is_input_ready - check if TXE is ready for receiving data
388  *
389  * @dev: the device structure
390  *
391  * Return: true if INPUT STATUS READY bit is set
392  */
393 static bool mei_txe_is_input_ready(struct mei_device *dev)
394 {
395         struct mei_txe_hw *hw = to_txe_hw(dev);
396         u32 status;
397
398         status = mei_txe_sec_reg_read(hw, SEC_IPC_INPUT_STATUS_REG);
399         return !!(SEC_IPC_INPUT_STATUS_RDY & status);
400 }
401
402 /**
403  * mei_txe_intr_clear - clear all interrupts
404  *
405  * @dev: the device structure
406  */
407 static inline void mei_txe_intr_clear(struct mei_device *dev)
408 {
409         struct mei_txe_hw *hw = to_txe_hw(dev);
410
411         mei_txe_sec_reg_write_silent(hw, SEC_IPC_HOST_INT_STATUS_REG,
412                 SEC_IPC_HOST_INT_STATUS_PENDING);
413         mei_txe_br_reg_write(hw, HISR_REG, HISR_INT_STS_MSK);
414         mei_txe_br_reg_write(hw, HHISR_REG, IPC_HHIER_MSK);
415 }
416
417 /**
418  * mei_txe_intr_disable - disable all interrupts
419  *
420  * @dev: the device structure
421  */
422 static void mei_txe_intr_disable(struct mei_device *dev)
423 {
424         struct mei_txe_hw *hw = to_txe_hw(dev);
425
426         mei_txe_br_reg_write(hw, HHIER_REG, 0);
427         mei_txe_br_reg_write(hw, HIER_REG, 0);
428 }
429 /**
430  * mei_txe_intr_enable - enable all interrupts
431  *
432  * @dev: the device structure
433  */
434 static void mei_txe_intr_enable(struct mei_device *dev)
435 {
436         struct mei_txe_hw *hw = to_txe_hw(dev);
437
438         mei_txe_br_reg_write(hw, HHIER_REG, IPC_HHIER_MSK);
439         mei_txe_br_reg_write(hw, HIER_REG, HIER_INT_EN_MSK);
440 }
441
442 /**
443  * mei_txe_pending_interrupts - check if there are pending interrupts
444  *      only Aliveness, Input ready, and output doorbell are of relevance
445  *
446  * @dev: the device structure
447  *
448  * Checks if there are pending interrupts
449  * only Aliveness, Readiness, Input ready, and Output doorbell are relevant
450  *
451  * Return: true if there are pending interrupts
452  */
453 static bool mei_txe_pending_interrupts(struct mei_device *dev)
454 {
455
456         struct mei_txe_hw *hw = to_txe_hw(dev);
457         bool ret = (hw->intr_cause & (TXE_INTR_READINESS |
458                                       TXE_INTR_ALIVENESS |
459                                       TXE_INTR_IN_READY  |
460                                       TXE_INTR_OUT_DB));
461
462         if (ret) {
463                 dev_dbg(dev->dev,
464                         "Pending Interrupts InReady=%01d Readiness=%01d, Aliveness=%01d, OutDoor=%01d\n",
465                         !!(hw->intr_cause & TXE_INTR_IN_READY),
466                         !!(hw->intr_cause & TXE_INTR_READINESS),
467                         !!(hw->intr_cause & TXE_INTR_ALIVENESS),
468                         !!(hw->intr_cause & TXE_INTR_OUT_DB));
469         }
470         return ret;
471 }
472
473 /**
474  * mei_txe_input_payload_write - write a dword to the host buffer
475  *      at offset idx
476  *
477  * @dev: the device structure
478  * @idx: index in the host buffer
479  * @value: value
480  */
481 static void mei_txe_input_payload_write(struct mei_device *dev,
482                         unsigned long idx, u32 value)
483 {
484         struct mei_txe_hw *hw = to_txe_hw(dev);
485
486         mei_txe_sec_reg_write(hw, SEC_IPC_INPUT_PAYLOAD_REG +
487                         (idx * sizeof(u32)), value);
488 }
489
490 /**
491  * mei_txe_out_data_read - read dword from the device buffer
492  *      at offset idx
493  *
494  * @dev: the device structure
495  * @idx: index in the device buffer
496  *
497  * Return: register value at index
498  */
499 static u32 mei_txe_out_data_read(const struct mei_device *dev,
500                                         unsigned long idx)
501 {
502         struct mei_txe_hw *hw = to_txe_hw(dev);
503
504         return mei_txe_br_reg_read(hw,
505                 BRIDGE_IPC_OUTPUT_PAYLOAD_REG + (idx * sizeof(u32)));
506 }
507
508 /* Readiness */
509
510 /**
511  * mei_txe_readiness_set_host_rdy - set host readiness bit
512  *
513  * @dev: the device structure
514  */
515 static void mei_txe_readiness_set_host_rdy(struct mei_device *dev)
516 {
517         struct mei_txe_hw *hw = to_txe_hw(dev);
518
519         mei_txe_br_reg_write(hw,
520                 SICR_HOST_IPC_READINESS_REQ_REG,
521                 SICR_HOST_IPC_READINESS_HOST_RDY);
522 }
523
524 /**
525  * mei_txe_readiness_clear - clear host readiness bit
526  *
527  * @dev: the device structure
528  */
529 static void mei_txe_readiness_clear(struct mei_device *dev)
530 {
531         struct mei_txe_hw *hw = to_txe_hw(dev);
532
533         mei_txe_br_reg_write(hw, SICR_HOST_IPC_READINESS_REQ_REG,
534                                 SICR_HOST_IPC_READINESS_RDY_CLR);
535 }
536 /**
537  * mei_txe_readiness_get - Reads and returns
538  *      the HICR_SEC_IPC_READINESS register value
539  *
540  * @dev: the device structure
541  *
542  * Return: the HICR_SEC_IPC_READINESS register value
543  */
544 static u32 mei_txe_readiness_get(struct mei_device *dev)
545 {
546         struct mei_txe_hw *hw = to_txe_hw(dev);
547
548         return mei_txe_br_reg_read(hw, HICR_SEC_IPC_READINESS_REG);
549 }
550
551
552 /**
553  * mei_txe_readiness_is_sec_rdy - check readiness
554  *  for HICR_SEC_IPC_READINESS_SEC_RDY
555  *
556  * @readiness: cached readiness state
557  *
558  * Return: true if readiness bit is set
559  */
560 static inline bool mei_txe_readiness_is_sec_rdy(u32 readiness)
561 {
562         return !!(readiness & HICR_SEC_IPC_READINESS_SEC_RDY);
563 }
564
565 /**
566  * mei_txe_hw_is_ready - check if the hw is ready
567  *
568  * @dev: the device structure
569  *
570  * Return: true if sec is ready
571  */
572 static bool mei_txe_hw_is_ready(struct mei_device *dev)
573 {
574         u32 readiness =  mei_txe_readiness_get(dev);
575
576         return mei_txe_readiness_is_sec_rdy(readiness);
577 }
578
579 /**
580  * mei_txe_host_is_ready - check if the host is ready
581  *
582  * @dev: the device structure
583  *
584  * Return: true if host is ready
585  */
586 static inline bool mei_txe_host_is_ready(struct mei_device *dev)
587 {
588         struct mei_txe_hw *hw = to_txe_hw(dev);
589         u32 reg = mei_txe_br_reg_read(hw, HICR_SEC_IPC_READINESS_REG);
590
591         return !!(reg & HICR_SEC_IPC_READINESS_HOST_RDY);
592 }
593
594 /**
595  * mei_txe_readiness_wait - wait till readiness settles
596  *
597  * @dev: the device structure
598  *
599  * Return: 0 on success and -ETIME on timeout
600  */
601 static int mei_txe_readiness_wait(struct mei_device *dev)
602 {
603         if (mei_txe_hw_is_ready(dev))
604                 return 0;
605
606         mutex_unlock(&dev->device_lock);
607         wait_event_timeout(dev->wait_hw_ready, dev->recvd_hw_ready,
608                         msecs_to_jiffies(SEC_RESET_WAIT_TIMEOUT));
609         mutex_lock(&dev->device_lock);
610         if (!dev->recvd_hw_ready) {
611                 dev_err(dev->dev, "wait for readiness failed\n");
612                 return -ETIME;
613         }
614
615         dev->recvd_hw_ready = false;
616         return 0;
617 }
618
619 static const struct mei_fw_status mei_txe_fw_sts = {
620         .count = 2,
621         .status[0] = PCI_CFG_TXE_FW_STS0,
622         .status[1] = PCI_CFG_TXE_FW_STS1
623 };
624
625 /**
626  * mei_txe_fw_status - read fw status register from pci config space
627  *
628  * @dev: mei device
629  * @fw_status: fw status register values
630  *
631  * Return: 0 on success, error otherwise
632  */
633 static int mei_txe_fw_status(struct mei_device *dev,
634                              struct mei_fw_status *fw_status)
635 {
636         const struct mei_fw_status *fw_src = &mei_txe_fw_sts;
637         struct pci_dev *pdev = to_pci_dev(dev->dev);
638         int ret;
639         int i;
640
641         if (!fw_status)
642                 return -EINVAL;
643
644         fw_status->count = fw_src->count;
645         for (i = 0; i < fw_src->count && i < MEI_FW_STATUS_MAX; i++) {
646                 ret = pci_read_config_dword(pdev, fw_src->status[i],
647                                             &fw_status->status[i]);
648                 trace_mei_pci_cfg_read(dev->dev, "PCI_CFG_HSF_X",
649                                        fw_src->status[i],
650                                        fw_status->status[i]);
651                 if (ret)
652                         return ret;
653         }
654
655         return 0;
656 }
657
658 /**
659  *  mei_txe_hw_config - configure hardware at the start of the devices
660  *
661  * @dev: the device structure
662  *
663  * Configure hardware at the start of the device should be done only
664  *   once at the device probe time
665  */
666 static void mei_txe_hw_config(struct mei_device *dev)
667 {
668
669         struct mei_txe_hw *hw = to_txe_hw(dev);
670
671         /* Doesn't change in runtime */
672         dev->hbuf_depth = PAYLOAD_SIZE / 4;
673
674         hw->aliveness = mei_txe_aliveness_get(dev);
675         hw->readiness = mei_txe_readiness_get(dev);
676
677         dev_dbg(dev->dev, "aliveness_resp = 0x%08x, readiness = 0x%08x.\n",
678                 hw->aliveness, hw->readiness);
679 }
680
681
682 /**
683  * mei_txe_write - writes a message to device.
684  *
685  * @dev: the device structure
686  * @header: header of message
687  * @buf: message buffer will be written
688  *
689  * Return: 0 if success, <0 - otherwise.
690  */
691
692 static int mei_txe_write(struct mei_device *dev,
693                 struct mei_msg_hdr *header, unsigned char *buf)
694 {
695         struct mei_txe_hw *hw = to_txe_hw(dev);
696         unsigned long rem;
697         unsigned long length;
698         int slots = dev->hbuf_depth;
699         u32 *reg_buf = (u32 *)buf;
700         u32 dw_cnt;
701         int i;
702
703         if (WARN_ON(!header || !buf))
704                 return -EINVAL;
705
706         length = header->length;
707
708         dev_dbg(dev->dev, MEI_HDR_FMT, MEI_HDR_PRM(header));
709
710         dw_cnt = mei_data2slots(length);
711         if (dw_cnt > slots)
712                 return -EMSGSIZE;
713
714         if (WARN(!hw->aliveness, "txe write: aliveness not asserted\n"))
715                 return -EAGAIN;
716
717         /* Enable Input Ready Interrupt. */
718         mei_txe_input_ready_interrupt_enable(dev);
719
720         if (!mei_txe_is_input_ready(dev)) {
721                 char fw_sts_str[MEI_FW_STATUS_STR_SZ];
722
723                 mei_fw_status_str(dev, fw_sts_str, MEI_FW_STATUS_STR_SZ);
724                 dev_err(dev->dev, "Input is not ready %s\n", fw_sts_str);
725                 return -EAGAIN;
726         }
727
728         mei_txe_input_payload_write(dev, 0, *((u32 *)header));
729
730         for (i = 0; i < length / 4; i++)
731                 mei_txe_input_payload_write(dev, i + 1, reg_buf[i]);
732
733         rem = length & 0x3;
734         if (rem > 0) {
735                 u32 reg = 0;
736
737                 memcpy(&reg, &buf[length - rem], rem);
738                 mei_txe_input_payload_write(dev, i + 1, reg);
739         }
740
741         /* after each write the whole buffer is consumed */
742         hw->slots = 0;
743
744         /* Set Input-Doorbell */
745         mei_txe_input_doorbell_set(hw);
746
747         return 0;
748 }
749
750 /**
751  * mei_txe_hbuf_max_len - mimics the me hbuf circular buffer
752  *
753  * @dev: the device structure
754  *
755  * Return: the PAYLOAD_SIZE - 4
756  */
757 static size_t mei_txe_hbuf_max_len(const struct mei_device *dev)
758 {
759         return PAYLOAD_SIZE - sizeof(struct mei_msg_hdr);
760 }
761
762 /**
763  * mei_txe_hbuf_empty_slots - mimics the me hbuf circular buffer
764  *
765  * @dev: the device structure
766  *
767  * Return: always hbuf_depth
768  */
769 static int mei_txe_hbuf_empty_slots(struct mei_device *dev)
770 {
771         struct mei_txe_hw *hw = to_txe_hw(dev);
772
773         return hw->slots;
774 }
775
776 /**
777  * mei_txe_count_full_read_slots - mimics the me device circular buffer
778  *
779  * @dev: the device structure
780  *
781  * Return: always buffer size in dwords count
782  */
783 static int mei_txe_count_full_read_slots(struct mei_device *dev)
784 {
785         /* read buffers has static size */
786         return  PAYLOAD_SIZE / 4;
787 }
788
789 /**
790  * mei_txe_read_hdr - read message header which is always in 4 first bytes
791  *
792  * @dev: the device structure
793  *
794  * Return: mei message header
795  */
796
797 static u32 mei_txe_read_hdr(const struct mei_device *dev)
798 {
799         return mei_txe_out_data_read(dev, 0);
800 }
801 /**
802  * mei_txe_read - reads a message from the txe device.
803  *
804  * @dev: the device structure
805  * @buf: message buffer will be written
806  * @len: message size will be read
807  *
808  * Return: -EINVAL on error wrong argument and 0 on success
809  */
810 static int mei_txe_read(struct mei_device *dev,
811                 unsigned char *buf, unsigned long len)
812 {
813
814         struct mei_txe_hw *hw = to_txe_hw(dev);
815         u32 *reg_buf, reg;
816         u32 rem;
817         u32 i;
818
819         if (WARN_ON(!buf || !len))
820                 return -EINVAL;
821
822         reg_buf = (u32 *)buf;
823         rem = len & 0x3;
824
825         dev_dbg(dev->dev, "buffer-length = %lu buf[0]0x%08X\n",
826                 len, mei_txe_out_data_read(dev, 0));
827
828         for (i = 0; i < len / 4; i++) {
829                 /* skip header: index starts from 1 */
830                 reg = mei_txe_out_data_read(dev, i + 1);
831                 dev_dbg(dev->dev, "buf[%d] = 0x%08X\n", i, reg);
832                 *reg_buf++ = reg;
833         }
834
835         if (rem) {
836                 reg = mei_txe_out_data_read(dev, i + 1);
837                 memcpy(reg_buf, &reg, rem);
838         }
839
840         mei_txe_output_ready_set(hw);
841         return 0;
842 }
843
844 /**
845  * mei_txe_hw_reset - resets host and fw.
846  *
847  * @dev: the device structure
848  * @intr_enable: if interrupt should be enabled after reset.
849  *
850  * Return: 0 on success and < 0 in case of error
851  */
852 static int mei_txe_hw_reset(struct mei_device *dev, bool intr_enable)
853 {
854         struct mei_txe_hw *hw = to_txe_hw(dev);
855
856         u32 aliveness_req;
857         /*
858          * read input doorbell to ensure consistency between  Bridge and SeC
859          * return value might be garbage return
860          */
861         (void)mei_txe_sec_reg_read_silent(hw, SEC_IPC_INPUT_DOORBELL_REG);
862
863         aliveness_req = mei_txe_aliveness_req_get(dev);
864         hw->aliveness = mei_txe_aliveness_get(dev);
865
866         /* Disable interrupts in this stage we will poll */
867         mei_txe_intr_disable(dev);
868
869         /*
870          * If Aliveness Request and Aliveness Response are not equal then
871          * wait for them to be equal
872          * Since we might have interrupts disabled - poll for it
873          */
874         if (aliveness_req != hw->aliveness)
875                 if (mei_txe_aliveness_poll(dev, aliveness_req) < 0) {
876                         dev_err(dev->dev, "wait for aliveness settle failed ... bailing out\n");
877                         return -EIO;
878                 }
879
880         /*
881          * If Aliveness Request and Aliveness Response are set then clear them
882          */
883         if (aliveness_req) {
884                 mei_txe_aliveness_set(dev, 0);
885                 if (mei_txe_aliveness_poll(dev, 0) < 0) {
886                         dev_err(dev->dev, "wait for aliveness failed ... bailing out\n");
887                         return -EIO;
888                 }
889         }
890
891         /*
892          * Set readiness RDY_CLR bit
893          */
894         mei_txe_readiness_clear(dev);
895
896         return 0;
897 }
898
899 /**
900  * mei_txe_hw_start - start the hardware after reset
901  *
902  * @dev: the device structure
903  *
904  * Return: 0 on success an error code otherwise
905  */
906 static int mei_txe_hw_start(struct mei_device *dev)
907 {
908         struct mei_txe_hw *hw = to_txe_hw(dev);
909         int ret;
910
911         u32 hisr;
912
913         /* bring back interrupts */
914         mei_txe_intr_enable(dev);
915
916         ret = mei_txe_readiness_wait(dev);
917         if (ret < 0) {
918                 dev_err(dev->dev, "waiting for readiness failed\n");
919                 return ret;
920         }
921
922         /*
923          * If HISR.INT2_STS interrupt status bit is set then clear it.
924          */
925         hisr = mei_txe_br_reg_read(hw, HISR_REG);
926         if (hisr & HISR_INT_2_STS)
927                 mei_txe_br_reg_write(hw, HISR_REG, HISR_INT_2_STS);
928
929         /* Clear the interrupt cause of OutputDoorbell */
930         clear_bit(TXE_INTR_OUT_DB_BIT, &hw->intr_cause);
931
932         ret = mei_txe_aliveness_set_sync(dev, 1);
933         if (ret < 0) {
934                 dev_err(dev->dev, "wait for aliveness failed ... bailing out\n");
935                 return ret;
936         }
937
938         /* enable input ready interrupts:
939          * SEC_IPC_HOST_INT_MASK.IPC_INPUT_READY_INT_MASK
940          */
941         mei_txe_input_ready_interrupt_enable(dev);
942
943
944         /*  Set the SICR_SEC_IPC_OUTPUT_STATUS.IPC_OUTPUT_READY bit */
945         mei_txe_output_ready_set(hw);
946
947         /* Set bit SICR_HOST_IPC_READINESS.HOST_RDY
948          */
949         mei_txe_readiness_set_host_rdy(dev);
950
951         return 0;
952 }
953
954 /**
955  * mei_txe_check_and_ack_intrs - translate multi BAR interrupt into
956  *  single bit mask and acknowledge the interrupts
957  *
958  * @dev: the device structure
959  * @do_ack: acknowledge interrupts
960  *
961  * Return: true if found interrupts to process.
962  */
963 static bool mei_txe_check_and_ack_intrs(struct mei_device *dev, bool do_ack)
964 {
965         struct mei_txe_hw *hw = to_txe_hw(dev);
966         u32 hisr;
967         u32 hhisr;
968         u32 ipc_isr;
969         u32 aliveness;
970         bool generated;
971
972         /* read interrupt registers */
973         hhisr = mei_txe_br_reg_read(hw, HHISR_REG);
974         generated = (hhisr & IPC_HHIER_MSK);
975         if (!generated)
976                 goto out;
977
978         hisr = mei_txe_br_reg_read(hw, HISR_REG);
979
980         aliveness = mei_txe_aliveness_get(dev);
981         if (hhisr & IPC_HHIER_SEC && aliveness)
982                 ipc_isr = mei_txe_sec_reg_read_silent(hw,
983                                 SEC_IPC_HOST_INT_STATUS_REG);
984         else
985                 ipc_isr = 0;
986
987         generated = generated ||
988                 (hisr & HISR_INT_STS_MSK) ||
989                 (ipc_isr & SEC_IPC_HOST_INT_STATUS_PENDING);
990
991         if (generated && do_ack) {
992                 /* Save the interrupt causes */
993                 hw->intr_cause |= hisr & HISR_INT_STS_MSK;
994                 if (ipc_isr & SEC_IPC_HOST_INT_STATUS_IN_RDY)
995                         hw->intr_cause |= TXE_INTR_IN_READY;
996
997
998                 mei_txe_intr_disable(dev);
999                 /* Clear the interrupts in hierarchy:
1000                  * IPC and Bridge, than the High Level */
1001                 mei_txe_sec_reg_write_silent(hw,
1002                         SEC_IPC_HOST_INT_STATUS_REG, ipc_isr);
1003                 mei_txe_br_reg_write(hw, HISR_REG, hisr);
1004                 mei_txe_br_reg_write(hw, HHISR_REG, hhisr);
1005         }
1006
1007 out:
1008         return generated;
1009 }
1010
1011 /**
1012  * mei_txe_irq_quick_handler - The ISR of the MEI device
1013  *
1014  * @irq: The irq number
1015  * @dev_id: pointer to the device structure
1016  *
1017  * Return: IRQ_WAKE_THREAD if interrupt is designed for the device
1018  *         IRQ_NONE otherwise
1019  */
1020 irqreturn_t mei_txe_irq_quick_handler(int irq, void *dev_id)
1021 {
1022         struct mei_device *dev = dev_id;
1023
1024         if (mei_txe_check_and_ack_intrs(dev, true))
1025                 return IRQ_WAKE_THREAD;
1026         return IRQ_NONE;
1027 }
1028
1029
1030 /**
1031  * mei_txe_irq_thread_handler - txe interrupt thread
1032  *
1033  * @irq: The irq number
1034  * @dev_id: pointer to the device structure
1035  *
1036  * Return: IRQ_HANDLED
1037  */
1038 irqreturn_t mei_txe_irq_thread_handler(int irq, void *dev_id)
1039 {
1040         struct mei_device *dev = (struct mei_device *) dev_id;
1041         struct mei_txe_hw *hw = to_txe_hw(dev);
1042         struct mei_cl_cb complete_list;
1043         s32 slots;
1044         int rets = 0;
1045
1046         dev_dbg(dev->dev, "irq thread: Interrupt Registers HHISR|HISR|SEC=%02X|%04X|%02X\n",
1047                 mei_txe_br_reg_read(hw, HHISR_REG),
1048                 mei_txe_br_reg_read(hw, HISR_REG),
1049                 mei_txe_sec_reg_read_silent(hw, SEC_IPC_HOST_INT_STATUS_REG));
1050
1051
1052         /* initialize our complete list */
1053         mutex_lock(&dev->device_lock);
1054         mei_io_list_init(&complete_list);
1055
1056         if (pci_dev_msi_enabled(to_pci_dev(dev->dev)))
1057                 mei_txe_check_and_ack_intrs(dev, true);
1058
1059         /* show irq events */
1060         mei_txe_pending_interrupts(dev);
1061
1062         hw->aliveness = mei_txe_aliveness_get(dev);
1063         hw->readiness = mei_txe_readiness_get(dev);
1064
1065         /* Readiness:
1066          * Detection of TXE driver going through reset
1067          * or TXE driver resetting the HECI interface.
1068          */
1069         if (test_and_clear_bit(TXE_INTR_READINESS_BIT, &hw->intr_cause)) {
1070                 dev_dbg(dev->dev, "Readiness Interrupt was received...\n");
1071
1072                 /* Check if SeC is going through reset */
1073                 if (mei_txe_readiness_is_sec_rdy(hw->readiness)) {
1074                         dev_dbg(dev->dev, "we need to start the dev.\n");
1075                         dev->recvd_hw_ready = true;
1076                 } else {
1077                         dev->recvd_hw_ready = false;
1078                         if (dev->dev_state != MEI_DEV_RESETTING) {
1079
1080                                 dev_warn(dev->dev, "FW not ready: resetting.\n");
1081                                 schedule_work(&dev->reset_work);
1082                                 goto end;
1083
1084                         }
1085                 }
1086                 wake_up(&dev->wait_hw_ready);
1087         }
1088
1089         /************************************************************/
1090         /* Check interrupt cause:
1091          * Aliveness: Detection of SeC acknowledge of host request that
1092          * it remain alive or host cancellation of that request.
1093          */
1094
1095         if (test_and_clear_bit(TXE_INTR_ALIVENESS_BIT, &hw->intr_cause)) {
1096                 /* Clear the interrupt cause */
1097                 dev_dbg(dev->dev,
1098                         "Aliveness Interrupt: Status: %d\n", hw->aliveness);
1099                 dev->pg_event = MEI_PG_EVENT_RECEIVED;
1100                 if (waitqueue_active(&hw->wait_aliveness_resp))
1101                         wake_up(&hw->wait_aliveness_resp);
1102         }
1103
1104
1105         /* Output Doorbell:
1106          * Detection of SeC having sent output to host
1107          */
1108         slots = mei_count_full_read_slots(dev);
1109         if (test_and_clear_bit(TXE_INTR_OUT_DB_BIT, &hw->intr_cause)) {
1110                 /* Read from TXE */
1111                 rets = mei_irq_read_handler(dev, &complete_list, &slots);
1112                 if (rets && dev->dev_state != MEI_DEV_RESETTING) {
1113                         dev_err(dev->dev,
1114                                 "mei_irq_read_handler ret = %d.\n", rets);
1115
1116                         schedule_work(&dev->reset_work);
1117                         goto end;
1118                 }
1119         }
1120         /* Input Ready: Detection if host can write to SeC */
1121         if (test_and_clear_bit(TXE_INTR_IN_READY_BIT, &hw->intr_cause)) {
1122                 dev->hbuf_is_ready = true;
1123                 hw->slots = dev->hbuf_depth;
1124         }
1125
1126         if (hw->aliveness && dev->hbuf_is_ready) {
1127                 /* get the real register value */
1128                 dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
1129                 rets = mei_irq_write_handler(dev, &complete_list);
1130                 if (rets && rets != -EMSGSIZE)
1131                         dev_err(dev->dev, "mei_irq_write_handler ret = %d.\n",
1132                                 rets);
1133                 dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
1134         }
1135
1136         mei_irq_compl_handler(dev, &complete_list);
1137
1138 end:
1139         dev_dbg(dev->dev, "interrupt thread end ret = %d\n", rets);
1140
1141         mutex_unlock(&dev->device_lock);
1142
1143         mei_enable_interrupts(dev);
1144         return IRQ_HANDLED;
1145 }
1146
1147 static const struct mei_hw_ops mei_txe_hw_ops = {
1148
1149         .host_is_ready = mei_txe_host_is_ready,
1150
1151         .fw_status = mei_txe_fw_status,
1152         .pg_state = mei_txe_pg_state,
1153
1154         .hw_is_ready = mei_txe_hw_is_ready,
1155         .hw_reset = mei_txe_hw_reset,
1156         .hw_config = mei_txe_hw_config,
1157         .hw_start = mei_txe_hw_start,
1158
1159         .pg_in_transition = mei_txe_pg_in_transition,
1160         .pg_is_enabled = mei_txe_pg_is_enabled,
1161
1162         .intr_clear = mei_txe_intr_clear,
1163         .intr_enable = mei_txe_intr_enable,
1164         .intr_disable = mei_txe_intr_disable,
1165
1166         .hbuf_free_slots = mei_txe_hbuf_empty_slots,
1167         .hbuf_is_ready = mei_txe_is_input_ready,
1168         .hbuf_max_len = mei_txe_hbuf_max_len,
1169
1170         .write = mei_txe_write,
1171
1172         .rdbuf_full_slots = mei_txe_count_full_read_slots,
1173         .read_hdr = mei_txe_read_hdr,
1174
1175         .read = mei_txe_read,
1176
1177 };
1178
1179 /**
1180  * mei_txe_dev_init - allocates and initializes txe hardware specific structure
1181  *
1182  * @pdev: pci device
1183  *
1184  * Return: struct mei_device * on success or NULL
1185  */
1186 struct mei_device *mei_txe_dev_init(struct pci_dev *pdev)
1187 {
1188         struct mei_device *dev;
1189         struct mei_txe_hw *hw;
1190
1191         dev = kzalloc(sizeof(struct mei_device) +
1192                          sizeof(struct mei_txe_hw), GFP_KERNEL);
1193         if (!dev)
1194                 return NULL;
1195
1196         mei_device_init(dev, &pdev->dev, &mei_txe_hw_ops);
1197
1198         hw = to_txe_hw(dev);
1199
1200         init_waitqueue_head(&hw->wait_aliveness_resp);
1201
1202         return dev;
1203 }
1204
1205 /**
1206  * mei_txe_setup_satt2 - SATT2 configuration for DMA support.
1207  *
1208  * @dev:   the device structure
1209  * @addr:  physical address start of the range
1210  * @range: physical range size
1211  *
1212  * Return: 0 on success an error code otherwise
1213  */
1214 int mei_txe_setup_satt2(struct mei_device *dev, phys_addr_t addr, u32 range)
1215 {
1216         struct mei_txe_hw *hw = to_txe_hw(dev);
1217
1218         u32 lo32 = lower_32_bits(addr);
1219         u32 hi32 = upper_32_bits(addr);
1220         u32 ctrl;
1221
1222         /* SATT is limited to 36 Bits */
1223         if (hi32 & ~0xF)
1224                 return -EINVAL;
1225
1226         /* SATT has to be 16Byte aligned */
1227         if (lo32 & 0xF)
1228                 return -EINVAL;
1229
1230         /* SATT range has to be 4Bytes aligned */
1231         if (range & 0x4)
1232                 return -EINVAL;
1233
1234         /* SATT is limited to 32 MB range*/
1235         if (range > SATT_RANGE_MAX)
1236                 return -EINVAL;
1237
1238         ctrl = SATT2_CTRL_VALID_MSK;
1239         ctrl |= hi32  << SATT2_CTRL_BR_BASE_ADDR_REG_SHIFT;
1240
1241         mei_txe_br_reg_write(hw, SATT2_SAP_SIZE_REG, range);
1242         mei_txe_br_reg_write(hw, SATT2_BRG_BA_LSB_REG, lo32);
1243         mei_txe_br_reg_write(hw, SATT2_CTRL_REG, ctrl);
1244         dev_dbg(dev->dev, "SATT2: SAP_SIZE_OFFSET=0x%08X, BRG_BA_LSB_OFFSET=0x%08X, CTRL_OFFSET=0x%08X\n",
1245                 range, lo32, ctrl);
1246
1247         return 0;
1248 }