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