162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only
262306a36Sopenharmony_ci *
362306a36Sopenharmony_ci * Copyright © 2018-2020 Intel Corporation
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef __KMB_PLANE_H__
762306a36Sopenharmony_ci#define __KMB_PLANE_H__
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <drm/drm_fourcc.h>
1062306a36Sopenharmony_ci#include <drm/drm_plane.h>
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci#define LCD_INT_VL0_ERR ((LAYER0_DMA_FIFO_UNDERFLOW) | \
1362306a36Sopenharmony_ci			(LAYER0_DMA_FIFO_OVERFLOW) | \
1462306a36Sopenharmony_ci			(LAYER0_DMA_CB_FIFO_OVERFLOW) | \
1562306a36Sopenharmony_ci			(LAYER0_DMA_CB_FIFO_UNDERFLOW) | \
1662306a36Sopenharmony_ci			(LAYER0_DMA_CR_FIFO_OVERFLOW) | \
1762306a36Sopenharmony_ci			(LAYER0_DMA_CR_FIFO_UNDERFLOW))
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#define LCD_INT_VL1_ERR ((LAYER1_DMA_FIFO_UNDERFLOW) | \
2062306a36Sopenharmony_ci			(LAYER1_DMA_FIFO_OVERFLOW) | \
2162306a36Sopenharmony_ci			(LAYER1_DMA_CB_FIFO_OVERFLOW) | \
2262306a36Sopenharmony_ci			(LAYER1_DMA_CB_FIFO_UNDERFLOW) | \
2362306a36Sopenharmony_ci			(LAYER1_DMA_CR_FIFO_OVERFLOW) | \
2462306a36Sopenharmony_ci			(LAYER1_DMA_CR_FIFO_UNDERFLOW))
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci#define LCD_INT_GL0_ERR (LAYER2_DMA_FIFO_OVERFLOW | LAYER2_DMA_FIFO_UNDERFLOW)
2762306a36Sopenharmony_ci#define LCD_INT_GL1_ERR (LAYER3_DMA_FIFO_OVERFLOW | LAYER3_DMA_FIFO_UNDERFLOW)
2862306a36Sopenharmony_ci#define LCD_INT_VL0 (LAYER0_DMA_DONE | LAYER0_DMA_IDLE | LCD_INT_VL0_ERR)
2962306a36Sopenharmony_ci#define LCD_INT_VL1 (LAYER1_DMA_DONE | LAYER1_DMA_IDLE | LCD_INT_VL1_ERR)
3062306a36Sopenharmony_ci#define LCD_INT_GL0 (LAYER2_DMA_DONE | LAYER2_DMA_IDLE | LCD_INT_GL0_ERR)
3162306a36Sopenharmony_ci#define LCD_INT_GL1 (LAYER3_DMA_DONE | LAYER3_DMA_IDLE | LCD_INT_GL1_ERR)
3262306a36Sopenharmony_ci#define LCD_INT_DMA_ERR (LCD_INT_VL0_ERR | LCD_INT_VL1_ERR \
3362306a36Sopenharmony_ci		| LCD_INT_GL0_ERR | LCD_INT_GL1_ERR)
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci#define POSSIBLE_CRTCS 1
3662306a36Sopenharmony_ci#define to_kmb_plane(x) container_of(x, struct kmb_plane, base_plane)
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci#define POSSIBLE_CRTCS		1
3962306a36Sopenharmony_ci#define KMB_MAX_PLANES		2
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_cienum layer_id {
4262306a36Sopenharmony_ci	LAYER_0,
4362306a36Sopenharmony_ci	LAYER_1,
4462306a36Sopenharmony_ci	LAYER_2,
4562306a36Sopenharmony_ci	LAYER_3,
4662306a36Sopenharmony_ci	/* KMB_MAX_PLANES */
4762306a36Sopenharmony_ci};
4862306a36Sopenharmony_ci
4962306a36Sopenharmony_cienum sub_plane_id {
5062306a36Sopenharmony_ci	Y_PLANE,
5162306a36Sopenharmony_ci	U_PLANE,
5262306a36Sopenharmony_ci	V_PLANE,
5362306a36Sopenharmony_ci	MAX_SUB_PLANES,
5462306a36Sopenharmony_ci};
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_cistruct kmb_plane {
5762306a36Sopenharmony_ci	struct drm_plane base_plane;
5862306a36Sopenharmony_ci	unsigned char id;
5962306a36Sopenharmony_ci};
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_cistruct layer_status {
6262306a36Sopenharmony_ci	bool disable;
6362306a36Sopenharmony_ci	u32 ctrl;
6462306a36Sopenharmony_ci};
6562306a36Sopenharmony_ci
6662306a36Sopenharmony_cistruct disp_cfg {
6762306a36Sopenharmony_ci	unsigned int width;
6862306a36Sopenharmony_ci	unsigned int height;
6962306a36Sopenharmony_ci	unsigned int format;
7062306a36Sopenharmony_ci};
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_cistruct kmb_plane *kmb_plane_init(struct drm_device *drm);
7362306a36Sopenharmony_civoid kmb_plane_destroy(struct drm_plane *plane);
7462306a36Sopenharmony_ci#endif /* __KMB_PLANE_H__ */
75