19dc8ba19STed Chen /* 29dc8ba19STed Chen * Copyright (c) 2015 Realtek Semiconductor Corp. All rights reserved. 39dc8ba19STed Chen * 49dc8ba19STed Chen * SPDX-License-Identifier: GPL-2.0 59dc8ba19STed Chen * 69dc8ba19STed Chen */ 79dc8ba19STed Chen 89dc8ba19STed Chen #ifndef _RTL8152_ETH_H 99dc8ba19STed Chen #define _RTL8152_ETH_H 109dc8ba19STed Chen 119dc8ba19STed Chen #define R8152_BASE_NAME "r8152" 129dc8ba19STed Chen 139dc8ba19STed Chen #define PLA_IDR 0xc000 149dc8ba19STed Chen #define PLA_RCR 0xc010 159dc8ba19STed Chen #define PLA_RMS 0xc016 169dc8ba19STed Chen #define PLA_RXFIFO_CTRL0 0xc0a0 179dc8ba19STed Chen #define PLA_RXFIFO_CTRL1 0xc0a4 189dc8ba19STed Chen #define PLA_RXFIFO_CTRL2 0xc0a8 199dc8ba19STed Chen #define PLA_DMY_REG0 0xc0b0 209dc8ba19STed Chen #define PLA_FMC 0xc0b4 219dc8ba19STed Chen #define PLA_CFG_WOL 0xc0b6 229dc8ba19STed Chen #define PLA_TEREDO_CFG 0xc0bc 239dc8ba19STed Chen #define PLA_MAR 0xcd00 249dc8ba19STed Chen #define PLA_BACKUP 0xd000 259dc8ba19STed Chen #define PAL_BDC_CR 0xd1a0 269dc8ba19STed Chen #define PLA_TEREDO_TIMER 0xd2cc 279dc8ba19STed Chen #define PLA_REALWOW_TIMER 0xd2e8 289dc8ba19STed Chen #define PLA_LEDSEL 0xdd90 299dc8ba19STed Chen #define PLA_LED_FEATURE 0xdd92 309dc8ba19STed Chen #define PLA_PHYAR 0xde00 319dc8ba19STed Chen #define PLA_BOOT_CTRL 0xe004 329dc8ba19STed Chen #define PLA_GPHY_INTR_IMR 0xe022 339dc8ba19STed Chen #define PLA_EEE_CR 0xe040 349dc8ba19STed Chen #define PLA_EEEP_CR 0xe080 359dc8ba19STed Chen #define PLA_MAC_PWR_CTRL 0xe0c0 369dc8ba19STed Chen #define PLA_MAC_PWR_CTRL2 0xe0ca 379dc8ba19STed Chen #define PLA_MAC_PWR_CTRL3 0xe0cc 389dc8ba19STed Chen #define PLA_MAC_PWR_CTRL4 0xe0ce 399dc8ba19STed Chen #define PLA_WDT6_CTRL 0xe428 409dc8ba19STed Chen #define PLA_TCR0 0xe610 419dc8ba19STed Chen #define PLA_TCR1 0xe612 429dc8ba19STed Chen #define PLA_MTPS 0xe615 439dc8ba19STed Chen #define PLA_TXFIFO_CTRL 0xe618 449dc8ba19STed Chen #define PLA_RSTTALLY 0xe800 459dc8ba19STed Chen #define BIST_CTRL 0xe810 469dc8ba19STed Chen #define PLA_CR 0xe813 479dc8ba19STed Chen #define PLA_CRWECR 0xe81c 489dc8ba19STed Chen #define PLA_CONFIG12 0xe81e /* CONFIG1, CONFIG2 */ 499dc8ba19STed Chen #define PLA_CONFIG34 0xe820 /* CONFIG3, CONFIG4 */ 509dc8ba19STed Chen #define PLA_CONFIG5 0xe822 519dc8ba19STed Chen #define PLA_PHY_PWR 0xe84c 529dc8ba19STed Chen #define PLA_OOB_CTRL 0xe84f 539dc8ba19STed Chen #define PLA_CPCR 0xe854 549dc8ba19STed Chen #define PLA_MISC_0 0xe858 559dc8ba19STed Chen #define PLA_MISC_1 0xe85a 569dc8ba19STed Chen #define PLA_OCP_GPHY_BASE 0xe86c 579dc8ba19STed Chen #define PLA_TALLYCNT 0xe890 589dc8ba19STed Chen #define PLA_SFF_STS_7 0xe8de 599dc8ba19STed Chen #define PLA_PHYSTATUS 0xe908 609dc8ba19STed Chen #define PLA_BP_BA 0xfc26 619dc8ba19STed Chen #define PLA_BP_0 0xfc28 629dc8ba19STed Chen #define PLA_BP_1 0xfc2a 639dc8ba19STed Chen #define PLA_BP_2 0xfc2c 649dc8ba19STed Chen #define PLA_BP_3 0xfc2e 659dc8ba19STed Chen #define PLA_BP_4 0xfc30 669dc8ba19STed Chen #define PLA_BP_5 0xfc32 679dc8ba19STed Chen #define PLA_BP_6 0xfc34 689dc8ba19STed Chen #define PLA_BP_7 0xfc36 699dc8ba19STed Chen #define PLA_BP_EN 0xfc38 709dc8ba19STed Chen 719dc8ba19STed Chen #define USB_USB2PHY 0xb41e 729dc8ba19STed Chen #define USB_SSPHYLINK2 0xb428 739dc8ba19STed Chen #define USB_U2P3_CTRL 0xb460 749dc8ba19STed Chen #define USB_CSR_DUMMY1 0xb464 759dc8ba19STed Chen #define USB_CSR_DUMMY2 0xb466 769dc8ba19STed Chen #define USB_DEV_STAT 0xb808 779dc8ba19STed Chen #define USB_CONNECT_TIMER 0xcbf8 789dc8ba19STed Chen #define USB_BURST_SIZE 0xcfc0 799dc8ba19STed Chen #define USB_USB_CTRL 0xd406 809dc8ba19STed Chen #define USB_PHY_CTRL 0xd408 819dc8ba19STed Chen #define USB_TX_AGG 0xd40a 829dc8ba19STed Chen #define USB_RX_BUF_TH 0xd40c 839dc8ba19STed Chen #define USB_USB_TIMER 0xd428 849dc8ba19STed Chen #define USB_RX_EARLY_TIMEOUT 0xd42c 859dc8ba19STed Chen #define USB_RX_EARLY_SIZE 0xd42e 869dc8ba19STed Chen #define USB_PM_CTRL_STATUS 0xd432 879dc8ba19STed Chen #define USB_TX_DMA 0xd434 889dc8ba19STed Chen #define USB_TOLERANCE 0xd490 899dc8ba19STed Chen #define USB_LPM_CTRL 0xd41a 909dc8ba19STed Chen #define USB_UPS_CTRL 0xd800 919dc8ba19STed Chen #define USB_MISC_0 0xd81a 929dc8ba19STed Chen #define USB_POWER_CUT 0xd80a 939dc8ba19STed Chen #define USB_AFE_CTRL2 0xd824 949dc8ba19STed Chen #define USB_WDT11_CTRL 0xe43c 959dc8ba19STed Chen #define USB_BP_BA 0xfc26 969dc8ba19STed Chen #define USB_BP_0 0xfc28 979dc8ba19STed Chen #define USB_BP_1 0xfc2a 989dc8ba19STed Chen #define USB_BP_2 0xfc2c 999dc8ba19STed Chen #define USB_BP_3 0xfc2e 1009dc8ba19STed Chen #define USB_BP_4 0xfc30 1019dc8ba19STed Chen #define USB_BP_5 0xfc32 1029dc8ba19STed Chen #define USB_BP_6 0xfc34 1039dc8ba19STed Chen #define USB_BP_7 0xfc36 1049dc8ba19STed Chen #define USB_BP_EN 0xfc38 1059dc8ba19STed Chen 1069dc8ba19STed Chen /* OCP Registers */ 1079dc8ba19STed Chen #define OCP_ALDPS_CONFIG 0x2010 1089dc8ba19STed Chen #define OCP_EEE_CONFIG1 0x2080 1099dc8ba19STed Chen #define OCP_EEE_CONFIG2 0x2092 1109dc8ba19STed Chen #define OCP_EEE_CONFIG3 0x2094 1119dc8ba19STed Chen #define OCP_BASE_MII 0xa400 1129dc8ba19STed Chen #define OCP_EEE_AR 0xa41a 1139dc8ba19STed Chen #define OCP_EEE_DATA 0xa41c 1149dc8ba19STed Chen #define OCP_PHY_STATUS 0xa420 1159dc8ba19STed Chen #define OCP_POWER_CFG 0xa430 1169dc8ba19STed Chen #define OCP_EEE_CFG 0xa432 1179dc8ba19STed Chen #define OCP_SRAM_ADDR 0xa436 1189dc8ba19STed Chen #define OCP_SRAM_DATA 0xa438 1199dc8ba19STed Chen #define OCP_DOWN_SPEED 0xa442 1209dc8ba19STed Chen #define OCP_EEE_ABLE 0xa5c4 1219dc8ba19STed Chen #define OCP_EEE_ADV 0xa5d0 1229dc8ba19STed Chen #define OCP_EEE_LPABLE 0xa5d2 1239dc8ba19STed Chen #define OCP_PHY_STATE 0xa708 /* nway state for 8153 */ 1249dc8ba19STed Chen #define OCP_ADC_CFG 0xbc06 1259dc8ba19STed Chen 1269dc8ba19STed Chen /* SRAM Register */ 1279dc8ba19STed Chen #define SRAM_LPF_CFG 0x8012 1289dc8ba19STed Chen #define SRAM_10M_AMP1 0x8080 1299dc8ba19STed Chen #define SRAM_10M_AMP2 0x8082 1309dc8ba19STed Chen #define SRAM_IMPEDANCE 0x8084 1319dc8ba19STed Chen 1329dc8ba19STed Chen /* PLA_RCR */ 1339dc8ba19STed Chen #define RCR_AAP 0x00000001 1349dc8ba19STed Chen #define RCR_APM 0x00000002 1359dc8ba19STed Chen #define RCR_AM 0x00000004 1369dc8ba19STed Chen #define RCR_AB 0x00000008 1379dc8ba19STed Chen #define RCR_ACPT_ALL (RCR_AAP | RCR_APM | RCR_AM | RCR_AB) 1389dc8ba19STed Chen 1399dc8ba19STed Chen /* PLA_RXFIFO_CTRL0 */ 1409dc8ba19STed Chen #define RXFIFO_THR1_NORMAL 0x00080002 1419dc8ba19STed Chen #define RXFIFO_THR1_OOB 0x01800003 1429dc8ba19STed Chen 1439dc8ba19STed Chen /* PLA_RXFIFO_CTRL1 */ 1449dc8ba19STed Chen #define RXFIFO_THR2_FULL 0x00000060 1459dc8ba19STed Chen #define RXFIFO_THR2_HIGH 0x00000038 1469dc8ba19STed Chen #define RXFIFO_THR2_OOB 0x0000004a 1479dc8ba19STed Chen #define RXFIFO_THR2_NORMAL 0x00a0 1489dc8ba19STed Chen 1499dc8ba19STed Chen /* PLA_RXFIFO_CTRL2 */ 1509dc8ba19STed Chen #define RXFIFO_THR3_FULL 0x00000078 1519dc8ba19STed Chen #define RXFIFO_THR3_HIGH 0x00000048 1529dc8ba19STed Chen #define RXFIFO_THR3_OOB 0x0000005a 1539dc8ba19STed Chen #define RXFIFO_THR3_NORMAL 0x0110 1549dc8ba19STed Chen 1559dc8ba19STed Chen /* PLA_TXFIFO_CTRL */ 1569dc8ba19STed Chen #define TXFIFO_THR_NORMAL 0x00400008 1579dc8ba19STed Chen #define TXFIFO_THR_NORMAL2 0x01000008 1589dc8ba19STed Chen 1599dc8ba19STed Chen /* PLA_DMY_REG0 */ 1609dc8ba19STed Chen #define ECM_ALDPS 0x0002 1619dc8ba19STed Chen 1629dc8ba19STed Chen /* PLA_FMC */ 1639dc8ba19STed Chen #define FMC_FCR_MCU_EN 0x0001 1649dc8ba19STed Chen 1659dc8ba19STed Chen /* PLA_EEEP_CR */ 1669dc8ba19STed Chen #define EEEP_CR_EEEP_TX 0x0002 1679dc8ba19STed Chen 1689dc8ba19STed Chen /* PLA_WDT6_CTRL */ 1699dc8ba19STed Chen #define WDT6_SET_MODE 0x0010 1709dc8ba19STed Chen 1719dc8ba19STed Chen /* PLA_TCR0 */ 1729dc8ba19STed Chen #define TCR0_TX_EMPTY 0x0800 1739dc8ba19STed Chen #define TCR0_AUTO_FIFO 0x0080 1749dc8ba19STed Chen 1759dc8ba19STed Chen /* PLA_TCR1 */ 1769dc8ba19STed Chen #define VERSION_MASK 0x7cf0 1779dc8ba19STed Chen 1789dc8ba19STed Chen /* PLA_MTPS */ 1799dc8ba19STed Chen #define MTPS_JUMBO (12 * 1024 / 64) 1809dc8ba19STed Chen #define MTPS_DEFAULT (6 * 1024 / 64) 1819dc8ba19STed Chen 1829dc8ba19STed Chen /* PLA_RSTTALLY */ 1839dc8ba19STed Chen #define TALLY_RESET 0x0001 1849dc8ba19STed Chen 1859dc8ba19STed Chen /* PLA_CR */ 1869dc8ba19STed Chen #define PLA_CR_RST 0x10 1879dc8ba19STed Chen #define PLA_CR_RE 0x08 1889dc8ba19STed Chen #define PLA_CR_TE 0x04 1899dc8ba19STed Chen 1909dc8ba19STed Chen /* PLA_BIST_CTRL */ 1919dc8ba19STed Chen #define BIST_CTRL_SW_RESET (0x10 << 24) 1929dc8ba19STed Chen 1939dc8ba19STed Chen /* PLA_CRWECR */ 1949dc8ba19STed Chen #define CRWECR_NORAML 0x00 1959dc8ba19STed Chen #define CRWECR_CONFIG 0xc0 1969dc8ba19STed Chen 1979dc8ba19STed Chen /* PLA_OOB_CTRL */ 1989dc8ba19STed Chen #define NOW_IS_OOB 0x80 1999dc8ba19STed Chen #define TXFIFO_EMPTY 0x20 2009dc8ba19STed Chen #define RXFIFO_EMPTY 0x10 2019dc8ba19STed Chen #define LINK_LIST_READY 0x02 2029dc8ba19STed Chen #define DIS_MCU_CLROOB 0x01 2039dc8ba19STed Chen #define FIFO_EMPTY (TXFIFO_EMPTY | RXFIFO_EMPTY) 2049dc8ba19STed Chen 2059dc8ba19STed Chen /* PLA_PHY_PWR */ 2069dc8ba19STed Chen #define PLA_PHY_PWR_LLR (LINK_LIST_READY << 24) 2079dc8ba19STed Chen #define PLA_PHY_PWR_TXEMP (TXFIFO_EMPTY << 24) 2089dc8ba19STed Chen 2099dc8ba19STed Chen /* PLA_MISC_1 */ 2109dc8ba19STed Chen #define RXDY_GATED_EN 0x0008 2119dc8ba19STed Chen 2129dc8ba19STed Chen /* PLA_SFF_STS_7 */ 2139dc8ba19STed Chen #define RE_INIT_LL 0x8000 2149dc8ba19STed Chen #define MCU_BORW_EN 0x4000 2159dc8ba19STed Chen 2169dc8ba19STed Chen /* PLA_CPCR */ 2179dc8ba19STed Chen #define CPCR_RX_VLAN 0x0040 2189dc8ba19STed Chen 2199dc8ba19STed Chen /* PLA_CFG_WOL */ 2209dc8ba19STed Chen #define MAGIC_EN 0x0001 2219dc8ba19STed Chen 2229dc8ba19STed Chen /* PLA_TEREDO_CFG */ 2239dc8ba19STed Chen #define TEREDO_SEL 0x8000 2249dc8ba19STed Chen #define TEREDO_WAKE_MASK 0x7f00 2259dc8ba19STed Chen #define TEREDO_RS_EVENT_MASK 0x00fe 2269dc8ba19STed Chen #define OOB_TEREDO_EN 0x0001 2279dc8ba19STed Chen 2289dc8ba19STed Chen /* PAL_BDC_CR */ 2299dc8ba19STed Chen #define ALDPS_PROXY_MODE 0x0001 2309dc8ba19STed Chen 2319dc8ba19STed Chen /* PLA_CONFIG34 */ 2329dc8ba19STed Chen #define LINK_ON_WAKE_EN 0x0010 2339dc8ba19STed Chen #define LINK_OFF_WAKE_EN 0x0008 2349dc8ba19STed Chen 2359dc8ba19STed Chen /* PLA_CONFIG5 */ 2369dc8ba19STed Chen #define BWF_EN 0x0040 2379dc8ba19STed Chen #define MWF_EN 0x0020 2389dc8ba19STed Chen #define UWF_EN 0x0010 2399dc8ba19STed Chen #define LAN_WAKE_EN 0x0002 2409dc8ba19STed Chen 2419dc8ba19STed Chen /* PLA_LED_FEATURE */ 2429dc8ba19STed Chen #define LED_MODE_MASK 0x0700 2439dc8ba19STed Chen 2449dc8ba19STed Chen /* PLA_PHY_PWR */ 2459dc8ba19STed Chen #define TX_10M_IDLE_EN 0x0080 2469dc8ba19STed Chen #define PFM_PWM_SWITCH 0x0040 2479dc8ba19STed Chen 2489dc8ba19STed Chen /* PLA_MAC_PWR_CTRL */ 2499dc8ba19STed Chen #define D3_CLK_GATED_EN 0x00004000 2509dc8ba19STed Chen #define MCU_CLK_RATIO 0x07010f07 2519dc8ba19STed Chen #define MCU_CLK_RATIO_MASK 0x0f0f0f0f 2529dc8ba19STed Chen #define ALDPS_SPDWN_RATIO 0x0f87 2539dc8ba19STed Chen 2549dc8ba19STed Chen /* PLA_MAC_PWR_CTRL2 */ 2559dc8ba19STed Chen #define EEE_SPDWN_RATIO 0x8007 2569dc8ba19STed Chen 2579dc8ba19STed Chen /* PLA_MAC_PWR_CTRL3 */ 2589dc8ba19STed Chen #define PKT_AVAIL_SPDWN_EN 0x0100 2599dc8ba19STed Chen #define SUSPEND_SPDWN_EN 0x0004 2609dc8ba19STed Chen #define U1U2_SPDWN_EN 0x0002 2619dc8ba19STed Chen #define L1_SPDWN_EN 0x0001 2629dc8ba19STed Chen 2639dc8ba19STed Chen /* PLA_MAC_PWR_CTRL4 */ 2649dc8ba19STed Chen #define PWRSAVE_SPDWN_EN 0x1000 2659dc8ba19STed Chen #define RXDV_SPDWN_EN 0x0800 2669dc8ba19STed Chen #define TX10MIDLE_EN 0x0100 2679dc8ba19STed Chen #define TP100_SPDWN_EN 0x0020 2689dc8ba19STed Chen #define TP500_SPDWN_EN 0x0010 2699dc8ba19STed Chen #define TP1000_SPDWN_EN 0x0008 2709dc8ba19STed Chen #define EEE_SPDWN_EN 0x0001 2719dc8ba19STed Chen 2729dc8ba19STed Chen /* PLA_GPHY_INTR_IMR */ 2739dc8ba19STed Chen #define GPHY_STS_MSK 0x0001 2749dc8ba19STed Chen #define SPEED_DOWN_MSK 0x0002 2759dc8ba19STed Chen #define SPDWN_RXDV_MSK 0x0004 2769dc8ba19STed Chen #define SPDWN_LINKCHG_MSK 0x0008 2779dc8ba19STed Chen 2789dc8ba19STed Chen /* PLA_PHYAR */ 2799dc8ba19STed Chen #define PHYAR_FLAG 0x80000000 2809dc8ba19STed Chen 2819dc8ba19STed Chen /* PLA_EEE_CR */ 2829dc8ba19STed Chen #define EEE_RX_EN 0x0001 2839dc8ba19STed Chen #define EEE_TX_EN 0x0002 2849dc8ba19STed Chen 2859dc8ba19STed Chen /* PLA_BOOT_CTRL */ 2869dc8ba19STed Chen #define AUTOLOAD_DONE 0x0002 2879dc8ba19STed Chen 2889dc8ba19STed Chen /* USB_USB2PHY */ 2899dc8ba19STed Chen #define USB2PHY_SUSPEND 0x0001 2909dc8ba19STed Chen #define USB2PHY_L1 0x0002 2919dc8ba19STed Chen 2929dc8ba19STed Chen /* USB_SSPHYLINK2 */ 2939dc8ba19STed Chen #define pwd_dn_scale_mask 0x3ffe 2949dc8ba19STed Chen #define pwd_dn_scale(x) ((x) << 1) 2959dc8ba19STed Chen 2969dc8ba19STed Chen /* USB_CSR_DUMMY1 */ 2979dc8ba19STed Chen #define DYNAMIC_BURST 0x0001 2989dc8ba19STed Chen 2999dc8ba19STed Chen /* USB_CSR_DUMMY2 */ 3009dc8ba19STed Chen #define EP4_FULL_FC 0x0001 3019dc8ba19STed Chen 3029dc8ba19STed Chen /* USB_DEV_STAT */ 3039dc8ba19STed Chen #define STAT_SPEED_MASK 0x0006 3049dc8ba19STed Chen #define STAT_SPEED_HIGH 0x0000 3059dc8ba19STed Chen #define STAT_SPEED_FULL 0x0002 3069dc8ba19STed Chen 3079dc8ba19STed Chen /* USB_TX_AGG */ 3089dc8ba19STed Chen #define TX_AGG_MAX_THRESHOLD 0x03 3099dc8ba19STed Chen 3109dc8ba19STed Chen /* USB_RX_BUF_TH */ 3119dc8ba19STed Chen #define RX_THR_SUPPER 0x0c350180 3129dc8ba19STed Chen #define RX_THR_HIGH 0x7a120180 3139dc8ba19STed Chen #define RX_THR_SLOW 0xffff0180 3149dc8ba19STed Chen 3159dc8ba19STed Chen /* USB_TX_DMA */ 3169dc8ba19STed Chen #define TEST_MODE_DISABLE 0x00000001 3179dc8ba19STed Chen #define TX_SIZE_ADJUST1 0x00000100 3189dc8ba19STed Chen 3199dc8ba19STed Chen /* USB_UPS_CTRL */ 3209dc8ba19STed Chen #define POWER_CUT 0x0100 3219dc8ba19STed Chen 3229dc8ba19STed Chen /* USB_PM_CTRL_STATUS */ 3239dc8ba19STed Chen #define RESUME_INDICATE 0x0001 3249dc8ba19STed Chen 3259dc8ba19STed Chen /* USB_USB_CTRL */ 3269dc8ba19STed Chen #define RX_AGG_DISABLE 0x0010 3279dc8ba19STed Chen #define RX_ZERO_EN 0x0080 3289dc8ba19STed Chen 3299dc8ba19STed Chen /* USB_U2P3_CTRL */ 3309dc8ba19STed Chen #define U2P3_ENABLE 0x0001 3319dc8ba19STed Chen 3329dc8ba19STed Chen /* USB_POWER_CUT */ 3339dc8ba19STed Chen #define PWR_EN 0x0001 3349dc8ba19STed Chen #define PHASE2_EN 0x0008 3359dc8ba19STed Chen 3369dc8ba19STed Chen /* USB_MISC_0 */ 3379dc8ba19STed Chen #define PCUT_STATUS 0x0001 3389dc8ba19STed Chen 3399dc8ba19STed Chen /* USB_RX_EARLY_TIMEOUT */ 3409dc8ba19STed Chen #define COALESCE_SUPER 85000U 3419dc8ba19STed Chen #define COALESCE_HIGH 250000U 3429dc8ba19STed Chen #define COALESCE_SLOW 524280U 3439dc8ba19STed Chen 3449dc8ba19STed Chen /* USB_WDT11_CTRL */ 3459dc8ba19STed Chen #define TIMER11_EN 0x0001 3469dc8ba19STed Chen 3479dc8ba19STed Chen /* USB_LPM_CTRL */ 3489dc8ba19STed Chen /* bit 4 ~ 5: fifo empty boundary */ 3499dc8ba19STed Chen #define FIFO_EMPTY_1FB 0x30 /* 0x1fb * 64 = 32448 bytes */ 3509dc8ba19STed Chen /* bit 2 ~ 3: LMP timer */ 3519dc8ba19STed Chen #define LPM_TIMER_MASK 0x0c 3529dc8ba19STed Chen #define LPM_TIMER_500MS 0x04 /* 500 ms */ 3539dc8ba19STed Chen #define LPM_TIMER_500US 0x0c /* 500 us */ 3549dc8ba19STed Chen #define ROK_EXIT_LPM 0x02 3559dc8ba19STed Chen 3569dc8ba19STed Chen /* USB_AFE_CTRL2 */ 3579dc8ba19STed Chen #define SEN_VAL_MASK 0xf800 3589dc8ba19STed Chen #define SEN_VAL_NORMAL 0xa000 3599dc8ba19STed Chen #define SEL_RXIDLE 0x0100 3609dc8ba19STed Chen 3619dc8ba19STed Chen /* OCP_ALDPS_CONFIG */ 3629dc8ba19STed Chen #define ENPWRSAVE 0x8000 3639dc8ba19STed Chen #define ENPDNPS 0x0200 3649dc8ba19STed Chen #define LINKENA 0x0100 3659dc8ba19STed Chen #define DIS_SDSAVE 0x0010 3669dc8ba19STed Chen 3679dc8ba19STed Chen /* OCP_PHY_STATUS */ 3689dc8ba19STed Chen #define PHY_STAT_MASK 0x0007 3699dc8ba19STed Chen #define PHY_STAT_LAN_ON 3 3709dc8ba19STed Chen #define PHY_STAT_PWRDN 5 3719dc8ba19STed Chen 3729dc8ba19STed Chen /* OCP_POWER_CFG */ 3739dc8ba19STed Chen #define EEE_CLKDIV_EN 0x8000 3749dc8ba19STed Chen #define EN_ALDPS 0x0004 3759dc8ba19STed Chen #define EN_10M_PLLOFF 0x0001 3769dc8ba19STed Chen 3779dc8ba19STed Chen /* OCP_EEE_CONFIG1 */ 3789dc8ba19STed Chen #define RG_TXLPI_MSK_HFDUP 0x8000 3799dc8ba19STed Chen #define RG_MATCLR_EN 0x4000 3809dc8ba19STed Chen #define EEE_10_CAP 0x2000 3819dc8ba19STed Chen #define EEE_NWAY_EN 0x1000 3829dc8ba19STed Chen #define TX_QUIET_EN 0x0200 3839dc8ba19STed Chen #define RX_QUIET_EN 0x0100 3849dc8ba19STed Chen #define sd_rise_time_mask 0x0070 3859dc8ba19STed Chen #define sd_rise_time(x) (min((x), 7) << 4) /* bit 4 ~ 6 */ 3869dc8ba19STed Chen #define RG_RXLPI_MSK_HFDUP 0x0008 3879dc8ba19STed Chen #define SDFALLTIME 0x0007 /* bit 0 ~ 2 */ 3889dc8ba19STed Chen 3899dc8ba19STed Chen /* OCP_EEE_CONFIG2 */ 3909dc8ba19STed Chen #define RG_LPIHYS_NUM 0x7000 /* bit 12 ~ 15 */ 3919dc8ba19STed Chen #define RG_DACQUIET_EN 0x0400 3929dc8ba19STed Chen #define RG_LDVQUIET_EN 0x0200 3939dc8ba19STed Chen #define RG_CKRSEL 0x0020 3949dc8ba19STed Chen #define RG_EEEPRG_EN 0x0010 3959dc8ba19STed Chen 3969dc8ba19STed Chen /* OCP_EEE_CONFIG3 */ 3979dc8ba19STed Chen #define fast_snr_mask 0xff80 3989dc8ba19STed Chen #define fast_snr(x) (min((x), 0x1ff) << 7) /* bit 7 ~ 15 */ 3999dc8ba19STed Chen #define RG_LFS_SEL 0x0060 /* bit 6 ~ 5 */ 4009dc8ba19STed Chen #define MSK_PH 0x0006 /* bit 0 ~ 3 */ 4019dc8ba19STed Chen 4029dc8ba19STed Chen /* OCP_EEE_AR */ 4039dc8ba19STed Chen /* bit[15:14] function */ 4049dc8ba19STed Chen #define FUN_ADDR 0x0000 4059dc8ba19STed Chen #define FUN_DATA 0x4000 4069dc8ba19STed Chen /* bit[4:0] device addr */ 4079dc8ba19STed Chen 4089dc8ba19STed Chen /* OCP_EEE_CFG */ 4099dc8ba19STed Chen #define CTAP_SHORT_EN 0x0040 4109dc8ba19STed Chen #define EEE10_EN 0x0010 4119dc8ba19STed Chen 4129dc8ba19STed Chen /* OCP_DOWN_SPEED */ 4139dc8ba19STed Chen #define EN_10M_BGOFF 0x0080 4149dc8ba19STed Chen 4159dc8ba19STed Chen /* OCP_PHY_STATE */ 4169dc8ba19STed Chen #define TXDIS_STATE 0x01 4179dc8ba19STed Chen #define ABD_STATE 0x02 4189dc8ba19STed Chen 4199dc8ba19STed Chen /* OCP_ADC_CFG */ 4209dc8ba19STed Chen #define CKADSEL_L 0x0100 4219dc8ba19STed Chen #define ADC_EN 0x0080 4229dc8ba19STed Chen #define EN_EMI_L 0x0040 4239dc8ba19STed Chen 4249dc8ba19STed Chen /* SRAM_LPF_CFG */ 4259dc8ba19STed Chen #define LPF_AUTO_TUNE 0x8000 4269dc8ba19STed Chen 4279dc8ba19STed Chen /* SRAM_10M_AMP1 */ 4289dc8ba19STed Chen #define GDAC_IB_UPALL 0x0008 4299dc8ba19STed Chen 4309dc8ba19STed Chen /* SRAM_10M_AMP2 */ 4319dc8ba19STed Chen #define AMP_DN 0x0200 4329dc8ba19STed Chen 4339dc8ba19STed Chen /* SRAM_IMPEDANCE */ 4349dc8ba19STed Chen #define RX_DRIVING_MASK 0x6000 4359dc8ba19STed Chen 4369dc8ba19STed Chen #define RTL8152_MAX_TX 4 4379dc8ba19STed Chen #define RTL8152_MAX_RX 10 4389dc8ba19STed Chen #define INTBUFSIZE 2 4399dc8ba19STed Chen #define CRC_SIZE 4 4409dc8ba19STed Chen #define TX_ALIGN 4 4419dc8ba19STed Chen #define RX_ALIGN 8 4429dc8ba19STed Chen 4439dc8ba19STed Chen #define INTR_LINK 0x0004 4449dc8ba19STed Chen 4459dc8ba19STed Chen #define RTL8152_REQT_READ 0xc0 4469dc8ba19STed Chen #define RTL8152_REQT_WRITE 0x40 4479dc8ba19STed Chen #define RTL8152_REQ_GET_REGS 0x05 4489dc8ba19STed Chen #define RTL8152_REQ_SET_REGS 0x05 4499dc8ba19STed Chen 4509dc8ba19STed Chen #define BYTE_EN_DWORD 0xff 4519dc8ba19STed Chen #define BYTE_EN_WORD 0x33 4529dc8ba19STed Chen #define BYTE_EN_BYTE 0x11 4539dc8ba19STed Chen #define BYTE_EN_SIX_BYTES 0x3f 4549dc8ba19STed Chen #define BYTE_EN_START_MASK 0x0f 4559dc8ba19STed Chen #define BYTE_EN_END_MASK 0xf0 4569dc8ba19STed Chen 4579dc8ba19STed Chen #define RTL8152_ETH_FRAME_LEN 1514 4589dc8ba19STed Chen #define RTL8152_AGG_BUF_SZ 2048 4599dc8ba19STed Chen 4609dc8ba19STed Chen #define RTL8152_RMS (RTL8152_ETH_FRAME_LEN + CRC_SIZE) 4619dc8ba19STed Chen #define RTL8153_RMS (RTL8152_ETH_FRAME_LEN + CRC_SIZE) 4629dc8ba19STed Chen #define RTL8152_TX_TIMEOUT (5 * HZ) 4639dc8ba19STed Chen 4649dc8ba19STed Chen #define MCU_TYPE_PLA 0x0100 4659dc8ba19STed Chen #define MCU_TYPE_USB 0x0000 4669dc8ba19STed Chen 4679dc8ba19STed Chen /* The forced speed, 10Mb, 100Mb, gigabit. */ 4689dc8ba19STed Chen #define SPEED_10 10 4699dc8ba19STed Chen #define SPEED_100 100 4709dc8ba19STed Chen #define SPEED_1000 1000 4719dc8ba19STed Chen 4729dc8ba19STed Chen #define SPEED_UNKNOWN -1 4739dc8ba19STed Chen 4749dc8ba19STed Chen /* Duplex, half or full. */ 4759dc8ba19STed Chen #define DUPLEX_HALF 0x00 4769dc8ba19STed Chen #define DUPLEX_FULL 0x01 4779dc8ba19STed Chen #define DUPLEX_UNKNOWN 0xff 4789dc8ba19STed Chen 4799dc8ba19STed Chen /* Enable or disable autonegotiation. */ 4809dc8ba19STed Chen #define AUTONEG_DISABLE 0x00 4819dc8ba19STed Chen #define AUTONEG_ENABLE 0x01 4829dc8ba19STed Chen 4839dc8ba19STed Chen /* Generic MII registers. */ 4849dc8ba19STed Chen #define MII_BMCR 0x00 /* Basic mode control register */ 4859dc8ba19STed Chen #define MII_BMSR 0x01 /* Basic mode status register */ 4869dc8ba19STed Chen #define MII_PHYSID1 0x02 /* PHYS ID 1 */ 4879dc8ba19STed Chen #define MII_PHYSID2 0x03 /* PHYS ID 2 */ 4889dc8ba19STed Chen #define MII_ADVERTISE 0x04 /* Advertisement control reg */ 4899dc8ba19STed Chen #define MII_LPA 0x05 /* Link partner ability reg */ 4909dc8ba19STed Chen #define MII_EXPANSION 0x06 /* Expansion register */ 4919dc8ba19STed Chen #define MII_CTRL1000 0x09 /* 1000BASE-T control */ 4929dc8ba19STed Chen #define MII_STAT1000 0x0a /* 1000BASE-T status */ 4939dc8ba19STed Chen #define MII_MMD_CTRL 0x0d /* MMD Access Control Register */ 4949dc8ba19STed Chen #define MII_MMD_DATA 0x0e /* MMD Access Data Register */ 4959dc8ba19STed Chen #define MII_ESTATUS 0x0f /* Extended Status */ 4969dc8ba19STed Chen #define MII_DCOUNTER 0x12 /* Disconnect counter */ 4979dc8ba19STed Chen #define MII_FCSCOUNTER 0x13 /* False carrier counter */ 4989dc8ba19STed Chen #define MII_NWAYTEST 0x14 /* N-way auto-neg test reg */ 4999dc8ba19STed Chen #define MII_RERRCOUNTER 0x15 /* Receive error counter */ 5009dc8ba19STed Chen #define MII_SREVISION 0x16 /* Silicon revision */ 5019dc8ba19STed Chen #define MII_RESV1 0x17 /* Reserved... */ 5029dc8ba19STed Chen #define MII_LBRERROR 0x18 /* Lpback, rx, bypass error */ 5039dc8ba19STed Chen #define MII_PHYADDR 0x19 /* PHY address */ 5049dc8ba19STed Chen #define MII_RESV2 0x1a /* Reserved... */ 5059dc8ba19STed Chen #define MII_TPISTATUS 0x1b /* TPI status for 10mbps */ 5069dc8ba19STed Chen #define MII_NCONFIG 0x1c /* Network interface config */ 5079dc8ba19STed Chen 5089dc8ba19STed Chen #define TIMEOUT_RESOLUTION 50 5099dc8ba19STed Chen #define PHY_CONNECT_TIMEOUT 5000 5109dc8ba19STed Chen #define USB_BULK_SEND_TIMEOUT 5000 5119dc8ba19STed Chen #define USB_BULK_RECV_TIMEOUT 5000 5129dc8ba19STed Chen #define R8152_WAIT_TIMEOUT 2000 5139dc8ba19STed Chen 5149dc8ba19STed Chen struct rx_desc { 5159dc8ba19STed Chen __le32 opts1; 5169dc8ba19STed Chen #define RD_CRC BIT(15) 5179dc8ba19STed Chen #define RX_LEN_MASK 0x7fff 5189dc8ba19STed Chen 5199dc8ba19STed Chen __le32 opts2; 5209dc8ba19STed Chen #define RD_UDP_CS BIT(23) 5219dc8ba19STed Chen #define RD_TCP_CS BIT(22) 5229dc8ba19STed Chen #define RD_IPV6_CS BIT(20) 5239dc8ba19STed Chen #define RD_IPV4_CS BIT(19) 5249dc8ba19STed Chen 5259dc8ba19STed Chen __le32 opts3; 5269dc8ba19STed Chen #define IPF BIT(23) /* IP checksum fail */ 5279dc8ba19STed Chen #define UDPF BIT(22) /* UDP checksum fail */ 5289dc8ba19STed Chen #define TCPF BIT(21) /* TCP checksum fail */ 5299dc8ba19STed Chen #define RX_VLAN_TAG BIT(16) 5309dc8ba19STed Chen 5319dc8ba19STed Chen __le32 opts4; 5329dc8ba19STed Chen __le32 opts5; 5339dc8ba19STed Chen __le32 opts6; 5349dc8ba19STed Chen }; 5359dc8ba19STed Chen 5369dc8ba19STed Chen struct tx_desc { 5379dc8ba19STed Chen __le32 opts1; 5389dc8ba19STed Chen #define TX_FS BIT(31) /* First segment of a packet */ 5399dc8ba19STed Chen #define TX_LS BIT(30) /* Final segment of a packet */ 5409dc8ba19STed Chen #define LGSEND BIT(29) 5419dc8ba19STed Chen #define GTSENDV4 BIT(28) 5429dc8ba19STed Chen #define GTSENDV6 BIT(27) 5439dc8ba19STed Chen #define GTTCPHO_SHIFT 18 5449dc8ba19STed Chen #define GTTCPHO_MAX 0x7fU 5459dc8ba19STed Chen #define TX_LEN_MAX 0x3ffffU 5469dc8ba19STed Chen 5479dc8ba19STed Chen __le32 opts2; 5489dc8ba19STed Chen #define UDP_CS BIT(31) /* Calculate UDP/IP checksum */ 5499dc8ba19STed Chen #define TCP_CS BIT(30) /* Calculate TCP/IP checksum */ 5509dc8ba19STed Chen #define IPV4_CS BIT(29) /* Calculate IPv4 checksum */ 5519dc8ba19STed Chen #define IPV6_CS BIT(28) /* Calculate IPv6 checksum */ 5529dc8ba19STed Chen #define MSS_SHIFT 17 5539dc8ba19STed Chen #define MSS_MAX 0x7ffU 5549dc8ba19STed Chen #define TCPHO_SHIFT 17 5559dc8ba19STed Chen #define TCPHO_MAX 0x7ffU 5569dc8ba19STed Chen #define TX_VLAN_TAG BIT(16) 5579dc8ba19STed Chen }; 5589dc8ba19STed Chen 5599dc8ba19STed Chen enum rtl_version { 5609dc8ba19STed Chen RTL_VER_UNKNOWN = 0, 5619dc8ba19STed Chen RTL_VER_01, 5629dc8ba19STed Chen RTL_VER_02, 5639dc8ba19STed Chen RTL_VER_03, 5649dc8ba19STed Chen RTL_VER_04, 5659dc8ba19STed Chen RTL_VER_05, 5669dc8ba19STed Chen RTL_VER_06, 5679dc8ba19STed Chen RTL_VER_07, 5689dc8ba19STed Chen RTL_VER_MAX 5699dc8ba19STed Chen }; 5709dc8ba19STed Chen 5719dc8ba19STed Chen enum rtl_register_content { 5729dc8ba19STed Chen _1000bps = 0x10, 5739dc8ba19STed Chen _100bps = 0x08, 5749dc8ba19STed Chen _10bps = 0x04, 5759dc8ba19STed Chen LINK_STATUS = 0x02, 5769dc8ba19STed Chen FULL_DUP = 0x01, 5779dc8ba19STed Chen }; 5789dc8ba19STed Chen 5799dc8ba19STed Chen struct r8152 { 5809dc8ba19STed Chen struct usb_device *udev; 5819dc8ba19STed Chen struct usb_interface *intf; 5829dc8ba19STed Chen bool supports_gmii; 5839dc8ba19STed Chen 5849dc8ba19STed Chen struct rtl_ops { 5859dc8ba19STed Chen void (*init)(struct r8152 *); 5869dc8ba19STed Chen int (*enable)(struct r8152 *); 5879dc8ba19STed Chen void (*disable)(struct r8152 *); 5889dc8ba19STed Chen void (*up)(struct r8152 *); 5899dc8ba19STed Chen void (*down)(struct r8152 *); 5909dc8ba19STed Chen void (*unload)(struct r8152 *); 5919dc8ba19STed Chen } rtl_ops; 5929dc8ba19STed Chen 5939dc8ba19STed Chen u32 coalesce; 5949dc8ba19STed Chen u16 ocp_base; 5959dc8ba19STed Chen 5969dc8ba19STed Chen u8 version; 597*6688452aSStefan Roese 598*6688452aSStefan Roese #ifdef CONFIG_DM_ETH 599*6688452aSStefan Roese struct ueth_data ueth; 600*6688452aSStefan Roese #endif 6019dc8ba19STed Chen }; 6029dc8ba19STed Chen 6039dc8ba19STed Chen int generic_ocp_write(struct r8152 *tp, u16 index, u16 byteen, 6049dc8ba19STed Chen u16 size, void *data, u16 type); 6059dc8ba19STed Chen int generic_ocp_read(struct r8152 *tp, u16 index, u16 size, 6069dc8ba19STed Chen void *data, u16 type); 6079dc8ba19STed Chen 6089dc8ba19STed Chen int pla_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data); 6099dc8ba19STed Chen int pla_ocp_write(struct r8152 *tp, u16 index, u16 byteen, 6109dc8ba19STed Chen u16 size, void *data); 6119dc8ba19STed Chen 6129dc8ba19STed Chen int usb_ocp_read(struct r8152 *tp, u16 index, u16 size, void *data); 6139dc8ba19STed Chen int usb_ocp_write(struct r8152 *tp, u16 index, u16 byteen, 6149dc8ba19STed Chen u16 size, void *data); 6159dc8ba19STed Chen 6169dc8ba19STed Chen u32 ocp_read_dword(struct r8152 *tp, u16 type, u16 index); 6179dc8ba19STed Chen void ocp_write_dword(struct r8152 *tp, u16 type, u16 index, u32 data); 6189dc8ba19STed Chen 6199dc8ba19STed Chen u16 ocp_read_word(struct r8152 *tp, u16 type, u16 index); 6209dc8ba19STed Chen void ocp_write_word(struct r8152 *tp, u16 type, u16 index, u32 data); 6219dc8ba19STed Chen 6229dc8ba19STed Chen u8 ocp_read_byte(struct r8152 *tp, u16 type, u16 index); 6239dc8ba19STed Chen void ocp_write_byte(struct r8152 *tp, u16 type, u16 index, u32 data); 6249dc8ba19STed Chen 6259dc8ba19STed Chen u16 ocp_reg_read(struct r8152 *tp, u16 addr); 6269dc8ba19STed Chen void ocp_reg_write(struct r8152 *tp, u16 addr, u16 data); 6279dc8ba19STed Chen 6289dc8ba19STed Chen void sram_write(struct r8152 *tp, u16 addr, u16 data); 6299dc8ba19STed Chen 6309dc8ba19STed Chen int r8152_wait_for_bit(struct r8152 *tp, bool ocp_reg, u16 type, u16 index, 6319dc8ba19STed Chen const u32 mask, bool set, unsigned int timeout); 6329dc8ba19STed Chen 6339dc8ba19STed Chen void r8152b_firmware(struct r8152 *tp); 6349dc8ba19STed Chen void r8153_firmware(struct r8152 *tp); 6359dc8ba19STed Chen #endif 636