18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci//
38c2ecf20Sopenharmony_ci// Ingenic JZ47xx IPU - Register definitions and private API
48c2ecf20Sopenharmony_ci//
58c2ecf20Sopenharmony_ci// Copyright (C) 2020, Paul Cercueil <paul@crapouillou.net>
68c2ecf20Sopenharmony_ci
78c2ecf20Sopenharmony_ci#ifndef DRIVERS_GPU_DRM_INGENIC_INGENIC_IPU_H
88c2ecf20Sopenharmony_ci#define DRIVERS_GPU_DRM_INGENIC_INGENIC_IPU_H
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <linux/bitops.h>
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_ci#define JZ_REG_IPU_CTRL			0x00
138c2ecf20Sopenharmony_ci#define JZ_REG_IPU_STATUS		0x04
148c2ecf20Sopenharmony_ci#define JZ_REG_IPU_D_FMT		0x08
158c2ecf20Sopenharmony_ci#define JZ_REG_IPU_Y_ADDR		0x0c
168c2ecf20Sopenharmony_ci#define JZ_REG_IPU_U_ADDR		0x10
178c2ecf20Sopenharmony_ci#define JZ_REG_IPU_V_ADDR		0x14
188c2ecf20Sopenharmony_ci#define JZ_REG_IPU_IN_GS		0x18
198c2ecf20Sopenharmony_ci#define JZ_REG_IPU_Y_STRIDE		0x1c
208c2ecf20Sopenharmony_ci#define JZ_REG_IPU_UV_STRIDE		0x20
218c2ecf20Sopenharmony_ci#define JZ_REG_IPU_OUT_ADDR		0x24
228c2ecf20Sopenharmony_ci#define JZ_REG_IPU_OUT_GS		0x28
238c2ecf20Sopenharmony_ci#define JZ_REG_IPU_OUT_STRIDE		0x2c
248c2ecf20Sopenharmony_ci#define JZ_REG_IPU_RSZ_COEF_INDEX	0x30
258c2ecf20Sopenharmony_ci#define JZ_REG_IPU_CSC_C0_COEF		0x34
268c2ecf20Sopenharmony_ci#define JZ_REG_IPU_CSC_C1_COEF		0x38
278c2ecf20Sopenharmony_ci#define JZ_REG_IPU_CSC_C2_COEF		0x3c
288c2ecf20Sopenharmony_ci#define JZ_REG_IPU_CSC_C3_COEF		0x40
298c2ecf20Sopenharmony_ci#define JZ_REG_IPU_CSC_C4_COEF		0x44
308c2ecf20Sopenharmony_ci#define JZ_REG_IPU_HRSZ_COEF_LUT	0x48
318c2ecf20Sopenharmony_ci#define JZ_REG_IPU_VRSZ_COEF_LUT	0x4c
328c2ecf20Sopenharmony_ci#define JZ_REG_IPU_CSC_OFFSET		0x50
338c2ecf20Sopenharmony_ci#define JZ_REG_IPU_Y_PHY_T_ADDR		0x54
348c2ecf20Sopenharmony_ci#define JZ_REG_IPU_U_PHY_T_ADDR		0x58
358c2ecf20Sopenharmony_ci#define JZ_REG_IPU_V_PHY_T_ADDR		0x5c
368c2ecf20Sopenharmony_ci#define JZ_REG_IPU_OUT_PHY_T_ADDR	0x60
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_ADDR_SEL		BIT(20)
398c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_ZOOM_SEL		BIT(18)
408c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_DFIX_SEL		BIT(17)
418c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_LCDC_SEL		BIT(11)
428c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_SPKG_SEL		BIT(10)
438c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_VSCALE		BIT(9)
448c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_HSCALE		BIT(8)
458c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_STOP		BIT(7)
468c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_RST			BIT(6)
478c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_FM_IRQ_EN		BIT(5)
488c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_CSC_EN		BIT(4)
498c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_VRSZ_EN		BIT(3)
508c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_HRSZ_EN		BIT(2)
518c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_RUN			BIT(1)
528c2ecf20Sopenharmony_ci#define JZ_IPU_CTRL_CHIP_EN		BIT(0)
538c2ecf20Sopenharmony_ci
548c2ecf20Sopenharmony_ci#define JZ_IPU_STATUS_OUT_END		BIT(0)
558c2ecf20Sopenharmony_ci
568c2ecf20Sopenharmony_ci#define JZ_IPU_IN_GS_H_LSB		0x0
578c2ecf20Sopenharmony_ci#define JZ_IPU_IN_GS_W_LSB		0x10
588c2ecf20Sopenharmony_ci#define JZ_IPU_OUT_GS_H_LSB		0x0
598c2ecf20Sopenharmony_ci#define JZ_IPU_OUT_GS_W_LSB		0x10
608c2ecf20Sopenharmony_ci
618c2ecf20Sopenharmony_ci#define JZ_IPU_Y_STRIDE_Y_LSB		0
628c2ecf20Sopenharmony_ci#define JZ_IPU_UV_STRIDE_U_LSB		16
638c2ecf20Sopenharmony_ci#define JZ_IPU_UV_STRIDE_V_LSB		0
648c2ecf20Sopenharmony_ci
658c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_IN_FMT_LSB		0
668c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_IN_FMT_RGB555	(0x0 << JZ_IPU_D_FMT_IN_FMT_LSB)
678c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_IN_FMT_YUV420	(0x0 << JZ_IPU_D_FMT_IN_FMT_LSB)
688c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_IN_FMT_YUV422	(0x1 << JZ_IPU_D_FMT_IN_FMT_LSB)
698c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_IN_FMT_RGB888	(0x2 << JZ_IPU_D_FMT_IN_FMT_LSB)
708c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_IN_FMT_YUV444	(0x2 << JZ_IPU_D_FMT_IN_FMT_LSB)
718c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_IN_FMT_RGB565	(0x3 << JZ_IPU_D_FMT_IN_FMT_LSB)
728c2ecf20Sopenharmony_ci
738c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_YUV_FMT_LSB	2
748c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_YUV_Y1UY0V		(0x0 << JZ_IPU_D_FMT_YUV_FMT_LSB)
758c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_YUV_Y1VY0U		(0x1 << JZ_IPU_D_FMT_YUV_FMT_LSB)
768c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_YUV_UY1VY0		(0x2 << JZ_IPU_D_FMT_YUV_FMT_LSB)
778c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_YUV_VY1UY0		(0x3 << JZ_IPU_D_FMT_YUV_FMT_LSB)
788c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_IN_FMT_YUV411	(0x3 << JZ_IPU_D_FMT_IN_FMT_LSB)
798c2ecf20Sopenharmony_ci
808c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_OUT_FMT_LSB	19
818c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_OUT_FMT_RGB555	(0x0 << JZ_IPU_D_FMT_OUT_FMT_LSB)
828c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_OUT_FMT_RGB565	(0x1 << JZ_IPU_D_FMT_OUT_FMT_LSB)
838c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_OUT_FMT_RGB888	(0x2 << JZ_IPU_D_FMT_OUT_FMT_LSB)
848c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_OUT_FMT_YUV422	(0x3 << JZ_IPU_D_FMT_OUT_FMT_LSB)
858c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_OUT_FMT_RGBAAA	(0x4 << JZ_IPU_D_FMT_OUT_FMT_LSB)
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_RGB_OUT_OFT_LSB	22
888c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_RGB_OUT_OFT_RGB	(0x0 << JZ_IPU_D_FMT_RGB_OUT_OFT_LSB)
898c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_RGB_OUT_OFT_RBG	(0x1 << JZ_IPU_D_FMT_RGB_OUT_OFT_LSB)
908c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_RGB_OUT_OFT_GBR	(0x2 << JZ_IPU_D_FMT_RGB_OUT_OFT_LSB)
918c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_RGB_OUT_OFT_GRB	(0x3 << JZ_IPU_D_FMT_RGB_OUT_OFT_LSB)
928c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_RGB_OUT_OFT_BRG	(0x4 << JZ_IPU_D_FMT_RGB_OUT_OFT_LSB)
938c2ecf20Sopenharmony_ci#define JZ_IPU_D_FMT_RGB_OUT_OFT_BGR	(0x5 << JZ_IPU_D_FMT_RGB_OUT_OFT_LSB)
948c2ecf20Sopenharmony_ci
958c2ecf20Sopenharmony_ci#define JZ4725B_IPU_RSZ_LUT_COEF_LSB	2
968c2ecf20Sopenharmony_ci#define JZ4725B_IPU_RSZ_LUT_COEF_MASK	0x7ff
978c2ecf20Sopenharmony_ci#define JZ4725B_IPU_RSZ_LUT_IN_EN	BIT(1)
988c2ecf20Sopenharmony_ci#define JZ4725B_IPU_RSZ_LUT_OUT_EN	BIT(0)
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_ci#define JZ4760_IPU_RSZ_COEF20_LSB	6
1018c2ecf20Sopenharmony_ci#define JZ4760_IPU_RSZ_COEF31_LSB	17
1028c2ecf20Sopenharmony_ci#define JZ4760_IPU_RSZ_COEF_MASK	0x7ff
1038c2ecf20Sopenharmony_ci#define JZ4760_IPU_RSZ_OFFSET_LSB	1
1048c2ecf20Sopenharmony_ci#define JZ4760_IPU_RSZ_OFFSET_MASK	0x1f
1058c2ecf20Sopenharmony_ci
1068c2ecf20Sopenharmony_ci#define JZ_IPU_CSC_OFFSET_CHROMA_LSB	16
1078c2ecf20Sopenharmony_ci#define JZ_IPU_CSC_OFFSET_LUMA_LSB	16
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ci#endif /* DRIVERS_GPU_DRM_INGENIC_INGENIC_IPU_H */
110