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