tegrakernel/hardware/nvidia/soc/tegra/kernel-include/dt-bindings/memory/tegra-swgroup.h

273 lines
9.2 KiB
C

/*
* This header provides constants for binding nvidia,swgroup ID
*
* Copyright (c) 2014-2018 NVIDIA CORPORATION, All rights reserved.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* 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 _DT_BINDINGS_MEMORY_TEGRA_SWGROUP_H
#define _DT_BINDINGS_MEMORY_TEGRA_SWGROUP_H
#define TEGRA_SWGROUP_INVALID 0xff /* 0x238 */
#define TEGRA_SWGROUP_AFI 0 /* 0x238 */
#define TEGRA_SWGROUP_AVPC 1 /* 0x23c */
#define TEGRA_SWGROUP_DC 2 /* 0x240 */
#define TEGRA_SWGROUP_DCB 3 /* 0x244 */
#define TEGRA_SWGROUP_EPP 4 /* 0x248 */
#define TEGRA_SWGROUP_G2 5 /* 0x24c */
#define TEGRA_SWGROUP_HC 6 /* 0x250 */
#define TEGRA_SWGROUP_HDA 7 /* 0x254 */
#define TEGRA_SWGROUP_ISP 8 /* 0x258 */
#define TEGRA_SWGROUP_ISP2 8
#define TEGRA_SWGROUP_DC14 9 /* 0x490 *//* Exceptional non-linear */
#define TEGRA_SWGROUP_DC12 10 /* 0xa88 *//* Exceptional non-linear */
#define TEGRA_SWGROUP_MPE 11 /* 0x264 */
#define TEGRA_SWGROUP_MSENC 11
#define TEGRA_SWGROUP_NVENC 11
#define TEGRA_SWGROUP_NV 12 /* 0x268 */
#define TEGRA_SWGROUP_NV2 13 /* 0x26c */
#define TEGRA_SWGROUP_PPCS 14 /* 0x270 */
#define TEGRA_SWGROUP_SATA2 15 /* 0x274 */
#define TEGRA_SWGROUP_SATA 16 /* 0x278 */
#define TEGRA_SWGROUP_VDE 17 /* 0x27c */
#define TEGRA_SWGROUP_VI 18 /* 0x280 */
#define TEGRA_SWGROUP_VII2C 18 /* 0x280 */
#define TEGRA_SWGROUP_VIC 19 /* 0x284 */
#define TEGRA_SWGROUP_XUSB_HOST 20 /* 0x288 */
#define TEGRA_SWGROUP_XUSB_DEV 21 /* 0x28c */
#define TEGRA_SWGROUP_A9AVP 22 /* 0x290 */
#define TEGRA_SWGROUP_TSEC 23 /* 0x294 */
#define TEGRA_SWGROUP_PPCS1 24 /* 0x298 */
#define TEGRA_SWGROUP_SDMMC1A 25 /* 0xa94 *//* Linear shift again */
#define TEGRA_SWGROUP_SDMMC2A 26 /* 0xa98 */
#define TEGRA_SWGROUP_SDMMC3A 27 /* 0xa9c */
#define TEGRA_SWGROUP_SDMMC4A 28 /* 0xaa0 */
#define TEGRA_SWGROUP_ISP2B 29 /* 0xaa4 */
#define TEGRA_SWGROUP_GPU 30 /* 0xaa8, DO NOT USE THIS */
#define TEGRA_SWGROUP_GPUB 31 /* 0xaac */
#define TEGRA_SWGROUP_PPCS2 32 /* 0xab0 */
#define TEGRA_SWGROUP_NVDEC 33 /* 0xab4 */
#define TEGRA_SWGROUP_APE 34 /* 0xab8 */
#define TEGRA_SWGROUP_SE 35 /* 0xabc */
#define TEGRA_SWGROUP_NVJPG 36 /* 0xac0 */
#define TEGRA_SWGROUP_HC1 37 /* 0xac4 */
#define TEGRA_SWGROUP_SE1 38 /* 0xac8 */
#define TEGRA_SWGROUP_AXIAP 39 /* 0xacc */
#define TEGRA_SWGROUP_ETR 40 /* 0xad0 */
#define TEGRA_SWGROUP_TSECB 41 /* 0xad4 */
#define TEGRA_SWGROUP_TSEC1 42 /* 0xad8 */
#define TEGRA_SWGROUP_TSECB1 43 /* 0xadc */
#define TEGRA_SWGROUP_NVDEC1 44 /* 0xae0 */
/* Reserved 45 */
#define TEGRA_SWGROUP_AXIS 46 /* 0xae8 */
#define TEGRA_SWGROUP_EQOS 47 /* 0xaec */
#define TEGRA_SWGROUP_UFSHC 48 /* 0xaf0 */
#define TEGRA_SWGROUP_NVDISPLAY 49 /* 0xaf4 */
#define TEGRA_SWGROUP_BPMP 50 /* 0xaf8 */
#define TEGRA_SWGROUP_AON 51 /* 0xafc */
#define TEGRA_SWGROUP_SMMU_TEST 52
#define TEGRA_SWGROUP_ISP2B1 53 /* 0x808, SE2 on t210b01 */
/* Reserved 50 */
#define TWO_U32_OF_U64(x) ((x) & 0xffffffff) ((x) >> 32)
#define TEGRA_SWGROUP_BIT(x) (1ULL << TEGRA_SWGROUP_##x)
#define TEGRA_SWGROUP_CELLS(x) TWO_U32_OF_U64(TEGRA_SWGROUP_BIT(x))
#define TEGRA_SWGROUP_CELLS2(x1, x2) \
TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
TEGRA_SWGROUP_BIT(x2))
#define TEGRA_SWGROUP_CELLS3(x1, x2, x3) \
TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
TEGRA_SWGROUP_BIT(x2) | \
TEGRA_SWGROUP_BIT(x3))
#define TEGRA_SWGROUP_CELLS4(x1, x2, x3, x4) \
TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
TEGRA_SWGROUP_BIT(x2) | \
TEGRA_SWGROUP_BIT(x3) | \
TEGRA_SWGROUP_BIT(x4))
#define TEGRA_SWGROUP_CELLS5(x1, x2, x3, x4, x5) \
TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
TEGRA_SWGROUP_BIT(x2) | \
TEGRA_SWGROUP_BIT(x3) | \
TEGRA_SWGROUP_BIT(x4) | \
TEGRA_SWGROUP_BIT(x5))
#define TEGRA_SWGROUP_CELLS9(x1, x2, x3, x4, x5, x6, x7, x8, x9) \
TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
TEGRA_SWGROUP_BIT(x2) | \
TEGRA_SWGROUP_BIT(x3) | \
TEGRA_SWGROUP_BIT(x4) | \
TEGRA_SWGROUP_BIT(x5) | \
TEGRA_SWGROUP_BIT(x6) | \
TEGRA_SWGROUP_BIT(x7) | \
TEGRA_SWGROUP_BIT(x8) | \
TEGRA_SWGROUP_BIT(x9))
#define TEGRA_SWGROUP_CELLS12(x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12) \
TWO_U32_OF_U64( TEGRA_SWGROUP_BIT(x1) | \
TEGRA_SWGROUP_BIT(x2) | \
TEGRA_SWGROUP_BIT(x3) | \
TEGRA_SWGROUP_BIT(x4) | \
TEGRA_SWGROUP_BIT(x5) | \
TEGRA_SWGROUP_BIT(x6) | \
TEGRA_SWGROUP_BIT(x7) | \
TEGRA_SWGROUP_BIT(x8) | \
TEGRA_SWGROUP_BIT(x9) | \
TEGRA_SWGROUP_BIT(x10)| \
TEGRA_SWGROUP_BIT(x11)| \
TEGRA_SWGROUP_BIT(x12))
#define TEGRA_SWGROUP_MAX 64
#define SWGIDS_ERROR_CODE (~0ULL)
#define swgids_is_error(x) ((x) == SWGIDS_ERROR_CODE)
/*
* The above definitions are for the older tegra chips using the Tegra SMMU. For
* tegra chips using the ARM SMMU the following is used. The notion of bit maps
* is removed since they are not very scalable.
*/
/* Host clients. */
#define TEGRA_SID_HC 0x1 /* 1 */
#define TEGRA_SID_VIC 0x3 /* 3 */
#define TEGRA_SID_VI 0x4 /* 4 */
#define TEGRA_SID_ISP 0x5 /* 5 */
#define TEGRA_SID_NVDEC 0x6 /* 6 */
#define TEGRA_SID_NVENC 0x7 /* 7 */
#define TEGRA_SID_NVJPG 0x8 /* 8 */
#define TEGRA_SID_NVDISPLAY 0x9 /* 9 */
#define TEGRA_SID_TSEC 0xa /* 10 */
#define TEGRA_SID_TSECB 0xb /* 11 */
#define TEGRA_SID_SE 0xc /* 12 */
#define TEGRA_SID_SE1 0xd /* 13 */
/* GPU clients. */
#define TEGRA_SID_GPUB 0x10 /* 16 */
/* Other SoC clients */
#define TEGRA_SID_AFI 0x11 /* 17 */
#define TEGRA_SID_HDA 0x12 /* 18 */
#define TEGRA_SID_ETR 0x13 /* 19 */
#define TEGRA_SID_EQOS 0x14 /* 20 */
#define TEGRA_SID_UFSHC 0x15 /* 21 */
#define TEGRA_SID_AON 0x16 /* 22 */
#define TEGRA_SID_SDMMC4A 0x17 /* 23 */
#define TEGRA_SID_SDMMC3A 0x18 /* 24 */
#define TEGRA_SID_SDMMC2A 0x19 /* 25 */
#define TEGRA_SID_SDMMC1A 0x1a /* 26 */
#define TEGRA_SID_XUSB_HOST 0x1b /* 27 */
#define TEGRA_SID_XUSB_DEV 0x1c /* 28 */
#define TEGRA_SID_SATA2 0x1d /* 29 */
#define TEGRA_SID_APE 0x1e /* 30 */
/*
* The BPMP has hard coded their SID value in their FW which is not built
* in the normal Linux tree. As a result, changing the SID requires a
* considerable amount of work.
*/
#define TEGRA_SID_BPMP 0x32 /* 50 */
/* For smmu tests */
#define TEGRA_SID_SMMU_TEST 0x33 /* 51 */
/*
* This is the t18x specific component of the new SID dt-binding.
*/
#define TEGRA_SID_NVCSI 0x2 /* 2 */
#define TEGRA_SID_SE2 0xe /* 14 */
#define TEGRA_SID_SE3 0xf /* 15 */
#define TEGRA_SID_SCE 0x1f /* 31 */
/* The GPC DMA clients. */
#define TEGRA_SID_GPCDMA_0 0x20 /* 32 */
#define TEGRA_SID_GPCDMA_1 0x21 /* 33 */
#define TEGRA_SID_GPCDMA_2 0x22 /* 34 */
#define TEGRA_SID_GPCDMA_3 0x23 /* 35 */
#define TEGRA_SID_GPCDMA_4 0x24 /* 36 */
#define TEGRA_SID_GPCDMA_5 0x25 /* 37 */
#define TEGRA_SID_GPCDMA_6 0x26 /* 38 */
#define TEGRA_SID_GPCDMA_7 0x27 /* 39 */
/* The APE DMA Clients. */
#define TEGRA_SID_APE_1 0x28 /* 40 */
#define TEGRA_SID_APE_2 0x29 /* 41 */
/* The Camera RTCPU. */
#define TEGRA_SID_RCE 0x2a /* 42 */
/* The Camera RTCPU on Host1x address space. */
#define TEGRA_SID_RCE_1X 0x2b /* 43 */
/* The APE DMA Clients. */
#define TEGRA_SID_APE_3 0x2c /* 44 */
/* The Camera RTCPU running on APE */
#define TEGRA_SID_APE_CAM 0x2d /* 45 */
#define TEGRA_SID_APE_CAM_1X 0x2e /* 46 */
/* Host1x virtualization clients. */
#define TEGRA_SID_HOST1X_CTX0 0x38 /* 56 */
#define TEGRA_SID_HOST1X_CTX1 0x39 /* 57 */
#define TEGRA_SID_HOST1X_CTX2 0x3a /* 58 */
#define TEGRA_SID_HOST1X_CTX3 0x3b /* 59 */
#define TEGRA_SID_HOST1X_CTX4 0x3c /* 60 */
#define TEGRA_SID_HOST1X_CTX5 0x3d /* 61 */
#define TEGRA_SID_HOST1X_CTX6 0x3e /* 62 */
#define TEGRA_SID_HOST1X_CTX7 0x3f /* 63 */
/* Host1x command buffers */
#define TEGRA_SID_HC_VM0 0x40
#define TEGRA_SID_HC_VM1 0x41
#define TEGRA_SID_HC_VM2 0x42
#define TEGRA_SID_HC_VM3 0x43
#define TEGRA_SID_HC_VM4 0x44
#define TEGRA_SID_HC_VM5 0x45
#define TEGRA_SID_HC_VM6 0x46
#define TEGRA_SID_HC_VM7 0x47
/* SE data buffers */
#define TEGRA_SID_SE_VM0 0x48
#define TEGRA_SID_SE_VM1 0x49
#define TEGRA_SID_SE_VM2 0x4a
#define TEGRA_SID_SE_VM3 0x4b
#define TEGRA_SID_SE_VM4 0x4c
#define TEGRA_SID_SE_VM5 0x4d
#define TEGRA_SID_SE_VM6 0x4e
#define TEGRA_SID_SE_VM7 0x4f
/* XUSB virtual functions */
#define TEGRA_SID_XUSB_VF0 0x5d
#define TEGRA_SID_XUSB_VF1 0x5e
#define TEGRA_SID_XUSB_VF2 0x5f
#define TEGRA_SID_XUSB_VF3 0x60
/* Special clients */
#define TEGRA_SID_PASSTHROUGH 0x7f
#define TEGRA_SID_INVALID 0x0
/*
* These macros will be removed once the bitmap problem is sorted out. Until
* then this is equivalent to TEGRA_SWGROUP_CELLS() only with TEGRA_SID_*
* instead of TEGRA_SWGROUP_*.
*/
#define TEGRA_SID(x) (TEGRA_SID_ ## x)
/*
* These are unique id's that the IOMMU uses to put different
* devices into the same IOMMU group and shared address space
* Add this to a devices iommu-group-id property
*/
#define TEGRA_IOMMU_GROUP_HOST1X 0x1
#define TEGRA_IOMMU_GROUP_APE 0x2
#define TEGRA_IOMMU_GROUP_RTCPU 0x3
#define TEGRA_IOMMU_GROUP_SE 0x4
#endif /* _DT_BINDINGS_MEMORY_TEGRA_SWGROUP_H */