/* * Copyright (c) 2021 hpmicro * * SPDX-License-Identifier: BSD-3-Clause * */ #ifndef ETH_PHY_PORT_H #define ETH_PHY_PORT_H #include "hpm_ioc_regs.h" #include #ifndef PHY_AUTO_NEGO #define PHY_AUTO_NEGO (1U) #endif #ifndef PHY_MDIO_CSR_CLK_FREQ #define PHY_MDIO_CSR_CLK_FREQ (200000000U) #endif enum phy_link_status { PHY_LINK_DOWN = 0U, PHY_LINK_UP }; typedef struct { rt_uint32_t phy_speed; rt_uint32_t phy_duplex; } phy_info_t; typedef struct { rt_uint32_t phy_link; rt_phy_t phy; phy_info_t phy_info; } phy_device_t; /** @note PHY: RTL8201 */ #define PHY_NAME ("RTL8201") #define PHY_ID1 (0x1CU) /* The PHY basic control register */ #define PHY_BASIC_CONTROL_REG (0x00U) #define PHY_RESET_MASK (1U << 15) #define PHY_AUTO_NEGOTIATION_MASK (1U << 12) /* The PHY basic status register */ #define PHY_BASIC_STATUS_REG (0x01U) #define PHY_LINKED_STATUS_MASK (1U << 2) #define PHY_AUTONEGO_COMPLETE_MASK (1U << 5) /* The PHY ID one register */ #define PHY_ID1_REG (0x02U) /* The PHY ID two register */ #define PHY_ID2_REG (0x03U) /* The PHY auto-negotiate advertise register */ #define PHY_AUTONEG_ADVERTISE_REG (0x04U) /* The PHY status register. */ #define PHY_STATUS_REG (0x00U) #define PHY_10M_MASK (1 << 13) #define PHY_100M_MASK (1 << 13) #define PHY_FULL_DUPLEX_MASK (1 << 8) #define PHY_STATUS_SPEED_10M(SR) ((SR) & PHY_100M_MASK) ? 0: 1 #define PHY_STATUS_SPEED_100M(SR) ((SR) & PHY_100M_MASK) #define PHY_STATUS_FULL_DUPLEX(SR) ((SR) & PHY_FULL_DUPLEX_MASK) /* PHY0 register list */ #define PHY0_REG_LIST PHY_BASIC_CONTROL_REG,\ PHY_BASIC_STATUS_REG,\ PHY_ID1_REG,\ PHY_ID2_REG,\ PHY_AUTONEG_ADVERTISE_REG,\ PHY_STATUS_REG /* PHY0 register index */ #define PHY_BASIC_STATUS_REG_IDX (1U) #define PHY_ID1_REG_IDX (2U) #define PHY_STATUS_REG_IDX (5U) #endif