295 lines
7.9 KiB
C
295 lines
7.9 KiB
C
|
/*
|
||
|
* Copyright 2020 NXP
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* SPDX-License-Identifier: BSD-3-Clause
|
||
|
*/
|
||
|
|
||
|
#ifndef _FSL_NIC301_H_
|
||
|
#define _FSL_NIC301_H_
|
||
|
|
||
|
#include "fsl_common.h"
|
||
|
|
||
|
/*!
|
||
|
* @addtogroup nic301
|
||
|
* @{
|
||
|
*/
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* Definitions
|
||
|
******************************************************************************/
|
||
|
|
||
|
/* Component ID definition, used by tools. */
|
||
|
#ifndef FSL_COMPONENT_ID
|
||
|
#define FSL_COMPONENT_ID "platform.drivers.nic301"
|
||
|
#endif
|
||
|
|
||
|
/*! @name Driver version */
|
||
|
/*@{*/
|
||
|
/*! @brief NIC301 driver version 2.0.0. */
|
||
|
#define FSL_NIC301_DRIVER_VERSION (MAKE_VERSION(2U, 0U, 0U))
|
||
|
/*@}*/
|
||
|
|
||
|
#define GPV1_BASE (0x41100000UL)
|
||
|
#define GPV4_BASE (0x41400000UL)
|
||
|
|
||
|
#define NIC_FN_MOD2_OFFSET (0x024UL)
|
||
|
#define NIC_FN_MOD_AHB_OFFSET (0x028UL)
|
||
|
#define NIC_READ_QOS_OFFSET (0x100UL)
|
||
|
#define NIC_WRITE_QOS_OFFSET (0x104UL)
|
||
|
#define NIC_FN_MOD_OFFSET (0x108UL)
|
||
|
#define NIC_WR_TIDEMARK_OFFSET (0x040UL)
|
||
|
|
||
|
#define NIC_DCP_BASE (GPV1_BASE + 0x42000)
|
||
|
#define NIC_ENET_BASE (GPV1_BASE + 0x43000)
|
||
|
#define NIC_USBO2_BASE (GPV1_BASE + 0x44000)
|
||
|
#define NIC_USDHC1_BASE (GPV1_BASE + 0x45000)
|
||
|
#define NIC_USDHC2_BASE (GPV1_BASE + 0x46000)
|
||
|
#define NIC_TestPort_BASE (GPV1_BASE + 0x47000)
|
||
|
|
||
|
#define NIC_CM7_BASE (GPV4_BASE + 0x42000)
|
||
|
#define NIC_DMA_BASE (GPV4_BASE + 0x43000)
|
||
|
|
||
|
#define NIC_QOS_MASK (0xF)
|
||
|
#define NIC_WR_TIDEMARK_MASK (0x7)
|
||
|
#define NIC_FN_MOD_AHB_MASK (0x7)
|
||
|
#define NIC_FN_MOD_MASK (0x1)
|
||
|
#define NIC_FN_MOD2_MASK (0x1)
|
||
|
|
||
|
typedef enum _nic_reg
|
||
|
{
|
||
|
/* read_qos */
|
||
|
kNIC_REG_READ_QOS_DCP = NIC_DCP_BASE + NIC_READ_QOS_OFFSET,
|
||
|
kNIC_REG_READ_QOS_ENET = NIC_ENET_BASE + NIC_READ_QOS_OFFSET,
|
||
|
kNIC_REG_READ_QOS_USBO2 = NIC_USBO2_BASE + NIC_READ_QOS_OFFSET,
|
||
|
kNIC_REG_READ_QOS_USDHC1 = NIC_USDHC1_BASE + NIC_READ_QOS_OFFSET,
|
||
|
kNIC_REG_READ_QOS_USDHC2 = NIC_USDHC2_BASE + NIC_READ_QOS_OFFSET,
|
||
|
kNIC_REG_READ_QOS_TestPort = NIC_TestPort_BASE + NIC_READ_QOS_OFFSET,
|
||
|
kNIC_REG_READ_QOS_CM7 = NIC_CM7_BASE + NIC_READ_QOS_OFFSET,
|
||
|
kNIC_REG_READ_QOS_DMA = NIC_DMA_BASE + NIC_READ_QOS_OFFSET,
|
||
|
|
||
|
/* write_qos */
|
||
|
kNIC_REG_WRITE_QOS_DCP = NIC_DCP_BASE + NIC_WRITE_QOS_OFFSET,
|
||
|
kNIC_REG_WRITE_QOS_ENET = NIC_ENET_BASE + NIC_WRITE_QOS_OFFSET,
|
||
|
kNIC_REG_WRITE_QOS_USBO2 = NIC_USBO2_BASE + NIC_WRITE_QOS_OFFSET,
|
||
|
kNIC_REG_WRITE_QOS_USDHC1 = NIC_USDHC1_BASE + NIC_WRITE_QOS_OFFSET,
|
||
|
kNIC_REG_WRITE_QOS_USDHC2 = NIC_USDHC2_BASE + NIC_WRITE_QOS_OFFSET,
|
||
|
kNIC_REG_WRITE_QOS_TestPort = NIC_TestPort_BASE + NIC_WRITE_QOS_OFFSET,
|
||
|
kNIC_REG_WRITE_QOS_CM7 = NIC_CM7_BASE + NIC_WRITE_QOS_OFFSET,
|
||
|
kNIC_REG_WRITE_QOS_DMA = NIC_DMA_BASE + NIC_WRITE_QOS_OFFSET,
|
||
|
|
||
|
/* fn_mod */
|
||
|
kNIC_REG_FN_MOD_DCP = NIC_DCP_BASE + NIC_FN_MOD_OFFSET,
|
||
|
kNIC_REG_FN_MOD_ENET = NIC_ENET_BASE + NIC_FN_MOD_OFFSET,
|
||
|
kNIC_REG_FN_MOD_USBO2 = NIC_USBO2_BASE + NIC_FN_MOD_OFFSET,
|
||
|
kNIC_REG_FN_MOD_USDHC1 = NIC_USDHC1_BASE + NIC_FN_MOD_OFFSET,
|
||
|
kNIC_REG_FN_MOD_USDHC2 = NIC_USDHC2_BASE + NIC_FN_MOD_OFFSET,
|
||
|
kNIC_REG_FN_MOD_TestPort = NIC_TestPort_BASE + NIC_FN_MOD_OFFSET,
|
||
|
kNIC_REG_FN_MOD_CM7 = NIC_CM7_BASE + NIC_FN_MOD_OFFSET,
|
||
|
kNIC_REG_FN_MOD_DMA = NIC_DMA_BASE + NIC_FN_MOD_OFFSET,
|
||
|
|
||
|
/* fn_mod2 */
|
||
|
kNIC_REG_FN_MOD2_DCP = NIC_DCP_BASE + NIC_FN_MOD2_OFFSET,
|
||
|
|
||
|
/* fn_mod_ahb */
|
||
|
kNIC_REG_FN_MOD_AHB_ENET = NIC_ENET_BASE + NIC_FN_MOD_AHB_OFFSET,
|
||
|
kNIC_REG_FN_MOD_AHB_TestPort = NIC_TestPort_BASE + NIC_FN_MOD_AHB_OFFSET,
|
||
|
kNIC_REG_FN_MOD_AHB_DMA = NIC_DMA_BASE + NIC_FN_MOD_AHB_OFFSET,
|
||
|
|
||
|
/* wr_tidemark */
|
||
|
kNIC_REG_WR_TIDEMARK_CM7 = NIC_CM7_BASE + NIC_WR_TIDEMARK_OFFSET,
|
||
|
} nic_reg_t;
|
||
|
|
||
|
/* fn_mod2 */
|
||
|
typedef enum _nic_fn_mod2
|
||
|
{
|
||
|
kNIC_FN_MOD2_ENABLE = 0,
|
||
|
kNIC_FN_MOD2_BYPASS,
|
||
|
} nic_fn_mod2_t;
|
||
|
|
||
|
/* fn_mod_ahb */
|
||
|
typedef enum _nic_fn_mod_ahb
|
||
|
{
|
||
|
kNIC_FN_MOD_AHB_RD_INCR_OVERRIDE = 0,
|
||
|
kNIC_FN_MOD_AHB_WR_INCR_OVERRIDE,
|
||
|
kNIC_FN_MOD_AHB_LOCK_OVERRIDE,
|
||
|
} nic_fn_mod_ahb_t;
|
||
|
|
||
|
/* fn_mod */
|
||
|
typedef enum _nic_fn_mod
|
||
|
{
|
||
|
kNIC_FN_MOD_ReadIssue = 0,
|
||
|
kNIC_FN_MOD_WriteIssue,
|
||
|
} nic_fn_mod_t;
|
||
|
|
||
|
/* read_qos/write_qos */
|
||
|
typedef enum _nic_qos
|
||
|
{
|
||
|
kNIC_QOS_0 = 0,
|
||
|
kNIC_QOS_1,
|
||
|
kNIC_QOS_2,
|
||
|
kNIC_QOS_3,
|
||
|
kNIC_QOS_4,
|
||
|
kNIC_QOS_5,
|
||
|
kNIC_QOS_6,
|
||
|
kNIC_QOS_7,
|
||
|
kNIC_QOS_8,
|
||
|
kNIC_QOS_9,
|
||
|
kNIC_QOS_10,
|
||
|
kNIC_QOS_11,
|
||
|
kNIC_QOS_12,
|
||
|
kNIC_QOS_13,
|
||
|
kNIC_QOS_14,
|
||
|
kNIC_QOS_15,
|
||
|
} nic_qos_t;
|
||
|
|
||
|
/*******************************************************************************
|
||
|
* API
|
||
|
******************************************************************************/
|
||
|
#if defined(__cplusplus)
|
||
|
extern "C" {
|
||
|
#endif /* __cplusplus */
|
||
|
|
||
|
/*!
|
||
|
* @brief Set read_qos Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @param value Target value (0 - 15)
|
||
|
*/
|
||
|
static inline void NIC_SetReadQos(nic_reg_t base, nic_qos_t value)
|
||
|
{
|
||
|
*(volatile uint32_t *)(base + NIC_READ_QOS_OFFSET) = (value & NIC_QOS_MASK);
|
||
|
__DSB();
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Get read_qos Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @return Current value configured
|
||
|
*/
|
||
|
static inline nic_qos_t NIC_GetReadQos(nic_reg_t base)
|
||
|
{
|
||
|
return (nic_qos_t)((*(volatile uint32_t *)(base + NIC_READ_QOS_OFFSET)) & NIC_QOS_MASK);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Set write_qos Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @param value Target value (0 - 15)
|
||
|
*/
|
||
|
static void inline NIC_SetWriteQos(nic_reg_t base, nic_qos_t value)
|
||
|
{
|
||
|
*(volatile uint32_t *)(base + NIC_WRITE_QOS_OFFSET) = (value & NIC_QOS_MASK);
|
||
|
__DSB();
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Get write_qos Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @return Current value configured
|
||
|
*/
|
||
|
static inline nic_qos_t NIC_GetWriteQos(nic_reg_t base)
|
||
|
{
|
||
|
return (nic_qos_t)((*(volatile uint32_t *)(base + NIC_WRITE_QOS_OFFSET)) & NIC_QOS_MASK);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Set fn_mod_ahb Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @param value Target value
|
||
|
*/
|
||
|
static inline void NIC_SetFnModAhb(nic_reg_t base, nic_fn_mod_ahb_t v)
|
||
|
{
|
||
|
*(volatile uint32_t *)(base + NIC_FN_MOD_AHB_OFFSET) = v;
|
||
|
__DSB();
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Get fn_mod_ahb Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @return Current value configured
|
||
|
*/
|
||
|
static inline nic_fn_mod_ahb_t NIC_GetFnModAhb(nic_reg_t base)
|
||
|
{
|
||
|
return (nic_fn_mod_ahb_t)((*(volatile uint32_t *)(base + NIC_FN_MOD_AHB_OFFSET)) & NIC_FN_MOD_AHB_MASK);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Set wr_tidemark Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @param value Target value (0 - 7)
|
||
|
*/
|
||
|
static inline void NIC_SetWrTideMark(nic_reg_t base, uint8_t value)
|
||
|
{
|
||
|
*(volatile uint32_t *)(base + NIC_WR_TIDEMARK_OFFSET) = (value & NIC_WR_TIDEMARK_MASK);
|
||
|
__DSB();
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Get wr_tidemark Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @return Current value configured
|
||
|
*/
|
||
|
static inline uint8_t NIC_GetWrTideMark(nic_reg_t base)
|
||
|
{
|
||
|
return (uint8_t)((*(volatile uint32_t *)(base + NIC_WR_TIDEMARK_OFFSET)) & NIC_WR_TIDEMARK_MASK);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Set fn_mod Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @param value Target value
|
||
|
*/
|
||
|
static inline void NIC_SetFnMod(nic_reg_t base, nic_fn_mod_t value)
|
||
|
{
|
||
|
*(volatile uint32_t *)(base + NIC_FN_MOD_OFFSET) = value;
|
||
|
__DSB();
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Get fn_mod Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @return Current value configured
|
||
|
*/
|
||
|
static inline nic_fn_mod_t NIC_GetFnMod(nic_reg_t base)
|
||
|
{
|
||
|
return (nic_fn_mod_t)((*(volatile uint32_t *)(base + NIC_FN_MOD_OFFSET)) & NIC_FN_MOD_MASK);
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Set fn_mod2 Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @param value Target value
|
||
|
*/
|
||
|
static inline void NIC_SetFnMod2(nic_reg_t base, nic_fn_mod_t value)
|
||
|
{
|
||
|
*(volatile uint32_t *)(base + NIC_FN_MOD2_OFFSET) = value;
|
||
|
__DSB();
|
||
|
}
|
||
|
|
||
|
/*!
|
||
|
* @brief Get fn_mod2 Value
|
||
|
*
|
||
|
* @param base Base address of GPV address
|
||
|
* @return Current value configured
|
||
|
*/
|
||
|
static inline nic_fn_mod2_t NIC_GetFnMod2(nic_reg_t base)
|
||
|
{
|
||
|
return (nic_fn_mod2_t)((*(volatile uint32_t *)(base + NIC_FN_MOD2_OFFSET)) & NIC_FN_MOD2_MASK);
|
||
|
}
|
||
|
|
||
|
#if defined(__cplusplus)
|
||
|
}
|
||
|
#endif /* __cplusplus */
|
||
|
#endif /* _FSL_NIC301_H_ */
|