blob: f258e8a561c88f3d5fd02136534cf2b5eef6797d [file] [log] [blame]
/*
* include/linux/amlogic/media/utils/vdec_reg.h
*
* Copyright (C) 2017 Amlogic, Inc. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
* more details.
*
*/
#ifndef VDEC_REG_H
#define VDEC_REG_H
#include <linux/kernel.h>
#include <linux/amlogic/media/video_sink/video.h>
#include <linux/amlogic/iomap.h>
#include <linux/io.h>
#include <linux/amlogic/media/registers/register.h>
#include <linux/amlogic/media/registers/register_ops.h>
#define READ_DMCREG(r) codec_dmcbus_read(r)
#define WRITE_DMCREG(r, val) codec_dmcbus_write(r, val)
#define READ_AOREG(r) codec_aobus_read(r)
#define WRITE_AOREG(r, val) codec_aobus_write(r, val)
#define READ_VREG(r) codec_dosbus_read(r)
#define WRITE_VREG(r, val) codec_dosbus_write(r, val)
#define BASE_IRQ 32
#define AM_IRQ(reg) (reg + BASE_IRQ)
#define INT_DOS_MAILBOX_0 AM_IRQ(43)
#define INT_DOS_MAILBOX_1 AM_IRQ(44)
#define INT_DOS_MAILBOX_2 AM_IRQ(45)
#define INT_VIU_VSYNC AM_IRQ(3)
#define INT_DEMUX AM_IRQ(23)
#define INT_DEMUX_1 AM_IRQ(5)
#define INT_DEMUX_2 AM_IRQ(53)
#define INT_ASYNC_FIFO_FILL AM_IRQ(18)
#define INT_ASYNC_FIFO_FLUSH AM_IRQ(19)
#define INT_ASYNC_FIFO2_FILL AM_IRQ(24)
#define INT_ASYNC_FIFO2_FLUSH AM_IRQ(25)
#define INT_PARSER AM_IRQ(32)
/* #if MESON_CPU_TYPE >= MESON_CPU_TYPE_MESON8 */
/*
*#define READ_AOREG(r) (__raw_readl((volatile void __iomem *)\
*AOBUS_REG_ADDR(r)))
*/
/*
*#define WRITE_AOREG(r, val) __raw_writel(val,\
* (volatile void __iomem *)(AOBUS_REG_ADDR(r)))'
*/
/* aml_read_vcbus(unsigned int reg) */
#define INT_VDEC INT_DOS_MAILBOX_1
#define INT_VDEC2 INT_DOS_MAILBOX_0
/* #else */
/* /#define INT_VDEC INT_MAILBOX_1A */
/* /#endif */
/* static inline u32 READ_VREG(u32 r) */
/* { */
/* if (((r) > 0x2000) && ((r) < 0x3000) && !vdec_on(2)) dump_stack(); */
/* return __raw_readl((volatile void __iomem *)DOS_REG_ADDR(r)); */
/* } */
/* static inline void WRITE_VREG(u32 r, u32 val) */
/* { */
/* if (((r) > 0x2000) && ((r) < 0x3000) && !vdec_on(2)) dump_stack(); */
/* __raw_writel(val, (volatile void __iomem *)(DOS_REG_ADDR(r))); */
/* } */
#define WRITE_VREG_BITS(r, val, start, len) \
WRITE_VREG(r, (READ_VREG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define SET_VREG_MASK(r, mask) WRITE_VREG(r, READ_VREG(r) | (mask))
#define CLEAR_VREG_MASK(r, mask) WRITE_VREG(r, READ_VREG(r) & ~(mask))
#define READ_HREG(r) codec_dosbus_read(r|0x1000)
#define WRITE_HREG(r, val) codec_dosbus_write(r|0x1000, val)
#define WRITE_HREG_BITS(r, val, start, len) \
WRITE_HREG(r, (READ_HREG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define SET_HREG_MASK(r, mask) WRITE_HREG(r, READ_HREG(r) | (mask))
#define CLEAR_HREG_MASK(r, mask) WRITE_HREG(r, READ_HREG(r) & ~(mask))
/*TODO */
#define READ_SEC_REG(r)
#define WRITE_SEC_REG(r, val)
#define WRITE_SEC_REG_BITS(r, val, start, len) \
WRITE_SEC_REG(r, (READ_SEC_REG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define WRITE_MPEG_REG(r, val) codec_cbus_write(r, val)
#define READ_MPEG_REG(r) codec_cbus_read(r)
#define WRITE_MPEG_REG_BITS(r, val, start, len) \
WRITE_MPEG_REG(r, (READ_MPEG_REG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define CLEAR_MPEG_REG_MASK(r, mask)\
WRITE_MPEG_REG(r, READ_MPEG_REG(r) & ~(mask))
#define SET_MPEG_REG_MASK(r, mask)\
WRITE_MPEG_REG(r, READ_MPEG_REG(r) | (mask))
#define WRITE_PARSER_REG(r, val) codec_parsbus_write(r, val)
#define READ_PARSER_REG(r) codec_parsbus_read(r)
#define WRITE_PARSER_REG_BITS(r, val, start, len) \
WRITE_PARSER_REG(r, (READ_PARSER_REG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define CLEAR_PARSER_REG_MASK(r, mask)\
WRITE_PARSER_REG(r, READ_PARSER_REG(r) & ~(mask))
#define SET_PARSER_REG_MASK(r, mask)\
WRITE_PARSER_REG(r, READ_PARSER_REG(r) | (mask))
#define WRITE_HHI_REG(r, val) codec_hhibus_write(r, val)
#define READ_HHI_REG(r) codec_hhibus_read(r)
#define WRITE_HHI_REG_BITS(r, val, start, len) \
WRITE_HHI_REG(r, (READ_HHI_REG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define WRITE_AIU_REG(r, val) codec_aiubus_write(r, val)
#define READ_AIU_REG(r) codec_aiubus_read(r)
#define WRITE_AIU_REG_BITS(r, val, start, len) \
WRITE_AIU_REG(r, (READ_AIU_REG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define CLEAR_AIU_REG_MASK(r, mask)\
WRITE_AIU_REG(r, READ_AIU_REG(r) & ~(mask))
#define SET_AIU_REG_MASK(r, mask)\
WRITE_AIU_REG(r, READ_AIU_REG(r) | (mask))
#define WRITE_DEMUX_REG(r, val) codec_demuxbus_write(r, val)
#define READ_DEMUX_REG(r) codec_demuxbus_read(r)
#define WRITE_DEMUX_REG_BITS(r, val, start, len) \
WRITE_DEMUX_REG(r, (READ_DEMUX_REG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define CLEAR_DEMUX_REG_MASK(r, mask)\
WRITE_DEMUX_REG(r, READ_DEMUX_REG(r) & ~(mask))
#define SET_DEMUX_REG_MASK(r, mask)\
WRITE_DEMUX_REG(r, READ_DEMUX_REG(r) | (mask))
#define WRITE_RESET_REG(r, val) codec_resetbus_write(r, val)
#define READ_RESET_REG(r) codec_resetbus_read(r)
#define WRITE_RESET_REG_BITS(r, val, start, len) \
WRITE_RESET_REG(r, (READ_RESET_REG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define CLEAR_RESET_REG_MASK(r, mask)\
WRITE_RESET_REG(r, READ_RESET_REG(r) & ~(mask))
#define SET_RESET_REG_MASK(r, mask)\
WRITE_RESET_REG(r, READ_RESET_REG(r) | (mask))
#define WRITE_EFUSE_REG(r, val) codec_efusebus_write(r, val)
#define READ_EFUSE_REG(r) codec_efusebus_read(r)
#define WRITE_EFUSE_REG_BITS(r, val, start, len) \
WRITE_EFUSE_REG(r, (READ_EFUSE_REG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define CLEAR_EFUSE_REG_MASK(r, mask)\
WRITE_EFUSE_REG(r, READ_EFUSE_REG(r) & ~(mask))
#define SET_EFUSE_REG_MASK(r, mask)\
WRITE_EFUSE_REG(r, READ_EFUSE_REG(r) | (mask))
#define ASSIST_MBOX1_CLR_REG VDEC_ASSIST_MBOX1_CLR_REG
#define ASSIST_MBOX1_MASK VDEC_ASSIST_MBOX1_MASK
#define ASSIST_AMR1_INT0 VDEC_ASSIST_AMR1_INT0
#define ASSIST_AMR1_INT1 VDEC_ASSIST_AMR1_INT1
#define ASSIST_AMR1_INT2 VDEC_ASSIST_AMR1_INT2
#define ASSIST_AMR1_INT3 VDEC_ASSIST_AMR1_INT3
#define ASSIST_AMR1_INT4 VDEC_ASSIST_AMR1_INT4
#define ASSIST_AMR1_INT5 VDEC_ASSIST_AMR1_INT5
#define ASSIST_AMR1_INT6 VDEC_ASSIST_AMR1_INT6
#define ASSIST_AMR1_INT7 VDEC_ASSIST_AMR1_INT7
#define ASSIST_AMR1_INT8 VDEC_ASSIST_AMR1_INT8
#define ASSIST_AMR1_INT9 VDEC_ASSIST_AMR1_INT9
/*TODO reg*/
#define READ_VCBUS_REG(r) codec_vcbus_read(r)
#define WRITE_VCBUS_REG(r, val) codec_vcbus_write(r, val)
#define WRITE_VCBUS_REG_BITS(r, val, start, len)\
WRITE_VCBUS_REG(r, (READ_VCBUS_REG(r) & ~(((1L<<(len))-1)<<(start)))|\
((unsigned int)((val)&((1L<<(len))-1)) << (start)))
#define CLEAR_VCBUS_REG_MASK(r, mask)\
WRITE_VCBUS_REG(r, READ_VCBUS_REG(r) & ~(mask))
#define SET_VCBUS_REG_MASK(r, mask)\
WRITE_VCBUS_REG(r, READ_VCBUS_REG(r) | (mask))
/****************logo relative part *****************************************/
#define ASSIST_MBOX1_CLR_REG VDEC_ASSIST_MBOX1_CLR_REG
#define ASSIST_MBOX1_MASK VDEC_ASSIST_MBOX1_MASK
#define RESET_PSCALE (1<<4)
#define RESET_IQIDCT (1<<2)
#define RESET_MC (1<<3)
#define MEM_BUFCTRL_MANUAL (1<<1)
#define MEM_BUFCTRL_INIT (1<<0)
#define MEM_LEVEL_CNT_BIT 18
#define MEM_FIFO_CNT_BIT 16
#define MEM_FILL_ON_LEVEL (1<<10)
#define MEM_CTRL_EMPTY_EN (1<<2)
#define MEM_CTRL_FILL_EN (1<<1)
#define MEM_CTRL_INIT (1<<0)
#ifndef CONFIG_AMLOGIC_MEDIA_VSYNC_RDMA
#define VSYNC_WR_MPEG_REG(adr, val) WRITE_VCBUS_REG(adr, val)
#define VSYNC_RD_MPEG_REG(adr) READ_VCBUS_REG(adr)
#define VSYNC_WR_MPEG_REG_BITS(adr, val, start, len) \
WRITE_VCBUS_REG_BITS(adr, val, start, len)
#else
extern int VSYNC_WR_MPEG_REG_BITS(u32 adr, u32 val, u32 start, u32 len);
extern u32 VSYNC_RD_MPEG_REG(u32 adr);
extern int VSYNC_WR_MPEG_REG(u32 adr, u32 val);
#endif
#endif /* VDEC_REG_H */