mei: add hw start callback
[firefly-linux-kernel-4.4.55.git] / drivers / misc / mei / hw-me.c
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 static int mei_me_hw_ready_wait(struct mei_device *dev)
226 {
227         int err;
228         if (mei_me_hw_is_ready(dev))
229                 return 0;
230
231         mutex_unlock(&dev->device_lock);
232         err = wait_event_interruptible_timeout(dev->wait_hw_ready,
233                         dev->recvd_hw_ready, MEI_INTEROP_TIMEOUT);
234         mutex_lock(&dev->device_lock);
235         if (!err && !dev->recvd_hw_ready) {
236                 dev_err(&dev->pdev->dev,
237                         "wait hw ready failed. status = 0x%x\n", err);
238                 return -ETIMEDOUT;
239         }
240
241         dev->recvd_hw_ready = false;
242         return 0;
243 }
244
245 static int mei_me_hw_start(struct mei_device *dev)
246 {
247         int ret = mei_me_hw_ready_wait(dev);
248         if (ret)
249                 return ret;
250         dev_dbg(&dev->pdev->dev, "hw is ready\n");
251
252         mei_me_host_set_ready(dev);
253         return ret;
254 }
255
256
257 /**
258  * mei_hbuf_filled_slots - gets number of device filled buffer slots
259  *
260  * @dev: the device structure
261  *
262  * returns number of filled slots
263  */
264 static unsigned char mei_hbuf_filled_slots(struct mei_device *dev)
265 {
266         struct mei_me_hw *hw = to_me_hw(dev);
267         char read_ptr, write_ptr;
268
269         hw->host_hw_state = mei_hcsr_read(hw);
270
271         read_ptr = (char) ((hw->host_hw_state & H_CBRP) >> 8);
272         write_ptr = (char) ((hw->host_hw_state & H_CBWP) >> 16);
273
274         return (unsigned char) (write_ptr - read_ptr);
275 }
276
277 /**
278  * mei_hbuf_is_empty - checks if host buffer is empty.
279  *
280  * @dev: the device structure
281  *
282  * returns true if empty, false - otherwise.
283  */
284 static bool mei_me_hbuf_is_empty(struct mei_device *dev)
285 {
286         return mei_hbuf_filled_slots(dev) == 0;
287 }
288
289 /**
290  * mei_me_hbuf_empty_slots - counts write empty slots.
291  *
292  * @dev: the device structure
293  *
294  * returns -1(ESLOTS_OVERFLOW) if overflow, otherwise empty slots count
295  */
296 static int mei_me_hbuf_empty_slots(struct mei_device *dev)
297 {
298         unsigned char filled_slots, empty_slots;
299
300         filled_slots = mei_hbuf_filled_slots(dev);
301         empty_slots = dev->hbuf_depth - filled_slots;
302
303         /* check for overflow */
304         if (filled_slots > dev->hbuf_depth)
305                 return -EOVERFLOW;
306
307         return empty_slots;
308 }
309
310 static size_t mei_me_hbuf_max_len(const struct mei_device *dev)
311 {
312         return dev->hbuf_depth * sizeof(u32) - sizeof(struct mei_msg_hdr);
313 }
314
315
316 /**
317  * mei_write_message - writes a message to mei device.
318  *
319  * @dev: the device structure
320  * @header: mei HECI header of message
321  * @buf: message payload will be written
322  *
323  * This function returns -EIO if write has failed
324  */
325 static int mei_me_write_message(struct mei_device *dev,
326                         struct mei_msg_hdr *header,
327                         unsigned char *buf)
328 {
329         struct mei_me_hw *hw = to_me_hw(dev);
330         unsigned long rem;
331         unsigned long length = header->length;
332         u32 *reg_buf = (u32 *)buf;
333         u32 hcsr;
334         u32 dw_cnt;
335         int i;
336         int empty_slots;
337
338         dev_dbg(&dev->pdev->dev, MEI_HDR_FMT, MEI_HDR_PRM(header));
339
340         empty_slots = mei_hbuf_empty_slots(dev);
341         dev_dbg(&dev->pdev->dev, "empty slots = %hu.\n", empty_slots);
342
343         dw_cnt = mei_data2slots(length);
344         if (empty_slots < 0 || dw_cnt > empty_slots)
345                 return -EIO;
346
347         mei_reg_write(hw, H_CB_WW, *((u32 *) header));
348
349         for (i = 0; i < length / 4; i++)
350                 mei_reg_write(hw, H_CB_WW, reg_buf[i]);
351
352         rem = length & 0x3;
353         if (rem > 0) {
354                 u32 reg = 0;
355                 memcpy(&reg, &buf[length - rem], rem);
356                 mei_reg_write(hw, H_CB_WW, reg);
357         }
358
359         hcsr = mei_hcsr_read(hw) | H_IG;
360         mei_hcsr_set(hw, hcsr);
361         if (!mei_me_hw_is_ready(dev))
362                 return -EIO;
363
364         return 0;
365 }
366
367 /**
368  * mei_me_count_full_read_slots - counts read full slots.
369  *
370  * @dev: the device structure
371  *
372  * returns -1(ESLOTS_OVERFLOW) if overflow, otherwise filled slots count
373  */
374 static int mei_me_count_full_read_slots(struct mei_device *dev)
375 {
376         struct mei_me_hw *hw = to_me_hw(dev);
377         char read_ptr, write_ptr;
378         unsigned char buffer_depth, filled_slots;
379
380         hw->me_hw_state = mei_mecsr_read(hw);
381         buffer_depth = (unsigned char)((hw->me_hw_state & ME_CBD_HRA) >> 24);
382         read_ptr = (char) ((hw->me_hw_state & ME_CBRP_HRA) >> 8);
383         write_ptr = (char) ((hw->me_hw_state & ME_CBWP_HRA) >> 16);
384         filled_slots = (unsigned char) (write_ptr - read_ptr);
385
386         /* check for overflow */
387         if (filled_slots > buffer_depth)
388                 return -EOVERFLOW;
389
390         dev_dbg(&dev->pdev->dev, "filled_slots =%08x\n", filled_slots);
391         return (int)filled_slots;
392 }
393
394 /**
395  * mei_me_read_slots - reads a message from mei device.
396  *
397  * @dev: the device structure
398  * @buffer: message buffer will be written
399  * @buffer_length: message size will be read
400  */
401 static int mei_me_read_slots(struct mei_device *dev, unsigned char *buffer,
402                     unsigned long buffer_length)
403 {
404         struct mei_me_hw *hw = to_me_hw(dev);
405         u32 *reg_buf = (u32 *)buffer;
406         u32 hcsr;
407
408         for (; buffer_length >= sizeof(u32); buffer_length -= sizeof(u32))
409                 *reg_buf++ = mei_me_mecbrw_read(dev);
410
411         if (buffer_length > 0) {
412                 u32 reg = mei_me_mecbrw_read(dev);
413                 memcpy(reg_buf, &reg, buffer_length);
414         }
415
416         hcsr = mei_hcsr_read(hw) | H_IG;
417         mei_hcsr_set(hw, hcsr);
418         return 0;
419 }
420
421 /**
422  * mei_me_irq_quick_handler - The ISR of the MEI device
423  *
424  * @irq: The irq number
425  * @dev_id: pointer to the device structure
426  *
427  * returns irqreturn_t
428  */
429
430 irqreturn_t mei_me_irq_quick_handler(int irq, void *dev_id)
431 {
432         struct mei_device *dev = (struct mei_device *) dev_id;
433         struct mei_me_hw *hw = to_me_hw(dev);
434         u32 csr_reg = mei_hcsr_read(hw);
435
436         if ((csr_reg & H_IS) != H_IS)
437                 return IRQ_NONE;
438
439         /* clear H_IS bit in H_CSR */
440         mei_reg_write(hw, H_CSR, csr_reg);
441
442         return IRQ_WAKE_THREAD;
443 }
444
445 /**
446  * mei_me_irq_thread_handler - function called after ISR to handle the interrupt
447  * processing.
448  *
449  * @irq: The irq number
450  * @dev_id: pointer to the device structure
451  *
452  * returns irqreturn_t
453  *
454  */
455 irqreturn_t mei_me_irq_thread_handler(int irq, void *dev_id)
456 {
457         struct mei_device *dev = (struct mei_device *) dev_id;
458         struct mei_cl_cb complete_list;
459         struct mei_cl_cb *cb_pos = NULL, *cb_next = NULL;
460         struct mei_cl *cl;
461         s32 slots;
462         int rets;
463         bool  bus_message_received;
464
465
466         dev_dbg(&dev->pdev->dev, "function called after ISR to handle the interrupt processing.\n");
467         /* initialize our complete list */
468         mutex_lock(&dev->device_lock);
469         mei_io_list_init(&complete_list);
470
471         /* Ack the interrupt here
472          * In case of MSI we don't go through the quick handler */
473         if (pci_dev_msi_enabled(dev->pdev))
474                 mei_clear_interrupts(dev);
475
476         /* check if ME wants a reset */
477         if (!mei_hw_is_ready(dev) &&
478             dev->dev_state != MEI_DEV_RESETING &&
479             dev->dev_state != MEI_DEV_INITIALIZING) {
480                 dev_dbg(&dev->pdev->dev, "FW not ready.\n");
481                 mei_reset(dev, 1);
482                 mutex_unlock(&dev->device_lock);
483                 return IRQ_HANDLED;
484         }
485
486         /*  check if we need to start the dev */
487         if (!mei_host_is_ready(dev)) {
488                 if (mei_hw_is_ready(dev)) {
489                         dev_dbg(&dev->pdev->dev, "we need to start the dev.\n");
490
491                         dev->recvd_hw_ready = true;
492                         wake_up_interruptible(&dev->wait_hw_ready);
493
494                         mutex_unlock(&dev->device_lock);
495                         return IRQ_HANDLED;
496                 } else {
497                         dev_dbg(&dev->pdev->dev, "FW not ready.\n");
498                         mutex_unlock(&dev->device_lock);
499                         return IRQ_HANDLED;
500                 }
501         }
502         /* check slots available for reading */
503         slots = mei_count_full_read_slots(dev);
504         while (slots > 0) {
505                 /* we have urgent data to send so break the read */
506                 if (dev->wr_ext_msg.hdr.length)
507                         break;
508                 dev_dbg(&dev->pdev->dev, "slots =%08x\n", slots);
509                 dev_dbg(&dev->pdev->dev, "call mei_irq_read_handler.\n");
510                 rets = mei_irq_read_handler(dev, &complete_list, &slots);
511                 if (rets)
512                         goto end;
513         }
514         rets = mei_irq_write_handler(dev, &complete_list);
515 end:
516         dev_dbg(&dev->pdev->dev, "end of bottom half function.\n");
517         dev->hbuf_is_ready = mei_hbuf_is_ready(dev);
518
519         bus_message_received = false;
520         if (dev->recvd_msg && waitqueue_active(&dev->wait_recvd_msg)) {
521                 dev_dbg(&dev->pdev->dev, "received waiting bus message\n");
522                 bus_message_received = true;
523         }
524         mutex_unlock(&dev->device_lock);
525         if (bus_message_received) {
526                 dev_dbg(&dev->pdev->dev, "wake up dev->wait_recvd_msg\n");
527                 wake_up_interruptible(&dev->wait_recvd_msg);
528                 bus_message_received = false;
529         }
530         if (list_empty(&complete_list.list))
531                 return IRQ_HANDLED;
532
533
534         list_for_each_entry_safe(cb_pos, cb_next, &complete_list.list, list) {
535                 cl = cb_pos->cl;
536                 list_del(&cb_pos->list);
537                 if (cl) {
538                         if (cl != &dev->iamthif_cl) {
539                                 dev_dbg(&dev->pdev->dev, "completing call back.\n");
540                                 mei_irq_complete_handler(cl, cb_pos);
541                                 cb_pos = NULL;
542                         } else if (cl == &dev->iamthif_cl) {
543                                 mei_amthif_complete(dev, cb_pos);
544                         }
545                 }
546         }
547         return IRQ_HANDLED;
548 }
549 static const struct mei_hw_ops mei_me_hw_ops = {
550
551         .host_is_ready = mei_me_host_is_ready,
552
553         .hw_is_ready = mei_me_hw_is_ready,
554         .hw_reset = mei_me_hw_reset,
555         .hw_config = mei_me_hw_config,
556         .hw_start = mei_me_hw_start,
557
558         .intr_clear = mei_me_intr_clear,
559         .intr_enable = mei_me_intr_enable,
560         .intr_disable = mei_me_intr_disable,
561
562         .hbuf_free_slots = mei_me_hbuf_empty_slots,
563         .hbuf_is_ready = mei_me_hbuf_is_empty,
564         .hbuf_max_len = mei_me_hbuf_max_len,
565
566         .write = mei_me_write_message,
567
568         .rdbuf_full_slots = mei_me_count_full_read_slots,
569         .read_hdr = mei_me_mecbrw_read,
570         .read = mei_me_read_slots
571 };
572
573 /**
574  * init_mei_device - allocates and initializes the mei device structure
575  *
576  * @pdev: The pci device structure
577  *
578  * returns The mei_device_device pointer on success, NULL on failure.
579  */
580 struct mei_device *mei_me_dev_init(struct pci_dev *pdev)
581 {
582         struct mei_device *dev;
583
584         dev = kzalloc(sizeof(struct mei_device) +
585                          sizeof(struct mei_me_hw), GFP_KERNEL);
586         if (!dev)
587                 return NULL;
588
589         mei_device_init(dev);
590
591         INIT_LIST_HEAD(&dev->wd_cl.link);
592         INIT_LIST_HEAD(&dev->iamthif_cl.link);
593         mei_io_list_init(&dev->amthif_cmd_list);
594         mei_io_list_init(&dev->amthif_rd_complete_list);
595
596         INIT_DELAYED_WORK(&dev->timer_work, mei_timer);
597         INIT_WORK(&dev->init_work, mei_host_client_init);
598
599         dev->ops = &mei_me_hw_ops;
600
601         dev->pdev = pdev;
602         return dev;
603 }
604