1 /* SPDX-License-Identifier: MIT */
2 /*
3 * Copyright © 2013-2021 Intel Corporation
4 */
5
6 #ifndef _VLV_SIDEBAND_H_
7 #define _VLV_SIDEBAND_H_
8
9 #include <linux/bitops.h>
10 #include <linux/types.h>
11
12 enum pipe;
13 struct drm_i915_private;
14
15 enum {
16 VLV_IOSF_SB_BUNIT,
17 VLV_IOSF_SB_CCK,
18 VLV_IOSF_SB_CCU,
19 VLV_IOSF_SB_DPIO,
20 VLV_IOSF_SB_FLISDSI,
21 VLV_IOSF_SB_GPIO,
22 VLV_IOSF_SB_NC,
23 VLV_IOSF_SB_PUNIT,
24 };
25
26 void vlv_iosf_sb_get(struct drm_i915_private *i915, unsigned long ports);
27 u32 vlv_iosf_sb_read(struct drm_i915_private *i915, u8 port, u32 reg);
28 void vlv_iosf_sb_write(struct drm_i915_private *i915,
29 u8 port, u32 reg, u32 val);
30 void vlv_iosf_sb_put(struct drm_i915_private *i915, unsigned long ports);
31
vlv_bunit_get(struct drm_i915_private * i915)32 static inline void vlv_bunit_get(struct drm_i915_private *i915)
33 {
34 vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_BUNIT));
35 }
36
37 u32 vlv_bunit_read(struct drm_i915_private *i915, u32 reg);
38 void vlv_bunit_write(struct drm_i915_private *i915, u32 reg, u32 val);
39
vlv_bunit_put(struct drm_i915_private * i915)40 static inline void vlv_bunit_put(struct drm_i915_private *i915)
41 {
42 vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_BUNIT));
43 }
44
vlv_cck_get(struct drm_i915_private * i915)45 static inline void vlv_cck_get(struct drm_i915_private *i915)
46 {
47 vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_CCK));
48 }
49
50 u32 vlv_cck_read(struct drm_i915_private *i915, u32 reg);
51 void vlv_cck_write(struct drm_i915_private *i915, u32 reg, u32 val);
52
vlv_cck_put(struct drm_i915_private * i915)53 static inline void vlv_cck_put(struct drm_i915_private *i915)
54 {
55 vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_CCK));
56 }
57
vlv_ccu_get(struct drm_i915_private * i915)58 static inline void vlv_ccu_get(struct drm_i915_private *i915)
59 {
60 vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_CCU));
61 }
62
63 u32 vlv_ccu_read(struct drm_i915_private *i915, u32 reg);
64 void vlv_ccu_write(struct drm_i915_private *i915, u32 reg, u32 val);
65
vlv_ccu_put(struct drm_i915_private * i915)66 static inline void vlv_ccu_put(struct drm_i915_private *i915)
67 {
68 vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_CCU));
69 }
70
vlv_dpio_get(struct drm_i915_private * i915)71 static inline void vlv_dpio_get(struct drm_i915_private *i915)
72 {
73 vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_DPIO));
74 }
75
76 u32 vlv_dpio_read(struct drm_i915_private *i915, enum pipe pipe, int reg);
77 void vlv_dpio_write(struct drm_i915_private *i915,
78 enum pipe pipe, int reg, u32 val);
79
vlv_dpio_put(struct drm_i915_private * i915)80 static inline void vlv_dpio_put(struct drm_i915_private *i915)
81 {
82 vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_DPIO));
83 }
84
vlv_flisdsi_get(struct drm_i915_private * i915)85 static inline void vlv_flisdsi_get(struct drm_i915_private *i915)
86 {
87 vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_FLISDSI));
88 }
89
90 u32 vlv_flisdsi_read(struct drm_i915_private *i915, u32 reg);
91 void vlv_flisdsi_write(struct drm_i915_private *i915, u32 reg, u32 val);
92
vlv_flisdsi_put(struct drm_i915_private * i915)93 static inline void vlv_flisdsi_put(struct drm_i915_private *i915)
94 {
95 vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_FLISDSI));
96 }
97
vlv_nc_get(struct drm_i915_private * i915)98 static inline void vlv_nc_get(struct drm_i915_private *i915)
99 {
100 vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_NC));
101 }
102
103 u32 vlv_nc_read(struct drm_i915_private *i915, u8 addr);
104
vlv_nc_put(struct drm_i915_private * i915)105 static inline void vlv_nc_put(struct drm_i915_private *i915)
106 {
107 vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_NC));
108 }
109
vlv_punit_get(struct drm_i915_private * i915)110 static inline void vlv_punit_get(struct drm_i915_private *i915)
111 {
112 vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_PUNIT));
113 }
114
115 u32 vlv_punit_read(struct drm_i915_private *i915, u32 addr);
116 int vlv_punit_write(struct drm_i915_private *i915, u32 addr, u32 val);
117
vlv_punit_put(struct drm_i915_private * i915)118 static inline void vlv_punit_put(struct drm_i915_private *i915)
119 {
120 vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_PUNIT));
121 }
122
123 #endif /* _VLV_SIDEBAND_H_ */
124