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