xref: /rk3399_rockchip-uboot/include/miiphy.h (revision 8ef583a0351590a91394499eb5ca2ab8a703d959)
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*8ef583a0SMike Frysinger #include <linux/mii.h>
3863ff004cSMarian Balakowicz #include <net.h>
39214ec6bbSwdenk 
405700bb63SMike Frysinger int miiphy_read (const char *devname, unsigned char addr, unsigned char reg,
4163ff004cSMarian Balakowicz 		 unsigned short *value);
425700bb63SMike Frysinger int miiphy_write (const char *devname, unsigned char addr, unsigned char reg,
4363ff004cSMarian Balakowicz 		  unsigned short value);
445700bb63SMike Frysinger int miiphy_info (const char *devname, unsigned char addr, unsigned int *oui,
4563ff004cSMarian Balakowicz 		 unsigned char *model, unsigned char *rev);
465700bb63SMike Frysinger int miiphy_reset (const char *devname, unsigned char addr);
475700bb63SMike Frysinger int miiphy_speed (const char *devname, unsigned char addr);
485700bb63SMike Frysinger int miiphy_duplex (const char *devname, unsigned char addr);
495700bb63SMike Frysinger int miiphy_is_1000base_x (const char *devname, unsigned char addr);
506d0f6bcfSJean-Christophe PLAGNIOL-VILLARD #ifdef CONFIG_SYS_FAULT_ECHO_LINK_DOWN
515700bb63SMike Frysinger int miiphy_link (const char *devname, unsigned char addr);
52fc3e2165Swdenk #endif
53214ec6bbSwdenk 
54d9785c14SMarian Balakowicz void miiphy_init (void);
55d9785c14SMarian Balakowicz 
565700bb63SMike Frysinger void miiphy_register (const char *devname,
575700bb63SMike Frysinger 		      int (*read) (const char *devname, unsigned char addr,
5863ff004cSMarian Balakowicz 				   unsigned char reg, unsigned short *value),
595700bb63SMike Frysinger 		      int (*write) (const char *devname, unsigned char addr,
6063ff004cSMarian Balakowicz 				    unsigned char reg, unsigned short value));
6163ff004cSMarian Balakowicz 
625700bb63SMike Frysinger int miiphy_set_current_dev (const char *devname);
635700bb63SMike Frysinger const char *miiphy_get_current_dev (void);
6463ff004cSMarian Balakowicz 
6563ff004cSMarian Balakowicz void miiphy_listdev (void);
6663ff004cSMarian Balakowicz 
674ba31ab3SLuigi 'Comio' Mantellini #ifdef CONFIG_BITBANGMII
6863ff004cSMarian Balakowicz 
694ba31ab3SLuigi 'Comio' Mantellini #define BB_MII_DEVNAME	"bb_miiphy"
704ba31ab3SLuigi 'Comio' Mantellini 
714ba31ab3SLuigi 'Comio' Mantellini struct bb_miiphy_bus {
724ba31ab3SLuigi 'Comio' Mantellini 	char name[NAMESIZE];
734ba31ab3SLuigi 'Comio' Mantellini 	int (*init)(struct bb_miiphy_bus *bus);
744ba31ab3SLuigi 'Comio' Mantellini 	int (*mdio_active)(struct bb_miiphy_bus *bus);
754ba31ab3SLuigi 'Comio' Mantellini 	int (*mdio_tristate)(struct bb_miiphy_bus *bus);
764ba31ab3SLuigi 'Comio' Mantellini 	int (*set_mdio)(struct bb_miiphy_bus *bus, int v);
774ba31ab3SLuigi 'Comio' Mantellini 	int (*get_mdio)(struct bb_miiphy_bus *bus, int *v);
784ba31ab3SLuigi 'Comio' Mantellini 	int (*set_mdc)(struct bb_miiphy_bus *bus, int v);
794ba31ab3SLuigi 'Comio' Mantellini 	int (*delay)(struct bb_miiphy_bus *bus);
804ba31ab3SLuigi 'Comio' Mantellini #ifdef CONFIG_BITBANGMII_MULTI
814ba31ab3SLuigi 'Comio' Mantellini 	void *priv;
824ba31ab3SLuigi 'Comio' Mantellini #endif
834ba31ab3SLuigi 'Comio' Mantellini };
844ba31ab3SLuigi 'Comio' Mantellini 
854ba31ab3SLuigi 'Comio' Mantellini extern struct bb_miiphy_bus bb_miiphy_buses[];
864ba31ab3SLuigi 'Comio' Mantellini extern int bb_miiphy_buses_num;
874ba31ab3SLuigi 'Comio' Mantellini 
884ba31ab3SLuigi 'Comio' Mantellini void bb_miiphy_init (void);
895700bb63SMike Frysinger int bb_miiphy_read (const char *devname, unsigned char addr,
9063ff004cSMarian Balakowicz 		    unsigned char reg, unsigned short *value);
915700bb63SMike Frysinger int bb_miiphy_write (const char *devname, unsigned char addr,
9263ff004cSMarian Balakowicz 		     unsigned char reg, unsigned short value);
934ba31ab3SLuigi 'Comio' Mantellini #endif
94214ec6bbSwdenk 
95214ec6bbSwdenk /* phy seed setup */
96214ec6bbSwdenk #define AUTO			99
97855a496fSwdenk #define _1000BASET		1000
98214ec6bbSwdenk #define _100BASET		100
99214ec6bbSwdenk #define _10BASET		10
100214ec6bbSwdenk #define HALF			22
101214ec6bbSwdenk #define FULL			44
102214ec6bbSwdenk 
103214ec6bbSwdenk /* phy register offsets */
104*8ef583a0SMike Frysinger #define MII_MIPSCR		0x11
105214ec6bbSwdenk 
106*8ef583a0SMike Frysinger /* MII_LPA */
107b9711de1Swdenk #define PHY_ANLPAR_PSB_802_3	0x0001
108b9711de1Swdenk #define PHY_ANLPAR_PSB_802_9	0x0002
109b9711de1Swdenk 
110*8ef583a0SMike Frysinger /* MII_CTRL1000 masks */
11171bc6e64SLarry Johnson #define PHY_1000BTCR_1000FD	0x0200
11271bc6e64SLarry Johnson #define PHY_1000BTCR_1000HD	0x0100
11371bc6e64SLarry Johnson 
114*8ef583a0SMike Frysinger /* MII_STAT1000 masks */
115855a496fSwdenk #define PHY_1000BTSR_MSCF	0x8000
116855a496fSwdenk #define PHY_1000BTSR_MSCR	0x4000
117855a496fSwdenk #define PHY_1000BTSR_LRS	0x2000
118855a496fSwdenk #define PHY_1000BTSR_RRS	0x1000
119855a496fSwdenk #define PHY_1000BTSR_1000FD	0x0800
120855a496fSwdenk #define PHY_1000BTSR_1000HD	0x0400
121855a496fSwdenk 
12271bc6e64SLarry Johnson /* phy EXSR */
123*8ef583a0SMike Frysinger #define ESTATUS_1000XF		0x8000
124*8ef583a0SMike Frysinger #define ESTATUS_1000XH		0x4000
12571bc6e64SLarry Johnson 
126214ec6bbSwdenk #endif
127