xref: /openbmc/linux/drivers/misc/mei/hw-txe.c (revision 4a44a19b)
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 		struct mei_fw_status fw_status;
704 
705 		mei_fw_status(dev, &fw_status);
706 		dev_err(dev->dev, "Input is not ready " FW_STS_FMT "\n",
707 			FW_STS_PRM(fw_status));
708 		return -EAGAIN;
709 	}
710 
711 	mei_txe_input_payload_write(dev, 0, *((u32 *)header));
712 
713 	for (i = 0; i < length / 4; i++)
714 		mei_txe_input_payload_write(dev, i + 1, reg_buf[i]);
715 
716 	rem = length & 0x3;
717 	if (rem > 0) {
718 		u32 reg = 0;
719 
720 		memcpy(&reg, &buf[length - rem], rem);
721 		mei_txe_input_payload_write(dev, i + 1, reg);
722 	}
723 
724 	/* after each write the whole buffer is consumed */
725 	hw->slots = 0;
726 
727 	/* Set Input-Doorbell */
728 	mei_txe_input_doorbell_set(hw);
729 
730 	return 0;
731 }
732 
733 /**
734  * mei_txe_hbuf_max_len - mimics the me hbuf circular buffer
735  *
736  * @dev: the device structure
737  *
738  * Return: the PAYLOAD_SIZE - 4
739  */
740 static size_t mei_txe_hbuf_max_len(const struct mei_device *dev)
741 {
742 	return PAYLOAD_SIZE - sizeof(struct mei_msg_hdr);
743 }
744 
745 /**
746  * mei_txe_hbuf_empty_slots - mimics the me hbuf circular buffer
747  *
748  * @dev: the device structure
749  *
750  * Return: always hbuf_depth
751  */
752 static int mei_txe_hbuf_empty_slots(struct mei_device *dev)
753 {
754 	struct mei_txe_hw *hw = to_txe_hw(dev);
755 
756 	return hw->slots;
757 }
758 
759 /**
760  * mei_txe_count_full_read_slots - mimics the me device circular buffer
761  *
762  * @dev: the device structure
763  *
764  * Return: always buffer size in dwords count
765  */
766 static int mei_txe_count_full_read_slots(struct mei_device *dev)
767 {
768 	/* read buffers has static size */
769 	return  PAYLOAD_SIZE / 4;
770 }
771 
772 /**
773  * mei_txe_read_hdr - read message header which is always in 4 first bytes
774  *
775  * @dev: the device structure
776  *
777  * Return: mei message header
778  */
779 
780 static u32 mei_txe_read_hdr(const struct mei_device *dev)
781 {
782 	return mei_txe_out_data_read(dev, 0);
783 }
784 /**
785  * mei_txe_read - reads a message from the txe device.
786  *
787  * @dev: the device structure
788  * @buf: message buffer will be written
789  * @len: message size will be read
790  *
791  * Return: -EINVAL on error wrong argument and 0 on success
792  */
793 static int mei_txe_read(struct mei_device *dev,
794 		unsigned char *buf, unsigned long len)
795 {
796 
797 	struct mei_txe_hw *hw = to_txe_hw(dev);
798 	u32 *reg_buf, reg;
799 	u32 rem;
800 	u32 i;
801 
802 	if (WARN_ON(!buf || !len))
803 		return -EINVAL;
804 
805 	reg_buf = (u32 *)buf;
806 	rem = len & 0x3;
807 
808 	dev_dbg(dev->dev, "buffer-length = %lu buf[0]0x%08X\n",
809 		len, mei_txe_out_data_read(dev, 0));
810 
811 	for (i = 0; i < len / 4; i++) {
812 		/* skip header: index starts from 1 */
813 		reg = mei_txe_out_data_read(dev, i + 1);
814 		dev_dbg(dev->dev, "buf[%d] = 0x%08X\n", i, reg);
815 		*reg_buf++ = reg;
816 	}
817 
818 	if (rem) {
819 		reg = mei_txe_out_data_read(dev, i + 1);
820 		memcpy(reg_buf, &reg, rem);
821 	}
822 
823 	mei_txe_output_ready_set(hw);
824 	return 0;
825 }
826 
827 /**
828  * mei_txe_hw_reset - resets host and fw.
829  *
830  * @dev: the device structure
831  * @intr_enable: if interrupt should be enabled after reset.
832  *
833  * Return: 0 on success and < 0 in case of error
834  */
835 static int mei_txe_hw_reset(struct mei_device *dev, bool intr_enable)
836 {
837 	struct mei_txe_hw *hw = to_txe_hw(dev);
838 
839 	u32 aliveness_req;
840 	/*
841 	 * read input doorbell to ensure consistency between  Bridge and SeC
842 	 * return value might be garbage return
843 	 */
844 	(void)mei_txe_sec_reg_read_silent(hw, SEC_IPC_INPUT_DOORBELL_REG);
845 
846 	aliveness_req = mei_txe_aliveness_req_get(dev);
847 	hw->aliveness = mei_txe_aliveness_get(dev);
848 
849 	/* Disable interrupts in this stage we will poll */
850 	mei_txe_intr_disable(dev);
851 
852 	/*
853 	 * If Aliveness Request and Aliveness Response are not equal then
854 	 * wait for them to be equal
855 	 * Since we might have interrupts disabled - poll for it
856 	 */
857 	if (aliveness_req != hw->aliveness)
858 		if (mei_txe_aliveness_poll(dev, aliveness_req) < 0) {
859 			dev_err(dev->dev, "wait for aliveness settle failed ... bailing out\n");
860 			return -EIO;
861 		}
862 
863 	/*
864 	 * If Aliveness Request and Aliveness Response are set then clear them
865 	 */
866 	if (aliveness_req) {
867 		mei_txe_aliveness_set(dev, 0);
868 		if (mei_txe_aliveness_poll(dev, 0) < 0) {
869 			dev_err(dev->dev, "wait for aliveness failed ... bailing out\n");
870 			return -EIO;
871 		}
872 	}
873 
874 	/*
875 	 * Set readiness RDY_CLR bit
876 	 */
877 	mei_txe_readiness_clear(dev);
878 
879 	return 0;
880 }
881 
882 /**
883  * mei_txe_hw_start - start the hardware after reset
884  *
885  * @dev: the device structure
886  *
887  * Return: 0 on success an error code otherwise
888  */
889 static int mei_txe_hw_start(struct mei_device *dev)
890 {
891 	struct mei_txe_hw *hw = to_txe_hw(dev);
892 	int ret;
893 
894 	u32 hisr;
895 
896 	/* bring back interrupts */
897 	mei_txe_intr_enable(dev);
898 
899 	ret = mei_txe_readiness_wait(dev);
900 	if (ret < 0) {
901 		dev_err(dev->dev, "waiting for readiness failed\n");
902 		return ret;
903 	}
904 
905 	/*
906 	 * If HISR.INT2_STS interrupt status bit is set then clear it.
907 	 */
908 	hisr = mei_txe_br_reg_read(hw, HISR_REG);
909 	if (hisr & HISR_INT_2_STS)
910 		mei_txe_br_reg_write(hw, HISR_REG, HISR_INT_2_STS);
911 
912 	/* Clear the interrupt cause of OutputDoorbell */
913 	clear_bit(TXE_INTR_OUT_DB_BIT, &hw->intr_cause);
914 
915 	ret = mei_txe_aliveness_set_sync(dev, 1);
916 	if (ret < 0) {
917 		dev_err(dev->dev, "wait for aliveness failed ... bailing out\n");
918 		return ret;
919 	}
920 
921 	/* enable input ready interrupts:
922 	 * SEC_IPC_HOST_INT_MASK.IPC_INPUT_READY_INT_MASK
923 	 */
924 	mei_txe_input_ready_interrupt_enable(dev);
925 
926 
927 	/*  Set the SICR_SEC_IPC_OUTPUT_STATUS.IPC_OUTPUT_READY bit */
928 	mei_txe_output_ready_set(hw);
929 
930 	/* Set bit SICR_HOST_IPC_READINESS.HOST_RDY
931 	 */
932 	mei_txe_readiness_set_host_rdy(dev);
933 
934 	return 0;
935 }
936 
937 /**
938  * mei_txe_check_and_ack_intrs - translate multi BAR interrupt into
939  *  single bit mask and acknowledge the interrupts
940  *
941  * @dev: the device structure
942  * @do_ack: acknowledge interrupts
943  *
944  * Return: true if found interrupts to process.
945  */
946 static bool mei_txe_check_and_ack_intrs(struct mei_device *dev, bool do_ack)
947 {
948 	struct mei_txe_hw *hw = to_txe_hw(dev);
949 	u32 hisr;
950 	u32 hhisr;
951 	u32 ipc_isr;
952 	u32 aliveness;
953 	bool generated;
954 
955 	/* read interrupt registers */
956 	hhisr = mei_txe_br_reg_read(hw, HHISR_REG);
957 	generated = (hhisr & IPC_HHIER_MSK);
958 	if (!generated)
959 		goto out;
960 
961 	hisr = mei_txe_br_reg_read(hw, HISR_REG);
962 
963 	aliveness = mei_txe_aliveness_get(dev);
964 	if (hhisr & IPC_HHIER_SEC && aliveness)
965 		ipc_isr = mei_txe_sec_reg_read_silent(hw,
966 				SEC_IPC_HOST_INT_STATUS_REG);
967 	else
968 		ipc_isr = 0;
969 
970 	generated = generated ||
971 		(hisr & HISR_INT_STS_MSK) ||
972 		(ipc_isr & SEC_IPC_HOST_INT_STATUS_PENDING);
973 
974 	if (generated && do_ack) {
975 		/* Save the interrupt causes */
976 		hw->intr_cause |= hisr & HISR_INT_STS_MSK;
977 		if (ipc_isr & SEC_IPC_HOST_INT_STATUS_IN_RDY)
978 			hw->intr_cause |= TXE_INTR_IN_READY;
979 
980 
981 		mei_txe_intr_disable(dev);
982 		/* Clear the interrupts in hierarchy:
983 		 * IPC and Bridge, than the High Level */
984 		mei_txe_sec_reg_write_silent(hw,
985 			SEC_IPC_HOST_INT_STATUS_REG, ipc_isr);
986 		mei_txe_br_reg_write(hw, HISR_REG, hisr);
987 		mei_txe_br_reg_write(hw, HHISR_REG, hhisr);
988 	}
989 
990 out:
991 	return generated;
992 }
993 
994 /**
995  * mei_txe_irq_quick_handler - The ISR of the MEI device
996  *
997  * @irq: The irq number
998  * @dev_id: pointer to the device structure
999  *
1000  * Return: IRQ_WAKE_THREAD if interrupt is designed for the device
1001  *         IRQ_NONE otherwise
1002  */
1003 irqreturn_t mei_txe_irq_quick_handler(int irq, void *dev_id)
1004 {
1005 	struct mei_device *dev = dev_id;
1006 
1007 	if (mei_txe_check_and_ack_intrs(dev, true))
1008 		return IRQ_WAKE_THREAD;
1009 	return IRQ_NONE;
1010 }
1011 
1012 
1013 /**
1014  * mei_txe_irq_thread_handler - txe interrupt thread
1015  *
1016  * @irq: The irq number
1017  * @dev_id: pointer to the device structure
1018  *
1019  * Return: IRQ_HANDLED
1020  */
1021 irqreturn_t mei_txe_irq_thread_handler(int irq, void *dev_id)
1022 {
1023 	struct mei_device *dev = (struct mei_device *) dev_id;
1024 	struct mei_txe_hw *hw = to_txe_hw(dev);
1025 	struct mei_cl_cb complete_list;
1026 	s32 slots;
1027 	int rets = 0;
1028 
1029 	dev_dbg(dev->dev, "irq thread: Interrupt Registers HHISR|HISR|SEC=%02X|%04X|%02X\n",
1030 		mei_txe_br_reg_read(hw, HHISR_REG),
1031 		mei_txe_br_reg_read(hw, HISR_REG),
1032 		mei_txe_sec_reg_read_silent(hw, SEC_IPC_HOST_INT_STATUS_REG));
1033 
1034 
1035 	/* initialize our complete list */
1036 	mutex_lock(&dev->device_lock);
1037 	mei_io_list_init(&complete_list);
1038 
1039 	if (pci_dev_msi_enabled(to_pci_dev(dev->dev)))
1040 		mei_txe_check_and_ack_intrs(dev, true);
1041 
1042 	/* show irq events */
1043 	mei_txe_pending_interrupts(dev);
1044 
1045 	hw->aliveness = mei_txe_aliveness_get(dev);
1046 	hw->readiness = mei_txe_readiness_get(dev);
1047 
1048 	/* Readiness:
1049 	 * Detection of TXE driver going through reset
1050 	 * or TXE driver resetting the HECI interface.
1051 	 */
1052 	if (test_and_clear_bit(TXE_INTR_READINESS_BIT, &hw->intr_cause)) {
1053 		dev_dbg(dev->dev, "Readiness Interrupt was received...\n");
1054 
1055 		/* Check if SeC is going through reset */
1056 		if (mei_txe_readiness_is_sec_rdy(hw->readiness)) {
1057 			dev_dbg(dev->dev, "we need to start the dev.\n");
1058 			dev->recvd_hw_ready = true;
1059 		} else {
1060 			dev->recvd_hw_ready = false;
1061 			if (dev->dev_state != MEI_DEV_RESETTING) {
1062 
1063 				dev_warn(dev->dev, "FW not ready: resetting.\n");
1064 				schedule_work(&dev->reset_work);
1065 				goto end;
1066 
1067 			}
1068 		}
1069 		wake_up(&dev->wait_hw_ready);
1070 	}
1071 
1072 	/************************************************************/
1073 	/* Check interrupt cause:
1074 	 * Aliveness: Detection of SeC acknowledge of host request that
1075 	 * it remain alive or host cancellation of that request.
1076 	 */
1077 
1078 	if (test_and_clear_bit(TXE_INTR_ALIVENESS_BIT, &hw->intr_cause)) {
1079 		/* Clear the interrupt cause */
1080 		dev_dbg(dev->dev,
1081 			"Aliveness Interrupt: Status: %d\n", hw->aliveness);
1082 		dev->pg_event = MEI_PG_EVENT_RECEIVED;
1083 		if (waitqueue_active(&hw->wait_aliveness_resp))
1084 			wake_up(&hw->wait_aliveness_resp);
1085 	}
1086 
1087 
1088 	/* Output Doorbell:
1089 	 * Detection of SeC having sent output to host
1090 	 */
1091 	slots = mei_count_full_read_slots(dev);
1092 	if (test_and_clear_bit(TXE_INTR_OUT_DB_BIT, &hw->intr_cause)) {
1093 		/* Read from TXE */
1094 		rets = mei_irq_read_handler(dev, &complete_list, &slots);
1095 		if (rets && dev->dev_state != MEI_DEV_RESETTING) {
1096 			dev_err(dev->dev,
1097 				"mei_irq_read_handler ret = %d.\n", rets);
1098 
1099 			schedule_work(&dev->reset_work);
1100 			goto end;
1101 		}
1102 	}
1103 	/* Input Ready: Detection if host can write to SeC */
1104 	if (test_and_clear_bit(TXE_INTR_IN_READY_BIT, &hw->intr_cause)) {
1105 		dev->hbuf_is_ready = true;
1106 		hw->slots = dev->hbuf_depth;
1107 	}
1108 
1109 	if (hw->aliveness && dev->hbuf_is_ready) {
1110 		/* get the real register value */
1111 		dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
1112 		rets = mei_irq_write_handler(dev, &complete_list);
1113 		if (rets && rets != -EMSGSIZE)
1114 			dev_err(dev->dev, "mei_irq_write_handler ret = %d.\n",
1115 				rets);
1116 		dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
1117 	}
1118 
1119 	mei_irq_compl_handler(dev, &complete_list);
1120 
1121 end:
1122 	dev_dbg(dev->dev, "interrupt thread end ret = %d\n", rets);
1123 
1124 	mutex_unlock(&dev->device_lock);
1125 
1126 	mei_enable_interrupts(dev);
1127 	return IRQ_HANDLED;
1128 }
1129 
1130 static const struct mei_hw_ops mei_txe_hw_ops = {
1131 
1132 	.host_is_ready = mei_txe_host_is_ready,
1133 
1134 	.fw_status = mei_txe_fw_status,
1135 	.pg_state = mei_txe_pg_state,
1136 
1137 	.hw_is_ready = mei_txe_hw_is_ready,
1138 	.hw_reset = mei_txe_hw_reset,
1139 	.hw_config = mei_txe_hw_config,
1140 	.hw_start = mei_txe_hw_start,
1141 
1142 	.pg_is_enabled = mei_txe_pg_is_enabled,
1143 
1144 	.intr_clear = mei_txe_intr_clear,
1145 	.intr_enable = mei_txe_intr_enable,
1146 	.intr_disable = mei_txe_intr_disable,
1147 
1148 	.hbuf_free_slots = mei_txe_hbuf_empty_slots,
1149 	.hbuf_is_ready = mei_txe_is_input_ready,
1150 	.hbuf_max_len = mei_txe_hbuf_max_len,
1151 
1152 	.write = mei_txe_write,
1153 
1154 	.rdbuf_full_slots = mei_txe_count_full_read_slots,
1155 	.read_hdr = mei_txe_read_hdr,
1156 
1157 	.read = mei_txe_read,
1158 
1159 };
1160 
1161 /**
1162  * mei_txe_dev_init - allocates and initializes txe hardware specific structure
1163  *
1164  * @pdev: pci device
1165  *
1166  * Return: struct mei_device * on success or NULL
1167  */
1168 struct mei_device *mei_txe_dev_init(struct pci_dev *pdev)
1169 {
1170 	struct mei_device *dev;
1171 	struct mei_txe_hw *hw;
1172 
1173 	dev = kzalloc(sizeof(struct mei_device) +
1174 			 sizeof(struct mei_txe_hw), GFP_KERNEL);
1175 	if (!dev)
1176 		return NULL;
1177 
1178 	mei_device_init(dev, &pdev->dev, &mei_txe_hw_ops);
1179 
1180 	hw = to_txe_hw(dev);
1181 
1182 	init_waitqueue_head(&hw->wait_aliveness_resp);
1183 
1184 	return dev;
1185 }
1186 
1187 /**
1188  * mei_txe_setup_satt2 - SATT2 configuration for DMA support.
1189  *
1190  * @dev:   the device structure
1191  * @addr:  physical address start of the range
1192  * @range: physical range size
1193  *
1194  * Return: 0 on success an error code otherwise
1195  */
1196 int mei_txe_setup_satt2(struct mei_device *dev, phys_addr_t addr, u32 range)
1197 {
1198 	struct mei_txe_hw *hw = to_txe_hw(dev);
1199 
1200 	u32 lo32 = lower_32_bits(addr);
1201 	u32 hi32 = upper_32_bits(addr);
1202 	u32 ctrl;
1203 
1204 	/* SATT is limited to 36 Bits */
1205 	if (hi32 & ~0xF)
1206 		return -EINVAL;
1207 
1208 	/* SATT has to be 16Byte aligned */
1209 	if (lo32 & 0xF)
1210 		return -EINVAL;
1211 
1212 	/* SATT range has to be 4Bytes aligned */
1213 	if (range & 0x4)
1214 		return -EINVAL;
1215 
1216 	/* SATT is limited to 32 MB range*/
1217 	if (range > SATT_RANGE_MAX)
1218 		return -EINVAL;
1219 
1220 	ctrl = SATT2_CTRL_VALID_MSK;
1221 	ctrl |= hi32  << SATT2_CTRL_BR_BASE_ADDR_REG_SHIFT;
1222 
1223 	mei_txe_br_reg_write(hw, SATT2_SAP_SIZE_REG, range);
1224 	mei_txe_br_reg_write(hw, SATT2_BRG_BA_LSB_REG, lo32);
1225 	mei_txe_br_reg_write(hw, SATT2_CTRL_REG, ctrl);
1226 	dev_dbg(dev->dev, "SATT2: SAP_SIZE_OFFSET=0x%08X, BRG_BA_LSB_OFFSET=0x%08X, CTRL_OFFSET=0x%08X\n",
1227 		range, lo32, ctrl);
1228 
1229 	return 0;
1230 }
1231