162306a36Sopenharmony_ci/* SPDX-License-Identifier: MIT */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright © 2013-2021 Intel Corporation
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef _VLV_SIDEBAND_H_
762306a36Sopenharmony_ci#define _VLV_SIDEBAND_H_
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/bitops.h>
1062306a36Sopenharmony_ci#include <linux/types.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#include "vlv_sideband_reg.h"
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_cienum pipe;
1562306a36Sopenharmony_cistruct drm_i915_private;
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_cienum {
1862306a36Sopenharmony_ci	VLV_IOSF_SB_BUNIT,
1962306a36Sopenharmony_ci	VLV_IOSF_SB_CCK,
2062306a36Sopenharmony_ci	VLV_IOSF_SB_CCU,
2162306a36Sopenharmony_ci	VLV_IOSF_SB_DPIO,
2262306a36Sopenharmony_ci	VLV_IOSF_SB_FLISDSI,
2362306a36Sopenharmony_ci	VLV_IOSF_SB_GPIO,
2462306a36Sopenharmony_ci	VLV_IOSF_SB_NC,
2562306a36Sopenharmony_ci	VLV_IOSF_SB_PUNIT,
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_civoid vlv_iosf_sb_get(struct drm_i915_private *i915, unsigned long ports);
2962306a36Sopenharmony_ciu32 vlv_iosf_sb_read(struct drm_i915_private *i915, u8 port, u32 reg);
3062306a36Sopenharmony_civoid vlv_iosf_sb_write(struct drm_i915_private *i915,
3162306a36Sopenharmony_ci		       u8 port, u32 reg, u32 val);
3262306a36Sopenharmony_civoid vlv_iosf_sb_put(struct drm_i915_private *i915, unsigned long ports);
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cistatic inline void vlv_bunit_get(struct drm_i915_private *i915)
3562306a36Sopenharmony_ci{
3662306a36Sopenharmony_ci	vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_BUNIT));
3762306a36Sopenharmony_ci}
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_ciu32 vlv_bunit_read(struct drm_i915_private *i915, u32 reg);
4062306a36Sopenharmony_civoid vlv_bunit_write(struct drm_i915_private *i915, u32 reg, u32 val);
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_cistatic inline void vlv_bunit_put(struct drm_i915_private *i915)
4362306a36Sopenharmony_ci{
4462306a36Sopenharmony_ci	vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_BUNIT));
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic inline void vlv_cck_get(struct drm_i915_private *i915)
4862306a36Sopenharmony_ci{
4962306a36Sopenharmony_ci	vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_CCK));
5062306a36Sopenharmony_ci}
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ciu32 vlv_cck_read(struct drm_i915_private *i915, u32 reg);
5362306a36Sopenharmony_civoid vlv_cck_write(struct drm_i915_private *i915, u32 reg, u32 val);
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_cistatic inline void vlv_cck_put(struct drm_i915_private *i915)
5662306a36Sopenharmony_ci{
5762306a36Sopenharmony_ci	vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_CCK));
5862306a36Sopenharmony_ci}
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistatic inline void vlv_ccu_get(struct drm_i915_private *i915)
6162306a36Sopenharmony_ci{
6262306a36Sopenharmony_ci	vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_CCU));
6362306a36Sopenharmony_ci}
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ciu32 vlv_ccu_read(struct drm_i915_private *i915, u32 reg);
6662306a36Sopenharmony_civoid vlv_ccu_write(struct drm_i915_private *i915, u32 reg, u32 val);
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_cistatic inline void vlv_ccu_put(struct drm_i915_private *i915)
6962306a36Sopenharmony_ci{
7062306a36Sopenharmony_ci	vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_CCU));
7162306a36Sopenharmony_ci}
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cistatic inline void vlv_dpio_get(struct drm_i915_private *i915)
7462306a36Sopenharmony_ci{
7562306a36Sopenharmony_ci	vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_DPIO));
7662306a36Sopenharmony_ci}
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ciu32 vlv_dpio_read(struct drm_i915_private *i915, enum pipe pipe, int reg);
7962306a36Sopenharmony_civoid vlv_dpio_write(struct drm_i915_private *i915,
8062306a36Sopenharmony_ci		    enum pipe pipe, int reg, u32 val);
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_cistatic inline void vlv_dpio_put(struct drm_i915_private *i915)
8362306a36Sopenharmony_ci{
8462306a36Sopenharmony_ci	vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_DPIO));
8562306a36Sopenharmony_ci}
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_cistatic inline void vlv_flisdsi_get(struct drm_i915_private *i915)
8862306a36Sopenharmony_ci{
8962306a36Sopenharmony_ci	vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_FLISDSI));
9062306a36Sopenharmony_ci}
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_ciu32 vlv_flisdsi_read(struct drm_i915_private *i915, u32 reg);
9362306a36Sopenharmony_civoid vlv_flisdsi_write(struct drm_i915_private *i915, u32 reg, u32 val);
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_cistatic inline void vlv_flisdsi_put(struct drm_i915_private *i915)
9662306a36Sopenharmony_ci{
9762306a36Sopenharmony_ci	vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_FLISDSI));
9862306a36Sopenharmony_ci}
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_cistatic inline void vlv_nc_get(struct drm_i915_private *i915)
10162306a36Sopenharmony_ci{
10262306a36Sopenharmony_ci	vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_NC));
10362306a36Sopenharmony_ci}
10462306a36Sopenharmony_ci
10562306a36Sopenharmony_ciu32 vlv_nc_read(struct drm_i915_private *i915, u8 addr);
10662306a36Sopenharmony_ci
10762306a36Sopenharmony_cistatic inline void vlv_nc_put(struct drm_i915_private *i915)
10862306a36Sopenharmony_ci{
10962306a36Sopenharmony_ci	vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_NC));
11062306a36Sopenharmony_ci}
11162306a36Sopenharmony_ci
11262306a36Sopenharmony_cistatic inline void vlv_punit_get(struct drm_i915_private *i915)
11362306a36Sopenharmony_ci{
11462306a36Sopenharmony_ci	vlv_iosf_sb_get(i915, BIT(VLV_IOSF_SB_PUNIT));
11562306a36Sopenharmony_ci}
11662306a36Sopenharmony_ci
11762306a36Sopenharmony_ciu32 vlv_punit_read(struct drm_i915_private *i915, u32 addr);
11862306a36Sopenharmony_ciint vlv_punit_write(struct drm_i915_private *i915, u32 addr, u32 val);
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_cistatic inline void vlv_punit_put(struct drm_i915_private *i915)
12162306a36Sopenharmony_ci{
12262306a36Sopenharmony_ci	vlv_iosf_sb_put(i915, BIT(VLV_IOSF_SB_PUNIT));
12362306a36Sopenharmony_ci}
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_ci#endif /* _VLV_SIDEBAND_H_ */
126