Lines Matching refs:dev

167 static bool mei_txe_aliveness_set(struct mei_device *dev, u32 req)  in mei_txe_aliveness_set()  argument
170 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_set()
173 dev_dbg(dev->dev, "Aliveness current=%d request=%d\n", in mei_txe_aliveness_set()
176 dev->pg_event = MEI_PG_EVENT_WAIT; in mei_txe_aliveness_set()
193 static u32 mei_txe_aliveness_req_get(struct mei_device *dev) in mei_txe_aliveness_req_get() argument
195 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_req_get()
210 static u32 mei_txe_aliveness_get(struct mei_device *dev) in mei_txe_aliveness_get() argument
212 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_get()
229 static int mei_txe_aliveness_poll(struct mei_device *dev, u32 expected) in mei_txe_aliveness_poll() argument
231 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_poll()
237 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_aliveness_poll()
239 dev->pg_event = MEI_PG_EVENT_IDLE; in mei_txe_aliveness_poll()
240 dev_dbg(dev->dev, "aliveness settled after %lld usecs\n", in mei_txe_aliveness_poll()
247 dev->pg_event = MEI_PG_EVENT_IDLE; in mei_txe_aliveness_poll()
248 dev_err(dev->dev, "aliveness timed out\n"); in mei_txe_aliveness_poll()
262 static int mei_txe_aliveness_wait(struct mei_device *dev, u32 expected) in mei_txe_aliveness_wait() argument
264 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_wait()
270 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_aliveness_wait()
274 mutex_unlock(&dev->device_lock); in mei_txe_aliveness_wait()
276 dev->pg_event == MEI_PG_EVENT_RECEIVED, timeout); in mei_txe_aliveness_wait()
277 mutex_lock(&dev->device_lock); in mei_txe_aliveness_wait()
279 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_aliveness_wait()
283 dev_warn(dev->dev, "aliveness timed out = %ld aliveness = %d event = %d\n", in mei_txe_aliveness_wait()
284 err, hw->aliveness, dev->pg_event); in mei_txe_aliveness_wait()
286 dev_dbg(dev->dev, "aliveness settled after = %d msec aliveness = %d event = %d\n", in mei_txe_aliveness_wait()
288 hw->aliveness, dev->pg_event); in mei_txe_aliveness_wait()
290 dev->pg_event = MEI_PG_EVENT_IDLE; in mei_txe_aliveness_wait()
302 int mei_txe_aliveness_set_sync(struct mei_device *dev, u32 req) in mei_txe_aliveness_set_sync() argument
304 if (mei_txe_aliveness_set(dev, req)) in mei_txe_aliveness_set_sync()
305 return mei_txe_aliveness_wait(dev, req); in mei_txe_aliveness_set_sync()
316 static bool mei_txe_pg_in_transition(struct mei_device *dev) in mei_txe_pg_in_transition() argument
318 return dev->pg_event == MEI_PG_EVENT_WAIT; in mei_txe_pg_in_transition()
328 static bool mei_txe_pg_is_enabled(struct mei_device *dev) in mei_txe_pg_is_enabled() argument
341 static inline enum mei_pg_state mei_txe_pg_state(struct mei_device *dev) in mei_txe_pg_state() argument
343 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_pg_state()
353 static void mei_txe_input_ready_interrupt_enable(struct mei_device *dev) in mei_txe_input_ready_interrupt_enable() argument
355 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_input_ready_interrupt_enable()
395 static bool mei_txe_is_input_ready(struct mei_device *dev) in mei_txe_is_input_ready() argument
397 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_is_input_ready()
409 static inline void mei_txe_intr_clear(struct mei_device *dev) in mei_txe_intr_clear() argument
411 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_intr_clear()
424 static void mei_txe_intr_disable(struct mei_device *dev) in mei_txe_intr_disable() argument
426 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_intr_disable()
436 static void mei_txe_intr_enable(struct mei_device *dev) in mei_txe_intr_enable() argument
438 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_intr_enable()
449 static void mei_txe_synchronize_irq(struct mei_device *dev) in mei_txe_synchronize_irq() argument
451 struct pci_dev *pdev = to_pci_dev(dev->dev); in mei_txe_synchronize_irq()
467 static bool mei_txe_pending_interrupts(struct mei_device *dev) in mei_txe_pending_interrupts() argument
470 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_pending_interrupts()
477 dev_dbg(dev->dev, in mei_txe_pending_interrupts()
495 static void mei_txe_input_payload_write(struct mei_device *dev, in mei_txe_input_payload_write() argument
498 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_input_payload_write()
513 static u32 mei_txe_out_data_read(const struct mei_device *dev, in mei_txe_out_data_read() argument
516 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_out_data_read()
529 static void mei_txe_readiness_set_host_rdy(struct mei_device *dev) in mei_txe_readiness_set_host_rdy() argument
531 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_readiness_set_host_rdy()
543 static void mei_txe_readiness_clear(struct mei_device *dev) in mei_txe_readiness_clear() argument
545 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_readiness_clear()
558 static u32 mei_txe_readiness_get(struct mei_device *dev) in mei_txe_readiness_get() argument
560 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_readiness_get()
586 static bool mei_txe_hw_is_ready(struct mei_device *dev) in mei_txe_hw_is_ready() argument
588 u32 readiness = mei_txe_readiness_get(dev); in mei_txe_hw_is_ready()
600 static inline bool mei_txe_host_is_ready(struct mei_device *dev) in mei_txe_host_is_ready() argument
602 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_host_is_ready()
615 static int mei_txe_readiness_wait(struct mei_device *dev) in mei_txe_readiness_wait() argument
617 if (mei_txe_hw_is_ready(dev)) in mei_txe_readiness_wait()
620 mutex_unlock(&dev->device_lock); in mei_txe_readiness_wait()
621 wait_event_timeout(dev->wait_hw_ready, dev->recvd_hw_ready, in mei_txe_readiness_wait()
623 mutex_lock(&dev->device_lock); in mei_txe_readiness_wait()
624 if (!dev->recvd_hw_ready) { in mei_txe_readiness_wait()
625 dev_err(dev->dev, "wait for readiness failed\n"); in mei_txe_readiness_wait()
629 dev->recvd_hw_ready = false; in mei_txe_readiness_wait()
647 static int mei_txe_fw_status(struct mei_device *dev, in mei_txe_fw_status() argument
651 struct pci_dev *pdev = to_pci_dev(dev->dev); in mei_txe_fw_status()
662 trace_mei_pci_cfg_read(dev->dev, "PCI_CFG_HSF_X", in mei_txe_fw_status()
680 static void mei_txe_hw_config(struct mei_device *dev) in mei_txe_hw_config() argument
683 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hw_config()
685 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_hw_config()
686 hw->readiness = mei_txe_readiness_get(dev); in mei_txe_hw_config()
688 dev_dbg(dev->dev, "aliveness_resp = 0x%08x, readiness = 0x%08x.\n", in mei_txe_hw_config()
703 static int mei_txe_write(struct mei_device *dev, in mei_txe_write() argument
707 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_write()
717 dev_dbg(dev->dev, MEI_HDR_FMT, MEI_HDR_PRM((struct mei_msg_hdr *)hdr)); in mei_txe_write()
727 mei_txe_input_ready_interrupt_enable(dev); in mei_txe_write()
729 if (!mei_txe_is_input_ready(dev)) { in mei_txe_write()
732 mei_fw_status_str(dev, fw_sts_str, MEI_FW_STATUS_STR_SZ); in mei_txe_write()
733 dev_err(dev->dev, "Input is not ready %s\n", fw_sts_str); in mei_txe_write()
739 mei_txe_input_payload_write(dev, i, reg_buf[i]); in mei_txe_write()
743 mei_txe_input_payload_write(dev, i + j, reg_buf[j]); in mei_txe_write()
750 mei_txe_input_payload_write(dev, i + j, reg); in mei_txe_write()
769 static u32 mei_txe_hbuf_depth(const struct mei_device *dev) in mei_txe_hbuf_depth() argument
781 static int mei_txe_hbuf_empty_slots(struct mei_device *dev) in mei_txe_hbuf_empty_slots() argument
783 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hbuf_empty_slots()
795 static int mei_txe_count_full_read_slots(struct mei_device *dev) in mei_txe_count_full_read_slots() argument
809 static u32 mei_txe_read_hdr(const struct mei_device *dev) in mei_txe_read_hdr() argument
811 return mei_txe_out_data_read(dev, 0); in mei_txe_read_hdr()
822 static int mei_txe_read(struct mei_device *dev, in mei_txe_read() argument
826 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_read()
837 dev_dbg(dev->dev, "buffer-length = %lu buf[0]0x%08X\n", in mei_txe_read()
838 len, mei_txe_out_data_read(dev, 0)); in mei_txe_read()
842 reg = mei_txe_out_data_read(dev, i + 1); in mei_txe_read()
843 dev_dbg(dev->dev, "buf[%d] = 0x%08X\n", i, reg); in mei_txe_read()
848 reg = mei_txe_out_data_read(dev, i + 1); in mei_txe_read()
864 static int mei_txe_hw_reset(struct mei_device *dev, bool intr_enable) in mei_txe_hw_reset() argument
866 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hw_reset()
875 aliveness_req = mei_txe_aliveness_req_get(dev); in mei_txe_hw_reset()
876 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_hw_reset()
879 mei_txe_intr_disable(dev); in mei_txe_hw_reset()
887 if (mei_txe_aliveness_poll(dev, aliveness_req) < 0) { in mei_txe_hw_reset()
888 dev_err(dev->dev, "wait for aliveness settle failed ... bailing out\n"); in mei_txe_hw_reset()
896 mei_txe_aliveness_set(dev, 0); in mei_txe_hw_reset()
897 if (mei_txe_aliveness_poll(dev, 0) < 0) { in mei_txe_hw_reset()
898 dev_err(dev->dev, "wait for aliveness failed ... bailing out\n"); in mei_txe_hw_reset()
906 mei_txe_readiness_clear(dev); in mei_txe_hw_reset()
918 static int mei_txe_hw_start(struct mei_device *dev) in mei_txe_hw_start() argument
920 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hw_start()
926 mei_txe_intr_enable(dev); in mei_txe_hw_start()
928 ret = mei_txe_readiness_wait(dev); in mei_txe_hw_start()
930 dev_err(dev->dev, "waiting for readiness failed\n"); in mei_txe_hw_start()
944 ret = mei_txe_aliveness_set_sync(dev, 1); in mei_txe_hw_start()
946 dev_err(dev->dev, "wait for aliveness failed ... bailing out\n"); in mei_txe_hw_start()
950 pm_runtime_set_active(dev->dev); in mei_txe_hw_start()
955 mei_txe_input_ready_interrupt_enable(dev); in mei_txe_hw_start()
963 mei_txe_readiness_set_host_rdy(dev); in mei_txe_hw_start()
977 static bool mei_txe_check_and_ack_intrs(struct mei_device *dev, bool do_ack) in mei_txe_check_and_ack_intrs() argument
979 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_check_and_ack_intrs()
994 aliveness = mei_txe_aliveness_get(dev); in mei_txe_check_and_ack_intrs()
1014 mei_txe_intr_disable(dev); in mei_txe_check_and_ack_intrs()
1038 struct mei_device *dev = dev_id; in mei_txe_irq_quick_handler() local
1040 if (mei_txe_check_and_ack_intrs(dev, true)) in mei_txe_irq_quick_handler()
1056 struct mei_device *dev = (struct mei_device *) dev_id; in mei_txe_irq_thread_handler() local
1057 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_irq_thread_handler()
1062 dev_dbg(dev->dev, "irq thread: Interrupt Registers HHISR|HISR|SEC=%02X|%04X|%02X\n", in mei_txe_irq_thread_handler()
1069 mutex_lock(&dev->device_lock); in mei_txe_irq_thread_handler()
1072 if (pci_dev_msi_enabled(to_pci_dev(dev->dev))) in mei_txe_irq_thread_handler()
1073 mei_txe_check_and_ack_intrs(dev, true); in mei_txe_irq_thread_handler()
1076 mei_txe_pending_interrupts(dev); in mei_txe_irq_thread_handler()
1078 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_irq_thread_handler()
1079 hw->readiness = mei_txe_readiness_get(dev); in mei_txe_irq_thread_handler()
1086 dev_dbg(dev->dev, "Readiness Interrupt was received...\n"); in mei_txe_irq_thread_handler()
1090 dev_dbg(dev->dev, "we need to start the dev.\n"); in mei_txe_irq_thread_handler()
1091 dev->recvd_hw_ready = true; in mei_txe_irq_thread_handler()
1093 dev->recvd_hw_ready = false; in mei_txe_irq_thread_handler()
1094 if (dev->dev_state != MEI_DEV_RESETTING) { in mei_txe_irq_thread_handler()
1096 dev_warn(dev->dev, "FW not ready: resetting.\n"); in mei_txe_irq_thread_handler()
1097 schedule_work(&dev->reset_work); in mei_txe_irq_thread_handler()
1102 wake_up(&dev->wait_hw_ready); in mei_txe_irq_thread_handler()
1113 dev_dbg(dev->dev, in mei_txe_irq_thread_handler()
1115 dev->pg_event = MEI_PG_EVENT_RECEIVED; in mei_txe_irq_thread_handler()
1124 slots = mei_count_full_read_slots(dev); in mei_txe_irq_thread_handler()
1127 rets = mei_irq_read_handler(dev, &cmpl_list, &slots); in mei_txe_irq_thread_handler()
1129 (dev->dev_state != MEI_DEV_RESETTING && in mei_txe_irq_thread_handler()
1130 dev->dev_state != MEI_DEV_POWER_DOWN)) { in mei_txe_irq_thread_handler()
1131 dev_err(dev->dev, in mei_txe_irq_thread_handler()
1134 schedule_work(&dev->reset_work); in mei_txe_irq_thread_handler()
1140 dev->hbuf_is_ready = true; in mei_txe_irq_thread_handler()
1144 if (hw->aliveness && dev->hbuf_is_ready) { in mei_txe_irq_thread_handler()
1146 dev->hbuf_is_ready = mei_hbuf_is_ready(dev); in mei_txe_irq_thread_handler()
1147 rets = mei_irq_write_handler(dev, &cmpl_list); in mei_txe_irq_thread_handler()
1149 dev_err(dev->dev, "mei_irq_write_handler ret = %d.\n", in mei_txe_irq_thread_handler()
1151 dev->hbuf_is_ready = mei_hbuf_is_ready(dev); in mei_txe_irq_thread_handler()
1154 mei_irq_compl_handler(dev, &cmpl_list); in mei_txe_irq_thread_handler()
1157 dev_dbg(dev->dev, "interrupt thread end ret = %d\n", rets); in mei_txe_irq_thread_handler()
1159 mutex_unlock(&dev->device_lock); in mei_txe_irq_thread_handler()
1161 mei_enable_interrupts(dev); in mei_txe_irq_thread_handler()
1207 struct mei_device *dev; in mei_txe_dev_init() local
1210 dev = devm_kzalloc(&pdev->dev, sizeof(struct mei_device) + in mei_txe_dev_init()
1212 if (!dev) in mei_txe_dev_init()
1215 mei_device_init(dev, &pdev->dev, &mei_txe_hw_ops); in mei_txe_dev_init()
1217 hw = to_txe_hw(dev); in mei_txe_dev_init()
1221 return dev; in mei_txe_dev_init()
1233 int mei_txe_setup_satt2(struct mei_device *dev, phys_addr_t addr, u32 range) in mei_txe_setup_satt2() argument
1235 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_setup_satt2()
1263 dev_dbg(dev->dev, "SATT2: SAP_SIZE_OFFSET=0x%08X, BRG_BA_LSB_OFFSET=0x%08X, CTRL_OFFSET=0x%08X\n", in mei_txe_setup_satt2()