1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2 /* 3 * Copyright (C) 2025-2026 Intel Corporation 4 */ 5 6 #ifndef __iwl_pcie_utils_h__ 7 #define __iwl_pcie_utils_h__ 8 9 #include "iwl-trans.h" 10 #include "internal.h" 11 12 void iwl_trans_pcie_dump_regs(struct iwl_trans *trans, struct pci_dev *pdev); 13 14 u32 iwl_pcie_read_direct32(struct iwl_trans *trans, u32 reg); 15 int iwl_pcie_poll_direct_bit(struct iwl_trans *trans, 16 u32 addr, u32 mask, int timeout); 17 int iwl_pcie_poll_prph_bit(struct iwl_trans *trans, u32 addr, 18 u32 bits, u32 mask, int timeout); 19 int iwl_pcie_poll_umac_prph_bit(struct iwl_trans *trans, u32 addr, 20 u32 bits, u32 mask, int timeout); 21 int iwl_pcie_poll_umac_prph_bits_no_grab(struct iwl_trans *trans, u32 addr, 22 u32 bits, u32 mask, int timeout); 23 void iwl_pcie_write_prph64_no_grab(struct iwl_trans *trans, u32 ofs, u64 val); 24 void iwl_pcie_write_direct64(struct iwl_trans *trans, u64 reg, u64 value); 25 26 static inline void iwl_pcie_write64(struct iwl_trans *trans, u64 ofs, u64 val) 27 { 28 iwl_trans_pcie_write32(trans, ofs, lower_32_bits(val)); 29 iwl_trans_pcie_write32(trans, ofs + 4, upper_32_bits(val)); 30 } 31 32 static inline void iwl_pcie_write_umac_prph_no_grab(struct iwl_trans *trans, 33 u32 ofs, u32 val) 34 { 35 iwl_pcie_write_prph_no_grab(trans, ofs + trans->mac_cfg->umac_prph_offset, 36 val); 37 } 38 39 static inline void iwl_pcie_set_bits_mask(struct iwl_trans *trans, 40 u32 reg, u32 mask, u32 value) 41 { 42 u32 v; 43 44 #ifdef CONFIG_IWLWIFI_DEBUG 45 WARN_ON_ONCE(value & ~mask); 46 #endif 47 48 v = iwl_trans_pcie_read32(trans, reg); 49 v &= ~mask; 50 v |= value; 51 iwl_trans_pcie_write32(trans, reg, v); 52 } 53 54 static inline void iwl_pcie_clear_bit(struct iwl_trans *trans, 55 u32 reg, u32 mask) 56 { 57 iwl_pcie_set_bits_mask(trans, reg, mask, 0); 58 } 59 60 static inline void iwl_pcie_set_bit(struct iwl_trans *trans, 61 u32 reg, u32 mask) 62 { 63 iwl_pcie_set_bits_mask(trans, reg, mask, mask); 64 } 65 66 #endif /* __iwl_pcie_utils_h__ */ 67