1*8393253bSJani Nikula /* SPDX-License-Identifier: MIT */ 2*8393253bSJani Nikula /* Copyright © 2025 Intel Corporation */ 3*8393253bSJani Nikula 4*8393253bSJani Nikula #ifndef _VLV_SIDEBAND_H_ 5*8393253bSJani Nikula #define _VLV_SIDEBAND_H_ 6*8393253bSJani Nikula 7*8393253bSJani Nikula #include <linux/bitops.h> 8*8393253bSJani Nikula #include <linux/types.h> 9*8393253bSJani Nikula 10*8393253bSJani Nikula #include "vlv_iosf_sb.h" 11*8393253bSJani Nikula #include "vlv_iosf_sb_reg.h" 12*8393253bSJani Nikula 13*8393253bSJani Nikula enum dpio_phy; 14*8393253bSJani Nikula struct drm_i915_private; 15*8393253bSJani Nikula 16*8393253bSJani Nikula static inline void vlv_bunit_get(struct drm_i915_private *i915) 17*8393253bSJani Nikula { 18*8393253bSJani Nikula vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_BUNIT)); 19*8393253bSJani Nikula } 20*8393253bSJani Nikula 21*8393253bSJani Nikula static inline u32 vlv_bunit_read(struct drm_i915_private *i915, u32 reg) 22*8393253bSJani Nikula { 23*8393253bSJani Nikula return vlv_iosf_sb_read(i915, VLV_IOSF_SB_BUNIT, reg); 24*8393253bSJani Nikula } 25*8393253bSJani Nikula 26*8393253bSJani Nikula static inline void vlv_bunit_write(struct drm_i915_private *i915, u32 reg, u32 val) 27*8393253bSJani Nikula { 28*8393253bSJani Nikula vlv_iosf_sb_write(i915, VLV_IOSF_SB_BUNIT, reg, val); 29*8393253bSJani Nikula } 30*8393253bSJani Nikula 31*8393253bSJani Nikula static inline void vlv_bunit_put(struct drm_i915_private *i915) 32*8393253bSJani Nikula { 33*8393253bSJani Nikula vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_BUNIT)); 34*8393253bSJani Nikula } 35*8393253bSJani Nikula 36*8393253bSJani Nikula static inline void vlv_cck_get(struct drm_i915_private *i915) 37*8393253bSJani Nikula { 38*8393253bSJani Nikula vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_CCK)); 39*8393253bSJani Nikula } 40*8393253bSJani Nikula 41*8393253bSJani Nikula static inline u32 vlv_cck_read(struct drm_i915_private *i915, u32 reg) 42*8393253bSJani Nikula { 43*8393253bSJani Nikula return vlv_iosf_sb_read(i915, VLV_IOSF_SB_CCK, reg); 44*8393253bSJani Nikula } 45*8393253bSJani Nikula 46*8393253bSJani Nikula static inline void vlv_cck_write(struct drm_i915_private *i915, u32 reg, u32 val) 47*8393253bSJani Nikula { 48*8393253bSJani Nikula vlv_iosf_sb_write(i915, VLV_IOSF_SB_CCK, reg, val); 49*8393253bSJani Nikula } 50*8393253bSJani Nikula 51*8393253bSJani Nikula static inline void vlv_cck_put(struct drm_i915_private *i915) 52*8393253bSJani Nikula { 53*8393253bSJani Nikula vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_CCK)); 54*8393253bSJani Nikula } 55*8393253bSJani Nikula 56*8393253bSJani Nikula static inline void vlv_ccu_get(struct drm_i915_private *i915) 57*8393253bSJani Nikula { 58*8393253bSJani Nikula vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_CCU)); 59*8393253bSJani Nikula } 60*8393253bSJani Nikula 61*8393253bSJani Nikula static inline u32 vlv_ccu_read(struct drm_i915_private *i915, u32 reg) 62*8393253bSJani Nikula { 63*8393253bSJani Nikula return vlv_iosf_sb_read(i915, VLV_IOSF_SB_CCU, reg); 64*8393253bSJani Nikula } 65*8393253bSJani Nikula 66*8393253bSJani Nikula static inline void vlv_ccu_write(struct drm_i915_private *i915, u32 reg, u32 val) 67*8393253bSJani Nikula { 68*8393253bSJani Nikula vlv_iosf_sb_write(i915, VLV_IOSF_SB_CCU, reg, val); 69*8393253bSJani Nikula } 70*8393253bSJani Nikula 71*8393253bSJani Nikula static inline void vlv_ccu_put(struct drm_i915_private *i915) 72*8393253bSJani Nikula { 73*8393253bSJani Nikula vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_CCU)); 74*8393253bSJani Nikula } 75*8393253bSJani Nikula 76*8393253bSJani Nikula static inline void vlv_dpio_get(struct drm_i915_private *i915) 77*8393253bSJani Nikula { 78*8393253bSJani Nikula vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_DPIO) | BIT(VLV_IOSF_SB_DPIO_2)); 79*8393253bSJani Nikula } 80*8393253bSJani Nikula 81*8393253bSJani Nikula #ifdef I915 82*8393253bSJani Nikula u32 vlv_dpio_read(struct drm_i915_private *i915, enum dpio_phy phy, int reg); 83*8393253bSJani Nikula void vlv_dpio_write(struct drm_i915_private *i915, 84*8393253bSJani Nikula enum dpio_phy phy, int reg, u32 val); 85*8393253bSJani Nikula #else 86*8393253bSJani Nikula static inline u32 vlv_dpio_read(struct drm_i915_private *i915, int phy, int reg) 87*8393253bSJani Nikula { 88*8393253bSJani Nikula return 0; 89*8393253bSJani Nikula } 90*8393253bSJani Nikula static inline void vlv_dpio_write(struct drm_i915_private *i915, 91*8393253bSJani Nikula int phy, int reg, u32 val) 92*8393253bSJani Nikula { 93*8393253bSJani Nikula } 94*8393253bSJani Nikula #endif 95*8393253bSJani Nikula 96*8393253bSJani Nikula static inline void vlv_dpio_put(struct drm_i915_private *i915) 97*8393253bSJani Nikula { 98*8393253bSJani Nikula vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_DPIO) | BIT(VLV_IOSF_SB_DPIO_2)); 99*8393253bSJani Nikula } 100*8393253bSJani Nikula 101*8393253bSJani Nikula static inline void vlv_flisdsi_get(struct drm_i915_private *i915) 102*8393253bSJani Nikula { 103*8393253bSJani Nikula vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_FLISDSI)); 104*8393253bSJani Nikula } 105*8393253bSJani Nikula 106*8393253bSJani Nikula static inline u32 vlv_flisdsi_read(struct drm_i915_private *i915, u32 reg) 107*8393253bSJani Nikula { 108*8393253bSJani Nikula return vlv_iosf_sb_read(i915, VLV_IOSF_SB_FLISDSI, reg); 109*8393253bSJani Nikula } 110*8393253bSJani Nikula 111*8393253bSJani Nikula static inline void vlv_flisdsi_write(struct drm_i915_private *i915, u32 reg, u32 val) 112*8393253bSJani Nikula { 113*8393253bSJani Nikula vlv_iosf_sb_write(i915, VLV_IOSF_SB_FLISDSI, reg, val); 114*8393253bSJani Nikula } 115*8393253bSJani Nikula 116*8393253bSJani Nikula static inline void vlv_flisdsi_put(struct drm_i915_private *i915) 117*8393253bSJani Nikula { 118*8393253bSJani Nikula vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_FLISDSI)); 119*8393253bSJani Nikula } 120*8393253bSJani Nikula 121*8393253bSJani Nikula static inline void vlv_nc_get(struct drm_i915_private *i915) 122*8393253bSJani Nikula { 123*8393253bSJani Nikula vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_NC)); 124*8393253bSJani Nikula } 125*8393253bSJani Nikula 126*8393253bSJani Nikula static inline u32 vlv_nc_read(struct drm_i915_private *i915, u8 addr) 127*8393253bSJani Nikula { 128*8393253bSJani Nikula return vlv_iosf_sb_read(i915, VLV_IOSF_SB_NC, addr); 129*8393253bSJani Nikula } 130*8393253bSJani Nikula 131*8393253bSJani Nikula static inline void vlv_nc_put(struct drm_i915_private *i915) 132*8393253bSJani Nikula { 133*8393253bSJani Nikula vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_NC)); 134*8393253bSJani Nikula } 135*8393253bSJani Nikula 136*8393253bSJani Nikula static inline void vlv_punit_get(struct drm_i915_private *i915) 137*8393253bSJani Nikula { 138*8393253bSJani Nikula vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_PUNIT)); 139*8393253bSJani Nikula } 140*8393253bSJani Nikula 141*8393253bSJani Nikula static inline u32 vlv_punit_read(struct drm_i915_private *i915, u32 addr) 142*8393253bSJani Nikula { 143*8393253bSJani Nikula return vlv_iosf_sb_read(i915, VLV_IOSF_SB_PUNIT, addr); 144*8393253bSJani Nikula } 145*8393253bSJani Nikula 146*8393253bSJani Nikula static inline int vlv_punit_write(struct drm_i915_private *i915, u32 addr, u32 val) 147*8393253bSJani Nikula { 148*8393253bSJani Nikula return vlv_iosf_sb_write(i915, VLV_IOSF_SB_PUNIT, addr, val); 149*8393253bSJani Nikula } 150*8393253bSJani Nikula 151*8393253bSJani Nikula static inline void vlv_punit_put(struct drm_i915_private *i915) 152*8393253bSJani Nikula { 153*8393253bSJani Nikula vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_PUNIT)); 154*8393253bSJani Nikula } 155*8393253bSJani Nikula 156*8393253bSJani Nikula #endif /* _VLV_SIDEBAND_H_ */ 157