Lines Matching refs:hw

68 static inline u32 mei_txe_sec_reg_read_silent(struct mei_txe_hw *hw,  in mei_txe_sec_reg_read_silent()  argument
71 return mei_txe_reg_read(hw->mem_addr[SEC_BAR], offset); in mei_txe_sec_reg_read_silent()
84 static inline u32 mei_txe_sec_reg_read(struct mei_txe_hw *hw, in mei_txe_sec_reg_read() argument
87 WARN(!hw->aliveness, "sec read: aliveness not asserted\n"); in mei_txe_sec_reg_read()
88 return mei_txe_sec_reg_read_silent(hw, offset); in mei_txe_sec_reg_read()
100 static inline void mei_txe_sec_reg_write_silent(struct mei_txe_hw *hw, in mei_txe_sec_reg_write_silent() argument
103 mei_txe_reg_write(hw->mem_addr[SEC_BAR], offset, value); in mei_txe_sec_reg_write_silent()
115 static inline void mei_txe_sec_reg_write(struct mei_txe_hw *hw, in mei_txe_sec_reg_write() argument
118 WARN(!hw->aliveness, "sec write: aliveness not asserted\n"); in mei_txe_sec_reg_write()
119 mei_txe_sec_reg_write_silent(hw, offset, value); in mei_txe_sec_reg_write()
129 static inline u32 mei_txe_br_reg_read(struct mei_txe_hw *hw, in mei_txe_br_reg_read() argument
132 return mei_txe_reg_read(hw->mem_addr[BRIDGE_BAR], offset); in mei_txe_br_reg_read()
142 static inline void mei_txe_br_reg_write(struct mei_txe_hw *hw, in mei_txe_br_reg_write() argument
145 mei_txe_reg_write(hw->mem_addr[BRIDGE_BAR], offset, value); in mei_txe_br_reg_write()
165 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_set() local
166 bool do_req = hw->aliveness != req; in mei_txe_aliveness_set()
169 hw->aliveness, req); in mei_txe_aliveness_set()
172 mei_txe_br_reg_write(hw, SICR_HOST_ALIVENESS_REQ_REG, req); in mei_txe_aliveness_set()
190 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_req_get() local
193 reg = mei_txe_br_reg_read(hw, SICR_HOST_ALIVENESS_REQ_REG); in mei_txe_aliveness_req_get()
207 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_get() local
210 reg = mei_txe_br_reg_read(hw, HICR_HOST_ALIVENESS_RESP_REG); in mei_txe_aliveness_get()
226 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_poll() local
232 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_aliveness_poll()
233 if (hw->aliveness == expected) { in mei_txe_aliveness_poll()
259 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_aliveness_wait() local
265 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_aliveness_wait()
266 if (hw->aliveness == expected) in mei_txe_aliveness_wait()
270 err = wait_event_timeout(hw->wait_aliveness_resp, in mei_txe_aliveness_wait()
274 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_aliveness_wait()
275 ret = hw->aliveness == expected ? 0 : -ETIME; in mei_txe_aliveness_wait()
279 err, hw->aliveness, dev->pg_event); in mei_txe_aliveness_wait()
283 hw->aliveness, dev->pg_event); in mei_txe_aliveness_wait()
338 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_pg_state() local
340 return hw->aliveness ? MEI_PG_OFF : MEI_PG_ON; in mei_txe_pg_state()
350 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_input_ready_interrupt_enable() local
353 hintmsk = mei_txe_sec_reg_read(hw, SEC_IPC_HOST_INT_MASK_REG); in mei_txe_input_ready_interrupt_enable()
355 mei_txe_sec_reg_write(hw, SEC_IPC_HOST_INT_MASK_REG, hintmsk); in mei_txe_input_ready_interrupt_enable()
364 static void mei_txe_input_doorbell_set(struct mei_txe_hw *hw) in mei_txe_input_doorbell_set() argument
367 clear_bit(TXE_INTR_IN_READY_BIT, &hw->intr_cause); in mei_txe_input_doorbell_set()
368 mei_txe_sec_reg_write(hw, SEC_IPC_INPUT_DOORBELL_REG, 1); in mei_txe_input_doorbell_set()
376 static void mei_txe_output_ready_set(struct mei_txe_hw *hw) in mei_txe_output_ready_set() argument
378 mei_txe_br_reg_write(hw, in mei_txe_output_ready_set()
392 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_is_input_ready() local
395 status = mei_txe_sec_reg_read(hw, SEC_IPC_INPUT_STATUS_REG); in mei_txe_is_input_ready()
406 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_intr_clear() local
408 mei_txe_sec_reg_write_silent(hw, SEC_IPC_HOST_INT_STATUS_REG, in mei_txe_intr_clear()
410 mei_txe_br_reg_write(hw, HISR_REG, HISR_INT_STS_MSK); in mei_txe_intr_clear()
411 mei_txe_br_reg_write(hw, HHISR_REG, IPC_HHIER_MSK); in mei_txe_intr_clear()
421 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_intr_disable() local
423 mei_txe_br_reg_write(hw, HHIER_REG, 0); in mei_txe_intr_disable()
424 mei_txe_br_reg_write(hw, HIER_REG, 0); in mei_txe_intr_disable()
433 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_intr_enable() local
435 mei_txe_br_reg_write(hw, HHIER_REG, IPC_HHIER_MSK); in mei_txe_intr_enable()
436 mei_txe_br_reg_write(hw, HIER_REG, HIER_INT_EN_MSK); in mei_txe_intr_enable()
453 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_pending_interrupts() local
454 bool ret = (hw->intr_cause & (TXE_INTR_READINESS | in mei_txe_pending_interrupts()
462 !!(hw->intr_cause & TXE_INTR_IN_READY), in mei_txe_pending_interrupts()
463 !!(hw->intr_cause & TXE_INTR_READINESS), in mei_txe_pending_interrupts()
464 !!(hw->intr_cause & TXE_INTR_ALIVENESS), in mei_txe_pending_interrupts()
465 !!(hw->intr_cause & TXE_INTR_OUT_DB)); in mei_txe_pending_interrupts()
481 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_input_payload_write() local
483 mei_txe_sec_reg_write(hw, SEC_IPC_INPUT_PAYLOAD_REG + in mei_txe_input_payload_write()
499 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_out_data_read() local
501 return mei_txe_br_reg_read(hw, in mei_txe_out_data_read()
514 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_readiness_set_host_rdy() local
516 mei_txe_br_reg_write(hw, in mei_txe_readiness_set_host_rdy()
528 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_readiness_clear() local
530 mei_txe_br_reg_write(hw, SICR_HOST_IPC_READINESS_REQ_REG, in mei_txe_readiness_clear()
543 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_readiness_get() local
545 return mei_txe_br_reg_read(hw, HICR_SEC_IPC_READINESS_REG); in mei_txe_readiness_get()
585 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_host_is_ready() local
586 u32 reg = mei_txe_br_reg_read(hw, HICR_SEC_IPC_READINESS_REG); in mei_txe_host_is_ready()
663 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hw_config() local
668 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_hw_config()
669 hw->readiness = mei_txe_readiness_get(dev); in mei_txe_hw_config()
672 hw->aliveness, hw->readiness); in mei_txe_hw_config()
689 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_write() local
708 if (WARN(!hw->aliveness, "txe write: aliveness not asserted\n")) in mei_txe_write()
736 hw->slots = 0; in mei_txe_write()
739 mei_txe_input_doorbell_set(hw); in mei_txe_write()
765 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hbuf_empty_slots() local
767 return hw->slots; in mei_txe_hbuf_empty_slots()
808 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_read() local
834 mei_txe_output_ready_set(hw); in mei_txe_read()
848 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hw_reset() local
855 (void)mei_txe_sec_reg_read_silent(hw, SEC_IPC_INPUT_DOORBELL_REG); in mei_txe_hw_reset()
858 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_hw_reset()
868 if (aliveness_req != hw->aliveness) in mei_txe_hw_reset()
902 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_hw_start() local
919 hisr = mei_txe_br_reg_read(hw, HISR_REG); in mei_txe_hw_start()
921 mei_txe_br_reg_write(hw, HISR_REG, HISR_INT_2_STS); in mei_txe_hw_start()
924 clear_bit(TXE_INTR_OUT_DB_BIT, &hw->intr_cause); in mei_txe_hw_start()
939 mei_txe_output_ready_set(hw); in mei_txe_hw_start()
959 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_check_and_ack_intrs() local
967 hhisr = mei_txe_br_reg_read(hw, HHISR_REG); in mei_txe_check_and_ack_intrs()
972 hisr = mei_txe_br_reg_read(hw, HISR_REG); in mei_txe_check_and_ack_intrs()
976 ipc_isr = mei_txe_sec_reg_read_silent(hw, in mei_txe_check_and_ack_intrs()
987 hw->intr_cause |= hisr & HISR_INT_STS_MSK; in mei_txe_check_and_ack_intrs()
989 hw->intr_cause |= TXE_INTR_IN_READY; in mei_txe_check_and_ack_intrs()
995 mei_txe_sec_reg_write_silent(hw, in mei_txe_check_and_ack_intrs()
997 mei_txe_br_reg_write(hw, HISR_REG, hisr); in mei_txe_check_and_ack_intrs()
998 mei_txe_br_reg_write(hw, HHISR_REG, hhisr); in mei_txe_check_and_ack_intrs()
1035 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_irq_thread_handler() local
1041 mei_txe_br_reg_read(hw, HHISR_REG), in mei_txe_irq_thread_handler()
1042 mei_txe_br_reg_read(hw, HISR_REG), in mei_txe_irq_thread_handler()
1043 mei_txe_sec_reg_read_silent(hw, SEC_IPC_HOST_INT_STATUS_REG)); in mei_txe_irq_thread_handler()
1056 hw->aliveness = mei_txe_aliveness_get(dev); in mei_txe_irq_thread_handler()
1057 hw->readiness = mei_txe_readiness_get(dev); in mei_txe_irq_thread_handler()
1063 if (test_and_clear_bit(TXE_INTR_READINESS_BIT, &hw->intr_cause)) { in mei_txe_irq_thread_handler()
1067 if (mei_txe_readiness_is_sec_rdy(hw->readiness)) { in mei_txe_irq_thread_handler()
1089 if (test_and_clear_bit(TXE_INTR_ALIVENESS_BIT, &hw->intr_cause)) { in mei_txe_irq_thread_handler()
1092 "Aliveness Interrupt: Status: %d\n", hw->aliveness); in mei_txe_irq_thread_handler()
1094 if (waitqueue_active(&hw->wait_aliveness_resp)) in mei_txe_irq_thread_handler()
1095 wake_up(&hw->wait_aliveness_resp); in mei_txe_irq_thread_handler()
1103 if (test_and_clear_bit(TXE_INTR_OUT_DB_BIT, &hw->intr_cause)) { in mei_txe_irq_thread_handler()
1115 if (test_and_clear_bit(TXE_INTR_IN_READY_BIT, &hw->intr_cause)) { in mei_txe_irq_thread_handler()
1117 hw->slots = dev->hbuf_depth; in mei_txe_irq_thread_handler()
1120 if (hw->aliveness && dev->hbuf_is_ready) { in mei_txe_irq_thread_handler()
1183 struct mei_txe_hw *hw; in mei_txe_dev_init() local
1192 hw = to_txe_hw(dev); in mei_txe_dev_init()
1194 init_waitqueue_head(&hw->wait_aliveness_resp); in mei_txe_dev_init()
1210 struct mei_txe_hw *hw = to_txe_hw(dev); in mei_txe_setup_satt2() local
1235 mei_txe_br_reg_write(hw, SATT2_SAP_SIZE_REG, range); in mei_txe_setup_satt2()
1236 mei_txe_br_reg_write(hw, SATT2_BRG_BA_LSB_REG, lo32); in mei_txe_setup_satt2()
1237 mei_txe_br_reg_write(hw, SATT2_CTRL_REG, ctrl); in mei_txe_setup_satt2()