mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-24 02:01:36 +03:00
Move files from private-soc to parent controller directory. Bug 5054840 Change-Id: I8ec5e5b34f2226bbbd051f4313033153a096e5c1 Signed-off-by: Prakhar Srivastava <prasrivastav@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3312461 Reviewed-by: Bibek Basu <bbasu@nvidia.com> GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com> Reviewed-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
128 lines
4.7 KiB
C
128 lines
4.7 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/* SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION. All rights reserved. */
|
|
|
|
#ifndef TEGRA264_PCIE_XDMA_OSI_H
|
|
#define TEGRA264_PCIE_XDMA_OSI_H
|
|
|
|
#undef OSI_BIT
|
|
#define OSI_BIT(b) (1U << (b))
|
|
/** generates bit mask for 32 bit value */
|
|
#undef OSI_GENMASK
|
|
#define OSI_GENMASK(h, l) (((~0U) << (l)) & (~0U >> (31U - (h))))
|
|
|
|
#define XDMA_MSI_CFG_MASK 0x100
|
|
#define XDMA_MSI_CFG_MASK_STATUS_MSI BIT(8)
|
|
|
|
#define XDMA_MSI_CFG_LOCAL_ADDRESS_LO 0x104
|
|
#define XDMA_MSI_CFG_LOCAL_ADDRESS_HI 0x108
|
|
#define XDMA_MSI_CFG_REMOTE_ADDRESS_LO 0x10c
|
|
#define XDMA_MSI_CFG_REMOTE_ADDRESS_HI 0x110
|
|
|
|
/* Channel specific registers */
|
|
#define XDMA_CHANNEL_CTRL 0x2000
|
|
#define XDMA_CHANNEL_CTRL_MSI_CHANNEL_NUMBER OSI_GENMASK(11, 9)
|
|
#define XDMA_CHANNEL_CTRL_MSI_CHANNEL_SHIFT 9
|
|
#define XDMA_CHANNEL_CTRL_DMA_CMD_SOURCE OSI_BIT(2)
|
|
#define XDMA_CHANNEL_CTRL_DMA_OPERATION OSI_BIT(1)
|
|
#define XDMA_CHANNEL_CTRL_EN OSI_BIT(0)
|
|
|
|
#define XDMA_CHANNEL_DESCRIPTOR_LIST_POINTER_LOW 0x2020
|
|
#define XDMA_CHANNEL_DESCRIPTOR_LIST_POINTER_HIGH 0x2040
|
|
#define XDMA_CHANNEL_DESCRIPTOR_LIST_SIZE 0x2060
|
|
#define XDMA_CHANNEL_DESCRIPTOR_LIST_SIZE_DESCRIPTOR_COUNT OSI_GENMASK(15, 0)
|
|
|
|
#define XDMA_CHANNEL_SINGLE_TRANSFER_SOURCE_ADDRESS_LOW 0x2080
|
|
#define XDMA_CHANNEL_SINGLE_TRANSFER_SOURCE_ADDRESS_HIGH 0x20a0
|
|
#define XDMA_CHANNEL_SINGLE_TRANSFER_DESTINATION_ADDRESS_LOW 0x20c0
|
|
#define XDMA_CHANNEL_SINGLE_TRANSFER_DESTINATION_ADDRESS_HIGH 0x2100
|
|
#define XDMA_CHANNEL_SINGLE_TRANSFER_SIZE 0x2120
|
|
|
|
#define XDMA_CHANNEL_TRANSFER_DOORBELL 0x2140
|
|
#define XDMA_CHANNEL_TRANSFER_DOORBELL_DOORBELL BIT(0)
|
|
#define XDMA_CHANNEL_TRANSFER_DOORBELL_NUM_DESC_ADDED GENMASK(15, 8)
|
|
#define XDMA_CHANNEL_TRANSFER_DOORBELL_NUM_DESC_ADDED_SHIFT 8
|
|
|
|
#define XDMA_CHANNEL_STATUS 0x2160
|
|
#define XDMA_CHANNEL_STATUS_LAST_DESC_COMPLETED_ADDRESS_VALID BIT(9)
|
|
|
|
#define XDMA_CHANNEL_STATUS_LAST_DESC_COMPLETED_ADDRESS_LO 0x2280
|
|
#define XDMA_CHANNEL_STATUS_LAST_DESC_COMPLETED_ADDRESS_HI 0x22a0
|
|
|
|
#define XDMA_CHANNEL_STATUS_LAST_DESC_COMPLETED_INDEX 0x22c0
|
|
#define XDMA_CHANNEL_STATUS_LAST_DESC_COMPLETED_INDEX_VALUE GENMASK(15, 0)
|
|
|
|
#define XDMA_CHANNEL_FUNC_ERROR_STATUS 0x23e0
|
|
|
|
/* MSI channel registers */
|
|
#define XDMA_MSI_CHANNEL_CFG_INTR 0x2420
|
|
#define XDMA_MSI_CHANNEL_CFG_INTR_MASK OSI_BIT(0)
|
|
#define XDMA_MSI_CHANNEL_CFG_INTR_DESTINATION OSI_BIT(1)
|
|
|
|
#define XDMA_MSI_CHANNEL_CFG_INTR_ID 0x2440
|
|
|
|
#define XDMA_MSI_CHANNEL_CFG_INTR_MOD 0x2460
|
|
#define XDMA_MSI_CHANNEL_CFG_INTR_MOD_SCALE OSI_GENMASK(12, 10)
|
|
#define XDMA_MSI_CHANNEL_CFG_INTR_ID_VALUE OSI_GENMASK(9, 0)
|
|
|
|
#define XDMA_MSI_CHANNEL_PRIMARY_INTR_STATUS 0x2480
|
|
#define XDMA_MSI_CHANNEL_PRIMARY_INTR_STATUS_INTR_START_PROCESSING OSI_BIT(0)
|
|
#define XDMA_MSI_CHANNEL_PRIMARY_INTR_STATUS_INTR_END_PROCESSING OSI_BIT(1)
|
|
#define XDMA_MSI_CHANNEL_PRIMARY_INTR_STATUS_FUNC_ERR_VALID OSI_GENMASK(15, 8)
|
|
#define XDMA_MSI_CHANNEL_PRIMARY_INTR_STATUS_NEW_XFER_VALID OSI_GENMASK(23, 16)
|
|
|
|
#define XDMA_CHANNEL_DEBUG_REGISTER_4 0x2580
|
|
#define XDMA_CHANNEL_DEBUG_REGISTER_4_INTR_ENGINE_MSI_CHAN_ISR_INPROG_FSM GENMASK(3, 2)
|
|
#define XDMA_CHANNEL_DEBUG_REGISTER_4_INTR_ENGINE_MSI_CHAN_MSI_DISP_FSM GENMASK(5, 4)
|
|
#define XDMA_CHANNEL_DEBUG_REGISTER_4_INTR_ENGINE_MSI_CHAN_INTR_MOD_FSM BIT(6)
|
|
#define XDMA_CHANNEL_DEBUG_REGISTER_4_INTR_ENGINE_MSI_CHAN_MSI_DISP_SHADOW_GEN_STATUS_MSI BIT(9)
|
|
#define XDMA_CHANNEL_DEBUG_REGISTER_4_INTR_ENGINE_MSI_CHAN_MSI_DISP_SHADOW_FUNC_ERR_DETECTED BIT(8)
|
|
|
|
struct xdma_attr {
|
|
uint32_t wm:1;
|
|
};
|
|
|
|
struct xdma_hw_desc {
|
|
volatile union {
|
|
struct xdma_attr ctrl_e;
|
|
uint32_t attr;
|
|
} attr_reg;
|
|
uint32_t sar_low;
|
|
uint32_t sar_high;
|
|
uint32_t dar_low;
|
|
uint32_t dar_high;
|
|
uint32_t size;
|
|
uint32_t resv1;
|
|
uint32_t resv2;
|
|
};
|
|
|
|
static inline unsigned int xdma_common_rd(void __iomem *p, unsigned int offset)
|
|
{
|
|
return readl(p + offset);
|
|
}
|
|
|
|
static inline void xdma_common_wr(void __iomem *p, unsigned int val, unsigned int offset)
|
|
{
|
|
writel(val, p + offset);
|
|
}
|
|
|
|
static inline void xdma_channel_wr(void __iomem *p, unsigned char c, unsigned int val, u32 offset)
|
|
{
|
|
writel(val, (0x4 * c) + p + offset);
|
|
}
|
|
|
|
static inline unsigned int xdma_channel_rd(void __iomem *p, unsigned char c, u32 offset)
|
|
{
|
|
return readl((0x4 * c) + p + offset);
|
|
}
|
|
|
|
irqreturn_t xdma_irq(int irq, void *cookie);
|
|
irqreturn_t xdma_irq_handler(int irq, void *cookie);
|
|
|
|
void *tegra264_pcie_xdma_initialize(struct tegra_pcie_dma_init_info *info, void *priv_dma);
|
|
tegra_pcie_dma_status_t tegra264_pcie_xdma_set_msi(void *cookie, u64 msi_addr, u32 msi_data);
|
|
tegra_pcie_dma_status_t tegra264_pcie_xdma_submit_xfer(void *cookie,
|
|
struct tegra_pcie_dma_xfer_info *tx_info);
|
|
bool tegra264_pcie_xdma_stop(void *cookie);
|
|
void tegra264_pcie_xdma_deinit(void *cookie, void *priv_dma);
|
|
#endif // TEGRA264_PCIE_XDMA_OSI_H
|