xref: /rk3399_rockchip-uboot/include/miiphy.h (revision 5f184715ecd31bfcb8d09ba2d9f14adfa172a141)
1214ec6bbSwdenk /*----------------------------------------------------------------------------+
231773496SJosh Boyer |   This source code is dual-licensed.  You may use it under the terms of the
331773496SJosh Boyer |   GNU General Public License version 2, or under the license below.
4214ec6bbSwdenk |
5214ec6bbSwdenk |	This source code has been made available to you by IBM on an AS-IS
6214ec6bbSwdenk |	basis.	Anyone receiving this source is licensed under IBM
7214ec6bbSwdenk |	copyrights to use it in any way he or she deems fit, including
8214ec6bbSwdenk |	copying it, modifying it, compiling it, and redistributing it either
9214ec6bbSwdenk |	with or without modifications.	No license under IBM patents or
10214ec6bbSwdenk |	patent applications is to be implied by the copyright license.
11214ec6bbSwdenk |
12214ec6bbSwdenk |	Any user of this software should understand that IBM cannot provide
13214ec6bbSwdenk |	technical support for this software and will not be responsible for
14214ec6bbSwdenk |	any consequences resulting from the use of this software.
15214ec6bbSwdenk |
16214ec6bbSwdenk |	Any person who transfers this source code or any derivative work
17214ec6bbSwdenk |	must include the IBM copyright notice, this paragraph, and the
18214ec6bbSwdenk |	preceding two paragraphs in the transferred software.
19214ec6bbSwdenk |
20214ec6bbSwdenk |	COPYRIGHT   I B M   CORPORATION 1999
21214ec6bbSwdenk |	LICENSED MATERIAL  -  PROGRAM PROPERTY OF I B M
224ba31ab3SLuigi 'Comio' Mantellini |
234ba31ab3SLuigi 'Comio' Mantellini |   Additions (C) Copyright 2009 Industrie Dial Face S.p.A.
24214ec6bbSwdenk +----------------------------------------------------------------------------*/
25214ec6bbSwdenk /*----------------------------------------------------------------------------+
26214ec6bbSwdenk |
27214ec6bbSwdenk |  File Name:	miiphy.h
28214ec6bbSwdenk |
29214ec6bbSwdenk |  Function:	Include file defining PHY registers.
30214ec6bbSwdenk |
31214ec6bbSwdenk |  Author:	Mark Wisner
32214ec6bbSwdenk |
33214ec6bbSwdenk +----------------------------------------------------------------------------*/
34214ec6bbSwdenk #ifndef _miiphy_h_
35214ec6bbSwdenk #define _miiphy_h_
36214ec6bbSwdenk 
37*5f184715SAndy Fleming #include <common.h>
388ef583a0SMike Frysinger #include <linux/mii.h>
39*5f184715SAndy Fleming #include <linux/list.h>
4063ff004cSMarian Balakowicz #include <net.h>
41*5f184715SAndy Fleming #include <phy.h>
42*5f184715SAndy Fleming 
43*5f184715SAndy Fleming struct legacy_mii_dev {
44*5f184715SAndy Fleming 	int (*read)(const char *devname, unsigned char addr,
45*5f184715SAndy Fleming 		     unsigned char reg, unsigned short *value);
46*5f184715SAndy Fleming 	int (*write)(const char *devname, unsigned char addr,
47*5f184715SAndy Fleming 		      unsigned char reg, unsigned short value);
48*5f184715SAndy Fleming };
49214ec6bbSwdenk 
505700bb63SMike Frysinger int miiphy_read(const char *devname, unsigned char addr, unsigned char reg,
5163ff004cSMarian Balakowicz 		 unsigned short *value);
525700bb63SMike Frysinger int miiphy_write(const char *devname, unsigned char addr, unsigned char reg,
5363ff004cSMarian Balakowicz 		  unsigned short value);
545700bb63SMike Frysinger int miiphy_info(const char *devname, unsigned char addr, unsigned int *oui,
5563ff004cSMarian Balakowicz 		 unsigned char *model, unsigned char *rev);
565700bb63SMike Frysinger int miiphy_reset(const char *devname, unsigned char addr);
575700bb63SMike Frysinger int miiphy_speed(const char *devname, unsigned char addr);
585700bb63SMike Frysinger int miiphy_duplex(const char *devname, unsigned char addr);
595700bb63SMike Frysinger int miiphy_is_1000base_x(const char *devname, unsigned char addr);
606d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_SYS_FAULT_ECHO_LINK_DOWN
615700bb63SMike Frysinger int miiphy_link(const char *devname, unsigned char addr);
62fc3e2165Swdenk #endif
63214ec6bbSwdenk 
64d9785c14SMarian Balakowicz void miiphy_init(void);
65d9785c14SMarian Balakowicz 
665700bb63SMike Frysinger void miiphy_register(const char *devname,
675700bb63SMike Frysinger 		      int (*read)(const char *devname, unsigned char addr,
6863ff004cSMarian Balakowicz 				   unsigned char reg, unsigned short *value),
695700bb63SMike Frysinger 		      int (*write)(const char *devname, unsigned char addr,
7063ff004cSMarian Balakowicz 				    unsigned char reg, unsigned short value));
7163ff004cSMarian Balakowicz 
725700bb63SMike Frysinger int miiphy_set_current_dev(const char *devname);
735700bb63SMike Frysinger const char *miiphy_get_current_dev(void);
74*5f184715SAndy Fleming struct mii_dev *mdio_get_current_dev(void);
75*5f184715SAndy Fleming struct mii_dev *miiphy_get_dev_by_name(const char *devname);
76*5f184715SAndy Fleming struct phy_device *mdio_phydev_for_ethname(const char *devname);
7763ff004cSMarian Balakowicz 
7863ff004cSMarian Balakowicz void miiphy_listdev(void);
7963ff004cSMarian Balakowicz 
80*5f184715SAndy Fleming struct mii_dev *mdio_alloc(void);
81*5f184715SAndy Fleming int mdio_register(struct mii_dev *bus);
82*5f184715SAndy Fleming void mdio_list_devices(void);
83*5f184715SAndy Fleming 
844ba31ab3SLuigi 'Comio' Mantellini #ifdef CONFIG_BITBANGMII
8563ff004cSMarian Balakowicz 
864ba31ab3SLuigi 'Comio' Mantellini #define BB_MII_DEVNAME	"bb_miiphy"
874ba31ab3SLuigi 'Comio' Mantellini 
884ba31ab3SLuigi 'Comio' Mantellini struct bb_miiphy_bus {
894ba31ab3SLuigi 'Comio' Mantellini 	char name[NAMESIZE];
904ba31ab3SLuigi 'Comio' Mantellini 	int (*init)(struct bb_miiphy_bus *bus);
914ba31ab3SLuigi 'Comio' Mantellini 	int (*mdio_active)(struct bb_miiphy_bus *bus);
924ba31ab3SLuigi 'Comio' Mantellini 	int (*mdio_tristate)(struct bb_miiphy_bus *bus);
934ba31ab3SLuigi 'Comio' Mantellini 	int (*set_mdio)(struct bb_miiphy_bus *bus, int v);
944ba31ab3SLuigi 'Comio' Mantellini 	int (*get_mdio)(struct bb_miiphy_bus *bus, int *v);
954ba31ab3SLuigi 'Comio' Mantellini 	int (*set_mdc)(struct bb_miiphy_bus *bus, int v);
964ba31ab3SLuigi 'Comio' Mantellini 	int (*delay)(struct bb_miiphy_bus *bus);
974ba31ab3SLuigi 'Comio' Mantellini #ifdef CONFIG_BITBANGMII_MULTI
984ba31ab3SLuigi 'Comio' Mantellini 	void *priv;
994ba31ab3SLuigi 'Comio' Mantellini #endif
1004ba31ab3SLuigi 'Comio' Mantellini };
1014ba31ab3SLuigi 'Comio' Mantellini 
1024ba31ab3SLuigi 'Comio' Mantellini extern struct bb_miiphy_bus bb_miiphy_buses[];
1034ba31ab3SLuigi 'Comio' Mantellini extern int bb_miiphy_buses_num;
1044ba31ab3SLuigi 'Comio' Mantellini 
1054ba31ab3SLuigi 'Comio' Mantellini void bb_miiphy_init(void);
1065700bb63SMike Frysinger int bb_miiphy_read(const char *devname, unsigned char addr,
10763ff004cSMarian Balakowicz 		    unsigned char reg, unsigned short *value);
1085700bb63SMike Frysinger int bb_miiphy_write(const char *devname, unsigned char addr,
10963ff004cSMarian Balakowicz 		     unsigned char reg, unsigned short value);
1104ba31ab3SLuigi 'Comio' Mantellini #endif
111214ec6bbSwdenk 
112214ec6bbSwdenk /* phy seed setup */
113214ec6bbSwdenk #define AUTO			99
114855a496fSwdenk #define _1000BASET		1000
115214ec6bbSwdenk #define _100BASET		100
116214ec6bbSwdenk #define _10BASET		10
117214ec6bbSwdenk #define HALF			22
118214ec6bbSwdenk #define FULL			44
119214ec6bbSwdenk 
120214ec6bbSwdenk /* phy register offsets */
1218ef583a0SMike Frysinger #define MII_MIPSCR		0x11
122214ec6bbSwdenk 
1238ef583a0SMike Frysinger /* MII_LPA */
124b9711de1Swdenk #define PHY_ANLPAR_PSB_802_3	0x0001
125b9711de1Swdenk #define PHY_ANLPAR_PSB_802_9	0x0002
126b9711de1Swdenk 
1278ef583a0SMike Frysinger /* MII_CTRL1000 masks */
12871bc6e64SLarry Johnson #define PHY_1000BTCR_1000FD	0x0200
12971bc6e64SLarry Johnson #define PHY_1000BTCR_1000HD	0x0100
13071bc6e64SLarry Johnson 
1318ef583a0SMike Frysinger /* MII_STAT1000 masks */
132855a496fSwdenk #define PHY_1000BTSR_MSCF	0x8000
133855a496fSwdenk #define PHY_1000BTSR_MSCR	0x4000
134855a496fSwdenk #define PHY_1000BTSR_LRS	0x2000
135855a496fSwdenk #define PHY_1000BTSR_RRS	0x1000
136855a496fSwdenk #define PHY_1000BTSR_1000FD	0x0800
137855a496fSwdenk #define PHY_1000BTSR_1000HD	0x0400
138855a496fSwdenk 
13971bc6e64SLarry Johnson /* phy EXSR */
1408ef583a0SMike Frysinger #define ESTATUS_1000XF		0x8000
1418ef583a0SMike Frysinger #define ESTATUS_1000XH		0x4000
14271bc6e64SLarry Johnson 
143214ec6bbSwdenk #endif
144