xref: /OK3568_Linux_fs/u-boot/drivers/net/dwc_eth_qos.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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