Resguardo inicial

This commit is contained in:
lastdragon
2026-09-06 12:53:21 -06:00
parent 662efe3c2a
commit ad2088d178
94853 changed files with 43200404 additions and 0 deletions
@@ -0,0 +1,14 @@
# SPDX-License-Identifier: GPL-2.0
config VIDEO_E5010_JPEG_ENC
tristate "Imagination E5010 JPEG Encoder Driver"
depends on VIDEO_DEV
depends on ARCH_K3 || COMPILE_TEST
select VIDEOBUF2_DMA_CONTIG
select VIDEOBUF2_VMALLOC
select V4L2_MEM2MEM_DEV
select V4L2_JPEG_HELPER
help
This is a video4linux2 M2M driver for Imagination E5010 JPEG encoder,
which supports JPEG and MJPEG baseline encoding of YUV422 and YUV420
semiplanar video formats, with resolution ranging from 64x64 to 8K x 8K
pixels. The module will be named as e5010_jpeg_enc.
@@ -0,0 +1,3 @@
# SPDX-License-Identifier: GPL-2.0
e5010_jpeg_enc-objs := e5010-jpeg-enc-hw.o e5010-jpeg-enc.o
obj-$(CONFIG_VIDEO_E5010_JPEG_ENC) += e5010_jpeg_enc.o
@@ -0,0 +1,585 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Imagination E5010 JPEG Encoder driver.
*
* Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
*
* Author: David Huang <d-huang@ti.com>
* Author: Devarsh Thakkar <devarsht@ti.com>
*/
#ifndef _E5010_CORE_REGS_H
#define _E5010_CORE_REGS_H
#define JASPER_CORE_ID_OFFSET (0x0000)
#define JASPER_CORE_ID_CR_GROUP_ID_MASK (0xFF000000)
#define JASPER_CORE_ID_CR_GROUP_ID_SHIFT (24)
#define JASPER_CORE_ID_CR_CORE_ID_MASK (0x00FF0000)
#define JASPER_CORE_ID_CR_CORE_ID_SHIFT (16)
#define JASPER_CORE_ID_CR_UNIQUE_NUM_MASK (0x0000FFF8)
#define JASPER_CORE_ID_CR_UNIQUE_NUM_SHIFT (3)
#define JASPER_CORE_ID_CR_PELS_PER_CYCLE_MASK (0x00000007)
#define JASPER_CORE_ID_CR_PELS_PER_CYCLE_SHIFT (0)
#define JASPER_CORE_REV_OFFSET (0x0004)
#define JASPER_CORE_REV_CR_JASPER_DESIGNER_MASK (0xFF000000)
#define JASPER_CORE_REV_CR_JASPER_DESIGNER_SHIFT (24)
#define JASPER_CORE_REV_CR_JASPER_MAJOR_REV_MASK (0x00FF0000)
#define JASPER_CORE_REV_CR_JASPER_MAJOR_REV_SHIFT (16)
#define JASPER_CORE_REV_CR_JASPER_MINOR_REV_MASK (0x0000FF00)
#define JASPER_CORE_REV_CR_JASPER_MINOR_REV_SHIFT (8)
#define JASPER_CORE_REV_CR_JASPER_MAINT_REV_MASK (0x000000FF)
#define JASPER_CORE_REV_CR_JASPER_MAINT_REV_SHIFT (0)
#define JASPER_INTERRUPT_MASK_OFFSET (0x0008)
#define JASPER_INTERRUPT_MASK_CR_OUTPUT_ADDRESS_ERROR_ENABLE_MASK (0x00000002)
#define JASPER_INTERRUPT_MASK_CR_OUTPUT_ADDRESS_ERROR_ENABLE_SHIFT (1)
#define JASPER_INTERRUPT_MASK_CR_PICTURE_DONE_ENABLE_MASK (0x00000001)
#define JASPER_INTERRUPT_MASK_CR_PICTURE_DONE_ENABLE_SHIFT (0)
#define JASPER_INTERRUPT_STATUS_OFFSET (0x000C)
#define JASPER_INTERRUPT_STATUS_CR_OUTPUT_ADDRESS_ERROR_IRQ_MASK (0x00000002)
#define JASPER_INTERRUPT_STATUS_CR_OUTPUT_ADDRESS_ERROR_IRQ_SHIFT (1)
#define JASPER_INTERRUPT_STATUS_CR_PICTURE_DONE_IRQ_MASK (0x00000001)
#define JASPER_INTERRUPT_STATUS_CR_PICTURE_DONE_IRQ_SHIFT (0)
#define JASPER_INTERRUPT_CLEAR_OFFSET (0x0010)
#define JASPER_INTERRUPT_CLEAR_CR_OUTPUT_ERROR_CLEAR_MASK (0x00000002)
#define JASPER_INTERRUPT_CLEAR_CR_OUTPUT_ERROR_CLEAR_SHIFT (1)
#define JASPER_INTERRUPT_CLEAR_CR_PICTURE_DONE_CLEAR_MASK (0x00000001)
#define JASPER_INTERRUPT_CLEAR_CR_PICTURE_DONE_CLEAR_SHIFT (0)
#define JASPER_CLK_CONTROL_OFFSET (0x0014)
#define JASPER_CLK_CONTROL_CR_JASPER_AUTO_CLKG_ENABLE_MASK (0x00000002)
#define JASPER_CLK_CONTROL_CR_JASPER_AUTO_CLKG_ENABLE_SHIFT (1)
#define JASPER_CLK_CONTROL_CR_JASPER_MAN_CLKG_ENABLE_MASK (0x00000001)
#define JASPER_CLK_CONTROL_CR_JASPER_MAN_CLKG_ENABLE_SHIFT (0)
#define JASPER_CLK_STATUS_OFFSET (0x0018)
#define JASPER_CLK_STATUS_CR_JASPER_CLKG_STATUS_MASK (0x00000001)
#define JASPER_CLK_STATUS_CR_JASPER_CLKG_STATUS_SHIFT (0)
#define JASPER_RESET_OFFSET (0x001C)
#define JASPER_RESET_CR_SYS_RESET_MASK (0x00000002)
#define JASPER_RESET_CR_SYS_RESET_SHIFT (1)
#define JASPER_RESET_CR_CORE_RESET_MASK (0x00000001)
#define JASPER_RESET_CR_CORE_RESET_SHIFT (0)
#define JASPER_CORE_CTRL_OFFSET (0x0020)
#define JASPER_CORE_CTRL_CR_JASPER_ENCODE_START_MASK (0x00000001)
#define JASPER_CORE_CTRL_CR_JASPER_ENCODE_START_SHIFT (0)
#define JASPER_STATUS_OFFSET (0x0024)
#define JASPER_STATUS_CR_FLUSH_MODE_MASK (0x00000002)
#define JASPER_STATUS_CR_FLUSH_MODE_SHIFT (1)
#define JASPER_STATUS_CR_JASPER_BUSY_MASK (0x00000001)
#define JASPER_STATUS_CR_JASPER_BUSY_SHIFT (0)
#define JASPER_CRC_CLEAR_OFFSET (0x0028)
#define JASPER_CRC_CLEAR_CR_FRONT_END_CRC_CLEAR_MASK (0x00000001)
#define JASPER_CRC_CLEAR_CR_FRONT_END_CRC_CLEAR_SHIFT (0)
#define JASPER_CRC_CLEAR_CR_DCT_CRC_CLEAR_MASK (0x00000002)
#define JASPER_CRC_CLEAR_CR_DCT_CRC_CLEAR_SHIFT (1)
#define JASPER_CRC_CLEAR_CR_ZZ_CRC_CLEAR_MASK (0x00000004)
#define JASPER_CRC_CLEAR_CR_ZZ_CRC_CLEAR_SHIFT (2)
#define JASPER_CRC_CLEAR_CR_QUANT_CRC_CLEAR_MASK (0x00000008)
#define JASPER_CRC_CLEAR_CR_QUANT_CRC_CLEAR_SHIFT (3)
#define JASPER_CRC_CLEAR_CR_ENTROPY_ENCODER_CRC_CLEAR_MASK (0x00000010)
#define JASPER_CRC_CLEAR_CR_ENTROPY_ENCODER_CRC_CLEAR_SHIFT (4)
#define JASPER_CRC_CLEAR_CR_PACKING_BUFFER_CRC_CLEAR_MASK (0x00000020)
#define JASPER_CRC_CLEAR_CR_PACKING_BUFFER_CRC_CLEAR_SHIFT (5)
#define JASPER_INPUT_CTRL0_OFFSET (0x002C)
#define JASPER_INPUT_CTRL0_CR_INPUT_CHROMA_ORDER_MASK (0x01000000)
#define JASPER_INPUT_CTRL0_CR_INPUT_CHROMA_ORDER_SHIFT (24)
#define JASPER_INPUT_CTRL0_CR_INPUT_SUBSAMPLING_MASK (0x00030000)
#define JASPER_INPUT_CTRL0_CR_INPUT_SUBSAMPLING_SHIFT (16)
#define JASPER_INPUT_CTRL0_CR_INPUT_SOURCE_MASK (0x00000004)
#define JASPER_INPUT_CTRL0_CR_INPUT_SOURCE_SHIFT (2)
#define JASPER_INPUT_CTRL1_OFFSET (0x0030)
#define JASPER_INPUT_CTRL1_CR_INPUT_LUMA_STRIDE_MASK (0x1FC00000)
#define JASPER_INPUT_CTRL1_CR_INPUT_LUMA_STRIDE_SHIFT (22)
#define JASPER_INPUT_CTRL1_CR_INPUT_CHROMA_STRIDE_MASK (0x00001FC0)
#define JASPER_INPUT_CTRL1_CR_INPUT_CHROMA_STRIDE_SHIFT (6)
#define JASPER_MMU_CTRL_OFFSET (0x0034)
#define JASPER_MMU_CTRL_CR_JASPER_TILING_SCHEME_MASK (0x00000002)
#define JASPER_MMU_CTRL_CR_JASPER_TILING_SCHEME_SHIFT (1)
#define JASPER_MMU_CTRL_CR_JASPER_TILING_ENABLE_MASK (0x00000001)
#define JASPER_MMU_CTRL_CR_JASPER_TILING_ENABLE_SHIFT (0)
#define JASPER_IMAGE_SIZE_OFFSET (0x0038)
#define JASPER_IMAGE_SIZE_CR_IMAGE_VERTICAL_SIZE_MASK (0x1FFF0000)
#define JASPER_IMAGE_SIZE_CR_IMAGE_VERTICAL_SIZE_SHIFT (16)
#define JASPER_IMAGE_SIZE_CR_IMAGE_HORIZONTAL_SIZE_MASK (0x00001FFF)
#define JASPER_IMAGE_SIZE_CR_IMAGE_HORIZONTAL_SIZE_SHIFT (0)
#define INPUT_LUMA_BASE_OFFSET (0x003C)
#define INPUT_LUMA_BASE_CR_INPUT_LUMA_BASE_MASK (0xFFFFFFC0)
#define INPUT_LUMA_BASE_CR_INPUT_LUMA_BASE_SHIFT (6)
#define INPUT_CHROMA_BASE_OFFSET (0x0040)
#define INPUT_CHROMA_BASE_CR_INPUT_CHROMA_BASE_MASK (0xFFFFFFC0)
#define INPUT_CHROMA_BASE_CR_INPUT_CHROMA_BASE_SHIFT (6)
#define JASPER_OUTPUT_BASE_OFFSET (0x0044)
#define JASPER_OUTPUT_BASE_CR_OUTPUT_BASE_MASK (0xFFFFFFFF)
#define JASPER_OUTPUT_BASE_CR_OUTPUT_BASE_SHIFT (0)
#define JASPER_OUTPUT_SIZE_OFFSET (0x0048)
#define JASPER_OUTPUT_SIZE_CR_OUTPUT_SIZE_MASK (0xFFFFFFFF)
#define JASPER_OUTPUT_SIZE_CR_OUTPUT_SIZE_SHIFT (0)
#define JASPER_OUTPUT_MAX_SIZE_OFFSET (0x004C)
#define JASPER_OUTPUT_MAX_SIZE_CR_OUTPUT_MAX_SIZE_MASK (0xFFFFFFFF)
#define JASPER_OUTPUT_MAX_SIZE_CR_OUTPUT_MAX_SIZE_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE0_OFFSET (0x0050)
#define JASPER_LUMA_QUANTIZATION_TABLE0_CR_LUMA_QUANTIZATION_TABLE_03_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE0_CR_LUMA_QUANTIZATION_TABLE_03_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE0_CR_LUMA_QUANTIZATION_TABLE_02_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE0_CR_LUMA_QUANTIZATION_TABLE_02_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE0_CR_LUMA_QUANTIZATION_TABLE_01_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE0_CR_LUMA_QUANTIZATION_TABLE_01_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE0_CR_LUMA_QUANTIZATION_TABLE_00_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE0_CR_LUMA_QUANTIZATION_TABLE_00_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE1_OFFSET (0x0054)
#define JASPER_LUMA_QUANTIZATION_TABLE1_CR_LUMA_QUANTIZATION_TABLE_07_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE1_CR_LUMA_QUANTIZATION_TABLE_07_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE1_CR_LUMA_QUANTIZATION_TABLE_06_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE1_CR_LUMA_QUANTIZATION_TABLE_06_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE1_CR_LUMA_QUANTIZATION_TABLE_05_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE1_CR_LUMA_QUANTIZATION_TABLE_05_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE1_CR_LUMA_QUANTIZATION_TABLE_04_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE1_CR_LUMA_QUANTIZATION_TABLE_04_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE2_OFFSET (0x0058)
#define JASPER_LUMA_QUANTIZATION_TABLE2_CR_LUMA_QUANTIZATION_TABLE_13_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE2_CR_LUMA_QUANTIZATION_TABLE_13_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE2_CR_LUMA_QUANTIZATION_TABLE_12_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE2_CR_LUMA_QUANTIZATION_TABLE_12_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE2_CR_LUMA_QUANTIZATION_TABLE_11_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE2_CR_LUMA_QUANTIZATION_TABLE_11_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE2_CR_LUMA_QUANTIZATION_TABLE_10_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE2_CR_LUMA_QUANTIZATION_TABLE_10_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE3_OFFSET (0x005C)
#define JASPER_LUMA_QUANTIZATION_TABLE3_CR_LUMA_QUANTIZATION_TABLE_17_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE3_CR_LUMA_QUANTIZATION_TABLE_17_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE3_CR_LUMA_QUANTIZATION_TABLE_16_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE3_CR_LUMA_QUANTIZATION_TABLE_16_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE3_CR_LUMA_QUANTIZATION_TABLE_15_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE3_CR_LUMA_QUANTIZATION_TABLE_15_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE3_CR_LUMA_QUANTIZATION_TABLE_14_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE3_CR_LUMA_QUANTIZATION_TABLE_14_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE4_OFFSET (0x0060)
#define JASPER_LUMA_QUANTIZATION_TABLE4_CR_LUMA_QUANTIZATION_TABLE_21_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE4_CR_LUMA_QUANTIZATION_TABLE_21_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE4_CR_LUMA_QUANTIZATION_TABLE_20_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE4_CR_LUMA_QUANTIZATION_TABLE_20_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE5_OFFSET (0x0064)
#define JASPER_LUMA_QUANTIZATION_TABLE5_CR_LUMA_QUANTIZATION_TABLE_27_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE5_CR_LUMA_QUANTIZATION_TABLE_27_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE5_CR_LUMA_QUANTIZATION_TABLE_26_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE5_CR_LUMA_QUANTIZATION_TABLE_26_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE5_CR_LUMA_QUANTIZATION_TABLE_25_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE5_CR_LUMA_QUANTIZATION_TABLE_25_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE5_CR_LUMA_QUANTIZATION_TABLE_24_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE5_CR_LUMA_QUANTIZATION_TABLE_24_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE6_OFFSET (0x0068)
#define JASPER_LUMA_QUANTIZATION_TABLE6_CR_LUMA_QUANTIZATION_TABLE_33_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE6_CR_LUMA_QUANTIZATION_TABLE_33_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE6_CR_LUMA_QUANTIZATION_TABLE_32_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE6_CR_LUMA_QUANTIZATION_TABLE_32_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE6_CR_LUMA_QUANTIZATION_TABLE_31_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE6_CR_LUMA_QUANTIZATION_TABLE_31_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE6_CR_LUMA_QUANTIZATION_TABLE_30_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE6_CR_LUMA_QUANTIZATION_TABLE_30_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE7_OFFSET (0x006C)
#define JASPER_LUMA_QUANTIZATION_TABLE7_CR_LUMA_QUANTIZATION_TABLE_37_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE7_CR_LUMA_QUANTIZATION_TABLE_37_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE7_CR_LUMA_QUANTIZATION_TABLE_36_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE7_CR_LUMA_QUANTIZATION_TABLE_36_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE7_CR_LUMA_QUANTIZATION_TABLE_35_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE7_CR_LUMA_QUANTIZATION_TABLE_35_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE7_CR_LUMA_QUANTIZATION_TABLE_34_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE7_CR_LUMA_QUANTIZATION_TABLE_34_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE8_OFFSET (0x0070)
#define JASPER_LUMA_QUANTIZATION_TABLE8_CR_LUMA_QUANTIZATION_TABLE_43_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE8_CR_LUMA_QUANTIZATION_TABLE_43_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE8_CR_LUMA_QUANTIZATION_TABLE_42_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE8_CR_LUMA_QUANTIZATION_TABLE_42_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE8_CR_LUMA_QUANTIZATION_TABLE_41_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE8_CR_LUMA_QUANTIZATION_TABLE_41_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE8_CR_LUMA_QUANTIZATION_TABLE_40_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE8_CR_LUMA_QUANTIZATION_TABLE_40_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE9_OFFSET (0x0074)
#define JASPER_LUMA_QUANTIZATION_TABLE9_CR_LUMA_QUANTIZATION_TABLE_47_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE9_CR_LUMA_QUANTIZATION_TABLE_47_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE9_CR_LUMA_QUANTIZATION_TABLE_46_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE9_CR_LUMA_QUANTIZATION_TABLE_46_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE9_CR_LUMA_QUANTIZATION_TABLE_45_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE9_CR_LUMA_QUANTIZATION_TABLE_45_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE9_CR_LUMA_QUANTIZATION_TABLE_44_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE9_CR_LUMA_QUANTIZATION_TABLE_44_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE10_OFFSET (0x0078)
#define JASPER_LUMA_QUANTIZATION_TABLE10_CR_LUMA_QUANTIZATION_TABLE_53_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE10_CR_LUMA_QUANTIZATION_TABLE_53_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE10_CR_LUMA_QUANTIZATION_TABLE_52_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE10_CR_LUMA_QUANTIZATION_TABLE_52_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE10_CR_LUMA_QUANTIZATION_TABLE_51_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE10_CR_LUMA_QUANTIZATION_TABLE_51_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE10_CR_LUMA_QUANTIZATION_TABLE_50_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE10_CR_LUMA_QUANTIZATION_TABLE_50_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE11_OFFSET (0x007C)
#define JASPER_LUMA_QUANTIZATION_TABLE11_CR_LUMA_QUANTIZATION_TABLE_57_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE11_CR_LUMA_QUANTIZATION_TABLE_57_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE11_CR_LUMA_QUANTIZATION_TABLE_56_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE11_CR_LUMA_QUANTIZATION_TABLE_56_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE11_CR_LUMA_QUANTIZATION_TABLE_55_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE11_CR_LUMA_QUANTIZATION_TABLE_55_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE11_CR_LUMA_QUANTIZATION_TABLE_54_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE11_CR_LUMA_QUANTIZATION_TABLE_54_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE12_OFFSET (0x0080)
#define JASPER_LUMA_QUANTIZATION_TABLE12_CR_LUMA_QUANTIZATION_TABLE_63_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE12_CR_LUMA_QUANTIZATION_TABLE_63_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE12_CR_LUMA_QUANTIZATION_TABLE_62_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE12_CR_LUMA_QUANTIZATION_TABLE_62_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE12_CR_LUMA_QUANTIZATION_TABLE_61_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE12_CR_LUMA_QUANTIZATION_TABLE_61_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE12_CR_LUMA_QUANTIZATION_TABLE_60_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE12_CR_LUMA_QUANTIZATION_TABLE_60_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE13_OFFSET (0x0084)
#define JASPER_LUMA_QUANTIZATION_TABLE13_CR_LUMA_QUANTIZATION_TABLE_67_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE13_CR_LUMA_QUANTIZATION_TABLE_67_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE13_CR_LUMA_QUANTIZATION_TABLE_66_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE13_CR_LUMA_QUANTIZATION_TABLE_66_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE13_CR_LUMA_QUANTIZATION_TABLE_65_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE13_CR_LUMA_QUANTIZATION_TABLE_65_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE13_CR_LUMA_QUANTIZATION_TABLE_64_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE13_CR_LUMA_QUANTIZATION_TABLE_64_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE14_OFFSET (0x0088)
#define JASPER_LUMA_QUANTIZATION_TABLE14_CR_LUMA_QUANTIZATION_TABLE_73_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE14_CR_LUMA_QUANTIZATION_TABLE_73_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE14_CR_LUMA_QUANTIZATION_TABLE_72_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE14_CR_LUMA_QUANTIZATION_TABLE_72_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE14_CR_LUMA_QUANTIZATION_TABLE_71_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE14_CR_LUMA_QUANTIZATION_TABLE_71_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE14_CR_LUMA_QUANTIZATION_TABLE_70_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE14_CR_LUMA_QUANTIZATION_TABLE_70_SHIFT (0)
#define JASPER_LUMA_QUANTIZATION_TABLE15_OFFSET (0x008C)
#define JASPER_LUMA_QUANTIZATION_TABLE15_CR_LUMA_QUANTIZATION_TABLE_77_MASK (0xFF000000)
#define JASPER_LUMA_QUANTIZATION_TABLE15_CR_LUMA_QUANTIZATION_TABLE_77_SHIFT (24)
#define JASPER_LUMA_QUANTIZATION_TABLE15_CR_LUMA_QUANTIZATION_TABLE_76_MASK (0x00FF0000)
#define JASPER_LUMA_QUANTIZATION_TABLE15_CR_LUMA_QUANTIZATION_TABLE_76_SHIFT (16)
#define JASPER_LUMA_QUANTIZATION_TABLE15_CR_LUMA_QUANTIZATION_TABLE_75_MASK (0x0000FF00)
#define JASPER_LUMA_QUANTIZATION_TABLE15_CR_LUMA_QUANTIZATION_TABLE_75_SHIFT (8)
#define JASPER_LUMA_QUANTIZATION_TABLE15_CR_LUMA_QUANTIZATION_TABLE_74_MASK (0x000000FF)
#define JASPER_LUMA_QUANTIZATION_TABLE15_CR_LUMA_QUANTIZATION_TABLE_74_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE0_OFFSET (0x0090)
#define JASPER_CHROMA_QUANTIZATION_TABLE0_CR_CHROMA_QUANTIZATION_TABLE_03_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE0_CR_CHROMA_QUANTIZATION_TABLE_03_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE0_CR_CHROMA_QUANTIZATION_TABLE_02_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE0_CR_CHROMA_QUANTIZATION_TABLE_02_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE0_CR_CHROMA_QUANTIZATION_TABLE_01_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE0_CR_CHROMA_QUANTIZATION_TABLE_01_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE0_CR_CHROMA_QUANTIZATION_TABLE_00_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE0_CR_CHROMA_QUANTIZATION_TABLE_00_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE1_OFFSET (0x0094)
#define JASPER_CHROMA_QUANTIZATION_TABLE1_CR_CHROMA_QUANTIZATION_TABLE_07_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE1_CR_CHROMA_QUANTIZATION_TABLE_07_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE1_CR_CHROMA_QUANTIZATION_TABLE_06_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE1_CR_CHROMA_QUANTIZATION_TABLE_06_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE1_CR_CHROMA_QUANTIZATION_TABLE_05_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE1_CR_CHROMA_QUANTIZATION_TABLE_05_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE1_CR_CHROMA_QUANTIZATION_TABLE_04_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE1_CR_CHROMA_QUANTIZATION_TABLE_04_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE2_OFFSET (0x0098)
#define JASPER_CHROMA_QUANTIZATION_TABLE2_CR_CHROMA_QUANTIZATION_TABLE_13_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE2_CR_CHROMA_QUANTIZATION_TABLE_13_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE2_CR_CHROMA_QUANTIZATION_TABLE_12_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE2_CR_CHROMA_QUANTIZATION_TABLE_12_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE2_CR_CHROMA_QUANTIZATION_TABLE_11_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE2_CR_CHROMA_QUANTIZATION_TABLE_11_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE2_CR_CHROMA_QUANTIZATION_TABLE_10_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE2_CR_CHROMA_QUANTIZATION_TABLE_10_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE3_OFFSET (0x009C)
#define JASPER_CHROMA_QUANTIZATION_TABLE3_CR_CHROMA_QUANTIZATION_TABLE_17_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE3_CR_CHROMA_QUANTIZATION_TABLE_17_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE3_CR_CHROMA_QUANTIZATION_TABLE_16_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE3_CR_CHROMA_QUANTIZATION_TABLE_16_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE3_CR_CHROMA_QUANTIZATION_TABLE_15_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE3_CR_CHROMA_QUANTIZATION_TABLE_15_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE3_CR_CHROMA_QUANTIZATION_TABLE_14_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE3_CR_CHROMA_QUANTIZATION_TABLE_14_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE4_OFFSET (0x00A0)
#define JASPER_CHROMA_QUANTIZATION_TABLE4_CR_CHROMA_QUANTIZATION_TABLE_23_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE4_CR_CHROMA_QUANTIZATION_TABLE_23_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE4_CR_CHROMA_QUANTIZATION_TABLE_22_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE4_CR_CHROMA_QUANTIZATION_TABLE_22_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE4_CR_CHROMA_QUANTIZATION_TABLE_21_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE4_CR_CHROMA_QUANTIZATION_TABLE_21_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE4_CR_CHROMA_QUANTIZATION_TABLE_20_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE4_CR_CHROMA_QUANTIZATION_TABLE_20_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE5_OFFSET (0x00A4)
#define JASPER_CHROMA_QUANTIZATION_TABLE5_CR_CHROMA_QUANTIZATION_TABLE_27_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE5_CR_CHROMA_QUANTIZATION_TABLE_27_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE5_CR_CHROMA_QUANTIZATION_TABLE_26_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE5_CR_CHROMA_QUANTIZATION_TABLE_26_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE5_CR_CHROMA_QUANTIZATION_TABLE_25_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE5_CR_CHROMA_QUANTIZATION_TABLE_25_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE5_CR_CHROMA_QUANTIZATION_TABLE_24_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE5_CR_CHROMA_QUANTIZATION_TABLE_24_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE6_OFFSET (0x00A8)
#define JASPER_CHROMA_QUANTIZATION_TABLE6_CR_CHROMA_QUANTIZATION_TABLE_33_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE6_CR_CHROMA_QUANTIZATION_TABLE_33_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE6_CR_CHROMA_QUANTIZATION_TABLE_32_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE6_CR_CHROMA_QUANTIZATION_TABLE_32_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE6_CR_CHROMA_QUANTIZATION_TABLE_31_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE6_CR_CHROMA_QUANTIZATION_TABLE_31_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE6_CR_CHROMA_QUANTIZATION_TABLE_30_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE6_CR_CHROMA_QUANTIZATION_TABLE_30_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE7_OFFSET (0x00AC)
#define JASPER_CHROMA_QUANTIZATION_TABLE7_CR_CHROMA_QUANTIZATION_TABLE_37_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE7_CR_CHROMA_QUANTIZATION_TABLE_37_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE7_CR_CHROMA_QUANTIZATION_TABLE_36_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE7_CR_CHROMA_QUANTIZATION_TABLE_36_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE7_CR_CHROMA_QUANTIZATION_TABLE_35_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE7_CR_CHROMA_QUANTIZATION_TABLE_35_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE7_CR_CHROMA_QUANTIZATION_TABLE_34_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE7_CR_CHROMA_QUANTIZATION_TABLE_34_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE8_OFFSET (0x00B0)
#define JASPER_CHROMA_QUANTIZATION_TABLE8_CR_CHROMA_QUANTIZATION_TABLE_43_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE8_CR_CHROMA_QUANTIZATION_TABLE_43_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE8_CR_CHROMA_QUANTIZATION_TABLE_42_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE8_CR_CHROMA_QUANTIZATION_TABLE_42_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE8_CR_CHROMA_QUANTIZATION_TABLE_41_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE8_CR_CHROMA_QUANTIZATION_TABLE_41_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE8_CR_CHROMA_QUANTIZATION_TABLE_40_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE8_CR_CHROMA_QUANTIZATION_TABLE_40_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE9_OFFSET (0x00B4)
#define JASPER_CHROMA_QUANTIZATION_TABLE9_CR_CHROMA_QUANTIZATION_TABLE_47_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE9_CR_CHROMA_QUANTIZATION_TABLE_47_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE9_CR_CHROMA_QUANTIZATION_TABLE_46_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE9_CR_CHROMA_QUANTIZATION_TABLE_46_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE9_CR_CHROMA_QUANTIZATION_TABLE_45_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE9_CR_CHROMA_QUANTIZATION_TABLE_45_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE9_CR_CHROMA_QUANTIZATION_TABLE_44_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE9_CR_CHROMA_QUANTIZATION_TABLE_44_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE10_OFFSET (0x00B8)
#define JASPER_CHROMA_QUANTIZATION_TABLE10_CR_CHROMA_QUANTIZATION_TABLE_53_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE10_CR_CHROMA_QUANTIZATION_TABLE_53_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE10_CR_CHROMA_QUANTIZATION_TABLE_52_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE10_CR_CHROMA_QUANTIZATION_TABLE_52_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE10_CR_CHROMA_QUANTIZATION_TABLE_51_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE10_CR_CHROMA_QUANTIZATION_TABLE_51_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE10_CR_CHROMA_QUANTIZATION_TABLE_50_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE10_CR_CHROMA_QUANTIZATION_TABLE_50_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE11_OFFSET (0x00BC)
#define JASPER_CHROMA_QUANTIZATION_TABLE11_CR_CHROMA_QUANTIZATION_TABLE_57_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE11_CR_CHROMA_QUANTIZATION_TABLE_57_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE11_CR_CHROMA_QUANTIZATION_TABLE_56_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE11_CR_CHROMA_QUANTIZATION_TABLE_56_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE11_CR_CHROMA_QUANTIZATION_TABLE_55_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE11_CR_CHROMA_QUANTIZATION_TABLE_55_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE11_CR_CHROMA_QUANTIZATION_TABLE_54_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE11_CR_CHROMA_QUANTIZATION_TABLE_54_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE12_OFFSET (0x00C0)
#define JASPER_CHROMA_QUANTIZATION_TABLE12_CR_CHROMA_QUANTIZATION_TABLE_63_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE12_CR_CHROMA_QUANTIZATION_TABLE_63_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE12_CR_CHROMA_QUANTIZATION_TABLE_62_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE12_CR_CHROMA_QUANTIZATION_TABLE_62_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE12_CR_CHROMA_QUANTIZATION_TABLE_61_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE12_CR_CHROMA_QUANTIZATION_TABLE_61_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE12_CR_CHROMA_QUANTIZATION_TABLE_60_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE12_CR_CHROMA_QUANTIZATION_TABLE_60_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE13_OFFSET (0x00C4)
#define JASPER_CHROMA_QUANTIZATION_TABLE13_CR_CHROMA_QUANTIZATION_TABLE_67_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE13_CR_CHROMA_QUANTIZATION_TABLE_67_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE13_CR_CHROMA_QUANTIZATION_TABLE_66_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE13_CR_CHROMA_QUANTIZATION_TABLE_66_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE13_CR_CHROMA_QUANTIZATION_TABLE_65_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE13_CR_CHROMA_QUANTIZATION_TABLE_65_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE13_CR_CHROMA_QUANTIZATION_TABLE_64_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE13_CR_CHROMA_QUANTIZATION_TABLE_64_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE14_OFFSET (0x00C8)
#define JASPER_CHROMA_QUANTIZATION_TABLE14_CR_CHROMA_QUANTIZATION_TABLE_73_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE14_CR_CHROMA_QUANTIZATION_TABLE_73_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE14_CR_CHROMA_QUANTIZATION_TABLE_72_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE14_CR_CHROMA_QUANTIZATION_TABLE_72_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE14_CR_CHROMA_QUANTIZATION_TABLE_71_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE14_CR_CHROMA_QUANTIZATION_TABLE_71_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE14_CR_CHROMA_QUANTIZATION_TABLE_70_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE14_CR_CHROMA_QUANTIZATION_TABLE_70_SHIFT (0)
#define JASPER_CHROMA_QUANTIZATION_TABLE15_OFFSET (0x00CC)
#define JASPER_CHROMA_QUANTIZATION_TABLE15_CR_CHROMA_QUANTIZATION_TABLE_77_MASK (0xFF000000)
#define JASPER_CHROMA_QUANTIZATION_TABLE15_CR_CHROMA_QUANTIZATION_TABLE_77_SHIFT (24)
#define JASPER_CHROMA_QUANTIZATION_TABLE15_CR_CHROMA_QUANTIZATION_TABLE_76_MASK (0x00FF0000)
#define JASPER_CHROMA_QUANTIZATION_TABLE15_CR_CHROMA_QUANTIZATION_TABLE_76_SHIFT (16)
#define JASPER_CHROMA_QUANTIZATION_TABLE15_CR_CHROMA_QUANTIZATION_TABLE_75_MASK (0x0000FF00)
#define JASPER_CHROMA_QUANTIZATION_TABLE15_CR_CHROMA_QUANTIZATION_TABLE_75_SHIFT (8)
#define JASPER_CHROMA_QUANTIZATION_TABLE15_CR_CHROMA_QUANTIZATION_TABLE_74_MASK (0x000000FF)
#define JASPER_CHROMA_QUANTIZATION_TABLE15_CR_CHROMA_QUANTIZATION_TABLE_74_SHIFT (0)
#define JASPER_CRC_CTRL_OFFSET (0x00D0)
#define JASPER_CRC_CTRL_JASPER_CRC_ENABLE_MASK (0x00000001)
#define JASPER_CRC_CTRL_JASPER_CRC_ENABLE_SHIFT (0)
#define JASPER_FRONT_END_CRC_OFFSET (0x00D4)
#define JASPER_FRONT_END_CRC_CR_JASPER_FRONT_END_CRC_OUT_MASK (0xFFFFFFFF)
#define JASPER_FRONT_END_CRC_CR_JASPER_FRONT_END_CRC_OUT_SHIFT (0)
#define JASPER_DCT_CRC_OFFSET (0x00D8)
#define JASPER_DCT_CRC_CR_JASPER_DCT_CRC_OUT_MASK (0xFFFFFFFF)
#define JASPER_DCT_CRC_CR_JASPER_DCT_CRC_OUT_SHIFT (0)
#define JASPER_ZZ_CRC_OFFSET (0x00DC)
#define JASPER_ZZ_CRC_CR_JASPER_ZZ_CRC_OUT_MASK (0xFFFFFFFF)
#define JASPER_ZZ_CRC_CR_JASPER_ZZ_CRC_OUT_SHIFT (0)
#define JASPER_QUANT_CRC_OFFSET (0x00E0)
#define JASPER_QUANT_CRC_CR_JASPER_QUANT_CRC_OUT_MASK (0xFFFFFFFF)
#define JASPER_QUANT_CRC_CR_JASPER_QUANT_CRC_OUT_SHIFT (0)
#define JASPER_ENTROPY_ENCODER_CRC_OFFSET (0x00E4)
#define JASPER_ENTROPY_ENCODER_CRC_CR_JASPER_ENTROPY_CRC_OUT_MASK (0xFFFFFFFF)
#define JASPER_ENTROPY_ENCODER_CRC_CR_JASPER_ENTROPY_CRC_OUT_SHIFT (0)
#define JASPER_PACKING_BUFFER_DATA_CRC_OFFSET (0x00E8)
#define JASPER_PACKING_BUFFER_DATA_CRC_CR_JASPER_PACKING_DATA_CRC_OUT_MASK (0xFFFFFFFF)
#define JASPER_PACKING_BUFFER_DATA_CRC_CR_JASPER_PACKING_DATA_CRC_OUT_SHIFT (0)
#define JASPER_PACKING_BUFFER_ADDR_CRC_OFFSET (0x00EC)
#define JASPER_PACKING_BUFFER_ADDR_CRC_CR_JASPER_PACKING_ADDR_OUT_CRC_MASK (0xFFFFFFFF)
#define JASPER_PACKING_BUFFER_ADDR_CRC_CR_JASPER_PACKING_ADDR_OUT_CRC_SHIFT (0)
#define JASPER_CORE_BYTE_SIZE (0x00F0)
#endif
@@ -0,0 +1,267 @@
// SPDX-License-Identifier: GPL-2.0
/*
* Imagination E5010 JPEG Encoder driver.
*
* Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
*
* Author: David Huang <d-huang@ti.com>
* Author: Devarsh Thakkar <devarsht@ti.com>
*/
#include <linux/io.h>
#include <linux/iopoll.h>
#include <linux/dev_printk.h>
#include "e5010-jpeg-enc-hw.h"
static void write_reg_field(void __iomem *base, unsigned int offset, u32 mask,
unsigned int shift, u32 value)
{
u32 reg;
value <<= shift;
if (mask != 0xffffffff) {
reg = readl(base + offset);
value = (value & mask) | (reg & ~mask);
}
writel(value, (base + offset));
}
static int write_reg_field_not_busy(void __iomem *jasper_base, void __iomem *wr_base,
unsigned int offset, u32 mask, unsigned int shift,
u32 value)
{
int ret;
u32 val;
ret = readl_poll_timeout_atomic(jasper_base + JASPER_STATUS_OFFSET, val,
(val & JASPER_STATUS_CR_JASPER_BUSY_MASK) == 0,
2000, 50000);
if (ret)
return ret;
write_reg_field(wr_base, offset, mask, shift, value);
return 0;
}
void e5010_reset(struct device *dev, void __iomem *core_base, void __iomem *mmu_base)
{
int ret = 0;
u32 val;
write_reg_field(core_base, JASPER_RESET_OFFSET,
JASPER_RESET_CR_CORE_RESET_MASK,
JASPER_RESET_CR_CORE_RESET_SHIFT, 1);
write_reg_field(mmu_base, MMU_MMU_CONTROL1_OFFSET,
MMU_MMU_CONTROL1_MMU_SOFT_RESET_MASK,
MMU_MMU_CONTROL1_MMU_SOFT_RESET_SHIFT, 1);
ret = readl_poll_timeout_atomic(mmu_base + MMU_MMU_CONTROL1_OFFSET, val,
(val & MMU_MMU_CONTROL1_MMU_SOFT_RESET_MASK) == 0,
2000, 50000);
if (ret)
dev_warn(dev, "MMU soft reset timed out, forcing system soft reset\n");
write_reg_field(core_base, JASPER_RESET_OFFSET,
JASPER_RESET_CR_SYS_RESET_MASK,
JASPER_RESET_CR_SYS_RESET_SHIFT, 1);
}
void e5010_hw_bypass_mmu(void __iomem *mmu_base, u32 enable)
{
/* Bypass MMU */
write_reg_field(mmu_base,
MMU_MMU_ADDRESS_CONTROL_OFFSET,
MMU_MMU_ADDRESS_CONTROL_MMU_BYPASS_MASK,
MMU_MMU_ADDRESS_CONTROL_MMU_BYPASS_SHIFT,
enable);
}
int e5010_hw_enable_output_address_error_irq(void __iomem *core_base, u32 enable)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_INTERRUPT_MASK_OFFSET,
JASPER_INTERRUPT_MASK_CR_OUTPUT_ADDRESS_ERROR_ENABLE_MASK,
JASPER_INTERRUPT_MASK_CR_OUTPUT_ADDRESS_ERROR_ENABLE_SHIFT,
enable);
}
bool e5010_hw_pic_done_irq(void __iomem *core_base)
{
u32 reg;
reg = readl(core_base + JASPER_INTERRUPT_STATUS_OFFSET);
return reg & JASPER_INTERRUPT_STATUS_CR_PICTURE_DONE_IRQ_MASK;
}
bool e5010_hw_output_address_irq(void __iomem *core_base)
{
u32 reg;
reg = readl(core_base + JASPER_INTERRUPT_STATUS_OFFSET);
return reg & JASPER_INTERRUPT_STATUS_CR_OUTPUT_ADDRESS_ERROR_IRQ_MASK;
}
int e5010_hw_enable_picture_done_irq(void __iomem *core_base, u32 enable)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_INTERRUPT_MASK_OFFSET,
JASPER_INTERRUPT_MASK_CR_PICTURE_DONE_ENABLE_MASK,
JASPER_INTERRUPT_MASK_CR_PICTURE_DONE_ENABLE_SHIFT,
enable);
}
int e5010_hw_enable_auto_clock_gating(void __iomem *core_base, u32 enable)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_CLK_CONTROL_OFFSET,
JASPER_CLK_CONTROL_CR_JASPER_AUTO_CLKG_ENABLE_MASK,
JASPER_CLK_CONTROL_CR_JASPER_AUTO_CLKG_ENABLE_SHIFT,
enable);
}
int e5010_hw_enable_manual_clock_gating(void __iomem *core_base, u32 enable)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_CLK_CONTROL_OFFSET,
JASPER_CLK_CONTROL_CR_JASPER_MAN_CLKG_ENABLE_MASK,
JASPER_CLK_CONTROL_CR_JASPER_MAN_CLKG_ENABLE_SHIFT, 0);
}
int e5010_hw_enable_crc_check(void __iomem *core_base, u32 enable)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_CRC_CTRL_OFFSET,
JASPER_CRC_CTRL_JASPER_CRC_ENABLE_MASK,
JASPER_CRC_CTRL_JASPER_CRC_ENABLE_SHIFT, enable);
}
int e5010_hw_set_input_source_to_memory(void __iomem *core_base, u32 set)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_INPUT_CTRL0_OFFSET,
JASPER_INPUT_CTRL0_CR_INPUT_SOURCE_MASK,
JASPER_INPUT_CTRL0_CR_INPUT_SOURCE_SHIFT, set);
}
int e5010_hw_set_input_luma_addr(void __iomem *core_base, u32 val)
{
return write_reg_field_not_busy(core_base, core_base,
INPUT_LUMA_BASE_OFFSET,
INPUT_LUMA_BASE_CR_INPUT_LUMA_BASE_MASK, 0, val);
}
int e5010_hw_set_input_chroma_addr(void __iomem *core_base, u32 val)
{
return write_reg_field_not_busy(core_base, core_base,
INPUT_CHROMA_BASE_OFFSET,
INPUT_CHROMA_BASE_CR_INPUT_CHROMA_BASE_MASK, 0, val);
}
int e5010_hw_set_output_base_addr(void __iomem *core_base, u32 val)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_OUTPUT_BASE_OFFSET,
JASPER_OUTPUT_BASE_CR_OUTPUT_BASE_MASK,
JASPER_OUTPUT_BASE_CR_OUTPUT_BASE_SHIFT, val);
}
int e5010_hw_set_horizontal_size(void __iomem *core_base, u32 val)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_IMAGE_SIZE_OFFSET,
JASPER_IMAGE_SIZE_CR_IMAGE_HORIZONTAL_SIZE_MASK,
JASPER_IMAGE_SIZE_CR_IMAGE_HORIZONTAL_SIZE_SHIFT,
val);
}
int e5010_hw_set_vertical_size(void __iomem *core_base, u32 val)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_IMAGE_SIZE_OFFSET,
JASPER_IMAGE_SIZE_CR_IMAGE_VERTICAL_SIZE_MASK,
JASPER_IMAGE_SIZE_CR_IMAGE_VERTICAL_SIZE_SHIFT,
val);
}
int e5010_hw_set_luma_stride(void __iomem *core_base, u32 bytesperline)
{
u32 val = bytesperline / 64;
return write_reg_field_not_busy(core_base, core_base,
JASPER_INPUT_CTRL1_OFFSET,
JASPER_INPUT_CTRL1_CR_INPUT_LUMA_STRIDE_MASK,
JASPER_INPUT_CTRL1_CR_INPUT_LUMA_STRIDE_SHIFT,
val);
}
int e5010_hw_set_chroma_stride(void __iomem *core_base, u32 bytesperline)
{
u32 val = bytesperline / 64;
return write_reg_field_not_busy(core_base, core_base,
JASPER_INPUT_CTRL1_OFFSET,
JASPER_INPUT_CTRL1_CR_INPUT_CHROMA_STRIDE_MASK,
JASPER_INPUT_CTRL1_CR_INPUT_CHROMA_STRIDE_SHIFT,
val);
}
int e5010_hw_set_input_subsampling(void __iomem *core_base, u32 val)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_INPUT_CTRL0_OFFSET,
JASPER_INPUT_CTRL0_CR_INPUT_SUBSAMPLING_MASK,
JASPER_INPUT_CTRL0_CR_INPUT_SUBSAMPLING_SHIFT,
val);
}
int e5010_hw_set_chroma_order(void __iomem *core_base, u32 val)
{
return write_reg_field_not_busy(core_base, core_base,
JASPER_INPUT_CTRL0_OFFSET,
JASPER_INPUT_CTRL0_CR_INPUT_CHROMA_ORDER_MASK,
JASPER_INPUT_CTRL0_CR_INPUT_CHROMA_ORDER_SHIFT,
val);
}
void e5010_hw_set_output_max_size(void __iomem *core_base, u32 val)
{
write_reg_field(core_base, JASPER_OUTPUT_MAX_SIZE_OFFSET,
JASPER_OUTPUT_MAX_SIZE_CR_OUTPUT_MAX_SIZE_MASK,
JASPER_OUTPUT_MAX_SIZE_CR_OUTPUT_MAX_SIZE_SHIFT,
val);
}
int e5010_hw_set_qpvalue(void __iomem *core_base, u32 offset, u32 val)
{
return write_reg_field_not_busy(core_base, core_base, offset, 0xffffffff, 0, val);
}
void e5010_hw_clear_output_error(void __iomem *core_base, u32 clear)
{
/* Make sure interrupts are clear */
write_reg_field(core_base, JASPER_INTERRUPT_CLEAR_OFFSET,
JASPER_INTERRUPT_CLEAR_CR_OUTPUT_ERROR_CLEAR_MASK,
JASPER_INTERRUPT_CLEAR_CR_OUTPUT_ERROR_CLEAR_SHIFT, clear);
}
void e5010_hw_clear_picture_done(void __iomem *core_base, u32 clear)
{
write_reg_field(core_base,
JASPER_INTERRUPT_CLEAR_OFFSET,
JASPER_INTERRUPT_CLEAR_CR_PICTURE_DONE_CLEAR_MASK,
JASPER_INTERRUPT_CLEAR_CR_PICTURE_DONE_CLEAR_SHIFT, clear);
}
int e5010_hw_get_output_size(void __iomem *core_base)
{
return readl(core_base + JASPER_OUTPUT_SIZE_OFFSET);
}
void e5010_hw_encode_start(void __iomem *core_base, u32 start)
{
write_reg_field(core_base, JASPER_CORE_CTRL_OFFSET,
JASPER_CORE_CTRL_CR_JASPER_ENCODE_START_MASK,
JASPER_CORE_CTRL_CR_JASPER_ENCODE_START_SHIFT, start);
}
@@ -0,0 +1,42 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Imagination E5010 JPEG Encoder driver.
*
* Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
*
* Author: David Huang <d-huang@ti.com>
* Author: Devarsh Thakkar <devarsht@ti.com>
*/
#ifndef _E5010_JPEG_ENC_HW_H
#define _E5010_JPEG_ENC_HW_H
#include "e5010-core-regs.h"
#include "e5010-mmu-regs.h"
int e5010_hw_enable_output_address_error_irq(void __iomem *core_offset, u32 enable);
int e5010_hw_enable_picture_done_irq(void __iomem *core_offset, u32 enable);
int e5010_hw_enable_auto_clock_gating(void __iomem *core_offset, u32 enable);
int e5010_hw_enable_manual_clock_gating(void __iomem *core_offset, u32 enable);
int e5010_hw_enable_crc_check(void __iomem *core_offset, u32 enable);
int e5010_hw_set_input_source_to_memory(void __iomem *core_offset, u32 set);
int e5010_hw_set_input_luma_addr(void __iomem *core_offset, u32 val);
int e5010_hw_set_input_chroma_addr(void __iomem *core_offset, u32 val);
int e5010_hw_set_output_base_addr(void __iomem *core_offset, u32 val);
int e5010_hw_get_output_size(void __iomem *core_offset);
int e5010_hw_set_horizontal_size(void __iomem *core_offset, u32 val);
int e5010_hw_set_vertical_size(void __iomem *core_offset, u32 val);
int e5010_hw_set_luma_stride(void __iomem *core_offset, u32 bytesperline);
int e5010_hw_set_chroma_stride(void __iomem *core_offset, u32 bytesperline);
int e5010_hw_set_input_subsampling(void __iomem *core_offset, u32 val);
int e5010_hw_set_chroma_order(void __iomem *core_offset, u32 val);
int e5010_hw_set_qpvalue(void __iomem *core_offset, u32 offset, u32 value);
void e5010_reset(struct device *dev, void __iomem *core_offset, void __iomem *mmu_offset);
void e5010_hw_set_output_max_size(void __iomem *core_offset, u32 val);
void e5010_hw_clear_picture_done(void __iomem *core_offset, u32 clear);
void e5010_hw_encode_start(void __iomem *core_offset, u32 start);
void e5010_hw_clear_output_error(void __iomem *core_offset, u32 clear);
void e5010_hw_bypass_mmu(void __iomem *mmu_base, u32 enable);
bool e5010_hw_pic_done_irq(void __iomem *core_base);
bool e5010_hw_output_address_irq(void __iomem *core_base);
#endif
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,173 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Imagination E5010 JPEG Encoder driver.
*
* Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
*
* Author: David Huang <d-huang@ti.com>
* Author: Devarsh Thakkar <devarsht@ti.com>
*/
#include <media/v4l2-ctrls.h>
#include <media/v4l2-device.h>
#include <media/v4l2-fh.h>
#ifndef _E5010_JPEG_ENC_H
#define _E5010_JPEG_ENC_H
#define MAX_PLANES 2
#define HEADER_SIZE 0x025D
#define MIN_DIMENSION 64
#define MAX_DIMENSION 8192
#define DEFAULT_WIDTH 640
#define DEFAULT_HEIGHT 480
#define E5010_MODULE_NAME "e5010"
#define JPEG_MAX_BYTES_PER_PIXEL 2
/* JPEG marker definitions */
#define START_OF_IMAGE 0xFFD8
#define SOF_BASELINE_DCT 0xFFC0
#define END_OF_IMAGE 0xFFD9
#define START_OF_SCAN 0xFFDA
/* Definitions for the huffman table specification in the Marker segment */
#define DHT_MARKER 0xFFC4
#define LH_DC 0x001F
#define LH_AC 0x00B5
/* Definitions for the quantization table specification in the Marker segment */
#define DQT_MARKER 0xFFDB
#define ACMAX 0x03FF
#define DCMAX 0x07FF
/* Length and precision of the quantization table parameters */
#define LQPQ 0x00430
#define QMAX 255
/* Misc JPEG header definitions */
#define UC_NUM_COMP 3
#define PRECISION 8
#define HORZ_SAMPLING_FACTOR (2 << 4)
#define VERT_SAMPLING_FACTOR_422 1
#define VERT_SAMPLING_FACTOR_420 2
#define COMPONENTS_IN_SCAN 3
#define PELS_IN_BLOCK 64
/* Used for Qp table generation */
#define LUMINOSITY 10
#define CONTRAST 1
#define INCREASE 2
#define QP_TABLE_SIZE (8 * 8)
#define QP_TABLE_FIELD_OFFSET 0x04
/*
* vb2 queue structure
* contains queue data information
*
* @fmt: format info
* @width: frame width
* @height: frame height
* @bytesperline: bytes per line in memory
* @size_image: image size in memory
*/
struct e5010_q_data {
struct e5010_fmt *fmt;
u32 width;
u32 height;
u32 width_adjusted;
u32 height_adjusted;
u32 sizeimage[MAX_PLANES];
u32 bytesperline[MAX_PLANES];
u32 sequence;
struct v4l2_rect crop;
bool crop_set;
};
/*
* Driver device structure
* Holds all memory handles and global parameters
* Shared by all instances
*/
struct e5010_dev {
struct device *dev;
struct v4l2_device v4l2_dev;
struct v4l2_m2m_dev *m2m_dev;
struct video_device *vdev;
void __iomem *core_base;
void __iomem *mmu_base;
struct clk *clk;
struct e5010_context *last_context_run;
/* Protect access to device data */
struct mutex mutex;
/* Protect access to hardware*/
spinlock_t hw_lock;
};
/*
* Driver context structure
* One of these exists for every m2m context
* Holds context specific data
*/
struct e5010_context {
struct v4l2_fh fh;
struct e5010_dev *e5010;
struct e5010_q_data out_queue;
struct e5010_q_data cap_queue;
int quality;
bool update_qp;
struct v4l2_ctrl_handler ctrl_handler;
u8 luma_qp[QP_TABLE_SIZE];
u8 chroma_qp[QP_TABLE_SIZE];
};
static inline struct e5010_context *to_e5010_context(struct file *filp)
{
return container_of(file_to_v4l2_fh(filp), struct e5010_context, fh);
}
/*
* Buffer structure
* Contains info for all buffers
*/
struct e5010_buffer {
struct v4l2_m2m_buffer buffer;
};
enum {
CHROMA_ORDER_CB_CR = 0, //UV ordering
CHROMA_ORDER_CR_CB = 1, //VU ordering
};
enum {
SUBSAMPLING_420 = 1,
SUBSAMPLING_422 = 2,
};
/*
* e5010 format structure
* contains format information
*/
struct e5010_fmt {
u32 fourcc;
unsigned int num_planes;
unsigned int type;
u32 subsampling;
u32 chroma_order;
const struct v4l2_frmsize_stepwise frmsize;
};
/*
* struct e5010_ctrl - contains info for each supported v4l2 control
*/
struct e5010_ctrl {
unsigned int cid;
enum v4l2_ctrl_type type;
unsigned char name[32];
int minimum;
int maximum;
int step;
int default_value;
unsigned char compound;
};
#endif
@@ -0,0 +1,311 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
* Imagination E5010 JPEG Encoder driver.
*
* Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
*
* Author: David Huang <d-huang@ti.com>
* Author: Devarsh Thakkar <devarsht@ti.com>
*/
#ifndef _E5010_MMU_REGS_H
#define _E5010_MMU_REGS_H
#define MMU_MMU_DIR_BASE_ADDR_OFFSET (0x0020)
#define MMU_MMU_DIR_BASE_ADDR_STRIDE (4)
#define MMU_MMU_DIR_BASE_ADDR_NO_ENTRIES (4)
#define MMU_MMU_DIR_BASE_ADDR_MMU_DIR_BASE_ADDR_MASK (0xFFFFFFFF)
#define MMU_MMU_DIR_BASE_ADDR_MMU_DIR_BASE_ADDR_SHIFT (0)
#define MMU_MMU_TILE_CFG_OFFSET (0x0040)
#define MMU_MMU_TILE_CFG_STRIDE (4)
#define MMU_MMU_TILE_CFG_NO_ENTRIES (4)
#define MMU_MMU_TILE_CFG_TILE_128INTERLEAVE_MASK (0x00000010)
#define MMU_MMU_TILE_CFG_TILE_128INTERLEAVE_SHIFT (4)
#define MMU_MMU_TILE_CFG_TILE_ENABLE_MASK (0x00000008)
#define MMU_MMU_TILE_CFG_TILE_ENABLE_SHIFT (3)
#define MMU_MMU_TILE_CFG_TILE_STRIDE_MASK (0x00000007)
#define MMU_MMU_TILE_CFG_TILE_STRIDE_SHIFT (0)
#define MMU_MMU_TILE_MIN_ADDR_OFFSET (0x0050)
#define MMU_MMU_TILE_MIN_ADDR_STRIDE (4)
#define MMU_MMU_TILE_MIN_ADDR_NO_ENTRIES (4)
#define MMU_MMU_TILE_MIN_ADDR_TILE_MIN_ADDR_MASK (0xFFFFFFFF)
#define MMU_MMU_TILE_MIN_ADDR_TILE_MIN_ADDR_SHIFT (0)
#define MMU_MMU_TILE_MAX_ADDR_OFFSET (0x0060)
#define MMU_MMU_TILE_MAX_ADDR_STRIDE (4)
#define MMU_MMU_TILE_MAX_ADDR_NO_ENTRIES (4)
#define MMU_MMU_TILE_MAX_ADDR_TILE_MAX_ADDR_MASK (0xFFFFFFFF)
#define MMU_MMU_TILE_MAX_ADDR_TILE_MAX_ADDR_SHIFT (0)
#define MMU_MMU_CONTROL0_OFFSET (0x0000)
#define MMU_MMU_CONTROL0_MMU_TILING_SCHEME_MASK (0x00000001)
#define MMU_MMU_CONTROL0_MMU_TILING_SCHEME_SHIFT (0)
#define MMU_MMU_CONTROL0_MMU_CACHE_POLICY_MASK (0x00000100)
#define MMU_MMU_CONTROL0_MMU_CACHE_POLICY_SHIFT (8)
#define MMU_MMU_CONTROL0_FORCE_CACHE_POLICY_BYPASS_MASK (0x00000200)
#define MMU_MMU_CONTROL0_FORCE_CACHE_POLICY_BYPASS_SHIFT (9)
#define MMU_MMU_CONTROL0_STALL_ON_PROTOCOL_FAULT_MASK (0x00001000)
#define MMU_MMU_CONTROL0_STALL_ON_PROTOCOL_FAULT_SHIFT (12)
#define MMU_MMU_CONTROL1_OFFSET (0x0008)
#define MMU_MMU_CONTROL1_MMU_FLUSH_MASK (0x00000008)
#define MMU_MMU_CONTROL1_MMU_FLUSH_SHIFT (3)
#define MMU_MMU_CONTROL1_MMU_FLUSH_NO_REPS (4)
#define MMU_MMU_CONTROL1_MMU_FLUSH_SIZE (1)
#define MMU_MMU_CONTROL1_MMU_INVALDC_MASK (0x00000800)
#define MMU_MMU_CONTROL1_MMU_INVALDC_SHIFT (11)
#define MMU_MMU_CONTROL1_MMU_INVALDC_NO_REPS (4)
#define MMU_MMU_CONTROL1_MMU_INVALDC_SIZE (1)
#define MMU_MMU_CONTROL1_MMU_FAULT_CLEAR_MASK (0x00010000)
#define MMU_MMU_CONTROL1_MMU_FAULT_CLEAR_SHIFT (16)
#define MMU_MMU_CONTROL1_PROTOCOL_FAULT_CLEAR_MASK (0x00100000)
#define MMU_MMU_CONTROL1_PROTOCOL_FAULT_CLEAR_SHIFT (20)
#define MMU_MMU_CONTROL1_MMU_PAUSE_SET_MASK (0x01000000)
#define MMU_MMU_CONTROL1_MMU_PAUSE_SET_SHIFT (24)
#define MMU_MMU_CONTROL1_MMU_PAUSE_CLEAR_MASK (0x02000000)
#define MMU_MMU_CONTROL1_MMU_PAUSE_CLEAR_SHIFT (25)
#define MMU_MMU_CONTROL1_MMU_SOFT_RESET_MASK (0x10000000)
#define MMU_MMU_CONTROL1_MMU_SOFT_RESET_SHIFT (28)
#define MMU_MMU_BANK_INDEX_OFFSET (0x0010)
#define MMU_MMU_BANK_INDEX_MMU_BANK_INDEX_MASK (0xC0000000)
#define MMU_MMU_BANK_INDEX_MMU_BANK_INDEX_SHIFT (30)
#define MMU_MMU_BANK_INDEX_MMU_BANK_INDEX_NO_REPS (16)
#define MMU_MMU_BANK_INDEX_MMU_BANK_INDEX_SIZE (2)
#define MMU_REQUEST_PRIORITY_ENABLE_OFFSET (0x0018)
#define MMU_REQUEST_PRIORITY_ENABLE_CMD_PRIORITY_ENABLE_MASK (0x00008000)
#define MMU_REQUEST_PRIORITY_ENABLE_CMD_PRIORITY_ENABLE_SHIFT (15)
#define MMU_REQUEST_PRIORITY_ENABLE_CMD_PRIORITY_ENABLE_NO_REPS (16)
#define MMU_REQUEST_PRIORITY_ENABLE_CMD_PRIORITY_ENABLE_SIZE (1)
#define MMU_REQUEST_PRIORITY_ENABLE_CMD_MMU_PRIORITY_ENABLE_MASK (0x00010000)
#define MMU_REQUEST_PRIORITY_ENABLE_CMD_MMU_PRIORITY_ENABLE_SHIFT (16)
#define MMU_REQUEST_LIMITED_THROUGHPUT_OFFSET (0x001C)
#define MMU_REQUEST_LIMITED_THROUGHPUT_LIMITED_WORDS_MASK (0x000003FF)
#define MMU_REQUEST_LIMITED_THROUGHPUT_LIMITED_WORDS_SHIFT (0)
#define MMU_REQUEST_LIMITED_THROUGHPUT_REQUEST_GAP_MASK (0x0FFF0000)
#define MMU_REQUEST_LIMITED_THROUGHPUT_REQUEST_GAP_SHIFT (16)
#define MMU_MMU_ADDRESS_CONTROL_OFFSET (0x0070)
#define MMU_MMU_ADDRESS_CONTROL_TRUSTED (IMG_TRUE)
#define MMU_MMU_ADDRESS_CONTROL_MMU_BYPASS_MASK (0x00000001)
#define MMU_MMU_ADDRESS_CONTROL_MMU_BYPASS_SHIFT (0)
#define MMU_MMU_ADDRESS_CONTROL_MMU_ENABLE_EXT_ADDRESSING_MASK (0x00000010)
#define MMU_MMU_ADDRESS_CONTROL_MMU_ENABLE_EXT_ADDRESSING_SHIFT (4)
#define MMU_MMU_ADDRESS_CONTROL_UPPER_ADDRESS_FIXED_MASK (0x00FF0000)
#define MMU_MMU_ADDRESS_CONTROL_UPPER_ADDRESS_FIXED_SHIFT (16)
#define MMU_MMU_CONFIG0_OFFSET (0x0080)
#define MMU_MMU_CONFIG0_NUM_REQUESTORS_MASK (0x0000000F)
#define MMU_MMU_CONFIG0_NUM_REQUESTORS_SHIFT (0)
#define MMU_MMU_CONFIG0_EXTENDED_ADDR_RANGE_MASK (0x000000F0)
#define MMU_MMU_CONFIG0_EXTENDED_ADDR_RANGE_SHIFT (4)
#define MMU_MMU_CONFIG0_GROUP_OVERRIDE_SIZE_MASK (0x00000700)
#define MMU_MMU_CONFIG0_GROUP_OVERRIDE_SIZE_SHIFT (8)
#define MMU_MMU_CONFIG0_ADDR_COHERENCY_SUPPORTED_MASK (0x00001000)
#define MMU_MMU_CONFIG0_ADDR_COHERENCY_SUPPORTED_SHIFT (12)
#define MMU_MMU_CONFIG0_MMU_SUPPORTED_MASK (0x00002000)
#define MMU_MMU_CONFIG0_MMU_SUPPORTED_SHIFT (13)
#define MMU_MMU_CONFIG0_TILE_ADDR_GRANULARITY_MASK (0x001F0000)
#define MMU_MMU_CONFIG0_TILE_ADDR_GRANULARITY_SHIFT (16)
#define MMU_MMU_CONFIG0_NO_READ_REORDER_MASK (0x00200000)
#define MMU_MMU_CONFIG0_NO_READ_REORDER_SHIFT (21)
#define MMU_MMU_CONFIG0_TAGS_SUPPORTED_MASK (0xFFC00000)
#define MMU_MMU_CONFIG0_TAGS_SUPPORTED_SHIFT (22)
#define MMU_MMU_CONFIG1_OFFSET (0x0084)
#define MMU_MMU_CONFIG1_PAGE_SIZE_MASK (0x0000000F)
#define MMU_MMU_CONFIG1_PAGE_SIZE_SHIFT (0)
#define MMU_MMU_CONFIG1_PAGE_CACHE_ENTRIES_MASK (0x0000FF00)
#define MMU_MMU_CONFIG1_PAGE_CACHE_ENTRIES_SHIFT (8)
#define MMU_MMU_CONFIG1_DIR_CACHE_ENTRIES_MASK (0x001F0000)
#define MMU_MMU_CONFIG1_DIR_CACHE_ENTRIES_SHIFT (16)
#define MMU_MMU_CONFIG1_BANDWIDTH_COUNT_SUPPORTED_MASK (0x01000000)
#define MMU_MMU_CONFIG1_BANDWIDTH_COUNT_SUPPORTED_SHIFT (24)
#define MMU_MMU_CONFIG1_STALL_COUNT_SUPPORTED_MASK (0x02000000)
#define MMU_MMU_CONFIG1_STALL_COUNT_SUPPORTED_SHIFT (25)
#define MMU_MMU_CONFIG1_LATENCY_COUNT_SUPPORTED_MASK (0x04000000)
#define MMU_MMU_CONFIG1_LATENCY_COUNT_SUPPORTED_SHIFT (26)
#define MMU_MMU_STATUS0_OFFSET (0x0088)
#define MMU_MMU_STATUS0_MMU_PF_N_RW_MASK (0x00000001)
#define MMU_MMU_STATUS0_MMU_PF_N_RW_SHIFT (0)
#define MMU_MMU_STATUS0_MMU_FAULT_ADDR_MASK (0xFFFFF000)
#define MMU_MMU_STATUS0_MMU_FAULT_ADDR_SHIFT (12)
#define MMU_MMU_STATUS1_OFFSET (0x008C)
#define MMU_MMU_STATUS1_MMU_FAULT_REQ_STAT_MASK (0x0000FFFF)
#define MMU_MMU_STATUS1_MMU_FAULT_REQ_STAT_SHIFT (0)
#define MMU_MMU_STATUS1_MMU_FAULT_REQ_ID_MASK (0x000F0000)
#define MMU_MMU_STATUS1_MMU_FAULT_REQ_ID_SHIFT (16)
#define MMU_MMU_STATUS1_MMU_FAULT_INDEX_MASK (0x03000000)
#define MMU_MMU_STATUS1_MMU_FAULT_INDEX_SHIFT (24)
#define MMU_MMU_STATUS1_MMU_FAULT_RNW_MASK (0x10000000)
#define MMU_MMU_STATUS1_MMU_FAULT_RNW_SHIFT (28)
#define MMU_MMU_MEM_REQ_OFFSET (0x0090)
#define MMU_MMU_MEM_REQ_TAG_OUTSTANDING_MASK (0x000003FF)
#define MMU_MMU_MEM_REQ_TAG_OUTSTANDING_SHIFT (0)
#define MMU_MMU_MEM_REQ_EXT_WRRESP_FAULT_MASK (0x00001000)
#define MMU_MMU_MEM_REQ_EXT_WRRESP_FAULT_SHIFT (12)
#define MMU_MMU_MEM_REQ_EXT_RDRESP_FAULT_MASK (0x00002000)
#define MMU_MMU_MEM_REQ_EXT_RDRESP_FAULT_SHIFT (13)
#define MMU_MMU_MEM_REQ_EXT_READ_BURST_FAULT_MASK (0x00004000)
#define MMU_MMU_MEM_REQ_EXT_READ_BURST_FAULT_SHIFT (14)
#define MMU_MMU_MEM_REQ_INT_PROTOCOL_FAULT_MASK (0x80000000)
#define MMU_MMU_MEM_REQ_INT_PROTOCOL_FAULT_SHIFT (31)
#define MMU_MMU_MEM_REQ_INT_PROTOCOL_FAULT_NO_REPS (16)
#define MMU_MMU_MEM_REQ_INT_PROTOCOL_FAULT_SIZE (1)
#define MMU_MMU_FAULT_SELECT_OFFSET (0x00A0)
#define MMU_MMU_FAULT_SELECT_MMU_FAULT_SELECT_MASK (0x0000000F)
#define MMU_MMU_FAULT_SELECT_MMU_FAULT_SELECT_SHIFT (0)
#define MMU_PROTOCOL_FAULT_OFFSET (0x00A8)
#define MMU_PROTOCOL_FAULT_FAULT_PAGE_BREAK_MASK (0x00000001)
#define MMU_PROTOCOL_FAULT_FAULT_PAGE_BREAK_SHIFT (0)
#define MMU_PROTOCOL_FAULT_FAULT_WRITE_MASK (0x00000010)
#define MMU_PROTOCOL_FAULT_FAULT_WRITE_SHIFT (4)
#define MMU_PROTOCOL_FAULT_FAULT_READ_MASK (0x00000020)
#define MMU_PROTOCOL_FAULT_FAULT_READ_SHIFT (5)
#define MMU_TOTAL_READ_REQ_OFFSET (0x0100)
#define MMU_TOTAL_READ_REQ_TOTAL_READ_REQ_MASK (0xFFFFFFFF)
#define MMU_TOTAL_READ_REQ_TOTAL_READ_REQ_SHIFT (0)
#define MMU_TOTAL_WRITE_REQ_OFFSET (0x0104)
#define MMU_TOTAL_WRITE_REQ_TOTAL_WRITE_REQ_MASK (0xFFFFFFFF)
#define MMU_TOTAL_WRITE_REQ_TOTAL_WRITE_REQ_SHIFT (0)
#define MMU_READS_LESS_64_REQ_OFFSET (0x0108)
#define MMU_READS_LESS_64_REQ_READS_LESS_64_REQ_MASK (0xFFFFFFFF)
#define MMU_READS_LESS_64_REQ_READS_LESS_64_REQ_SHIFT (0)
#define MMU_WRITES_LESS_64_REQ_OFFSET (0x010C)
#define MMU_WRITES_LESS_64_REQ_WRITES_LESS_64_REQ_MASK (0xFFFFFFFF)
#define MMU_WRITES_LESS_64_REQ_WRITES_LESS_64_REQ_SHIFT (0)
#define MMU_EXT_CMD_STALL_OFFSET (0x0120)
#define MMU_EXT_CMD_STALL_EXT_CMD_STALL_MASK (0xFFFFFFFF)
#define MMU_EXT_CMD_STALL_EXT_CMD_STALL_SHIFT (0)
#define MMU_WRITE_REQ_STALL_OFFSET (0x0124)
#define MMU_WRITE_REQ_STALL_WRITE_REQ_STALL_MASK (0xFFFFFFFF)
#define MMU_WRITE_REQ_STALL_WRITE_REQ_STALL_SHIFT (0)
#define MMU_MMU_MISS_STALL_OFFSET (0x0128)
#define MMU_MMU_MISS_STALL_MMU_MISS_STALL_MASK (0xFFFFFFFF)
#define MMU_MMU_MISS_STALL_MMU_MISS_STALL_SHIFT (0)
#define MMU_ADDRESS_STALL_OFFSET (0x012C)
#define MMU_ADDRESS_STALL_ADDRESS_STALL_MASK (0xFFFFFFFF)
#define MMU_ADDRESS_STALL_ADDRESS_STALL_SHIFT (0)
#define MMU_TAG_STALL_OFFSET (0x0130)
#define MMU_TAG_STALL_TAG_STALL_MASK (0xFFFFFFFF)
#define MMU_TAG_STALL_TAG_STALL_SHIFT (0)
#define MMU_PEAK_READ_OUTSTANDING_OFFSET (0x0140)
#define MMU_PEAK_READ_OUTSTANDING_PEAK_TAG_OUTSTANDING_MASK (0x000003FF)
#define MMU_PEAK_READ_OUTSTANDING_PEAK_TAG_OUTSTANDING_SHIFT (0)
#define MMU_PEAK_READ_OUTSTANDING_PEAK_READ_LATENCY_MASK (0xFFFF0000)
#define MMU_PEAK_READ_OUTSTANDING_PEAK_READ_LATENCY_SHIFT (16)
#define MMU_AVERAGE_READ_LATENCY_OFFSET (0x0144)
#define MMU_AVERAGE_READ_LATENCY_AVERAGE_READ_LATENCY_MASK (0xFFFFFFFF)
#define MMU_AVERAGE_READ_LATENCY_AVERAGE_READ_LATENCY_SHIFT (0)
#define MMU_STATISTICS_CONTROL_OFFSET (0x0160)
#define MMU_STATISTICS_CONTROL_BANDWIDTH_STATS_INIT_MASK (0x00000001)
#define MMU_STATISTICS_CONTROL_BANDWIDTH_STATS_INIT_SHIFT (0)
#define MMU_STATISTICS_CONTROL_STALL_STATS_INIT_MASK (0x00000002)
#define MMU_STATISTICS_CONTROL_STALL_STATS_INIT_SHIFT (1)
#define MMU_STATISTICS_CONTROL_LATENCY_STATS_INIT_MASK (0x00000004)
#define MMU_STATISTICS_CONTROL_LATENCY_STATS_INIT_SHIFT (2)
#define MMU_MMU_VERSION_OFFSET (0x01D0)
#define MMU_MMU_VERSION_MMU_MAJOR_REV_MASK (0x00FF0000)
#define MMU_MMU_VERSION_MMU_MAJOR_REV_SHIFT (16)
#define MMU_MMU_VERSION_MMU_MINOR_REV_MASK (0x0000FF00)
#define MMU_MMU_VERSION_MMU_MINOR_REV_SHIFT (8)
#define MMU_MMU_VERSION_MMU_MAINT_REV_MASK (0x000000FF)
#define MMU_MMU_VERSION_MMU_MAINT_REV_SHIFT (0)
#define MMU_BYTE_SIZE (0x01D4)
#endif