1 1.3 riastrad /* $NetBSD: intel_sideband.h,v 1.3 2021/12/19 11:38:04 riastradh Exp $ */ 2 1.1 riastrad 3 1.1 riastrad /* SPDX-License-Identifier: MIT */ 4 1.1 riastrad 5 1.1 riastrad #ifndef _INTEL_SIDEBAND_H_ 6 1.1 riastrad #define _INTEL_SIDEBAND_H_ 7 1.1 riastrad 8 1.1 riastrad #include <linux/bitops.h> 9 1.1 riastrad #include <linux/types.h> 10 1.1 riastrad 11 1.3 riastrad #include <sys/file.h> 12 1.3 riastrad #define pipe pipe_drmhack /* see intel_display.h */ 13 1.3 riastrad 14 1.1 riastrad struct drm_i915_private; 15 1.1 riastrad enum pipe; 16 1.1 riastrad 17 1.1 riastrad enum intel_sbi_destination { 18 1.1 riastrad SBI_ICLK, 19 1.1 riastrad SBI_MPHY, 20 1.1 riastrad }; 21 1.1 riastrad 22 1.1 riastrad enum { 23 1.1 riastrad VLV_IOSF_SB_BUNIT, 24 1.1 riastrad VLV_IOSF_SB_CCK, 25 1.1 riastrad VLV_IOSF_SB_CCU, 26 1.1 riastrad VLV_IOSF_SB_DPIO, 27 1.1 riastrad VLV_IOSF_SB_FLISDSI, 28 1.1 riastrad VLV_IOSF_SB_GPIO, 29 1.1 riastrad VLV_IOSF_SB_NC, 30 1.1 riastrad VLV_IOSF_SB_PUNIT, 31 1.1 riastrad }; 32 1.1 riastrad 33 1.1 riastrad void vlv_iosf_sb_get(struct drm_i915_private *i915, unsigned long ports); 34 1.1 riastrad u32 vlv_iosf_sb_read(struct drm_i915_private *i915, u8 port, u32 reg); 35 1.1 riastrad void vlv_iosf_sb_write(struct drm_i915_private *i915, 36 1.1 riastrad u8 port, u32 reg, u32 val); 37 1.1 riastrad void vlv_iosf_sb_put(struct drm_i915_private *i915, unsigned long ports); 38 1.1 riastrad 39 1.1 riastrad static inline void vlv_bunit_get(struct drm_i915_private *i915) 40 1.1 riastrad { 41 1.1 riastrad vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_BUNIT)); 42 1.1 riastrad } 43 1.1 riastrad 44 1.1 riastrad u32 vlv_bunit_read(struct drm_i915_private *i915, u32 reg); 45 1.1 riastrad void vlv_bunit_write(struct drm_i915_private *i915, u32 reg, u32 val); 46 1.1 riastrad 47 1.1 riastrad static inline void vlv_bunit_put(struct drm_i915_private *i915) 48 1.1 riastrad { 49 1.1 riastrad vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_BUNIT)); 50 1.1 riastrad } 51 1.1 riastrad 52 1.1 riastrad static inline void vlv_cck_get(struct drm_i915_private *i915) 53 1.1 riastrad { 54 1.1 riastrad vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_CCK)); 55 1.1 riastrad } 56 1.1 riastrad 57 1.1 riastrad u32 vlv_cck_read(struct drm_i915_private *i915, u32 reg); 58 1.1 riastrad void vlv_cck_write(struct drm_i915_private *i915, u32 reg, u32 val); 59 1.1 riastrad 60 1.1 riastrad static inline void vlv_cck_put(struct drm_i915_private *i915) 61 1.1 riastrad { 62 1.1 riastrad vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_CCK)); 63 1.1 riastrad } 64 1.1 riastrad 65 1.1 riastrad static inline void vlv_ccu_get(struct drm_i915_private *i915) 66 1.1 riastrad { 67 1.1 riastrad vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_CCU)); 68 1.1 riastrad } 69 1.1 riastrad 70 1.1 riastrad u32 vlv_ccu_read(struct drm_i915_private *i915, u32 reg); 71 1.1 riastrad void vlv_ccu_write(struct drm_i915_private *i915, u32 reg, u32 val); 72 1.1 riastrad 73 1.1 riastrad static inline void vlv_ccu_put(struct drm_i915_private *i915) 74 1.1 riastrad { 75 1.1 riastrad vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_CCU)); 76 1.1 riastrad } 77 1.1 riastrad 78 1.1 riastrad static inline void vlv_dpio_get(struct drm_i915_private *i915) 79 1.1 riastrad { 80 1.1 riastrad vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_DPIO)); 81 1.1 riastrad } 82 1.1 riastrad 83 1.1 riastrad u32 vlv_dpio_read(struct drm_i915_private *i915, enum pipe pipe, int reg); 84 1.1 riastrad void vlv_dpio_write(struct drm_i915_private *i915, 85 1.1 riastrad enum pipe pipe, int reg, u32 val); 86 1.1 riastrad 87 1.1 riastrad static inline void vlv_dpio_put(struct drm_i915_private *i915) 88 1.1 riastrad { 89 1.1 riastrad vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_DPIO)); 90 1.1 riastrad } 91 1.1 riastrad 92 1.1 riastrad static inline void vlv_flisdsi_get(struct drm_i915_private *i915) 93 1.1 riastrad { 94 1.1 riastrad vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_FLISDSI)); 95 1.1 riastrad } 96 1.1 riastrad 97 1.1 riastrad u32 vlv_flisdsi_read(struct drm_i915_private *i915, u32 reg); 98 1.1 riastrad void vlv_flisdsi_write(struct drm_i915_private *i915, u32 reg, u32 val); 99 1.1 riastrad 100 1.1 riastrad static inline void vlv_flisdsi_put(struct drm_i915_private *i915) 101 1.1 riastrad { 102 1.1 riastrad vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_FLISDSI)); 103 1.1 riastrad } 104 1.1 riastrad 105 1.1 riastrad static inline void vlv_nc_get(struct drm_i915_private *i915) 106 1.1 riastrad { 107 1.1 riastrad vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_NC)); 108 1.1 riastrad } 109 1.1 riastrad 110 1.1 riastrad u32 vlv_nc_read(struct drm_i915_private *i915, u8 addr); 111 1.1 riastrad 112 1.1 riastrad static inline void vlv_nc_put(struct drm_i915_private *i915) 113 1.1 riastrad { 114 1.1 riastrad vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_NC)); 115 1.1 riastrad } 116 1.1 riastrad 117 1.1 riastrad static inline void vlv_punit_get(struct drm_i915_private *i915) 118 1.1 riastrad { 119 1.1 riastrad vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_PUNIT)); 120 1.1 riastrad } 121 1.1 riastrad 122 1.1 riastrad u32 vlv_punit_read(struct drm_i915_private *i915, u32 addr); 123 1.1 riastrad int vlv_punit_write(struct drm_i915_private *i915, u32 addr, u32 val); 124 1.1 riastrad 125 1.1 riastrad static inline void vlv_punit_put(struct drm_i915_private *i915) 126 1.1 riastrad { 127 1.1 riastrad vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_PUNIT)); 128 1.1 riastrad } 129 1.1 riastrad 130 1.1 riastrad u32 intel_sbi_read(struct drm_i915_private *i915, u16 reg, 131 1.1 riastrad enum intel_sbi_destination destination); 132 1.1 riastrad void intel_sbi_write(struct drm_i915_private *i915, u16 reg, u32 value, 133 1.1 riastrad enum intel_sbi_destination destination); 134 1.1 riastrad 135 1.1 riastrad int sandybridge_pcode_read(struct drm_i915_private *i915, u32 mbox, 136 1.1 riastrad u32 *val, u32 *val1); 137 1.1 riastrad int sandybridge_pcode_write_timeout(struct drm_i915_private *i915, u32 mbox, 138 1.1 riastrad u32 val, int fast_timeout_us, 139 1.1 riastrad int slow_timeout_ms); 140 1.1 riastrad #define sandybridge_pcode_write(i915, mbox, val) \ 141 1.1 riastrad sandybridge_pcode_write_timeout(i915, mbox, val, 500, 0) 142 1.1 riastrad 143 1.1 riastrad int skl_pcode_request(struct drm_i915_private *i915, u32 mbox, u32 request, 144 1.1 riastrad u32 reply_mask, u32 reply, int timeout_base_ms); 145 1.1 riastrad 146 1.1 riastrad #endif /* _INTEL_SIDEBAND_H */ 147