Lines Matching refs:dev

157 static bool mei_txe_aliveness_set(struct mei_device *dev, u32 req)  in mei_txe_aliveness_set()  argument
160 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_set()
163 dev_dbg(dev->dev, "Aliveness current=%d request=%d\n", in mei_txe_aliveness_set()
166 dev->pg_event = MEI_PG_EVENT_WAIT; in mei_txe_aliveness_set()
183 static u32 mei_txe_aliveness_req_get(struct mei_device *dev) in mei_txe_aliveness_req_get() argument
185 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_req_get()
200 static u32 mei_txe_aliveness_get(struct mei_device *dev) in mei_txe_aliveness_get() argument
202 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_get()
219 static int mei_txe_aliveness_poll(struct mei_device *dev, u32 expected) in mei_txe_aliveness_poll() argument
221 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_poll()
227 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_aliveness_poll()
229 dev->pg_event = MEI_PG_EVENT_IDLE; in mei_txe_aliveness_poll()
230 dev_dbg(dev->dev, "aliveness settled after %lld usecs\n", in mei_txe_aliveness_poll()
237 dev->pg_event = MEI_PG_EVENT_IDLE; in mei_txe_aliveness_poll()
238 dev_err(dev->dev, "aliveness timed out\n"); in mei_txe_aliveness_poll()
252 static int mei_txe_aliveness_wait(struct mei_device *dev, u32 expected) in mei_txe_aliveness_wait() argument
254 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_wait()
260 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_aliveness_wait()
264 mutex_unlock(&dev->device_lock); in mei_txe_aliveness_wait()
266 dev->pg_event == MEI_PG_EVENT_RECEIVED, timeout); in mei_txe_aliveness_wait()
267 mutex_lock(&dev->device_lock); in mei_txe_aliveness_wait()
269 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_aliveness_wait()
273 dev_warn(dev->dev, "aliveness timed out = %ld aliveness = %d event = %d\n", in mei_txe_aliveness_wait()
274 err, hw->aliveness, dev->pg_event); in mei_txe_aliveness_wait()
276 dev_dbg(dev->dev, "aliveness settled after = %d msec aliveness = %d event = %d\n", in mei_txe_aliveness_wait()
278 hw->aliveness, dev->pg_event); in mei_txe_aliveness_wait()
280 dev->pg_event = MEI_PG_EVENT_IDLE; in mei_txe_aliveness_wait()
292 int mei_txe_aliveness_set_sync(struct mei_device *dev, u32 req) in mei_txe_aliveness_set_sync() argument
294 if (mei_txe_aliveness_set(dev, req)) in mei_txe_aliveness_set_sync()
295 return mei_txe_aliveness_wait(dev, req); in mei_txe_aliveness_set_sync()
306 static bool mei_txe_pg_in_transition(struct mei_device *dev) in mei_txe_pg_in_transition() argument
308 return dev->pg_event == MEI_PG_EVENT_WAIT; in mei_txe_pg_in_transition()
318 static bool mei_txe_pg_is_enabled(struct mei_device *dev) in mei_txe_pg_is_enabled() argument
331 static inline enum mei_pg_state mei_txe_pg_state(struct mei_device *dev) in mei_txe_pg_state() argument
333 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_pg_state()
343 static void mei_txe_input_ready_interrupt_enable(struct mei_device *dev) in mei_txe_input_ready_interrupt_enable() argument
345 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_input_ready_interrupt_enable()
385 static bool mei_txe_is_input_ready(struct mei_device *dev) in mei_txe_is_input_ready() argument
387 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_is_input_ready()
399 static inline void mei_txe_intr_clear(struct mei_device *dev) in mei_txe_intr_clear() argument
401 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_intr_clear()
414 static void mei_txe_intr_disable(struct mei_device *dev) in mei_txe_intr_disable() argument
416 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_intr_disable()
426 static void mei_txe_intr_enable(struct mei_device *dev) in mei_txe_intr_enable() argument
428 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_intr_enable()
439 static void mei_txe_synchronize_irq(struct mei_device *dev) in mei_txe_synchronize_irq() argument
441 struct pci_dev *pdev = to_pci_dev(dev->dev); in mei_txe_synchronize_irq()
457 static bool mei_txe_pending_interrupts(struct mei_device *dev) in mei_txe_pending_interrupts() argument
460 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_pending_interrupts()
467 dev_dbg(dev->dev, in mei_txe_pending_interrupts()
485 static void mei_txe_input_payload_write(struct mei_device *dev, in mei_txe_input_payload_write() argument
488 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_input_payload_write()
503 static u32 mei_txe_out_data_read(const struct mei_device *dev, in mei_txe_out_data_read() argument
506 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_out_data_read()
519 static void mei_txe_readiness_set_host_rdy(struct mei_device *dev) in mei_txe_readiness_set_host_rdy() argument
521 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_readiness_set_host_rdy()
533 static void mei_txe_readiness_clear(struct mei_device *dev) in mei_txe_readiness_clear() argument
535 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_readiness_clear()
548 static u32 mei_txe_readiness_get(struct mei_device *dev) in mei_txe_readiness_get() argument
550 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_readiness_get()
576 static bool mei_txe_hw_is_ready(struct mei_device *dev) in mei_txe_hw_is_ready() argument
578 u32 readiness = mei_txe_readiness_get(dev); in mei_txe_hw_is_ready()
590 static inline bool mei_txe_host_is_ready(struct mei_device *dev) in mei_txe_host_is_ready() argument
592 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_host_is_ready()
605 static int mei_txe_readiness_wait(struct mei_device *dev) in mei_txe_readiness_wait() argument
607 if (mei_txe_hw_is_ready(dev)) in mei_txe_readiness_wait()
610 mutex_unlock(&dev->device_lock); in mei_txe_readiness_wait()
611 wait_event_timeout(dev->wait_hw_ready, dev->recvd_hw_ready, in mei_txe_readiness_wait()
613 mutex_lock(&dev->device_lock); in mei_txe_readiness_wait()
614 if (!dev->recvd_hw_ready) { in mei_txe_readiness_wait()
615 dev_err(dev->dev, "wait for readiness failed\n"); in mei_txe_readiness_wait()
619 dev->recvd_hw_ready = false; in mei_txe_readiness_wait()
637 static int mei_txe_fw_status(struct mei_device *dev, in mei_txe_fw_status() argument
641 struct pci_dev *pdev = to_pci_dev(dev->dev); in mei_txe_fw_status()
652 trace_mei_pci_cfg_read(dev->dev, "PCI_CFG_HSF_X", in mei_txe_fw_status()
672 static int mei_txe_hw_config(struct mei_device *dev) in mei_txe_hw_config() argument
675 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hw_config()
677 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_hw_config()
678 hw->readiness = mei_txe_readiness_get(dev); in mei_txe_hw_config()
680 dev_dbg(dev->dev, "aliveness_resp = 0x%08x, readiness = 0x%08x.\n", in mei_txe_hw_config()
697 static int mei_txe_write(struct mei_device *dev, in mei_txe_write() argument
701 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_write()
711 dev_dbg(dev->dev, MEI_HDR_FMT, MEI_HDR_PRM((struct mei_msg_hdr *)hdr)); in mei_txe_write()
721 mei_txe_input_ready_interrupt_enable(dev); in mei_txe_write()
723 if (!mei_txe_is_input_ready(dev)) { in mei_txe_write()
726 mei_fw_status_str(dev, fw_sts_str, MEI_FW_STATUS_STR_SZ); in mei_txe_write()
727 dev_err(dev->dev, "Input is not ready %s\n", fw_sts_str); in mei_txe_write()
733 mei_txe_input_payload_write(dev, i, reg_buf[i]); in mei_txe_write()
737 mei_txe_input_payload_write(dev, i + j, reg_buf[j]); in mei_txe_write()
744 mei_txe_input_payload_write(dev, i + j, reg); in mei_txe_write()
763 static u32 mei_txe_hbuf_depth(const struct mei_device *dev) in mei_txe_hbuf_depth() argument
775 static int mei_txe_hbuf_empty_slots(struct mei_device *dev) in mei_txe_hbuf_empty_slots() argument
777 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hbuf_empty_slots()
789 static int mei_txe_count_full_read_slots(struct mei_device *dev) in mei_txe_count_full_read_slots() argument
803 static u32 mei_txe_read_hdr(const struct mei_device *dev) in mei_txe_read_hdr() argument
805 return mei_txe_out_data_read(dev, 0); in mei_txe_read_hdr()
816 static int mei_txe_read(struct mei_device *dev, in mei_txe_read() argument
820 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_read()
831 dev_dbg(dev->dev, "buffer-length = %lu buf[0]0x%08X\n", in mei_txe_read()
832 len, mei_txe_out_data_read(dev, 0)); in mei_txe_read()
836 reg = mei_txe_out_data_read(dev, i + 1); in mei_txe_read()
837 dev_dbg(dev->dev, "buf[%d] = 0x%08X\n", i, reg); in mei_txe_read()
842 reg = mei_txe_out_data_read(dev, i + 1); in mei_txe_read()
858 static int mei_txe_hw_reset(struct mei_device *dev, bool intr_enable) in mei_txe_hw_reset() argument
860 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hw_reset()
869 aliveness_req = mei_txe_aliveness_req_get(dev); in mei_txe_hw_reset()
870 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_hw_reset()
873 mei_txe_intr_disable(dev); in mei_txe_hw_reset()
881 if (mei_txe_aliveness_poll(dev, aliveness_req) < 0) { in mei_txe_hw_reset()
882 dev_err(dev->dev, "wait for aliveness settle failed ... bailing out\n"); in mei_txe_hw_reset()
890 mei_txe_aliveness_set(dev, 0); in mei_txe_hw_reset()
891 if (mei_txe_aliveness_poll(dev, 0) < 0) { in mei_txe_hw_reset()
892 dev_err(dev->dev, "wait for aliveness failed ... bailing out\n"); in mei_txe_hw_reset()
900 mei_txe_readiness_clear(dev); in mei_txe_hw_reset()
912 static int mei_txe_hw_start(struct mei_device *dev) in mei_txe_hw_start() argument
914 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hw_start()
920 mei_txe_intr_enable(dev); in mei_txe_hw_start()
922 ret = mei_txe_readiness_wait(dev); in mei_txe_hw_start()
924 dev_err(dev->dev, "waiting for readiness failed\n"); in mei_txe_hw_start()
938 ret = mei_txe_aliveness_set_sync(dev, 1); in mei_txe_hw_start()
940 dev_err(dev->dev, "wait for aliveness failed ... bailing out\n"); in mei_txe_hw_start()
944 pm_runtime_set_active(dev->dev); in mei_txe_hw_start()
949 mei_txe_input_ready_interrupt_enable(dev); in mei_txe_hw_start()
957 mei_txe_readiness_set_host_rdy(dev); in mei_txe_hw_start()
971 static bool mei_txe_check_and_ack_intrs(struct mei_device *dev, bool do_ack) in mei_txe_check_and_ack_intrs() argument
973 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_check_and_ack_intrs()
988 aliveness = mei_txe_aliveness_get(dev); in mei_txe_check_and_ack_intrs()
1004 mei_txe_intr_disable(dev); in mei_txe_check_and_ack_intrs()
1028 struct mei_device *dev = dev_id; in mei_txe_irq_quick_handler() local
1030 if (mei_txe_check_and_ack_intrs(dev, true)) in mei_txe_irq_quick_handler()
1046 struct mei_device *dev = (struct mei_device *) dev_id; in mei_txe_irq_thread_handler() local
1047 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_irq_thread_handler()
1052 dev_dbg(dev->dev, "irq thread: Interrupt Registers HHISR|HISR|SEC=%02X|%04X|%02X\n", in mei_txe_irq_thread_handler()
1059 mutex_lock(&dev->device_lock); in mei_txe_irq_thread_handler()
1062 if (pci_dev_msi_enabled(to_pci_dev(dev->dev))) in mei_txe_irq_thread_handler()
1063 mei_txe_check_and_ack_intrs(dev, true); in mei_txe_irq_thread_handler()
1066 mei_txe_pending_interrupts(dev); in mei_txe_irq_thread_handler()
1068 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_irq_thread_handler()
1069 hw->readiness = mei_txe_readiness_get(dev); in mei_txe_irq_thread_handler()
1076 dev_dbg(dev->dev, "Readiness Interrupt was received...\n"); in mei_txe_irq_thread_handler()
1080 dev_dbg(dev->dev, "we need to start the dev.\n"); in mei_txe_irq_thread_handler()
1081 dev->recvd_hw_ready = true; in mei_txe_irq_thread_handler()
1083 dev->recvd_hw_ready = false; in mei_txe_irq_thread_handler()
1084 if (dev->dev_state != MEI_DEV_RESETTING) { in mei_txe_irq_thread_handler()
1086 dev_warn(dev->dev, "FW not ready: resetting.\n"); in mei_txe_irq_thread_handler()
1087 schedule_work(&dev->reset_work); in mei_txe_irq_thread_handler()
1092 wake_up(&dev->wait_hw_ready); in mei_txe_irq_thread_handler()
1103 dev_dbg(dev->dev, in mei_txe_irq_thread_handler()
1105 dev->pg_event = MEI_PG_EVENT_RECEIVED; in mei_txe_irq_thread_handler()
1114 slots = mei_count_full_read_slots(dev); in mei_txe_irq_thread_handler()
1117 rets = mei_irq_read_handler(dev, &cmpl_list, &slots); in mei_txe_irq_thread_handler()
1119 (dev->dev_state != MEI_DEV_RESETTING && in mei_txe_irq_thread_handler()
1120 dev->dev_state != MEI_DEV_POWER_DOWN)) { in mei_txe_irq_thread_handler()
1121 dev_err(dev->dev, in mei_txe_irq_thread_handler()
1124 schedule_work(&dev->reset_work); in mei_txe_irq_thread_handler()
1130 dev->hbuf_is_ready = true; in mei_txe_irq_thread_handler()
1134 if (hw->aliveness && dev->hbuf_is_ready) { in mei_txe_irq_thread_handler()
1136 dev->hbuf_is_ready = mei_hbuf_is_ready(dev); in mei_txe_irq_thread_handler()
1137 rets = mei_irq_write_handler(dev, &cmpl_list); in mei_txe_irq_thread_handler()
1139 dev_err(dev->dev, "mei_irq_write_handler ret = %d.\n", in mei_txe_irq_thread_handler()
1141 dev->hbuf_is_ready = mei_hbuf_is_ready(dev); in mei_txe_irq_thread_handler()
1144 mei_irq_compl_handler(dev, &cmpl_list); in mei_txe_irq_thread_handler()
1147 dev_dbg(dev->dev, "interrupt thread end ret = %d\n", rets); in mei_txe_irq_thread_handler()
1149 mutex_unlock(&dev->device_lock); in mei_txe_irq_thread_handler()
1151 mei_enable_interrupts(dev); in mei_txe_irq_thread_handler()
1197 struct mei_device *dev; in mei_txe_dev_init() local
1200 dev = devm_kzalloc(&pdev->dev, sizeof(*dev) + sizeof(*hw), GFP_KERNEL); in mei_txe_dev_init()
1201 if (!dev) in mei_txe_dev_init()
1204 mei_device_init(dev, &pdev->dev, false, &mei_txe_hw_ops); in mei_txe_dev_init()
1206 hw = to_txe_hw(dev); in mei_txe_dev_init()
1210 return dev; in mei_txe_dev_init()
1222 int mei_txe_setup_satt2(struct mei_device *dev, phys_addr_t addr, u32 range) in mei_txe_setup_satt2() argument
1224 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_setup_satt2()
1252 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()