1 /* SPDX-License-Identifier: GPL-2.0+ */ 2 /* 3 * Copyright 2020 4 */ 5 6 #ifndef _DWC_ETH_QOS_H 7 #define _DWC_ETH_QOS_H 8 9 #include <asm/gpio.h> 10 #include <reset.h> 11 12 #define EQOS_MAC_RXQ_CTRL0_RXQ0EN_NOT_ENABLED 0 13 #define EQOS_MAC_RXQ_CTRL0_RXQ0EN_ENABLED_DCB 2 14 #define EQOS_MAC_RXQ_CTRL0_RXQ0EN_ENABLED_AV 1 15 16 #define EQOS_MAC_MDIO_ADDRESS_CR_100_150 1 17 #define EQOS_MAC_MDIO_ADDRESS_CR_20_35 2 18 #define EQOS_MAC_MDIO_ADDRESS_CR_250_300 5 19 20 struct eqos_config { 21 bool reg_access_always_ok; 22 int mdio_wait; 23 int swr_wait; 24 int config_mac; 25 int config_mac_mdio; 26 struct eqos_ops *ops; 27 }; 28 29 struct eqos_ops { 30 void (*eqos_inval_desc)(void *desc); 31 void (*eqos_flush_desc)(void *desc); 32 void (*eqos_inval_buffer)(void *buf, size_t size); 33 void (*eqos_flush_buffer)(void *buf, size_t size); 34 int (*eqos_probe_resources)(struct udevice *dev); 35 int (*eqos_remove_resources)(struct udevice *dev); 36 int (*eqos_stop_resets)(struct udevice *dev); 37 int (*eqos_start_resets)(struct udevice *dev); 38 void (*eqos_stop_clks)(struct udevice *dev); 39 int (*eqos_start_clks)(struct udevice *dev); 40 int (*eqos_calibrate_pads)(struct udevice *dev); 41 int (*eqos_disable_calibration)(struct udevice *dev); 42 int (*eqos_set_tx_clk_speed)(struct udevice *dev); 43 ulong (*eqos_get_tick_clk_rate)(struct udevice *dev); 44 phy_interface_t (*eqos_get_interface)(struct udevice *dev); 45 }; 46 47 struct eqos_priv { 48 struct udevice *dev; 49 const struct eqos_config *config; 50 fdt_addr_t regs; 51 struct eqos_mac_regs *mac_regs; 52 struct eqos_mtl_regs *mtl_regs; 53 struct eqos_dma_regs *dma_regs; 54 struct eqos_tegra186_regs *tegra186_regs; 55 struct reset_ctl reset_ctl; 56 struct gpio_desc phy_reset_gpio; 57 u32 reset_delays[3]; 58 struct clk clk_master_bus; 59 struct clk clk_rx; 60 struct clk clk_ptp_ref; 61 struct clk clk_tx; 62 struct clk clk_ck; 63 struct clk clk_slave_bus; 64 struct mii_dev *mii; 65 struct phy_device *phy; 66 int phyaddr; 67 u32 max_speed; 68 void *descs; 69 struct eqos_desc *tx_descs; 70 struct eqos_desc *rx_descs; 71 int tx_desc_idx, rx_desc_idx; 72 void *tx_dma_buf; 73 void *rx_dma_buf; 74 void *rx_pkt; 75 bool started; 76 bool reg_access_ok; 77 bool mii_reseted; 78 }; 79 80 int eqos_init(struct udevice *dev); 81 void eqos_enable(struct udevice *dev); 82 int eqos_probe(struct udevice *dev); 83 void eqos_stop(struct udevice *dev); 84 int eqos_send(struct udevice *dev, void *packet, int length); 85 int eqos_recv(struct udevice *dev, int flags, uchar **packetp); 86 int eqos_free_pkt(struct udevice *dev, uchar *packet, int length); 87 int eqos_write_hwaddr(struct udevice *dev); 88 89 extern struct eqos_ops eqos_rockchip_ops; 90 91 #endif 92