13d0407baSopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 23d0407baSopenharmony_ci/******************************************************************************* 33d0407baSopenharmony_ci 43d0407baSopenharmony_ci Header file for stmmac platform data 53d0407baSopenharmony_ci 63d0407baSopenharmony_ci Copyright (C) 2009 STMicroelectronics Ltd 73d0407baSopenharmony_ci 83d0407baSopenharmony_ci 93d0407baSopenharmony_ci Author: Giuseppe Cavallaro <peppe.cavallaro@st.com> 103d0407baSopenharmony_ci*******************************************************************************/ 113d0407baSopenharmony_ci 123d0407baSopenharmony_ci#ifndef __STMMAC_PLATFORM_DATA 133d0407baSopenharmony_ci#define __STMMAC_PLATFORM_DATA 143d0407baSopenharmony_ci 153d0407baSopenharmony_ci#include <linux/platform_device.h> 163d0407baSopenharmony_ci#include <linux/phy.h> 173d0407baSopenharmony_ci 183d0407baSopenharmony_ci#define MTL_MAX_RX_QUEUES 8 193d0407baSopenharmony_ci#define MTL_MAX_TX_QUEUES 8 203d0407baSopenharmony_ci#define STMMAC_CH_MAX 8 213d0407baSopenharmony_ci 223d0407baSopenharmony_ci#define STMMAC_RX_COE_NONE 0 233d0407baSopenharmony_ci#define STMMAC_RX_COE_TYPE1 1 243d0407baSopenharmony_ci#define STMMAC_RX_COE_TYPE2 2 253d0407baSopenharmony_ci 263d0407baSopenharmony_ci/* Define the macros for CSR clock range parameters to be passed by 273d0407baSopenharmony_ci * platform code. 283d0407baSopenharmony_ci * This could also be configured at run time using CPU freq framework. */ 293d0407baSopenharmony_ci 303d0407baSopenharmony_ci/* MDC Clock Selection define */ 313d0407baSopenharmony_ci#define STMMAC_CSR_60_100M 0x0 /* MDC = clk_scr_i/42 */ 323d0407baSopenharmony_ci#define STMMAC_CSR_100_150M 0x1 /* MDC = clk_scr_i/62 */ 333d0407baSopenharmony_ci#define STMMAC_CSR_20_35M 0x2 /* MDC = clk_scr_i/16 */ 343d0407baSopenharmony_ci#define STMMAC_CSR_35_60M 0x3 /* MDC = clk_scr_i/26 */ 353d0407baSopenharmony_ci#define STMMAC_CSR_150_250M 0x4 /* MDC = clk_scr_i/102 */ 363d0407baSopenharmony_ci#define STMMAC_CSR_250_300M 0x5 /* MDC = clk_scr_i/122 */ 373d0407baSopenharmony_ci 383d0407baSopenharmony_ci/* MTL algorithms identifiers */ 393d0407baSopenharmony_ci#define MTL_TX_ALGORITHM_WRR 0x0 403d0407baSopenharmony_ci#define MTL_TX_ALGORITHM_WFQ 0x1 413d0407baSopenharmony_ci#define MTL_TX_ALGORITHM_DWRR 0x2 423d0407baSopenharmony_ci#define MTL_TX_ALGORITHM_SP 0x3 433d0407baSopenharmony_ci#define MTL_RX_ALGORITHM_SP 0x4 443d0407baSopenharmony_ci#define MTL_RX_ALGORITHM_WSP 0x5 453d0407baSopenharmony_ci 463d0407baSopenharmony_ci/* RX/TX Queue Mode */ 473d0407baSopenharmony_ci#define MTL_QUEUE_AVB 0x0 483d0407baSopenharmony_ci#define MTL_QUEUE_DCB 0x1 493d0407baSopenharmony_ci 503d0407baSopenharmony_ci/* The MDC clock could be set higher than the IEEE 802.3 513d0407baSopenharmony_ci * specified frequency limit 0f 2.5 MHz, by programming a clock divider 523d0407baSopenharmony_ci * of value different than the above defined values. The resultant MDIO 533d0407baSopenharmony_ci * clock frequency of 12.5 MHz is applicable for the interfacing chips 543d0407baSopenharmony_ci * supporting higher MDC clocks. 553d0407baSopenharmony_ci * The MDC clock selection macros need to be defined for MDC clock rate 563d0407baSopenharmony_ci * of 12.5 MHz, corresponding to the following selection. 573d0407baSopenharmony_ci */ 583d0407baSopenharmony_ci#define STMMAC_CSR_I_4 0x8 /* clk_csr_i/4 */ 593d0407baSopenharmony_ci#define STMMAC_CSR_I_6 0x9 /* clk_csr_i/6 */ 603d0407baSopenharmony_ci#define STMMAC_CSR_I_8 0xA /* clk_csr_i/8 */ 613d0407baSopenharmony_ci#define STMMAC_CSR_I_10 0xB /* clk_csr_i/10 */ 623d0407baSopenharmony_ci#define STMMAC_CSR_I_12 0xC /* clk_csr_i/12 */ 633d0407baSopenharmony_ci#define STMMAC_CSR_I_14 0xD /* clk_csr_i/14 */ 643d0407baSopenharmony_ci#define STMMAC_CSR_I_16 0xE /* clk_csr_i/16 */ 653d0407baSopenharmony_ci#define STMMAC_CSR_I_18 0xF /* clk_csr_i/18 */ 663d0407baSopenharmony_ci 673d0407baSopenharmony_ci/* AXI DMA Burst length supported */ 683d0407baSopenharmony_ci#define DMA_AXI_BLEN_4 (1 << 1) 693d0407baSopenharmony_ci#define DMA_AXI_BLEN_8 (1 << 2) 703d0407baSopenharmony_ci#define DMA_AXI_BLEN_16 (1 << 3) 713d0407baSopenharmony_ci#define DMA_AXI_BLEN_32 (1 << 4) 723d0407baSopenharmony_ci#define DMA_AXI_BLEN_64 (1 << 5) 733d0407baSopenharmony_ci#define DMA_AXI_BLEN_128 (1 << 6) 743d0407baSopenharmony_ci#define DMA_AXI_BLEN_256 (1 << 7) 753d0407baSopenharmony_ci#define DMA_AXI_BLEN_ALL \ 763d0407baSopenharmony_ci (DMA_AXI_BLEN_4 | DMA_AXI_BLEN_8 | DMA_AXI_BLEN_16 | DMA_AXI_BLEN_32 | DMA_AXI_BLEN_64 | DMA_AXI_BLEN_128 | \ 773d0407baSopenharmony_ci DMA_AXI_BLEN_256) 783d0407baSopenharmony_ci 793d0407baSopenharmony_ci/* Platfrom data for platform device structure's platform_data field */ 803d0407baSopenharmony_ci 813d0407baSopenharmony_cistruct stmmac_mdio_bus_data { 823d0407baSopenharmony_ci unsigned int phy_mask; 833d0407baSopenharmony_ci unsigned int has_xpcs; 843d0407baSopenharmony_ci int *irqs; 853d0407baSopenharmony_ci int probed_phy_irq; 863d0407baSopenharmony_ci bool needs_reset; 873d0407baSopenharmony_ci}; 883d0407baSopenharmony_ci 893d0407baSopenharmony_cistruct stmmac_dma_cfg { 903d0407baSopenharmony_ci int pbl; 913d0407baSopenharmony_ci int txpbl; 923d0407baSopenharmony_ci int rxpbl; 933d0407baSopenharmony_ci bool pblx8; 943d0407baSopenharmony_ci int fixed_burst; 953d0407baSopenharmony_ci int mixed_burst; 963d0407baSopenharmony_ci bool aal; 973d0407baSopenharmony_ci bool eame; 983d0407baSopenharmony_ci}; 993d0407baSopenharmony_ci 1003d0407baSopenharmony_ci#define AXI_BLEN 7 1013d0407baSopenharmony_cistruct stmmac_axi { 1023d0407baSopenharmony_ci bool axi_lpi_en; 1033d0407baSopenharmony_ci bool axi_xit_frm; 1043d0407baSopenharmony_ci u32 axi_wr_osr_lmt; 1053d0407baSopenharmony_ci u32 axi_rd_osr_lmt; 1063d0407baSopenharmony_ci bool axi_kbbe; 1073d0407baSopenharmony_ci u32 axi_blen[AXI_BLEN]; 1083d0407baSopenharmony_ci bool axi_fb; 1093d0407baSopenharmony_ci bool axi_mb; 1103d0407baSopenharmony_ci bool axi_rb; 1113d0407baSopenharmony_ci}; 1123d0407baSopenharmony_ci 1133d0407baSopenharmony_ci#define EST_GCL 1024 1143d0407baSopenharmony_cistruct stmmac_est { 1153d0407baSopenharmony_ci struct mutex lock; 1163d0407baSopenharmony_ci int enable; 1173d0407baSopenharmony_ci u32 btr_offset[2]; 1183d0407baSopenharmony_ci u32 btr[2]; 1193d0407baSopenharmony_ci u32 ctr[2]; 1203d0407baSopenharmony_ci u32 ter; 1213d0407baSopenharmony_ci u32 gcl_unaligned[EST_GCL]; 1223d0407baSopenharmony_ci u32 gcl[EST_GCL]; 1233d0407baSopenharmony_ci u32 gcl_size; 1243d0407baSopenharmony_ci}; 1253d0407baSopenharmony_ci 1263d0407baSopenharmony_cistruct stmmac_rxq_cfg { 1273d0407baSopenharmony_ci u8 mode_to_use; 1283d0407baSopenharmony_ci u32 chan; 1293d0407baSopenharmony_ci u8 pkt_route; 1303d0407baSopenharmony_ci bool use_prio; 1313d0407baSopenharmony_ci u32 prio; 1323d0407baSopenharmony_ci}; 1333d0407baSopenharmony_ci 1343d0407baSopenharmony_cistruct stmmac_txq_cfg { 1353d0407baSopenharmony_ci u32 weight; 1363d0407baSopenharmony_ci u8 mode_to_use; 1373d0407baSopenharmony_ci /* Credit Base Shaper parameters */ 1383d0407baSopenharmony_ci u32 send_slope; 1393d0407baSopenharmony_ci u32 idle_slope; 1403d0407baSopenharmony_ci u32 high_credit; 1413d0407baSopenharmony_ci u32 low_credit; 1423d0407baSopenharmony_ci bool use_prio; 1433d0407baSopenharmony_ci u32 prio; 1443d0407baSopenharmony_ci int tbs_en; 1453d0407baSopenharmony_ci}; 1463d0407baSopenharmony_ci 1473d0407baSopenharmony_cistruct plat_stmmacenet_data { 1483d0407baSopenharmony_ci int bus_id; 1493d0407baSopenharmony_ci int phy_addr; 1503d0407baSopenharmony_ci int interface; 1513d0407baSopenharmony_ci phy_interface_t phy_interface; 1523d0407baSopenharmony_ci struct stmmac_mdio_bus_data *mdio_bus_data; 1533d0407baSopenharmony_ci struct device_node *phy_node; 1543d0407baSopenharmony_ci struct device_node *phylink_node; 1553d0407baSopenharmony_ci struct device_node *mdio_node; 1563d0407baSopenharmony_ci struct stmmac_dma_cfg *dma_cfg; 1573d0407baSopenharmony_ci struct stmmac_est *est; 1583d0407baSopenharmony_ci int clk_csr; 1593d0407baSopenharmony_ci int has_gmac; 1603d0407baSopenharmony_ci int enh_desc; 1613d0407baSopenharmony_ci int tx_coe; 1623d0407baSopenharmony_ci int rx_coe; 1633d0407baSopenharmony_ci int bugged_jumbo; 1643d0407baSopenharmony_ci int pmt; 1653d0407baSopenharmony_ci int force_sf_dma_mode; 1663d0407baSopenharmony_ci int force_thresh_dma_mode; 1673d0407baSopenharmony_ci int riwt_off; 1683d0407baSopenharmony_ci int max_speed; 1693d0407baSopenharmony_ci int maxmtu; 1703d0407baSopenharmony_ci int multicast_filter_bins; 1713d0407baSopenharmony_ci int unicast_filter_entries; 1723d0407baSopenharmony_ci int tx_fifo_size; 1733d0407baSopenharmony_ci int rx_fifo_size; 1743d0407baSopenharmony_ci u32 addr64; 1753d0407baSopenharmony_ci u32 rx_queues_to_use; 1763d0407baSopenharmony_ci u32 tx_queues_to_use; 1773d0407baSopenharmony_ci u8 rx_sched_algorithm; 1783d0407baSopenharmony_ci u8 tx_sched_algorithm; 1793d0407baSopenharmony_ci struct stmmac_rxq_cfg rx_queues_cfg[MTL_MAX_RX_QUEUES]; 1803d0407baSopenharmony_ci struct stmmac_txq_cfg tx_queues_cfg[MTL_MAX_TX_QUEUES]; 1813d0407baSopenharmony_ci void (*fix_mac_speed)(void *priv, unsigned int speed); 1823d0407baSopenharmony_ci int (*serdes_powerup)(struct net_device *ndev, void *priv); 1833d0407baSopenharmony_ci void (*serdes_powerdown)(struct net_device *ndev, void *priv); 1843d0407baSopenharmony_ci int (*init)(struct platform_device *pdev, void *priv); 1853d0407baSopenharmony_ci void (*exit)(struct platform_device *pdev, void *priv); 1863d0407baSopenharmony_ci void (*get_eth_addr)(void *priv, unsigned char *addr); 1873d0407baSopenharmony_ci struct mac_device_info *(*setup)(void *priv); 1883d0407baSopenharmony_ci void *bsp_priv; 1893d0407baSopenharmony_ci struct clk *stmmac_clk; 1903d0407baSopenharmony_ci struct clk *pclk; 1913d0407baSopenharmony_ci struct clk *clk_ptp_ref; 1923d0407baSopenharmony_ci unsigned int clk_ptp_rate; 1933d0407baSopenharmony_ci unsigned int clk_ref_rate; 1943d0407baSopenharmony_ci s32 ptp_max_adj; 1953d0407baSopenharmony_ci struct reset_control *stmmac_rst; 1963d0407baSopenharmony_ci struct stmmac_axi *axi; 1973d0407baSopenharmony_ci int has_gmac4; 1983d0407baSopenharmony_ci bool has_sun8i; 1993d0407baSopenharmony_ci bool tso_en; 2003d0407baSopenharmony_ci int rss_en; 2013d0407baSopenharmony_ci int mac_port_sel_speed; 2023d0407baSopenharmony_ci bool en_tx_lpi_clockgating; 2033d0407baSopenharmony_ci int has_xgmac; 2043d0407baSopenharmony_ci bool vlan_fail_q_en; 2053d0407baSopenharmony_ci u8 vlan_fail_q; 2063d0407baSopenharmony_ci unsigned int eee_usecs_rate; 2073d0407baSopenharmony_ci bool sph_disable; 2083d0407baSopenharmony_ci}; 2093d0407baSopenharmony_ci#endif 210