mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-02 16:44:59 +00:00

The CRU block on the Renesas RZ/G3E SoC is similar to the one found on the Renesas RZ/G2L SoC, with the following differences: - Additional registers rzg3e_cru_regs. - A different irq handler rzg3e_cru_irq. - A different rzg3e_cru_csi2_setup. - A different max input width. - Additional stride register. Introduce rzg3e_cru_info struct to handle differences between RZ/G2L and RZ/G3E and related RZ/G3E functions: - rzg3e_cru_enable_interrupts() - rzg3e_cru_enable_interrupts() - rz3e_fifo_empty() - rzg3e_cru_csi2_setup() - rzg3e_cru_get_current_slot() Add then support for the RZ/G3E SoC CRU block with the new compatible string "renesas,r9a09g047-cru". Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com> Link: https://lore.kernel.org/r/20250411170624.472257-18-tommaso.merciai.xr@bp.renesas.com Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl>
112 lines
3.8 KiB
C
112 lines
3.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* rzg2l-cru-regs.h--RZ/G2L (and alike SoCs) CRU Registers Definitions
|
|
*
|
|
* Copyright (C) 2024 Renesas Electronics Corp.
|
|
*/
|
|
|
|
#ifndef __RZG2L_CRU_REGS_H__
|
|
#define __RZG2L_CRU_REGS_H__
|
|
|
|
/* HW CRU Registers Definition */
|
|
|
|
#define CRUnCTRL_VINSEL(x) ((x) << 0)
|
|
|
|
#define CRUnIE_EFE BIT(17)
|
|
|
|
#define CRUnIE2_FSxE(x) BIT(((x) * 3))
|
|
#define CRUnIE2_FExE(x) BIT(((x) * 3) + 1)
|
|
|
|
#define CRUnINTS_SFS BIT(16)
|
|
|
|
#define CRUnINTS2_FSxS(x) BIT(((x) * 3))
|
|
|
|
#define CRUnRST_VRESETN BIT(0)
|
|
|
|
/* Memory Bank Base Address (Lower) Register for CRU Image Data */
|
|
#define AMnMBxADDRL(x) (AMnMB1ADDRL + (x) * 2)
|
|
|
|
/* Memory Bank Base Address (Higher) Register for CRU Image Data */
|
|
#define AMnMBxADDRH(x) (AMnMB1ADDRH + (x) * 2)
|
|
|
|
#define AMnMBVALID_MBVALID(x) GENMASK(x, 0)
|
|
|
|
#define AMnMBS_MBSTS 0x7
|
|
|
|
#define AMnAXIATTR_AXILEN_MASK GENMASK(3, 0)
|
|
#define AMnAXIATTR_AXILEN (0xf)
|
|
|
|
#define AMnFIFOPNTR_FIFOWPNTR GENMASK(7, 0)
|
|
#define AMnFIFOPNTR_FIFOWPNTR_B0 AMnFIFOPNTR_FIFOWPNTR
|
|
#define AMnFIFOPNTR_FIFOWPNTR_B1 GENMASK(15, 8)
|
|
#define AMnFIFOPNTR_FIFORPNTR_Y GENMASK(23, 16)
|
|
#define AMnFIFOPNTR_FIFORPNTR_B0 AMnFIFOPNTR_FIFORPNTR_Y
|
|
#define AMnFIFOPNTR_FIFORPNTR_B1 GENMASK(31, 24)
|
|
|
|
#define AMnIS_IS_MASK GENMASK(14, 7)
|
|
#define AMnIS_IS(x) ((x) << 7)
|
|
|
|
#define AMnAXISTP_AXI_STOP BIT(0)
|
|
|
|
#define AMnAXISTPACK_AXI_STOP_ACK BIT(0)
|
|
|
|
#define ICnEN_ICEN BIT(0)
|
|
|
|
#define ICnSVC_SVC0(x) (x)
|
|
#define ICnSVC_SVC1(x) ((x) << 4)
|
|
#define ICnSVC_SVC2(x) ((x) << 8)
|
|
#define ICnSVC_SVC3(x) ((x) << 12)
|
|
|
|
#define ICnMC_CSCTHR BIT(5)
|
|
#define ICnMC_INF(x) ((x) << 16)
|
|
#define ICnMC_VCSEL(x) ((x) << 22)
|
|
#define ICnMC_INF_MASK GENMASK(21, 16)
|
|
|
|
#define ICnMS_IA BIT(2)
|
|
|
|
#define ICnDMR_YCMODE_UYVY (1 << 4)
|
|
|
|
enum rzg2l_cru_common_regs {
|
|
CRUnCTRL, /* CRU Control */
|
|
CRUnIE, /* CRU Interrupt Enable */
|
|
CRUnIE2, /* CRU Interrupt Enable(2) */
|
|
CRUnINTS, /* CRU Interrupt Status */
|
|
CRUnINTS2, /* CRU Interrupt Status(2) */
|
|
CRUnRST, /* CRU Reset */
|
|
AMnMB1ADDRL, /* Bank 1 Address (Lower) for CRU Image Data */
|
|
AMnMB1ADDRH, /* Bank 1 Address (Higher) for CRU Image Data */
|
|
AMnMB2ADDRL, /* Bank 2 Address (Lower) for CRU Image Data */
|
|
AMnMB2ADDRH, /* Bank 2 Address (Higher) for CRU Image Data */
|
|
AMnMB3ADDRL, /* Bank 3 Address (Lower) for CRU Image Data */
|
|
AMnMB3ADDRH, /* Bank 3 Address (Higher) for CRU Image Data */
|
|
AMnMB4ADDRL, /* Bank 4 Address (Lower) for CRU Image Data */
|
|
AMnMB4ADDRH, /* Bank 4 Address (Higher) for CRU Image Data */
|
|
AMnMB5ADDRL, /* Bank 5 Address (Lower) for CRU Image Data */
|
|
AMnMB5ADDRH, /* Bank 5 Address (Higher) for CRU Image Data */
|
|
AMnMB6ADDRL, /* Bank 6 Address (Lower) for CRU Image Data */
|
|
AMnMB6ADDRH, /* Bank 6 Address (Higher) for CRU Image Data */
|
|
AMnMB7ADDRL, /* Bank 7 Address (Lower) for CRU Image Data */
|
|
AMnMB7ADDRH, /* Bank 7 Address (Higher) for CRU Image Data */
|
|
AMnMB8ADDRL, /* Bank 8 Address (Lower) for CRU Image Data */
|
|
AMnMB8ADDRH, /* Bank 8 Address (Higher) for CRU Image Data */
|
|
AMnMBVALID, /* Memory Bank Enable for CRU Image Data */
|
|
AMnMBS, /* Memory Bank Status for CRU Image Data */
|
|
AMnMADRSL, /* VD Memory Address Lower Status Register */
|
|
AMnMADRSH, /* VD Memory Address Higher Status Register */
|
|
AMnAXIATTR, /* AXI Master Transfer Setting Register for CRU Image Data */
|
|
AMnFIFOPNTR, /* AXI Master FIFO Pointer for CRU Image Data */
|
|
AMnAXISTP, /* AXI Master Transfer Stop for CRU Image Data */
|
|
AMnAXISTPACK, /* AXI Master Transfer Stop Status for CRU Image Data */
|
|
AMnIS, /* Image Stride Setting Register */
|
|
ICnEN, /* CRU Image Processing Enable */
|
|
ICnSVCNUM, /* CRU SVC Number Register */
|
|
ICnSVC, /* CRU VC Select Register */
|
|
ICnMC, /* CRU Image Processing Main Control */
|
|
ICnIPMC_C0, /* CRU Image Converter Main Control 0 */
|
|
ICnMS, /* CRU Module Status */
|
|
ICnDMR, /* CRU Data Output Mode */
|
|
RZG2L_CRU_MAX_REG,
|
|
};
|
|
|
|
#endif /* __RZG2L_CRU_REGS_H__ */
|