Lines Matching refs:hw

26 #include "hw-txe.h"
60 * @hw: the txe hardware structure
67 static inline u32 mei_txe_sec_reg_read_silent(struct mei_txe_hw *hw,
70 return mei_txe_reg_read(hw->mem_addr[SEC_BAR], offset);
76 * @hw: the txe hardware structure
83 static inline u32 mei_txe_sec_reg_read(struct mei_txe_hw *hw,
86 WARN(!hw->aliveness, "sec read: aliveness not asserted\n");
87 return mei_txe_sec_reg_read_silent(hw, offset);
93 * @hw: the txe hardware structure
99 static inline void mei_txe_sec_reg_write_silent(struct mei_txe_hw *hw,
102 mei_txe_reg_write(hw->mem_addr[SEC_BAR], offset, value);
108 * @hw: the txe hardware structure
114 static inline void mei_txe_sec_reg_write(struct mei_txe_hw *hw,
117 WARN(!hw->aliveness, "sec write: aliveness not asserted\n");
118 mei_txe_sec_reg_write_silent(hw, offset, value);
123 * @hw: the txe hardware structure
128 static inline u32 mei_txe_br_reg_read(struct mei_txe_hw *hw,
131 return mei_txe_reg_read(hw->mem_addr[BRIDGE_BAR], offset);
137 * @hw: the txe hardware structure
141 static inline void mei_txe_br_reg_write(struct mei_txe_hw *hw,
144 mei_txe_reg_write(hw->mem_addr[BRIDGE_BAR], offset, value);
164 struct mei_txe_hw *hw = to_txe_hw(dev);
165 bool do_req = hw->aliveness != req;
168 hw->aliveness, req);
171 mei_txe_br_reg_write(hw, SICR_HOST_ALIVENESS_REQ_REG, req);
189 struct mei_txe_hw *hw = to_txe_hw(dev);
192 reg = mei_txe_br_reg_read(hw, SICR_HOST_ALIVENESS_REQ_REG);
206 struct mei_txe_hw *hw = to_txe_hw(dev);
209 reg = mei_txe_br_reg_read(hw, HICR_HOST_ALIVENESS_RESP_REG);
225 struct mei_txe_hw *hw = to_txe_hw(dev);
229 hw->aliveness = mei_txe_aliveness_get(dev);
230 if (hw->aliveness == expected) {
259 struct mei_txe_hw *hw = to_txe_hw(dev);
265 hw->aliveness = mei_txe_aliveness_get(dev);
266 if (hw->aliveness == expected)
270 err = wait_event_timeout(hw->wait_aliveness_resp,
274 hw->aliveness = mei_txe_aliveness_get(dev);
275 ret = hw->aliveness == expected ? 0 : -ETIME;
279 err, hw->aliveness, dev->pg_event);
283 hw->aliveness, dev->pg_event);
326 struct mei_txe_hw *hw = to_txe_hw(dev);
328 return hw->aliveness ? MEI_PG_OFF : MEI_PG_ON;
338 struct mei_txe_hw *hw = to_txe_hw(dev);
341 hintmsk = mei_txe_sec_reg_read(hw, SEC_IPC_HOST_INT_MASK_REG);
343 mei_txe_sec_reg_write(hw, SEC_IPC_HOST_INT_MASK_REG, hintmsk);
350 * @hw: the txe hardware structure
352 static void mei_txe_input_doorbell_set(struct mei_txe_hw *hw)
355 clear_bit(TXE_INTR_IN_READY_BIT, &hw->intr_cause);
356 mei_txe_sec_reg_write(hw, SEC_IPC_INPUT_DOORBELL_REG, 1);
362 * @hw: the txe hardware structure
364 static void mei_txe_output_ready_set(struct mei_txe_hw *hw)
366 mei_txe_br_reg_write(hw,
380 struct mei_txe_hw *hw = to_txe_hw(dev);
383 status = mei_txe_sec_reg_read(hw, SEC_IPC_INPUT_STATUS_REG);
394 struct mei_txe_hw *hw = to_txe_hw(dev);
396 mei_txe_sec_reg_write_silent(hw, SEC_IPC_HOST_INT_STATUS_REG,
398 mei_txe_br_reg_write(hw, HISR_REG, HISR_INT_STS_MSK);
399 mei_txe_br_reg_write(hw, HHISR_REG, IPC_HHIER_MSK);
409 struct mei_txe_hw *hw = to_txe_hw(dev);
411 mei_txe_br_reg_write(hw, HHIER_REG, 0);
412 mei_txe_br_reg_write(hw, HIER_REG, 0);
421 struct mei_txe_hw *hw = to_txe_hw(dev);
423 mei_txe_br_reg_write(hw, HHIER_REG, IPC_HHIER_MSK);
424 mei_txe_br_reg_write(hw, HIER_REG, HIER_INT_EN_MSK);
441 struct mei_txe_hw *hw = to_txe_hw(dev);
442 bool ret = (hw->intr_cause & (TXE_INTR_READINESS |
450 !!(hw->intr_cause & TXE_INTR_IN_READY),
451 !!(hw->intr_cause & TXE_INTR_READINESS),
452 !!(hw->intr_cause & TXE_INTR_ALIVENESS),
453 !!(hw->intr_cause & TXE_INTR_OUT_DB));
469 struct mei_txe_hw *hw = to_txe_hw(dev);
471 mei_txe_sec_reg_write(hw, SEC_IPC_INPUT_PAYLOAD_REG +
487 struct mei_txe_hw *hw = to_txe_hw(dev);
489 return mei_txe_br_reg_read(hw,
502 struct mei_txe_hw *hw = to_txe_hw(dev);
504 mei_txe_br_reg_write(hw,
516 struct mei_txe_hw *hw = to_txe_hw(dev);
518 mei_txe_br_reg_write(hw, SICR_HOST_IPC_READINESS_REQ_REG,
531 struct mei_txe_hw *hw = to_txe_hw(dev);
533 return mei_txe_br_reg_read(hw, HICR_SEC_IPC_READINESS_REG);
551 * mei_txe_hw_is_ready - check if the hw is ready
573 struct mei_txe_hw *hw = to_txe_hw(dev);
574 u32 reg = mei_txe_br_reg_read(hw, HICR_SEC_IPC_READINESS_REG);
651 struct mei_txe_hw *hw = to_txe_hw(dev);
656 hw->aliveness = mei_txe_aliveness_get(dev);
657 hw->readiness = mei_txe_readiness_get(dev);
660 hw->aliveness, hw->readiness);
677 struct mei_txe_hw *hw = to_txe_hw(dev);
696 if (WARN(!hw->aliveness, "txe write: aliveness not asserted\n"))
725 hw->slots = 0;
728 mei_txe_input_doorbell_set(hw);
754 struct mei_txe_hw *hw = to_txe_hw(dev);
756 return hw->slots;
797 struct mei_txe_hw *hw = to_txe_hw(dev);
823 mei_txe_output_ready_set(hw);
837 struct mei_txe_hw *hw = to_txe_hw(dev);
844 (void)mei_txe_sec_reg_read_silent(hw, SEC_IPC_INPUT_DOORBELL_REG);
847 hw->aliveness = mei_txe_aliveness_get(dev);
857 if (aliveness_req != hw->aliveness)
891 struct mei_txe_hw *hw = to_txe_hw(dev);
908 hisr = mei_txe_br_reg_read(hw, HISR_REG);
910 mei_txe_br_reg_write(hw, HISR_REG, HISR_INT_2_STS);
913 clear_bit(TXE_INTR_OUT_DB_BIT, &hw->intr_cause);
928 mei_txe_output_ready_set(hw);
948 struct mei_txe_hw *hw = to_txe_hw(dev);
956 hhisr = mei_txe_br_reg_read(hw, HHISR_REG);
961 hisr = mei_txe_br_reg_read(hw, HISR_REG);
965 ipc_isr = mei_txe_sec_reg_read_silent(hw,
976 hw->intr_cause |= hisr & HISR_INT_STS_MSK;
978 hw->intr_cause |= TXE_INTR_IN_READY;
984 mei_txe_sec_reg_write_silent(hw,
986 mei_txe_br_reg_write(hw, HISR_REG, hisr);
987 mei_txe_br_reg_write(hw, HHISR_REG, hhisr);
1024 struct mei_txe_hw *hw = to_txe_hw(dev);
1030 mei_txe_br_reg_read(hw, HHISR_REG),
1031 mei_txe_br_reg_read(hw, HISR_REG),
1032 mei_txe_sec_reg_read_silent(hw, SEC_IPC_HOST_INT_STATUS_REG));
1045 hw->aliveness = mei_txe_aliveness_get(dev);
1046 hw->readiness = mei_txe_readiness_get(dev);
1052 if (test_and_clear_bit(TXE_INTR_READINESS_BIT, &hw->intr_cause)) {
1056 if (mei_txe_readiness_is_sec_rdy(hw->readiness)) {
1078 if (test_and_clear_bit(TXE_INTR_ALIVENESS_BIT, &hw->intr_cause)) {
1081 "Aliveness Interrupt: Status: %d\n", hw->aliveness);
1083 if (waitqueue_active(&hw->wait_aliveness_resp))
1084 wake_up(&hw->wait_aliveness_resp);
1092 if (test_and_clear_bit(TXE_INTR_OUT_DB_BIT, &hw->intr_cause)) {
1104 if (test_and_clear_bit(TXE_INTR_IN_READY_BIT, &hw->intr_cause)) {
1106 hw->slots = dev->hbuf_depth;
1109 if (hw->aliveness && dev->hbuf_is_ready) {
1171 struct mei_txe_hw *hw;
1180 hw = to_txe_hw(dev);
1182 init_waitqueue_head(&hw->wait_aliveness_resp);
1198 struct mei_txe_hw *hw = to_txe_hw(dev);
1223 mei_txe_br_reg_write(hw, SATT2_SAP_SIZE_REG, range);
1224 mei_txe_br_reg_write(hw, SATT2_BRG_BA_LSB_REG, lo32);
1225 mei_txe_br_reg_write(hw, SATT2_CTRL_REG, ctrl);