xref: /openbmc/linux/drivers/misc/mei/hw-me.c (revision 97da55fc)
1 /*
2  *
3  * Intel Management Engine Interface (Intel MEI) Linux driver
4  * Copyright (c) 2003-2012, 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 
19 #include <linux/kthread.h>
20 #include <linux/interrupt.h>
21 
22 #include "mei_dev.h"
23 #include "hw-me.h"
24 
25 #include "hbm.h"
26 
27 
28 /**
29  * mei_reg_read - Reads 32bit data from the mei device
30  *
31  * @dev: the device structure
32  * @offset: offset from which to read the data
33  *
34  * returns register value (u32)
35  */
36 static inline u32 mei_reg_read(const struct mei_me_hw *hw,
37 			       unsigned long offset)
38 {
39 	return ioread32(hw->mem_addr + offset);
40 }
41 
42 
43 /**
44  * mei_reg_write - Writes 32bit data to the mei device
45  *
46  * @dev: the device structure
47  * @offset: offset from which to write the data
48  * @value: register value to write (u32)
49  */
50 static inline void mei_reg_write(const struct mei_me_hw *hw,
51 				 unsigned long offset, u32 value)
52 {
53 	iowrite32(value, hw->mem_addr + offset);
54 }
55 
56 /**
57  * mei_mecbrw_read - Reads 32bit data from ME circular buffer
58  *  read window register
59  *
60  * @dev: the device structure
61  *
62  * returns ME_CB_RW register value (u32)
63  */
64 static u32 mei_me_mecbrw_read(const struct mei_device *dev)
65 {
66 	return mei_reg_read(to_me_hw(dev), ME_CB_RW);
67 }
68 /**
69  * mei_mecsr_read - Reads 32bit data from the ME CSR
70  *
71  * @dev: the device structure
72  *
73  * returns ME_CSR_HA register value (u32)
74  */
75 static inline u32 mei_mecsr_read(const struct mei_me_hw *hw)
76 {
77 	return mei_reg_read(hw, ME_CSR_HA);
78 }
79 
80 /**
81  * mei_hcsr_read - Reads 32bit data from the host CSR
82  *
83  * @dev: the device structure
84  *
85  * returns H_CSR register value (u32)
86  */
87 static inline u32 mei_hcsr_read(const struct mei_me_hw *hw)
88 {
89 	return mei_reg_read(hw, H_CSR);
90 }
91 
92 /**
93  * mei_hcsr_set - writes H_CSR register to the mei device,
94  * and ignores the H_IS bit for it is write-one-to-zero.
95  *
96  * @dev: the device structure
97  */
98 static inline void mei_hcsr_set(struct mei_me_hw *hw, u32 hcsr)
99 {
100 	hcsr &= ~H_IS;
101 	mei_reg_write(hw, H_CSR, hcsr);
102 }
103 
104 
105 /**
106  * me_hw_config - configure hw dependent settings
107  *
108  * @dev: mei device
109  */
110 static void mei_me_hw_config(struct mei_device *dev)
111 {
112 	u32 hcsr = mei_hcsr_read(to_me_hw(dev));
113 	/* Doesn't change in runtime */
114 	dev->hbuf_depth = (hcsr & H_CBD) >> 24;
115 }
116 /**
117  * mei_clear_interrupts - clear and stop interrupts
118  *
119  * @dev: the device structure
120  */
121 static void mei_me_intr_clear(struct mei_device *dev)
122 {
123 	struct mei_me_hw *hw = to_me_hw(dev);
124 	u32 hcsr = mei_hcsr_read(hw);
125 	if ((hcsr & H_IS) == H_IS)
126 		mei_reg_write(hw, H_CSR, hcsr);
127 }
128 /**
129  * mei_me_intr_enable - enables mei device interrupts
130  *
131  * @dev: the device structure
132  */
133 static void mei_me_intr_enable(struct mei_device *dev)
134 {
135 	struct mei_me_hw *hw = to_me_hw(dev);
136 	u32 hcsr = mei_hcsr_read(hw);
137 	hcsr |= H_IE;
138 	mei_hcsr_set(hw, hcsr);
139 }
140 
141 /**
142  * mei_disable_interrupts - disables mei device interrupts
143  *
144  * @dev: the device structure
145  */
146 static void mei_me_intr_disable(struct mei_device *dev)
147 {
148 	struct mei_me_hw *hw = to_me_hw(dev);
149 	u32 hcsr = mei_hcsr_read(hw);
150 	hcsr  &= ~H_IE;
151 	mei_hcsr_set(hw, hcsr);
152 }
153 
154 /**
155  * mei_me_hw_reset - resets fw via mei csr register.
156  *
157  * @dev: the device structure
158  * @interrupts_enabled: if interrupt should be enabled after reset.
159  */
160 static void mei_me_hw_reset(struct mei_device *dev, bool intr_enable)
161 {
162 	struct mei_me_hw *hw = to_me_hw(dev);
163 	u32 hcsr = mei_hcsr_read(hw);
164 
165 	dev_dbg(&dev->pdev->dev, "before reset HCSR = 0x%08x.\n", hcsr);
166 
167 	hcsr |= (H_RST | H_IG);
168 
169 	if (intr_enable)
170 		hcsr |= H_IE;
171 	else
172 		hcsr &= ~H_IE;
173 
174 	mei_hcsr_set(hw, hcsr);
175 
176 	hcsr = mei_hcsr_read(hw) | H_IG;
177 	hcsr &= ~H_RST;
178 
179 	mei_hcsr_set(hw, hcsr);
180 
181 	hcsr = mei_hcsr_read(hw);
182 
183 	dev_dbg(&dev->pdev->dev, "current HCSR = 0x%08x.\n", hcsr);
184 }
185 
186 /**
187  * mei_me_host_set_ready - enable device
188  *
189  * @dev - mei device
190  * returns bool
191  */
192 
193 static void mei_me_host_set_ready(struct mei_device *dev)
194 {
195 	struct mei_me_hw *hw = to_me_hw(dev);
196 	hw->host_hw_state |= H_IE | H_IG | H_RDY;
197 	mei_hcsr_set(hw, hw->host_hw_state);
198 }
199 /**
200  * mei_me_host_is_ready - check whether the host has turned ready
201  *
202  * @dev - mei device
203  * returns bool
204  */
205 static bool mei_me_host_is_ready(struct mei_device *dev)
206 {
207 	struct mei_me_hw *hw = to_me_hw(dev);
208 	hw->host_hw_state = mei_hcsr_read(hw);
209 	return (hw->host_hw_state & H_RDY) == H_RDY;
210 }
211 
212 /**
213  * mei_me_hw_is_ready - check whether the me(hw) has turned ready
214  *
215  * @dev - mei device
216  * returns bool
217  */
218 static bool mei_me_hw_is_ready(struct mei_device *dev)
219 {
220 	struct mei_me_hw *hw = to_me_hw(dev);
221 	hw->me_hw_state = mei_mecsr_read(hw);
222 	return (hw->me_hw_state & ME_RDY_HRA) == ME_RDY_HRA;
223 }
224 
225 /**
226  * mei_hbuf_filled_slots - gets number of device filled buffer slots
227  *
228  * @dev: the device structure
229  *
230  * returns number of filled slots
231  */
232 static unsigned char mei_hbuf_filled_slots(struct mei_device *dev)
233 {
234 	struct mei_me_hw *hw = to_me_hw(dev);
235 	char read_ptr, write_ptr;
236 
237 	hw->host_hw_state = mei_hcsr_read(hw);
238 
239 	read_ptr = (char) ((hw->host_hw_state & H_CBRP) >> 8);
240 	write_ptr = (char) ((hw->host_hw_state & H_CBWP) >> 16);
241 
242 	return (unsigned char) (write_ptr - read_ptr);
243 }
244 
245 /**
246  * mei_hbuf_is_empty - checks if host buffer is empty.
247  *
248  * @dev: the device structure
249  *
250  * returns true if empty, false - otherwise.
251  */
252 static bool mei_me_hbuf_is_empty(struct mei_device *dev)
253 {
254 	return mei_hbuf_filled_slots(dev) == 0;
255 }
256 
257 /**
258  * mei_me_hbuf_empty_slots - counts write empty slots.
259  *
260  * @dev: the device structure
261  *
262  * returns -1(ESLOTS_OVERFLOW) if overflow, otherwise empty slots count
263  */
264 static int mei_me_hbuf_empty_slots(struct mei_device *dev)
265 {
266 	unsigned char filled_slots, empty_slots;
267 
268 	filled_slots = mei_hbuf_filled_slots(dev);
269 	empty_slots = dev->hbuf_depth - filled_slots;
270 
271 	/* check for overflow */
272 	if (filled_slots > dev->hbuf_depth)
273 		return -EOVERFLOW;
274 
275 	return empty_slots;
276 }
277 
278 static size_t mei_me_hbuf_max_len(const struct mei_device *dev)
279 {
280 	return dev->hbuf_depth * sizeof(u32) - sizeof(struct mei_msg_hdr);
281 }
282 
283 
284 /**
285  * mei_write_message - writes a message to mei device.
286  *
287  * @dev: the device structure
288  * @header: mei HECI header of message
289  * @buf: message payload will be written
290  *
291  * This function returns -EIO if write has failed
292  */
293 static int mei_me_write_message(struct mei_device *dev,
294 			struct mei_msg_hdr *header,
295 			unsigned char *buf)
296 {
297 	struct mei_me_hw *hw = to_me_hw(dev);
298 	unsigned long rem, dw_cnt;
299 	unsigned long length = header->length;
300 	u32 *reg_buf = (u32 *)buf;
301 	u32 hcsr;
302 	int i;
303 	int empty_slots;
304 
305 	dev_dbg(&dev->pdev->dev, MEI_HDR_FMT, MEI_HDR_PRM(header));
306 
307 	empty_slots = mei_hbuf_empty_slots(dev);
308 	dev_dbg(&dev->pdev->dev, "empty slots = %hu.\n", empty_slots);
309 
310 	dw_cnt = mei_data2slots(length);
311 	if (empty_slots < 0 || dw_cnt > empty_slots)
312 		return -EIO;
313 
314 	mei_reg_write(hw, H_CB_WW, *((u32 *) header));
315 
316 	for (i = 0; i < length / 4; i++)
317 		mei_reg_write(hw, H_CB_WW, reg_buf[i]);
318 
319 	rem = length & 0x3;
320 	if (rem > 0) {
321 		u32 reg = 0;
322 		memcpy(&reg, &buf[length - rem], rem);
323 		mei_reg_write(hw, H_CB_WW, reg);
324 	}
325 
326 	hcsr = mei_hcsr_read(hw) | H_IG;
327 	mei_hcsr_set(hw, hcsr);
328 	if (!mei_me_hw_is_ready(dev))
329 		return -EIO;
330 
331 	return 0;
332 }
333 
334 /**
335  * mei_me_count_full_read_slots - counts read full slots.
336  *
337  * @dev: the device structure
338  *
339  * returns -1(ESLOTS_OVERFLOW) if overflow, otherwise filled slots count
340  */
341 static int mei_me_count_full_read_slots(struct mei_device *dev)
342 {
343 	struct mei_me_hw *hw = to_me_hw(dev);
344 	char read_ptr, write_ptr;
345 	unsigned char buffer_depth, filled_slots;
346 
347 	hw->me_hw_state = mei_mecsr_read(hw);
348 	buffer_depth = (unsigned char)((hw->me_hw_state & ME_CBD_HRA) >> 24);
349 	read_ptr = (char) ((hw->me_hw_state & ME_CBRP_HRA) >> 8);
350 	write_ptr = (char) ((hw->me_hw_state & ME_CBWP_HRA) >> 16);
351 	filled_slots = (unsigned char) (write_ptr - read_ptr);
352 
353 	/* check for overflow */
354 	if (filled_slots > buffer_depth)
355 		return -EOVERFLOW;
356 
357 	dev_dbg(&dev->pdev->dev, "filled_slots =%08x\n", filled_slots);
358 	return (int)filled_slots;
359 }
360 
361 /**
362  * mei_me_read_slots - reads a message from mei device.
363  *
364  * @dev: the device structure
365  * @buffer: message buffer will be written
366  * @buffer_length: message size will be read
367  */
368 static int mei_me_read_slots(struct mei_device *dev, unsigned char *buffer,
369 		    unsigned long buffer_length)
370 {
371 	struct mei_me_hw *hw = to_me_hw(dev);
372 	u32 *reg_buf = (u32 *)buffer;
373 	u32 hcsr;
374 
375 	for (; buffer_length >= sizeof(u32); buffer_length -= sizeof(u32))
376 		*reg_buf++ = mei_me_mecbrw_read(dev);
377 
378 	if (buffer_length > 0) {
379 		u32 reg = mei_me_mecbrw_read(dev);
380 		memcpy(reg_buf, &reg, buffer_length);
381 	}
382 
383 	hcsr = mei_hcsr_read(hw) | H_IG;
384 	mei_hcsr_set(hw, hcsr);
385 	return 0;
386 }
387 
388 /**
389  * mei_me_irq_quick_handler - The ISR of the MEI device
390  *
391  * @irq: The irq number
392  * @dev_id: pointer to the device structure
393  *
394  * returns irqreturn_t
395  */
396 
397 irqreturn_t mei_me_irq_quick_handler(int irq, void *dev_id)
398 {
399 	struct mei_device *dev = (struct mei_device *) dev_id;
400 	struct mei_me_hw *hw = to_me_hw(dev);
401 	u32 csr_reg = mei_hcsr_read(hw);
402 
403 	if ((csr_reg & H_IS) != H_IS)
404 		return IRQ_NONE;
405 
406 	/* clear H_IS bit in H_CSR */
407 	mei_reg_write(hw, H_CSR, csr_reg);
408 
409 	return IRQ_WAKE_THREAD;
410 }
411 
412 /**
413  * mei_me_irq_thread_handler - function called after ISR to handle the interrupt
414  * processing.
415  *
416  * @irq: The irq number
417  * @dev_id: pointer to the device structure
418  *
419  * returns irqreturn_t
420  *
421  */
422 irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
423 {
424 	struct mei_device *dev = (struct mei_device *) dev_id;
425 	struct mei_cl_cb complete_list;
426 	struct mei_cl_cb *cb_pos = NULL, *cb_next = NULL;
427 	struct mei_cl *cl;
428 	s32 slots;
429 	int rets;
430 	bool  bus_message_received;
431 
432 
433 	dev_dbg(&dev->pdev->dev, "function called after ISR to handle the interrupt processing.\n");
434 	/* initialize our complete list */
435 	mutex_lock(&dev->device_lock);
436 	mei_io_list_init(&complete_list);
437 
438 	/* Ack the interrupt here
439 	 * In case of MSI we don't go through the quick handler */
440 	if (pci_dev_msi_enabled(dev->pdev))
441 		mei_clear_interrupts(dev);
442 
443 	/* check if ME wants a reset */
444 	if (!mei_hw_is_ready(dev) &&
445 	    dev->dev_state != MEI_DEV_RESETING &&
446 	    dev->dev_state != MEI_DEV_INITIALIZING) {
447 		dev_dbg(&dev->pdev->dev, "FW not ready.\n");
448 		mei_reset(dev, 1);
449 		mutex_unlock(&dev->device_lock);
450 		return IRQ_HANDLED;
451 	}
452 
453 	/*  check if we need to start the dev */
454 	if (!mei_host_is_ready(dev)) {
455 		if (mei_hw_is_ready(dev)) {
456 			dev_dbg(&dev->pdev->dev, "we need to start the dev.\n");
457 
458 			mei_host_set_ready(dev);
459 
460 			dev_dbg(&dev->pdev->dev, "link is established start sending messages.\n");
461 			/* link is established * start sending messages.  */
462 
463 			dev->dev_state = MEI_DEV_INIT_CLIENTS;
464 
465 			mei_hbm_start_req(dev);
466 			mutex_unlock(&dev->device_lock);
467 			return IRQ_HANDLED;
468 		} else {
469 			dev_dbg(&dev->pdev->dev, "FW not ready.\n");
470 			mutex_unlock(&dev->device_lock);
471 			return IRQ_HANDLED;
472 		}
473 	}
474 	/* check slots available for reading */
475 	slots = mei_count_full_read_slots(dev);
476 	while (slots > 0) {
477 		/* we have urgent data to send so break the read */
478 		if (dev->wr_ext_msg.hdr.length)
479 			break;
480 		dev_dbg(&dev->pdev->dev, "slots =%08x\n", slots);
481 		dev_dbg(&dev->pdev->dev, "call mei_irq_read_handler.\n");
482 		rets = mei_irq_read_handler(dev, &complete_list, &slots);
483 		if (rets)
484 			goto end;
485 	}
486 	rets = mei_irq_write_handler(dev, &complete_list);
487 end:
488 	dev_dbg(&dev->pdev->dev, "end of bottom half function.\n");
489 	dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
490 
491 	bus_message_received = false;
492 	if (dev->recvd_msg && waitqueue_active(&dev->wait_recvd_msg)) {
493 		dev_dbg(&dev->pdev->dev, "received waiting bus message\n");
494 		bus_message_received = true;
495 	}
496 	mutex_unlock(&dev->device_lock);
497 	if (bus_message_received) {
498 		dev_dbg(&dev->pdev->dev, "wake up dev->wait_recvd_msg\n");
499 		wake_up_interruptible(&dev->wait_recvd_msg);
500 		bus_message_received = false;
501 	}
502 	if (list_empty(&complete_list.list))
503 		return IRQ_HANDLED;
504 
505 
506 	list_for_each_entry_safe(cb_pos, cb_next, &complete_list.list, list) {
507 		cl = cb_pos->cl;
508 		list_del(&cb_pos->list);
509 		if (cl) {
510 			if (cl != &dev->iamthif_cl) {
511 				dev_dbg(&dev->pdev->dev, "completing call back.\n");
512 				mei_irq_complete_handler(cl, cb_pos);
513 				cb_pos = NULL;
514 			} else if (cl == &dev->iamthif_cl) {
515 				mei_amthif_complete(dev, cb_pos);
516 			}
517 		}
518 	}
519 	return IRQ_HANDLED;
520 }
521 static const struct mei_hw_ops mei_me_hw_ops = {
522 
523 	.host_set_ready = mei_me_host_set_ready,
524 	.host_is_ready = mei_me_host_is_ready,
525 
526 	.hw_is_ready = mei_me_hw_is_ready,
527 	.hw_reset = mei_me_hw_reset,
528 	.hw_config  = mei_me_hw_config,
529 
530 	.intr_clear = mei_me_intr_clear,
531 	.intr_enable = mei_me_intr_enable,
532 	.intr_disable = mei_me_intr_disable,
533 
534 	.hbuf_free_slots = mei_me_hbuf_empty_slots,
535 	.hbuf_is_ready = mei_me_hbuf_is_empty,
536 	.hbuf_max_len = mei_me_hbuf_max_len,
537 
538 	.write = mei_me_write_message,
539 
540 	.rdbuf_full_slots = mei_me_count_full_read_slots,
541 	.read_hdr = mei_me_mecbrw_read,
542 	.read = mei_me_read_slots
543 };
544 
545 /**
546  * init_mei_device - allocates and initializes the mei device structure
547  *
548  * @pdev: The pci device structure
549  *
550  * returns The mei_device_device pointer on success, NULL on failure.
551  */
552 struct mei_device *mei_me_dev_init(struct pci_dev *pdev)
553 {
554 	struct mei_device *dev;
555 
556 	dev = kzalloc(sizeof(struct mei_device) +
557 			 sizeof(struct mei_me_hw), GFP_KERNEL);
558 	if (!dev)
559 		return NULL;
560 
561 	mei_device_init(dev);
562 
563 	INIT_LIST_HEAD(&dev->wd_cl.link);
564 	INIT_LIST_HEAD(&dev->iamthif_cl.link);
565 	mei_io_list_init(&dev->amthif_cmd_list);
566 	mei_io_list_init(&dev->amthif_rd_complete_list);
567 
568 	INIT_DELAYED_WORK(&dev->timer_work, mei_timer);
569 	INIT_WORK(&dev->init_work, mei_host_client_init);
570 
571 	dev->ops = &mei_me_hw_ops;
572 
573 	dev->pdev = pdev;
574 	return dev;
575 }
576 
577