167fc3ff9SGagandeep Singh /* SPDX-License-Identifier: BSD-3-Clause 2f513f620SSachin Saxena * Copyright 2018-2019 NXP 367fc3ff9SGagandeep Singh */ 467fc3ff9SGagandeep Singh 567fc3ff9SGagandeep Singh #ifndef _PFE_ETH_H_ 667fc3ff9SGagandeep Singh #define _PFE_ETH_H_ 767fc3ff9SGagandeep Singh 867fc3ff9SGagandeep Singh #include <compat.h> 967fc3ff9SGagandeep Singh #include <rte_ethdev.h> 10*df96fd0dSBruce Richardson #include <ethdev_vdev.h> 1167fc3ff9SGagandeep Singh 1267fc3ff9SGagandeep Singh #define ETH_ALEN 6 1367fc3ff9SGagandeep Singh #define GEMAC_NO_PHY BIT(0) 1467fc3ff9SGagandeep Singh 1567fc3ff9SGagandeep Singh #define PFE_SOC_ID_FILE "/sys/devices/soc0/soc_id" 1667fc3ff9SGagandeep Singh extern unsigned int pfe_svr; 1767fc3ff9SGagandeep Singh #define SVR_LS1012A_REV2 0x87040020 1867fc3ff9SGagandeep Singh #define SVR_LS1012A_REV1 0x87040010 1967fc3ff9SGagandeep Singh 205253fe37SGagandeep Singh #define PFE_ETH_OVERHEAD (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN) 215253fe37SGagandeep Singh #define MAX_MTU_ON_REV1 1878 2267fc3ff9SGagandeep Singh struct ls1012a_eth_platform_data { 2367fc3ff9SGagandeep Singh /* device specific information */ 2467fc3ff9SGagandeep Singh u32 device_flags; 2567fc3ff9SGagandeep Singh char name[16]; 2667fc3ff9SGagandeep Singh 2767fc3ff9SGagandeep Singh /* board specific information */ 2867fc3ff9SGagandeep Singh u32 mii_config; 2967fc3ff9SGagandeep Singh u32 phy_flags; 3067fc3ff9SGagandeep Singh u32 gem_id; 3167fc3ff9SGagandeep Singh u32 bus_id; 3267fc3ff9SGagandeep Singh u32 phy_id; 3367fc3ff9SGagandeep Singh u32 mdio_muxval; 3467fc3ff9SGagandeep Singh u8 mac_addr[ETH_ALEN]; 3567fc3ff9SGagandeep Singh }; 3667fc3ff9SGagandeep Singh 3767fc3ff9SGagandeep Singh struct ls1012a_mdio_platform_data { 3867fc3ff9SGagandeep Singh int enabled; 3967fc3ff9SGagandeep Singh int irq[32]; 4067fc3ff9SGagandeep Singh u32 phy_mask; 4167fc3ff9SGagandeep Singh int mdc_div; 4267fc3ff9SGagandeep Singh }; 4367fc3ff9SGagandeep Singh 4467fc3ff9SGagandeep Singh struct ls1012a_pfe_platform_data { 4567fc3ff9SGagandeep Singh struct ls1012a_eth_platform_data ls1012a_eth_pdata[3]; 4667fc3ff9SGagandeep Singh struct ls1012a_mdio_platform_data ls1012a_mdio_pdata[3]; 4767fc3ff9SGagandeep Singh }; 4867fc3ff9SGagandeep Singh 4967fc3ff9SGagandeep Singh #define EMAC_TXQ_CNT 16 5067fc3ff9SGagandeep Singh #define EMAC_TXQ_DEPTH (HIF_TX_DESC_NT) 5167fc3ff9SGagandeep Singh 5267fc3ff9SGagandeep Singh #define JUMBO_FRAME_SIZE 10258 5367fc3ff9SGagandeep Singh #define EMAC_RXQ_CNT 1 5467fc3ff9SGagandeep Singh #define EMAC_RXQ_DEPTH HIF_RX_DESC_NT 5567fc3ff9SGagandeep Singh 5667fc3ff9SGagandeep Singh struct pfe_eth_priv_s { 5767fc3ff9SGagandeep Singh struct pfe *pfe; 58fe38ad9bSGagandeep Singh struct hif_client_s client; 5967fc3ff9SGagandeep Singh int low_tmu_q; 6067fc3ff9SGagandeep Singh int high_tmu_q; 6167fc3ff9SGagandeep Singh struct rte_eth_dev *ndev; 6267fc3ff9SGagandeep Singh struct rte_eth_stats stats; 6367fc3ff9SGagandeep Singh int id; 6467fc3ff9SGagandeep Singh int promisc; 6567fc3ff9SGagandeep Singh int link_fd; 6667fc3ff9SGagandeep Singh 6767fc3ff9SGagandeep Singh spinlock_t lock; /* protect member variables */ 6867fc3ff9SGagandeep Singh void *EMAC_baseaddr; 6967fc3ff9SGagandeep Singh /* This points to the EMAC base from where we access PHY */ 7067fc3ff9SGagandeep Singh void *PHY_baseaddr; 7167fc3ff9SGagandeep Singh void *GPI_baseaddr; 7267fc3ff9SGagandeep Singh 7367fc3ff9SGagandeep Singh struct ls1012a_eth_platform_data *einfo; 7467fc3ff9SGagandeep Singh }; 7567fc3ff9SGagandeep Singh 7667fc3ff9SGagandeep Singh #endif /* _PFE_ETH_H_ */ 77