xref: /openbmc/linux/sound/soc/tegra/tegra210_amx.h (revision 03ab8e6297acd1bc0eedaa050e2a1635c576fd11)
1*77f7df34SSameer Pujar /* SPDX-License-Identifier: GPL-2.0-only */
2*77f7df34SSameer Pujar /*
3*77f7df34SSameer Pujar  * tegra210_amx.h - Definitions for Tegra210 AMX driver
4*77f7df34SSameer Pujar  *
5*77f7df34SSameer Pujar  * Copyright (c) 2021, NVIDIA CORPORATION.  All rights reserved.
6*77f7df34SSameer Pujar  *
7*77f7df34SSameer Pujar  */
8*77f7df34SSameer Pujar 
9*77f7df34SSameer Pujar #ifndef __TEGRA210_AMX_H__
10*77f7df34SSameer Pujar #define __TEGRA210_AMX_H__
11*77f7df34SSameer Pujar 
12*77f7df34SSameer Pujar /* Register offsets from TEGRA210_AMX*_BASE */
13*77f7df34SSameer Pujar #define TEGRA210_AMX_RX_STATUS			0x0c
14*77f7df34SSameer Pujar #define TEGRA210_AMX_RX_INT_STATUS		0x10
15*77f7df34SSameer Pujar #define TEGRA210_AMX_RX_INT_MASK		0x14
16*77f7df34SSameer Pujar #define TEGRA210_AMX_RX_INT_SET			0x18
17*77f7df34SSameer Pujar #define TEGRA210_AMX_RX_INT_CLEAR		0x1c
18*77f7df34SSameer Pujar #define TEGRA210_AMX_RX1_CIF_CTRL		0x20
19*77f7df34SSameer Pujar #define TEGRA210_AMX_RX2_CIF_CTRL		0x24
20*77f7df34SSameer Pujar #define TEGRA210_AMX_RX3_CIF_CTRL		0x28
21*77f7df34SSameer Pujar #define TEGRA210_AMX_RX4_CIF_CTRL		0x2c
22*77f7df34SSameer Pujar #define TEGRA210_AMX_TX_STATUS			0x4c
23*77f7df34SSameer Pujar #define TEGRA210_AMX_TX_INT_STATUS		0x50
24*77f7df34SSameer Pujar #define TEGRA210_AMX_TX_INT_MASK		0x54
25*77f7df34SSameer Pujar #define TEGRA210_AMX_TX_INT_SET			0x58
26*77f7df34SSameer Pujar #define TEGRA210_AMX_TX_INT_CLEAR		0x5c
27*77f7df34SSameer Pujar #define TEGRA210_AMX_TX_CIF_CTRL		0x60
28*77f7df34SSameer Pujar #define TEGRA210_AMX_ENABLE			0x80
29*77f7df34SSameer Pujar #define TEGRA210_AMX_SOFT_RESET			0x84
30*77f7df34SSameer Pujar #define TEGRA210_AMX_CG				0x88
31*77f7df34SSameer Pujar #define TEGRA210_AMX_STATUS			0x8c
32*77f7df34SSameer Pujar #define TEGRA210_AMX_INT_STATUS			0x90
33*77f7df34SSameer Pujar #define TEGRA210_AMX_CTRL			0xa4
34*77f7df34SSameer Pujar #define TEGRA210_AMX_OUT_BYTE_EN0		0xa8
35*77f7df34SSameer Pujar #define TEGRA210_AMX_OUT_BYTE_EN1		0xac
36*77f7df34SSameer Pujar #define TEGRA210_AMX_CYA			0xb0
37*77f7df34SSameer Pujar #define TEGRA210_AMX_CFG_RAM_CTRL		0xb8
38*77f7df34SSameer Pujar #define TEGRA210_AMX_CFG_RAM_DATA		0xbc
39*77f7df34SSameer Pujar 
40*77f7df34SSameer Pujar #define TEGRA194_AMX_RX1_FRAME_PERIOD		0xc0
41*77f7df34SSameer Pujar #define TEGRA194_AMX_RX4_FRAME_PERIOD		0xcc
42*77f7df34SSameer Pujar #define TEGRA194_AMX_RX4_LAST_FRAME_PERIOD	0xdc
43*77f7df34SSameer Pujar 
44*77f7df34SSameer Pujar /* Fields in TEGRA210_AMX_ENABLE */
45*77f7df34SSameer Pujar #define TEGRA210_AMX_ENABLE_SHIFT			0
46*77f7df34SSameer Pujar 
47*77f7df34SSameer Pujar /* Fields in TEGRA210_AMX_CTRL */
48*77f7df34SSameer Pujar #define TEGRA210_AMX_CTRL_MSTR_RX_NUM_SHIFT		14
49*77f7df34SSameer Pujar #define TEGRA210_AMX_CTRL_MSTR_RX_NUM_MASK		(3 << TEGRA210_AMX_CTRL_MSTR_RX_NUM_SHIFT)
50*77f7df34SSameer Pujar 
51*77f7df34SSameer Pujar #define TEGRA210_AMX_CTRL_RX_DEP_SHIFT			12
52*77f7df34SSameer Pujar #define TEGRA210_AMX_CTRL_RX_DEP_MASK			(3 << TEGRA210_AMX_CTRL_RX_DEP_SHIFT)
53*77f7df34SSameer Pujar 
54*77f7df34SSameer Pujar /* Fields in TEGRA210_AMX_CFG_RAM_CTRL */
55*77f7df34SSameer Pujar #define TEGRA210_AMX_CFG_RAM_CTRL_RW_SHIFT		14
56*77f7df34SSameer Pujar #define TEGRA210_AMX_CFG_RAM_CTRL_RW_WRITE		(1 << TEGRA210_AMX_CFG_RAM_CTRL_RW_SHIFT)
57*77f7df34SSameer Pujar 
58*77f7df34SSameer Pujar #define TEGRA210_AMX_CFG_RAM_CTRL_ADDR_INIT_EN_SHIFT	13
59*77f7df34SSameer Pujar #define TEGRA210_AMX_CFG_RAM_CTRL_ADDR_INIT_EN		(1 << TEGRA210_AMX_CFG_RAM_CTRL_ADDR_INIT_EN_SHIFT)
60*77f7df34SSameer Pujar 
61*77f7df34SSameer Pujar #define TEGRA210_AMX_CFG_RAM_CTRL_SEQ_ACCESS_EN_SHIFT	12
62*77f7df34SSameer Pujar #define TEGRA210_AMX_CFG_RAM_CTRL_SEQ_ACCESS_EN		(1 << TEGRA210_AMX_CFG_RAM_CTRL_SEQ_ACCESS_EN_SHIFT)
63*77f7df34SSameer Pujar 
64*77f7df34SSameer Pujar #define TEGRA210_AMX_CFG_CTRL_RAM_ADDR_SHIFT		0
65*77f7df34SSameer Pujar 
66*77f7df34SSameer Pujar /* Fields in TEGRA210_AMX_SOFT_RESET */
67*77f7df34SSameer Pujar #define TEGRA210_AMX_SOFT_RESET_SOFT_EN			1
68*77f7df34SSameer Pujar #define TEGRA210_AMX_SOFT_RESET_SOFT_RESET_MASK		TEGRA210_AMX_SOFT_RESET_SOFT_EN
69*77f7df34SSameer Pujar 
70*77f7df34SSameer Pujar #define TEGRA210_AMX_AUDIOCIF_CH_STRIDE		4
71*77f7df34SSameer Pujar #define TEGRA210_AMX_RAM_DEPTH			16
72*77f7df34SSameer Pujar #define TEGRA210_AMX_MAP_STREAM_NUM_SHIFT	6
73*77f7df34SSameer Pujar #define TEGRA210_AMX_MAP_WORD_NUM_SHIFT		2
74*77f7df34SSameer Pujar #define TEGRA210_AMX_MAP_BYTE_NUM_SHIFT		0
75*77f7df34SSameer Pujar 
76*77f7df34SSameer Pujar enum {
77*77f7df34SSameer Pujar 	TEGRA210_AMX_WAIT_ON_ALL,
78*77f7df34SSameer Pujar 	TEGRA210_AMX_WAIT_ON_ANY,
79*77f7df34SSameer Pujar };
80*77f7df34SSameer Pujar 
81*77f7df34SSameer Pujar struct tegra210_amx_soc_data {
82*77f7df34SSameer Pujar 	const struct regmap_config *regmap_conf;
83*77f7df34SSameer Pujar 	bool auto_disable;
84*77f7df34SSameer Pujar };
85*77f7df34SSameer Pujar 
86*77f7df34SSameer Pujar struct tegra210_amx {
87*77f7df34SSameer Pujar 	const struct tegra210_amx_soc_data *soc_data;
88*77f7df34SSameer Pujar 	unsigned int map[TEGRA210_AMX_RAM_DEPTH];
89*77f7df34SSameer Pujar 	struct regmap *regmap;
90*77f7df34SSameer Pujar 	unsigned int byte_mask[2];
91*77f7df34SSameer Pujar };
92*77f7df34SSameer Pujar 
93*77f7df34SSameer Pujar #endif
94