1562825a0SRavi Kumar /* SPDX-License-Identifier: BSD-3-Clause 2562825a0SRavi Kumar * Copyright(c) 2018 Advanced Micro Devices, Inc. All rights reserved. 3562825a0SRavi Kumar * Copyright(c) 2018 Synopsys, Inc. All rights reserved. 4562825a0SRavi Kumar */ 5562825a0SRavi Kumar 6562825a0SRavi Kumar #ifndef __AXGBE_PHY_H__ 7562825a0SRavi Kumar #define __AXGBE_PHY_H__ 8562825a0SRavi Kumar 9562825a0SRavi Kumar #define SPEED_10 10 10562825a0SRavi Kumar #define SPEED_100 100 11562825a0SRavi Kumar #define SPEED_1000 1000 12562825a0SRavi Kumar #define SPEED_2500 2500 13562825a0SRavi Kumar #define SPEED_10000 10000 14562825a0SRavi Kumar 15562825a0SRavi Kumar 16562825a0SRavi Kumar /* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit 17562825a0SRavi Kumar * IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. 18562825a0SRavi Kumar */ 19*47cf4ac1SVenkat Kumar Ande #define AXGBE_ADDR_C45 (1 << 30) 20562825a0SRavi Kumar 21562825a0SRavi Kumar /* Basic mode status register. */ 22562825a0SRavi Kumar #define BMSR_LSTATUS 0x0004 /* Link status */ 23562825a0SRavi Kumar 24562825a0SRavi Kumar /* Status register 1. */ 25562825a0SRavi Kumar #define MDIO_STAT1_LSTATUS BMSR_LSTATUS 26562825a0SRavi Kumar 27562825a0SRavi Kumar /* Generic MII registers. */ 28562825a0SRavi Kumar #define MII_BMCR 0x00 /* Basic mode control register */ 29562825a0SRavi Kumar #define MII_BMSR 0x01 /* Basic mode status register */ 30562825a0SRavi Kumar #define MII_PHYSID1 0x02 /* PHYS ID 1 */ 31562825a0SRavi Kumar #define MII_PHYSID2 0x03 /* PHYS ID 2 */ 32562825a0SRavi Kumar #define MII_ADVERTISE 0x04 /* Advertisement control reg */ 33562825a0SRavi Kumar #define MII_LPA 0x05 /* Link partner ability reg */ 34562825a0SRavi Kumar #define MII_EXPANSION 0x06 /* Expansion register */ 35562825a0SRavi Kumar #define MII_CTRL1000 0x09 /* 1000BASE-T control */ 36562825a0SRavi Kumar #define MII_STAT1000 0x0a /* 1000BASE-T status */ 37562825a0SRavi Kumar #define MII_MMD_CTRL 0x0d /* MMD Access Control Register */ 38562825a0SRavi Kumar #define MII_MMD_DATA 0x0e /* MMD Access Data Register */ 39562825a0SRavi Kumar #define MII_ESTATUS 0x0f /* Extended Status */ 40562825a0SRavi Kumar #define MII_DCOUNTER 0x12 /* Disconnect counter */ 41562825a0SRavi Kumar #define MII_FCSCOUNTER 0x13 /* False carrier counter */ 42562825a0SRavi Kumar #define MII_NWAYTEST 0x14 /* N-way auto-neg test reg */ 43562825a0SRavi Kumar #define MII_RERRCOUNTER 0x15 /* Receive error counter */ 44562825a0SRavi Kumar #define MII_SREVISION 0x16 /* Silicon revision */ 45562825a0SRavi Kumar #define MII_RESV1 0x17 /* Reserved... */ 46562825a0SRavi Kumar #define MII_LBRERROR 0x18 /* Lpback, rx, bypass error */ 47562825a0SRavi Kumar #define MII_PHYADDR 0x19 /* PHY address */ 48562825a0SRavi Kumar #define MII_RESV2 0x1a /* Reserved... */ 49562825a0SRavi Kumar #define MII_TPISTATUS 0x1b /* TPI status for 10mbps */ 50562825a0SRavi Kumar #define MII_NCONFIG 0x1c /* Network interface config */ 51562825a0SRavi Kumar 52562825a0SRavi Kumar /* Basic mode control register. */ 53562825a0SRavi Kumar #define BMCR_RESV 0x003f /* Unused... */ 54562825a0SRavi Kumar #define BMCR_SPEED1000 0x0040 /* MSB of Speed (1000) */ 55562825a0SRavi Kumar #define BMCR_CTST 0x0080 /* Collision test */ 56562825a0SRavi Kumar #define BMCR_FULLDPLX 0x0100 /* Full duplex */ 57562825a0SRavi Kumar #define BMCR_ANRESTART 0x0200 /* Auto negotiation restart */ 58562825a0SRavi Kumar #define BMCR_ISOLATE 0x0400 /* Isolate data paths from MII */ 59562825a0SRavi Kumar #define BMCR_PDOWN 0x0800 /* Enable low power state */ 60562825a0SRavi Kumar #define BMCR_ANENABLE 0x1000 /* Enable auto negotiation */ 61562825a0SRavi Kumar #define BMCR_SPEED100 0x2000 /* Select 100Mbps */ 62562825a0SRavi Kumar #define BMCR_LOOPBACK 0x4000 /* TXD loopback bits */ 63562825a0SRavi Kumar #define BMCR_RESET 0x8000 /* Reset to default state */ 64562825a0SRavi Kumar #define BMCR_SPEED10 0x0000 /* Select 10Mbps */ 65562825a0SRavi Kumar 66562825a0SRavi Kumar 67562825a0SRavi Kumar /* MDIO Manageable Devices (MMDs). */ 68562825a0SRavi Kumar #define MDIO_MMD_PMAPMD 1 /* Physical Medium Attachment 69562825a0SRavi Kumar * Physical Medium Dependent 70562825a0SRavi Kumar */ 71562825a0SRavi Kumar #define MDIO_MMD_WIS 2 /* WAN Interface Sublayer */ 72562825a0SRavi Kumar #define MDIO_MMD_PCS 3 /* Physical Coding Sublayer */ 73562825a0SRavi Kumar #define MDIO_MMD_PHYXS 4 /* PHY Extender Sublayer */ 74562825a0SRavi Kumar #define MDIO_MMD_DTEXS 5 /* DTE Extender Sublayer */ 75562825a0SRavi Kumar #define MDIO_MMD_TC 6 /* Transmission Convergence */ 76562825a0SRavi Kumar #define MDIO_MMD_AN 7 /* Auto-Negotiation */ 77562825a0SRavi Kumar #define MDIO_MMD_C22EXT 29 /* Clause 22 extension */ 78562825a0SRavi Kumar #define MDIO_MMD_VEND1 30 /* Vendor specific 1 */ 79562825a0SRavi Kumar #define MDIO_MMD_VEND2 31 /* Vendor specific 2 */ 80562825a0SRavi Kumar 81562825a0SRavi Kumar /* Generic MDIO registers. */ 82562825a0SRavi Kumar #define MDIO_CTRL1 MII_BMCR 83562825a0SRavi Kumar #define MDIO_STAT1 MII_BMSR 84562825a0SRavi Kumar #define MDIO_DEVID1 MII_PHYSID1 85562825a0SRavi Kumar #define MDIO_DEVID2 MII_PHYSID2 86562825a0SRavi Kumar #define MDIO_SPEED 4 /* Speed ability */ 87562825a0SRavi Kumar #define MDIO_DEVS1 5 /* Devices in package */ 88562825a0SRavi Kumar #define MDIO_DEVS2 6 89562825a0SRavi Kumar #define MDIO_CTRL2 7 /* 10G control 2 */ 90562825a0SRavi Kumar #define MDIO_STAT2 8 /* 10G status 2 */ 91562825a0SRavi Kumar #define MDIO_PMA_TXDIS 9 /* 10G PMA/PMD transmit disable */ 92562825a0SRavi Kumar #define MDIO_PMA_RXDET 10 /* 10G PMA/PMD receive signal detect */ 93562825a0SRavi Kumar #define MDIO_PMA_EXTABLE 11 /* 10G PMA/PMD extended ability */ 94562825a0SRavi Kumar #define MDIO_PKGID1 14 /* Package identifier */ 95562825a0SRavi Kumar #define MDIO_PKGID2 15 96562825a0SRavi Kumar #define MDIO_AN_ADVERTISE 16 /* AN advertising (base page) */ 97562825a0SRavi Kumar #define MDIO_AN_LPA 19 /* AN LP abilities (base page) */ 98562825a0SRavi Kumar #define MDIO_PCS_EEE_ABLE 20 /* EEE Capability register */ 99562825a0SRavi Kumar #define MDIO_PCS_EEE_WK_ERR 22 /* EEE wake error counter */ 100562825a0SRavi Kumar #define MDIO_PHYXS_LNSTAT 24 /* PHY XGXS lane state */ 101562825a0SRavi Kumar #define MDIO_AN_EEE_ADV 60 /* EEE advertisement */ 102562825a0SRavi Kumar #define MDIO_AN_EEE_LPABLE 61 /* EEE link partner ability */ 103562825a0SRavi Kumar 104562825a0SRavi Kumar /* Media-dependent registers. */ 105562825a0SRavi Kumar #define MDIO_PMA_10GBT_SWAPPOL 130 /* 10GBASE-T pair swap & polarity */ 106562825a0SRavi Kumar #define MDIO_PMA_10GBT_TXPWR 131 /* 10GBASE-T TX power control */ 107562825a0SRavi Kumar #define MDIO_PMA_10GBT_SNR 133 /* 10GBASE-T SNR margin, lane A. 108562825a0SRavi Kumar * Lanes B-D are numbered 134-136. 109562825a0SRavi Kumar */ 110562825a0SRavi Kumar #define MDIO_PMA_10GBR_FECABLE 170 /* 10GBASE-R FEC ability */ 111562825a0SRavi Kumar #define MDIO_PCS_10GBX_STAT1 24 /* 10GBASE-X PCS status 1 */ 112562825a0SRavi Kumar #define MDIO_PCS_10GBRT_STAT1 32 /* 10GBASE-R/-T PCS status 1 */ 113562825a0SRavi Kumar #define MDIO_PCS_10GBRT_STAT2 33 /* 10GBASE-R/-T PCS status 2 */ 114562825a0SRavi Kumar #define MDIO_AN_10GBT_CTRL 32 /* 10GBASE-T auto-negotiation control */ 115562825a0SRavi Kumar #define MDIO_AN_10GBT_STAT 33 /* 10GBASE-T auto-negotiation status */ 116562825a0SRavi Kumar 117562825a0SRavi Kumar /* Control register 1. */ 118562825a0SRavi Kumar /* Enable extended speed selection */ 119562825a0SRavi Kumar #define MDIO_CTRL1_SPEEDSELEXT (BMCR_SPEED1000 | BMCR_SPEED100) 120562825a0SRavi Kumar /* All speed selection bits */ 121562825a0SRavi Kumar #define MDIO_CTRL1_SPEEDSEL (MDIO_CTRL1_SPEEDSELEXT | 0x003c) 122562825a0SRavi Kumar #define MDIO_CTRL1_FULLDPLX BMCR_FULLDPLX 123562825a0SRavi Kumar #define MDIO_CTRL1_LPOWER BMCR_PDOWN 124562825a0SRavi Kumar #define MDIO_CTRL1_RESET BMCR_RESET 125562825a0SRavi Kumar #define MDIO_PMA_CTRL1_LOOPBACK 0x0001 126562825a0SRavi Kumar #define MDIO_PMA_CTRL1_SPEED1000 BMCR_SPEED1000 127562825a0SRavi Kumar #define MDIO_PMA_CTRL1_SPEED100 BMCR_SPEED100 128562825a0SRavi Kumar #define MDIO_PCS_CTRL1_LOOPBACK BMCR_LOOPBACK 129562825a0SRavi Kumar #define MDIO_PHYXS_CTRL1_LOOPBACK BMCR_LOOPBACK 130562825a0SRavi Kumar #define MDIO_AN_CTRL1_RESTART BMCR_ANRESTART 131562825a0SRavi Kumar #define MDIO_AN_CTRL1_ENABLE BMCR_ANENABLE 132562825a0SRavi Kumar #define MDIO_AN_CTRL1_XNP 0x2000 /* Enable extended next page */ 133562825a0SRavi Kumar #define MDIO_PCS_CTRL1_CLKSTOP_EN 0x400 /* Stop the clock during LPI */ 134562825a0SRavi Kumar 135562825a0SRavi Kumar 136562825a0SRavi Kumar 137562825a0SRavi Kumar 138562825a0SRavi Kumar 139562825a0SRavi Kumar /* PMA 10GBASE-R FEC ability register. */ 140562825a0SRavi Kumar #define MDIO_PMA_10GBR_FECABLE_ABLE 0x0001 /* FEC ability */ 141562825a0SRavi Kumar #define MDIO_PMA_10GBR_FECABLE_ERRABLE 0x0002 /* FEC error indic. ability */ 142562825a0SRavi Kumar 143562825a0SRavi Kumar 144562825a0SRavi Kumar /* Autoneg related */ 145562825a0SRavi Kumar #define ADVERTISED_Autoneg (1 << 6) 146562825a0SRavi Kumar #define SUPPORTED_Autoneg (1 << 6) 147562825a0SRavi Kumar #define AUTONEG_DISABLE 0x00 148562825a0SRavi Kumar #define AUTONEG_ENABLE 0x01 149562825a0SRavi Kumar 150562825a0SRavi Kumar #define ADVERTISED_Pause (1 << 13) 151562825a0SRavi Kumar #define ADVERTISED_Asym_Pause (1 << 14) 152562825a0SRavi Kumar 153562825a0SRavi Kumar #define SUPPORTED_Pause (1 << 13) 154562825a0SRavi Kumar #define SUPPORTED_Asym_Pause (1 << 14) 155562825a0SRavi Kumar 156562825a0SRavi Kumar #define SUPPORTED_Backplane (1 << 16) 157562825a0SRavi Kumar #define SUPPORTED_TP (1 << 7) 158562825a0SRavi Kumar 159562825a0SRavi Kumar #define ADVERTISED_10000baseR_FEC (1 << 20) 160562825a0SRavi Kumar 161562825a0SRavi Kumar #define SUPPORTED_10000baseR_FEC (1 << 20) 162562825a0SRavi Kumar 163562825a0SRavi Kumar #define SUPPORTED_FIBRE (1 << 10) 164562825a0SRavi Kumar 165562825a0SRavi Kumar #define ADVERTISED_10000baseKR_Full (1 << 19) 166562825a0SRavi Kumar #define ADVERTISED_10000baseT_Full (1 << 12) 167562825a0SRavi Kumar #define ADVERTISED_2500baseX_Full (1 << 15) 168562825a0SRavi Kumar #define ADVERTISED_1000baseKX_Full (1 << 17) 169562825a0SRavi Kumar #define ADVERTISED_1000baseT_Full (1 << 5) 170562825a0SRavi Kumar #define ADVERTISED_100baseT_Full (1 << 3) 1711f9d2d3aSVenkat Kumar Ande #define ADVERTISED_10baseT_Full (1 << 2) 172562825a0SRavi Kumar #define ADVERTISED_TP (1 << 7) 173562825a0SRavi Kumar #define ADVERTISED_FIBRE (1 << 10) 174562825a0SRavi Kumar #define ADVERTISED_Backplane (1 << 16) 175562825a0SRavi Kumar 176562825a0SRavi Kumar #define SUPPORTED_1000baseKX_Full (1 << 17) 177562825a0SRavi Kumar #define SUPPORTED_10000baseKR_Full (1 << 19) 178562825a0SRavi Kumar #define SUPPORTED_2500baseX_Full (1 << 15) 1791f9d2d3aSVenkat Kumar Ande #define SUPPORTED_10baseT_Full (1 << 3) 180562825a0SRavi Kumar #define SUPPORTED_100baseT_Full (1 << 2) 181562825a0SRavi Kumar #define SUPPORTED_1000baseT_Full (1 << 5) 182562825a0SRavi Kumar #define SUPPORTED_10000baseT_Full (1 << 12) 183562825a0SRavi Kumar #define SUPPORTED_2500baseX_Full (1 << 15) 184562825a0SRavi Kumar 185562825a0SRavi Kumar 186562825a0SRavi Kumar #define SPEED_UNKNOWN -1 187562825a0SRavi Kumar 188562825a0SRavi Kumar /* Duplex, half or full. */ 189562825a0SRavi Kumar #define DUPLEX_HALF 0x00 190562825a0SRavi Kumar #define DUPLEX_FULL 0x01 191562825a0SRavi Kumar #define DUPLEX_UNKNOWN 0xff 192562825a0SRavi Kumar 193562825a0SRavi Kumar #endif 194562825a0SRavi Kumar /* PHY */ 195