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