18393253bSJani Nikula /* SPDX-License-Identifier: MIT */ 28393253bSJani Nikula /* Copyright © 2025 Intel Corporation */ 38393253bSJani Nikula 48393253bSJani Nikula #ifndef _VLV_SIDEBAND_H_ 58393253bSJani Nikula #define _VLV_SIDEBAND_H_ 68393253bSJani Nikula 78393253bSJani Nikula #include <linux/bitops.h> 88393253bSJani Nikula #include <linux/types.h> 98393253bSJani Nikula 108393253bSJani Nikula #include "vlv_iosf_sb.h" 118393253bSJani Nikula #include "vlv_iosf_sb_reg.h" 128393253bSJani Nikula 138393253bSJani Nikula enum dpio_phy; 14*bd4d1856SJani Nikula struct drm_device; 158393253bSJani Nikula 16*bd4d1856SJani Nikula static inline void vlv_bunit_get(struct drm_device *drm) 178393253bSJani Nikula { 18*bd4d1856SJani Nikula vlv_iosf_sb_get(drm, BIT(VLV_IOSF_SB_BUNIT)); 198393253bSJani Nikula } 208393253bSJani Nikula 21*bd4d1856SJani Nikula static inline u32 vlv_bunit_read(struct drm_device *drm, u32 reg) 228393253bSJani Nikula { 23*bd4d1856SJani Nikula return vlv_iosf_sb_read(drm, VLV_IOSF_SB_BUNIT, reg); 248393253bSJani Nikula } 258393253bSJani Nikula 26*bd4d1856SJani Nikula static inline void vlv_bunit_write(struct drm_device *drm, u32 reg, u32 val) 278393253bSJani Nikula { 28*bd4d1856SJani Nikula vlv_iosf_sb_write(drm, VLV_IOSF_SB_BUNIT, reg, val); 298393253bSJani Nikula } 308393253bSJani Nikula 31*bd4d1856SJani Nikula static inline void vlv_bunit_put(struct drm_device *drm) 328393253bSJani Nikula { 33*bd4d1856SJani Nikula vlv_iosf_sb_put(drm, BIT(VLV_IOSF_SB_BUNIT)); 348393253bSJani Nikula } 358393253bSJani Nikula 36*bd4d1856SJani Nikula static inline void vlv_cck_get(struct drm_device *drm) 378393253bSJani Nikula { 38*bd4d1856SJani Nikula vlv_iosf_sb_get(drm, BIT(VLV_IOSF_SB_CCK)); 398393253bSJani Nikula } 408393253bSJani Nikula 41*bd4d1856SJani Nikula static inline u32 vlv_cck_read(struct drm_device *drm, u32 reg) 428393253bSJani Nikula { 43*bd4d1856SJani Nikula return vlv_iosf_sb_read(drm, VLV_IOSF_SB_CCK, reg); 448393253bSJani Nikula } 458393253bSJani Nikula 46*bd4d1856SJani Nikula static inline void vlv_cck_write(struct drm_device *drm, u32 reg, u32 val) 478393253bSJani Nikula { 48*bd4d1856SJani Nikula vlv_iosf_sb_write(drm, VLV_IOSF_SB_CCK, reg, val); 498393253bSJani Nikula } 508393253bSJani Nikula 51*bd4d1856SJani Nikula static inline void vlv_cck_put(struct drm_device *drm) 528393253bSJani Nikula { 53*bd4d1856SJani Nikula vlv_iosf_sb_put(drm, BIT(VLV_IOSF_SB_CCK)); 548393253bSJani Nikula } 558393253bSJani Nikula 56*bd4d1856SJani Nikula static inline void vlv_ccu_get(struct drm_device *drm) 578393253bSJani Nikula { 58*bd4d1856SJani Nikula vlv_iosf_sb_get(drm, BIT(VLV_IOSF_SB_CCU)); 598393253bSJani Nikula } 608393253bSJani Nikula 61*bd4d1856SJani Nikula static inline u32 vlv_ccu_read(struct drm_device *drm, u32 reg) 628393253bSJani Nikula { 63*bd4d1856SJani Nikula return vlv_iosf_sb_read(drm, VLV_IOSF_SB_CCU, reg); 648393253bSJani Nikula } 658393253bSJani Nikula 66*bd4d1856SJani Nikula static inline void vlv_ccu_write(struct drm_device *drm, u32 reg, u32 val) 678393253bSJani Nikula { 68*bd4d1856SJani Nikula vlv_iosf_sb_write(drm, VLV_IOSF_SB_CCU, reg, val); 698393253bSJani Nikula } 708393253bSJani Nikula 71*bd4d1856SJani Nikula static inline void vlv_ccu_put(struct drm_device *drm) 728393253bSJani Nikula { 73*bd4d1856SJani Nikula vlv_iosf_sb_put(drm, BIT(VLV_IOSF_SB_CCU)); 748393253bSJani Nikula } 758393253bSJani Nikula 76*bd4d1856SJani Nikula static inline void vlv_dpio_get(struct drm_device *drm) 778393253bSJani Nikula { 78*bd4d1856SJani Nikula vlv_iosf_sb_get(drm, BIT(VLV_IOSF_SB_DPIO) | BIT(VLV_IOSF_SB_DPIO_2)); 798393253bSJani Nikula } 808393253bSJani Nikula 818393253bSJani Nikula #ifdef I915 82*bd4d1856SJani Nikula u32 vlv_dpio_read(struct drm_device *drm, enum dpio_phy phy, int reg); 83*bd4d1856SJani Nikula void vlv_dpio_write(struct drm_device *drm, 848393253bSJani Nikula enum dpio_phy phy, int reg, u32 val); 858393253bSJani Nikula #else 86*bd4d1856SJani Nikula static inline u32 vlv_dpio_read(struct drm_device *drm, int phy, int reg) 878393253bSJani Nikula { 888393253bSJani Nikula return 0; 898393253bSJani Nikula } 90*bd4d1856SJani Nikula static inline void vlv_dpio_write(struct drm_device *drm, 918393253bSJani Nikula int phy, int reg, u32 val) 928393253bSJani Nikula { 938393253bSJani Nikula } 948393253bSJani Nikula #endif 958393253bSJani Nikula 96*bd4d1856SJani Nikula static inline void vlv_dpio_put(struct drm_device *drm) 978393253bSJani Nikula { 98*bd4d1856SJani Nikula vlv_iosf_sb_put(drm, BIT(VLV_IOSF_SB_DPIO) | BIT(VLV_IOSF_SB_DPIO_2)); 998393253bSJani Nikula } 1008393253bSJani Nikula 101*bd4d1856SJani Nikula static inline void vlv_flisdsi_get(struct drm_device *drm) 1028393253bSJani Nikula { 103*bd4d1856SJani Nikula vlv_iosf_sb_get(drm, BIT(VLV_IOSF_SB_FLISDSI)); 1048393253bSJani Nikula } 1058393253bSJani Nikula 106*bd4d1856SJani Nikula static inline u32 vlv_flisdsi_read(struct drm_device *drm, u32 reg) 1078393253bSJani Nikula { 108*bd4d1856SJani Nikula return vlv_iosf_sb_read(drm, VLV_IOSF_SB_FLISDSI, reg); 1098393253bSJani Nikula } 1108393253bSJani Nikula 111*bd4d1856SJani Nikula static inline void vlv_flisdsi_write(struct drm_device *drm, u32 reg, u32 val) 1128393253bSJani Nikula { 113*bd4d1856SJani Nikula vlv_iosf_sb_write(drm, VLV_IOSF_SB_FLISDSI, reg, val); 1148393253bSJani Nikula } 1158393253bSJani Nikula 116*bd4d1856SJani Nikula static inline void vlv_flisdsi_put(struct drm_device *drm) 1178393253bSJani Nikula { 118*bd4d1856SJani Nikula vlv_iosf_sb_put(drm, BIT(VLV_IOSF_SB_FLISDSI)); 1198393253bSJani Nikula } 1208393253bSJani Nikula 121*bd4d1856SJani Nikula static inline void vlv_nc_get(struct drm_device *drm) 1228393253bSJani Nikula { 123*bd4d1856SJani Nikula vlv_iosf_sb_get(drm, BIT(VLV_IOSF_SB_NC)); 1248393253bSJani Nikula } 1258393253bSJani Nikula 126*bd4d1856SJani Nikula static inline u32 vlv_nc_read(struct drm_device *drm, u8 addr) 1278393253bSJani Nikula { 128*bd4d1856SJani Nikula return vlv_iosf_sb_read(drm, VLV_IOSF_SB_NC, addr); 1298393253bSJani Nikula } 1308393253bSJani Nikula 131*bd4d1856SJani Nikula static inline void vlv_nc_put(struct drm_device *drm) 1328393253bSJani Nikula { 133*bd4d1856SJani Nikula vlv_iosf_sb_put(drm, BIT(VLV_IOSF_SB_NC)); 1348393253bSJani Nikula } 1358393253bSJani Nikula 136*bd4d1856SJani Nikula static inline void vlv_punit_get(struct drm_device *drm) 1378393253bSJani Nikula { 138*bd4d1856SJani Nikula vlv_iosf_sb_get(drm, BIT(VLV_IOSF_SB_PUNIT)); 1398393253bSJani Nikula } 1408393253bSJani Nikula 141*bd4d1856SJani Nikula static inline u32 vlv_punit_read(struct drm_device *drm, u32 addr) 1428393253bSJani Nikula { 143*bd4d1856SJani Nikula return vlv_iosf_sb_read(drm, VLV_IOSF_SB_PUNIT, addr); 1448393253bSJani Nikula } 1458393253bSJani Nikula 146*bd4d1856SJani Nikula static inline int vlv_punit_write(struct drm_device *drm, u32 addr, u32 val) 1478393253bSJani Nikula { 148*bd4d1856SJani Nikula return vlv_iosf_sb_write(drm, VLV_IOSF_SB_PUNIT, addr, val); 1498393253bSJani Nikula } 1508393253bSJani Nikula 151*bd4d1856SJani Nikula static inline void vlv_punit_put(struct drm_device *drm) 1528393253bSJani Nikula { 153*bd4d1856SJani Nikula vlv_iosf_sb_put(drm, BIT(VLV_IOSF_SB_PUNIT)); 1548393253bSJani Nikula } 1558393253bSJani Nikula 1568393253bSJani Nikula #endif /* _VLV_SIDEBAND_H_ */ 157