xref: /rk3399_rockchip-uboot/include/miiphy.h (revision 46263f2de4e01ff0b2e4247c2fa76d24027efd65)
1*46263f2dSWolfgang Denk /*
2*46263f2dSWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0	ibm-pibs
3*46263f2dSWolfgang Denk  *
4*46263f2dSWolfgang Denk  * Additions (C) Copyright 2009 Industrie Dial Face S.p.A.
5*46263f2dSWolfgang Denk  */
6214ec6bbSwdenk /*----------------------------------------------------------------------------+
7214ec6bbSwdenk |
8214ec6bbSwdenk |  File Name:	miiphy.h
9214ec6bbSwdenk |
10214ec6bbSwdenk |  Function:	Include file defining PHY registers.
11214ec6bbSwdenk |
12214ec6bbSwdenk |  Author:	Mark Wisner
13214ec6bbSwdenk |
14214ec6bbSwdenk +----------------------------------------------------------------------------*/
15214ec6bbSwdenk #ifndef _miiphy_h_
16214ec6bbSwdenk #define _miiphy_h_
17214ec6bbSwdenk 
185f184715SAndy Fleming #include <common.h>
198ef583a0SMike Frysinger #include <linux/mii.h>
205f184715SAndy Fleming #include <linux/list.h>
2163ff004cSMarian Balakowicz #include <net.h>
225f184715SAndy Fleming #include <phy.h>
235f184715SAndy Fleming 
245f184715SAndy Fleming struct legacy_mii_dev {
255f184715SAndy Fleming 	int (*read)(const char *devname, unsigned char addr,
26f915c931SWolfgang Denk 		     unsigned char reg, unsigned short *value);
275f184715SAndy Fleming 	int (*write)(const char *devname, unsigned char addr,
28f915c931SWolfgang Denk 		      unsigned char reg, unsigned short value);
295f184715SAndy Fleming };
30214ec6bbSwdenk 
31f915c931SWolfgang Denk int miiphy_read(const char *devname, unsigned char addr, unsigned char reg,
3263ff004cSMarian Balakowicz 		 unsigned short *value);
33f915c931SWolfgang Denk int miiphy_write(const char *devname, unsigned char addr, unsigned char reg,
3463ff004cSMarian Balakowicz 		  unsigned short value);
355700bb63SMike Frysinger int miiphy_info(const char *devname, unsigned char addr, unsigned int *oui,
3663ff004cSMarian Balakowicz 		 unsigned char *model, unsigned char *rev);
375700bb63SMike Frysinger int miiphy_reset(const char *devname, unsigned char addr);
385700bb63SMike Frysinger int miiphy_speed(const char *devname, unsigned char addr);
395700bb63SMike Frysinger int miiphy_duplex(const char *devname, unsigned char addr);
405700bb63SMike Frysinger int miiphy_is_1000base_x(const char *devname, unsigned char addr);
416d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_SYS_FAULT_ECHO_LINK_DOWN
425700bb63SMike Frysinger int miiphy_link(const char *devname, unsigned char addr);
43fc3e2165Swdenk #endif
44214ec6bbSwdenk 
45d9785c14SMarian Balakowicz void miiphy_init(void);
46d9785c14SMarian Balakowicz 
475700bb63SMike Frysinger void miiphy_register(const char *devname,
485700bb63SMike Frysinger 		      int (*read)(const char *devname, unsigned char addr,
49f915c931SWolfgang Denk 				   unsigned char reg, unsigned short *value),
505700bb63SMike Frysinger 		      int (*write)(const char *devname, unsigned char addr,
51f915c931SWolfgang Denk 				    unsigned char reg, unsigned short value));
5263ff004cSMarian Balakowicz 
535700bb63SMike Frysinger int miiphy_set_current_dev(const char *devname);
545700bb63SMike Frysinger const char *miiphy_get_current_dev(void);
555f184715SAndy Fleming struct mii_dev *mdio_get_current_dev(void);
565f184715SAndy Fleming struct mii_dev *miiphy_get_dev_by_name(const char *devname);
575f184715SAndy Fleming struct phy_device *mdio_phydev_for_ethname(const char *devname);
5863ff004cSMarian Balakowicz 
5963ff004cSMarian Balakowicz void miiphy_listdev(void);
6063ff004cSMarian Balakowicz 
615f184715SAndy Fleming struct mii_dev *mdio_alloc(void);
625f184715SAndy Fleming int mdio_register(struct mii_dev *bus);
635f184715SAndy Fleming void mdio_list_devices(void);
645f184715SAndy Fleming 
654ba31ab3SLuigi 'Comio' Mantellini #ifdef CONFIG_BITBANGMII
6663ff004cSMarian Balakowicz 
674ba31ab3SLuigi 'Comio' Mantellini #define BB_MII_DEVNAME	"bb_miiphy"
684ba31ab3SLuigi 'Comio' Mantellini 
694ba31ab3SLuigi 'Comio' Mantellini struct bb_miiphy_bus {
70f6add132SMike Frysinger 	char name[16];
714ba31ab3SLuigi 'Comio' Mantellini 	int (*init)(struct bb_miiphy_bus *bus);
724ba31ab3SLuigi 'Comio' Mantellini 	int (*mdio_active)(struct bb_miiphy_bus *bus);
734ba31ab3SLuigi 'Comio' Mantellini 	int (*mdio_tristate)(struct bb_miiphy_bus *bus);
744ba31ab3SLuigi 'Comio' Mantellini 	int (*set_mdio)(struct bb_miiphy_bus *bus, int v);
754ba31ab3SLuigi 'Comio' Mantellini 	int (*get_mdio)(struct bb_miiphy_bus *bus, int *v);
764ba31ab3SLuigi 'Comio' Mantellini 	int (*set_mdc)(struct bb_miiphy_bus *bus, int v);
774ba31ab3SLuigi 'Comio' Mantellini 	int (*delay)(struct bb_miiphy_bus *bus);
784ba31ab3SLuigi 'Comio' Mantellini #ifdef CONFIG_BITBANGMII_MULTI
794ba31ab3SLuigi 'Comio' Mantellini 	void *priv;
804ba31ab3SLuigi 'Comio' Mantellini #endif
814ba31ab3SLuigi 'Comio' Mantellini };
824ba31ab3SLuigi 'Comio' Mantellini 
834ba31ab3SLuigi 'Comio' Mantellini extern struct bb_miiphy_bus bb_miiphy_buses[];
844ba31ab3SLuigi 'Comio' Mantellini extern int bb_miiphy_buses_num;
854ba31ab3SLuigi 'Comio' Mantellini 
864ba31ab3SLuigi 'Comio' Mantellini void bb_miiphy_init(void);
875700bb63SMike Frysinger int bb_miiphy_read(const char *devname, unsigned char addr,
8863ff004cSMarian Balakowicz 		    unsigned char reg, unsigned short *value);
895700bb63SMike Frysinger int bb_miiphy_write(const char *devname, unsigned char addr,
9063ff004cSMarian Balakowicz 		     unsigned char reg, unsigned short value);
914ba31ab3SLuigi 'Comio' Mantellini #endif
92214ec6bbSwdenk 
93214ec6bbSwdenk /* phy seed setup */
94214ec6bbSwdenk #define AUTO			99
95855a496fSwdenk #define _1000BASET		1000
96214ec6bbSwdenk #define _100BASET		100
97214ec6bbSwdenk #define _10BASET		10
98214ec6bbSwdenk #define HALF			22
99214ec6bbSwdenk #define FULL			44
100214ec6bbSwdenk 
101214ec6bbSwdenk /* phy register offsets */
1028ef583a0SMike Frysinger #define MII_MIPSCR		0x11
103214ec6bbSwdenk 
1048ef583a0SMike Frysinger /* MII_LPA */
105b9711de1Swdenk #define PHY_ANLPAR_PSB_802_3	0x0001
106b9711de1Swdenk #define PHY_ANLPAR_PSB_802_9	0x0002
107b9711de1Swdenk 
1088ef583a0SMike Frysinger /* MII_CTRL1000 masks */
10971bc6e64SLarry Johnson #define PHY_1000BTCR_1000FD	0x0200
11071bc6e64SLarry Johnson #define PHY_1000BTCR_1000HD	0x0100
11171bc6e64SLarry Johnson 
1128ef583a0SMike Frysinger /* MII_STAT1000 masks */
113855a496fSwdenk #define PHY_1000BTSR_MSCF	0x8000
114855a496fSwdenk #define PHY_1000BTSR_MSCR	0x4000
115855a496fSwdenk #define PHY_1000BTSR_LRS	0x2000
116855a496fSwdenk #define PHY_1000BTSR_RRS	0x1000
117855a496fSwdenk #define PHY_1000BTSR_1000FD	0x0800
118855a496fSwdenk #define PHY_1000BTSR_1000HD	0x0400
119855a496fSwdenk 
12071bc6e64SLarry Johnson /* phy EXSR */
1218ef583a0SMike Frysinger #define ESTATUS_1000XF		0x8000
1228ef583a0SMike Frysinger #define ESTATUS_1000XH		0x4000
12371bc6e64SLarry Johnson 
124214ec6bbSwdenk #endif
125