xref: /rk3399_rockchip-uboot/include/fsl_mdio.h (revision 82d72a1b9967cff4908f22c57536c3660f794401)
1063c1263SAndy Fleming /*
25be00a01SClaudiu Manoil  * Copyright 2009-2012, 2013 Freescale Semiconductor, Inc.
3063c1263SAndy Fleming  *	Jun-jie Zhang <b18070@freescale.com>
4063c1263SAndy Fleming  *	Mingkai Hu <Mingkai.hu@freescale.com>
5063c1263SAndy Fleming  *
61a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
7063c1263SAndy Fleming  */
8*9872b736SBin Meng 
9063c1263SAndy Fleming #ifndef __FSL_PHY_H__
10063c1263SAndy Fleming #define __FSL_PHY_H__
11063c1263SAndy Fleming 
12063c1263SAndy Fleming #include <net.h>
13063c1263SAndy Fleming #include <miiphy.h>
1493f26f13SClaudiu Manoil 
1593f26f13SClaudiu Manoil struct tsec_mii_mng {
1693f26f13SClaudiu Manoil 	u32 miimcfg;		/* MII management configuration reg */
1793f26f13SClaudiu Manoil 	u32 miimcom;		/* MII management command reg */
1893f26f13SClaudiu Manoil 	u32 miimadd;		/* MII management address reg */
1993f26f13SClaudiu Manoil 	u32 miimcon;		/* MII management control reg */
2093f26f13SClaudiu Manoil 	u32 miimstat;		/* MII management status reg  */
2193f26f13SClaudiu Manoil 	u32 miimind;		/* MII management indication reg */
2293f26f13SClaudiu Manoil 	u32 ifstat;		/* Interface Status Register */
2393f26f13SClaudiu Manoil };
2493f26f13SClaudiu Manoil 
2593f26f13SClaudiu Manoil int fdt_fixup_phy_connection(void *blob, int offset, phy_interface_t phyc);
26063c1263SAndy Fleming 
27063c1263SAndy Fleming /* PHY register offsets */
28063c1263SAndy Fleming #define PHY_EXT_PAGE_ACCESS	0x1f
29063c1263SAndy Fleming 
30063c1263SAndy Fleming /* MII Management Configuration Register */
31063c1263SAndy Fleming #define MIIMCFG_RESET_MGMT		0x80000000
32063c1263SAndy Fleming #define MIIMCFG_MGMT_CLOCK_SELECT	0x00000007
33063c1263SAndy Fleming #define MIIMCFG_INIT_VALUE		0x00000003
34063c1263SAndy Fleming 
35063c1263SAndy Fleming /* MII Management Command Register */
36063c1263SAndy Fleming #define MIIMCOM_READ_CYCLE	0x00000001
37063c1263SAndy Fleming #define MIIMCOM_SCAN_CYCLE	0x00000002
38063c1263SAndy Fleming 
39063c1263SAndy Fleming /* MII Management Address Register */
40063c1263SAndy Fleming #define MIIMADD_PHY_ADDR_SHIFT	8
41063c1263SAndy Fleming 
42063c1263SAndy Fleming /* MII Management Indicator Register */
43063c1263SAndy Fleming #define MIIMIND_BUSY		0x00000001
44063c1263SAndy Fleming #define MIIMIND_NOTVALID	0x00000004
45063c1263SAndy Fleming 
465be00a01SClaudiu Manoil void tsec_local_mdio_write(struct tsec_mii_mng __iomem *phyregs, int port_addr,
47063c1263SAndy Fleming 		int dev_addr, int reg, int value);
485be00a01SClaudiu Manoil int tsec_local_mdio_read(struct tsec_mii_mng __iomem *phyregs, int port_addr,
49063c1263SAndy Fleming 		int dev_addr, int regnum);
50063c1263SAndy Fleming int tsec_phy_read(struct mii_dev *bus, int addr, int dev_addr, int regnum);
51063c1263SAndy Fleming int tsec_phy_write(struct mii_dev *bus, int addr, int dev_addr, int regnum,
52063c1263SAndy Fleming 		u16 value);
53111fd19eSRoy Zang int memac_mdio_write(struct mii_dev *bus, int port_addr, int dev_addr,
54111fd19eSRoy Zang 		int regnum, u16 value);
55111fd19eSRoy Zang int memac_mdio_read(struct mii_dev *bus, int port_addr, int dev_addr,
56111fd19eSRoy Zang 		int regnum);
57063c1263SAndy Fleming 
58063c1263SAndy Fleming struct fsl_pq_mdio_info {
595be00a01SClaudiu Manoil 	struct tsec_mii_mng __iomem *regs;
60063c1263SAndy Fleming 	char *name;
61063c1263SAndy Fleming };
62063c1263SAndy Fleming int fsl_pq_mdio_init(bd_t *bis, struct fsl_pq_mdio_info *info);
63063c1263SAndy Fleming 
64063c1263SAndy Fleming #endif /* __FSL_PHY_H__ */
65