Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /***************************************************************************
0003  *
0004  * Copyright (C) 2004-2008 SMSC
0005  * Copyright (C) 2005-2008 ARM
0006  *
0007  ***************************************************************************/
0008 #ifndef __SMSC911X_H__
0009 #define __SMSC911X_H__
0010 
0011 /*Chip ID*/
0012 #define LAN9115 0x01150000
0013 #define LAN9116 0x01160000
0014 #define LAN9117 0x01170000
0015 #define LAN9118 0x01180000
0016 #define LAN9215 0x115A0000
0017 #define LAN9216 0x116A0000
0018 #define LAN9217 0x117A0000
0019 #define LAN9218 0x118A0000
0020 #define LAN9210 0x92100000
0021 #define LAN9211 0x92110000
0022 #define LAN9220 0x92200000
0023 #define LAN9221 0x92210000
0024 #define LAN9250 0x92500000
0025 #define LAN89218    0x218A0000
0026 
0027 #define TX_FIFO_LOW_THRESHOLD   ((u32)1600)
0028 #define SMSC911X_EEPROM_SIZE    ((u32)128)
0029 #define USE_DEBUG       0
0030 
0031 /* This is the maximum number of packets to be received every
0032  * NAPI poll */
0033 #define SMSC_NAPI_WEIGHT    16
0034 
0035 /* implements a PHY loopback test at initialisation time, to ensure a packet
0036  * can be successfully looped back */
0037 #define USE_PHY_WORK_AROUND
0038 
0039 #if USE_DEBUG >= 1
0040 #define SMSC_WARN(pdata, nlevel, fmt, args...)          \
0041     netif_warn(pdata, nlevel, (pdata)->dev,         \
0042            "%s: " fmt "\n", __func__, ##args)
0043 #else
0044 #define SMSC_WARN(pdata, nlevel, fmt, args...)          \
0045     no_printk(fmt "\n", ##args)
0046 #endif
0047 
0048 #if USE_DEBUG >= 2
0049 #define SMSC_TRACE(pdata, nlevel, fmt, args...)         \
0050     netif_info(pdata, nlevel, pdata->dev, fmt "\n", ##args)
0051 #else
0052 #define SMSC_TRACE(pdata, nlevel, fmt, args...)         \
0053     no_printk(fmt "\n", ##args)
0054 #endif
0055 
0056 #ifdef CONFIG_DEBUG_SPINLOCK
0057 #define SMSC_ASSERT_MAC_LOCK(pdata) \
0058         lockdep_assert_held(&pdata->mac_lock)
0059 #else
0060 #define SMSC_ASSERT_MAC_LOCK(pdata) do {} while (0)
0061 #endif              /* CONFIG_DEBUG_SPINLOCK */
0062 
0063 /* SMSC911x registers and bitfields */
0064 #define RX_DATA_FIFO            0x00
0065 
0066 #define TX_DATA_FIFO            0x20
0067 #define TX_CMD_A_ON_COMP_       0x80000000
0068 #define TX_CMD_A_BUF_END_ALGN_      0x03000000
0069 #define TX_CMD_A_4_BYTE_ALGN_       0x00000000
0070 #define TX_CMD_A_16_BYTE_ALGN_      0x01000000
0071 #define TX_CMD_A_32_BYTE_ALGN_      0x02000000
0072 #define TX_CMD_A_DATA_OFFSET_       0x001F0000
0073 #define TX_CMD_A_FIRST_SEG_     0x00002000
0074 #define TX_CMD_A_LAST_SEG_      0x00001000
0075 #define TX_CMD_A_BUF_SIZE_      0x000007FF
0076 #define TX_CMD_B_PKT_TAG_       0xFFFF0000
0077 #define TX_CMD_B_ADD_CRC_DISABLE_   0x00002000
0078 #define TX_CMD_B_DISABLE_PADDING_   0x00001000
0079 #define TX_CMD_B_PKT_BYTE_LENGTH_   0x000007FF
0080 
0081 #define RX_STATUS_FIFO          0x40
0082 #define RX_STS_ES_          0x00008000
0083 #define RX_STS_LENGTH_ERR_      0x00001000
0084 #define RX_STS_MCAST_           0x00000400
0085 #define RX_STS_FRAME_TYPE_      0x00000020
0086 #define RX_STS_CRC_ERR_         0x00000002
0087 
0088 #define RX_STATUS_FIFO_PEEK     0x44
0089 
0090 #define TX_STATUS_FIFO          0x48
0091 #define TX_STS_ES_          0x00008000
0092 #define TX_STS_LOST_CARRIER_        0x00000800
0093 #define TX_STS_NO_CARRIER_      0x00000400
0094 #define TX_STS_LATE_COL_        0x00000200
0095 #define TX_STS_EXCESS_COL_      0x00000100
0096 
0097 #define TX_STATUS_FIFO_PEEK     0x4C
0098 
0099 #define ID_REV              0x50
0100 #define ID_REV_CHIP_ID_         0xFFFF0000
0101 #define ID_REV_REV_ID_          0x0000FFFF
0102 
0103 #define INT_CFG             0x54
0104 #define INT_CFG_INT_DEAS_       0xFF000000
0105 #define INT_CFG_INT_DEAS_CLR_       0x00004000
0106 #define INT_CFG_INT_DEAS_STS_       0x00002000
0107 #define INT_CFG_IRQ_INT_        0x00001000
0108 #define INT_CFG_IRQ_EN_         0x00000100
0109 #define INT_CFG_IRQ_POL_        0x00000010
0110 #define INT_CFG_IRQ_TYPE_       0x00000001
0111 
0112 #define INT_STS             0x58
0113 #define INT_STS_SW_INT_         0x80000000
0114 #define INT_STS_TXSTOP_INT_     0x02000000
0115 #define INT_STS_RXSTOP_INT_     0x01000000
0116 #define INT_STS_RXDFH_INT_      0x00800000
0117 #define INT_STS_RXDF_INT_       0x00400000
0118 #define INT_STS_TX_IOC_         0x00200000
0119 #define INT_STS_RXD_INT_        0x00100000
0120 #define INT_STS_GPT_INT_        0x00080000
0121 #define INT_STS_PHY_INT_        0x00040000
0122 #define INT_STS_PME_INT_        0x00020000
0123 #define INT_STS_TXSO_           0x00010000
0124 #define INT_STS_RWT_            0x00008000
0125 #define INT_STS_RXE_            0x00004000
0126 #define INT_STS_TXE_            0x00002000
0127 #define INT_STS_TDFU_           0x00000800
0128 #define INT_STS_TDFO_           0x00000400
0129 #define INT_STS_TDFA_           0x00000200
0130 #define INT_STS_TSFF_           0x00000100
0131 #define INT_STS_TSFL_           0x00000080
0132 #define INT_STS_RXDF_           0x00000040
0133 #define INT_STS_RDFL_           0x00000020
0134 #define INT_STS_RSFF_           0x00000010
0135 #define INT_STS_RSFL_           0x00000008
0136 #define INT_STS_GPIO2_INT_      0x00000004
0137 #define INT_STS_GPIO1_INT_      0x00000002
0138 #define INT_STS_GPIO0_INT_      0x00000001
0139 
0140 #define INT_EN              0x5C
0141 #define INT_EN_SW_INT_EN_       0x80000000
0142 #define INT_EN_TXSTOP_INT_EN_       0x02000000
0143 #define INT_EN_RXSTOP_INT_EN_       0x01000000
0144 #define INT_EN_RXDFH_INT_EN_        0x00800000
0145 #define INT_EN_TIOC_INT_EN_     0x00200000
0146 #define INT_EN_RXD_INT_EN_      0x00100000
0147 #define INT_EN_GPT_INT_EN_      0x00080000
0148 #define INT_EN_PHY_INT_EN_      0x00040000
0149 #define INT_EN_PME_INT_EN_      0x00020000
0150 #define INT_EN_TXSO_EN_         0x00010000
0151 #define INT_EN_RWT_EN_          0x00008000
0152 #define INT_EN_RXE_EN_          0x00004000
0153 #define INT_EN_TXE_EN_          0x00002000
0154 #define INT_EN_TDFU_EN_         0x00000800
0155 #define INT_EN_TDFO_EN_         0x00000400
0156 #define INT_EN_TDFA_EN_         0x00000200
0157 #define INT_EN_TSFF_EN_         0x00000100
0158 #define INT_EN_TSFL_EN_         0x00000080
0159 #define INT_EN_RXDF_EN_         0x00000040
0160 #define INT_EN_RDFL_EN_         0x00000020
0161 #define INT_EN_RSFF_EN_         0x00000010
0162 #define INT_EN_RSFL_EN_         0x00000008
0163 #define INT_EN_GPIO2_INT_       0x00000004
0164 #define INT_EN_GPIO1_INT_       0x00000002
0165 #define INT_EN_GPIO0_INT_       0x00000001
0166 
0167 #define BYTE_TEST           0x64
0168 
0169 #define FIFO_INT            0x68
0170 #define FIFO_INT_TX_AVAIL_LEVEL_    0xFF000000
0171 #define FIFO_INT_TX_STS_LEVEL_      0x00FF0000
0172 #define FIFO_INT_RX_AVAIL_LEVEL_    0x0000FF00
0173 #define FIFO_INT_RX_STS_LEVEL_      0x000000FF
0174 
0175 #define RX_CFG              0x6C
0176 #define RX_CFG_RX_END_ALGN_     0xC0000000
0177 #define RX_CFG_RX_END_ALGN4_        0x00000000
0178 #define RX_CFG_RX_END_ALGN16_       0x40000000
0179 #define RX_CFG_RX_END_ALGN32_       0x80000000
0180 #define RX_CFG_RX_DMA_CNT_      0x0FFF0000
0181 #define RX_CFG_RX_DUMP_         0x00008000
0182 #define RX_CFG_RXDOFF_          0x00001F00
0183 
0184 #define TX_CFG              0x70
0185 #define TX_CFG_TXS_DUMP_        0x00008000
0186 #define TX_CFG_TXD_DUMP_        0x00004000
0187 #define TX_CFG_TXSAO_           0x00000004
0188 #define TX_CFG_TX_ON_           0x00000002
0189 #define TX_CFG_STOP_TX_         0x00000001
0190 
0191 #define HW_CFG              0x74
0192 #define HW_CFG_TTM_         0x00200000
0193 #define HW_CFG_SF_          0x00100000
0194 #define HW_CFG_TX_FIF_SZ_       0x000F0000
0195 #define HW_CFG_TR_          0x00003000
0196 #define HW_CFG_SRST_            0x00000001
0197 
0198 /* only available on 115/117 */
0199 #define HW_CFG_PHY_CLK_SEL_     0x00000060
0200 #define HW_CFG_PHY_CLK_SEL_INT_PHY_ 0x00000000
0201 #define HW_CFG_PHY_CLK_SEL_EXT_PHY_ 0x00000020
0202 #define HW_CFG_PHY_CLK_SEL_CLK_DIS_ 0x00000040
0203 #define HW_CFG_SMI_SEL_         0x00000010
0204 #define HW_CFG_EXT_PHY_DET_     0x00000008
0205 #define HW_CFG_EXT_PHY_EN_      0x00000004
0206 #define HW_CFG_SRST_TO_         0x00000002
0207 
0208 /* only available  on 116/118 */
0209 #define HW_CFG_32_16_BIT_MODE_      0x00000004
0210 
0211 #define RX_DP_CTRL          0x78
0212 #define RX_DP_CTRL_RX_FFWD_     0x80000000
0213 
0214 #define RX_FIFO_INF         0x7C
0215 #define RX_FIFO_INF_RXSUSED_        0x00FF0000
0216 #define RX_FIFO_INF_RXDUSED_        0x0000FFFF
0217 
0218 #define TX_FIFO_INF         0x80
0219 #define TX_FIFO_INF_TSUSED_     0x00FF0000
0220 #define TX_FIFO_INF_TDFREE_     0x0000FFFF
0221 
0222 #define PMT_CTRL            0x84
0223 #define PMT_CTRL_PM_MODE_       0x00003000
0224 #define PMT_CTRL_PM_MODE_D0_        0x00000000
0225 #define PMT_CTRL_PM_MODE_D1_        0x00001000
0226 #define PMT_CTRL_PM_MODE_D2_        0x00002000
0227 #define PMT_CTRL_PM_MODE_D3_        0x00003000
0228 #define PMT_CTRL_PHY_RST_       0x00000400
0229 #define PMT_CTRL_WOL_EN_        0x00000200
0230 #define PMT_CTRL_ED_EN_         0x00000100
0231 #define PMT_CTRL_PME_TYPE_      0x00000040
0232 #define PMT_CTRL_WUPS_          0x00000030
0233 #define PMT_CTRL_WUPS_NOWAKE_       0x00000000
0234 #define PMT_CTRL_WUPS_ED_       0x00000010
0235 #define PMT_CTRL_WUPS_WOL_      0x00000020
0236 #define PMT_CTRL_WUPS_MULTI_        0x00000030
0237 #define PMT_CTRL_PME_IND_       0x00000008
0238 #define PMT_CTRL_PME_POL_       0x00000004
0239 #define PMT_CTRL_PME_EN_        0x00000002
0240 #define PMT_CTRL_READY_         0x00000001
0241 
0242 #define GPIO_CFG            0x88
0243 #define GPIO_CFG_LED3_EN_       0x40000000
0244 #define GPIO_CFG_LED2_EN_       0x20000000
0245 #define GPIO_CFG_LED1_EN_       0x10000000
0246 #define GPIO_CFG_GPIO2_INT_POL_     0x04000000
0247 #define GPIO_CFG_GPIO1_INT_POL_     0x02000000
0248 #define GPIO_CFG_GPIO0_INT_POL_     0x01000000
0249 #define GPIO_CFG_EEPR_EN_       0x00700000
0250 #define GPIO_CFG_GPIOBUF2_      0x00040000
0251 #define GPIO_CFG_GPIOBUF1_      0x00020000
0252 #define GPIO_CFG_GPIOBUF0_      0x00010000
0253 #define GPIO_CFG_GPIODIR2_      0x00000400
0254 #define GPIO_CFG_GPIODIR1_      0x00000200
0255 #define GPIO_CFG_GPIODIR0_      0x00000100
0256 #define GPIO_CFG_GPIOD4_        0x00000020
0257 #define GPIO_CFG_GPIOD3_        0x00000010
0258 #define GPIO_CFG_GPIOD2_        0x00000004
0259 #define GPIO_CFG_GPIOD1_        0x00000002
0260 #define GPIO_CFG_GPIOD0_        0x00000001
0261 
0262 #define GPT_CFG             0x8C
0263 #define GPT_CFG_TIMER_EN_       0x20000000
0264 #define GPT_CFG_GPT_LOAD_       0x0000FFFF
0265 
0266 #define GPT_CNT             0x90
0267 #define GPT_CNT_GPT_CNT_        0x0000FFFF
0268 
0269 #define WORD_SWAP           0x98
0270 
0271 #define FREE_RUN            0x9C
0272 
0273 #define RX_DROP             0xA0
0274 
0275 #define MAC_CSR_CMD         0xA4
0276 #define MAC_CSR_CMD_CSR_BUSY_       0x80000000
0277 #define MAC_CSR_CMD_R_NOT_W_        0x40000000
0278 #define MAC_CSR_CMD_CSR_ADDR_       0x000000FF
0279 
0280 #define MAC_CSR_DATA            0xA8
0281 
0282 #define AFC_CFG             0xAC
0283 #define AFC_CFG_AFC_HI_         0x00FF0000
0284 #define AFC_CFG_AFC_LO_         0x0000FF00
0285 #define AFC_CFG_BACK_DUR_       0x000000F0
0286 #define AFC_CFG_FCMULT_         0x00000008
0287 #define AFC_CFG_FCBRD_          0x00000004
0288 #define AFC_CFG_FCADD_          0x00000002
0289 #define AFC_CFG_FCANY_          0x00000001
0290 
0291 #define E2P_CMD             0xB0
0292 #define E2P_CMD_EPC_BUSY_       0x80000000
0293 #define E2P_CMD_EPC_CMD_        0x70000000
0294 #define E2P_CMD_EPC_CMD_READ_       0x00000000
0295 #define E2P_CMD_EPC_CMD_EWDS_       0x10000000
0296 #define E2P_CMD_EPC_CMD_EWEN_       0x20000000
0297 #define E2P_CMD_EPC_CMD_WRITE_      0x30000000
0298 #define E2P_CMD_EPC_CMD_WRAL_       0x40000000
0299 #define E2P_CMD_EPC_CMD_ERASE_      0x50000000
0300 #define E2P_CMD_EPC_CMD_ERAL_       0x60000000
0301 #define E2P_CMD_EPC_CMD_RELOAD_     0x70000000
0302 #define E2P_CMD_EPC_TIMEOUT_        0x00000200
0303 #define E2P_CMD_MAC_ADDR_LOADED_    0x00000100
0304 #define E2P_CMD_EPC_ADDR_       0x000000FF
0305 
0306 #define E2P_DATA            0xB4
0307 #define E2P_DATA_EEPROM_DATA_       0x000000FF
0308 #define LAN_REGISTER_EXTENT     0x00000100
0309 
0310 #define RESET_CTL           0x1F8
0311 #define RESET_CTL_DIGITAL_RST_      0x00000001
0312 
0313 /*
0314  * MAC Control and Status Register (Indirect Address)
0315  * Offset (through the MAC_CSR CMD and DATA port)
0316  */
0317 #define MAC_CR              0x01
0318 #define MAC_CR_RXALL_           0x80000000
0319 #define MAC_CR_HBDIS_           0x10000000
0320 #define MAC_CR_RCVOWN_          0x00800000
0321 #define MAC_CR_LOOPBK_          0x00200000
0322 #define MAC_CR_FDPX_            0x00100000
0323 #define MAC_CR_MCPAS_           0x00080000
0324 #define MAC_CR_PRMS_            0x00040000
0325 #define MAC_CR_INVFILT_         0x00020000
0326 #define MAC_CR_PASSBAD_         0x00010000
0327 #define MAC_CR_HFILT_           0x00008000
0328 #define MAC_CR_HPFILT_          0x00002000
0329 #define MAC_CR_LCOLL_           0x00001000
0330 #define MAC_CR_BCAST_           0x00000800
0331 #define MAC_CR_DISRTY_          0x00000400
0332 #define MAC_CR_PADSTR_          0x00000100
0333 #define MAC_CR_BOLMT_MASK_      0x000000C0
0334 #define MAC_CR_DFCHK_           0x00000020
0335 #define MAC_CR_TXEN_            0x00000008
0336 #define MAC_CR_RXEN_            0x00000004
0337 
0338 #define ADDRH               0x02
0339 
0340 #define ADDRL               0x03
0341 
0342 #define HASHH               0x04
0343 
0344 #define HASHL               0x05
0345 
0346 #define MII_ACC             0x06
0347 #define MII_ACC_PHY_ADDR_       0x0000F800
0348 #define MII_ACC_MIIRINDA_       0x000007C0
0349 #define MII_ACC_MII_WRITE_      0x00000002
0350 #define MII_ACC_MII_BUSY_       0x00000001
0351 
0352 #define MII_DATA            0x07
0353 
0354 #define FLOW                0x08
0355 #define FLOW_FCPT_          0xFFFF0000
0356 #define FLOW_FCPASS_            0x00000004
0357 #define FLOW_FCEN_          0x00000002
0358 #define FLOW_FCBSY_         0x00000001
0359 
0360 #define VLAN1               0x09
0361 
0362 #define VLAN2               0x0A
0363 
0364 #define WUFF                0x0B
0365 
0366 #define WUCSR               0x0C
0367 #define WUCSR_GUE_          0x00000200
0368 #define WUCSR_WUFR_         0x00000040
0369 #define WUCSR_MPR_          0x00000020
0370 #define WUCSR_WAKE_EN_          0x00000004
0371 #define WUCSR_MPEN_         0x00000002
0372 
0373 /*
0374  * Phy definitions (vendor-specific)
0375  */
0376 #define LAN9118_PHY_ID          0x00C0001C
0377 
0378 #define MII_INTSTS          0x1D
0379 
0380 #define MII_INTMSK          0x1E
0381 #define PHY_INTMSK_AN_RCV_      (1 << 1)
0382 #define PHY_INTMSK_PDFAULT_     (1 << 2)
0383 #define PHY_INTMSK_AN_ACK_      (1 << 3)
0384 #define PHY_INTMSK_LNKDOWN_     (1 << 4)
0385 #define PHY_INTMSK_RFAULT_      (1 << 5)
0386 #define PHY_INTMSK_AN_COMP_     (1 << 6)
0387 #define PHY_INTMSK_ENERGYON_        (1 << 7)
0388 #define PHY_INTMSK_DEFAULT_     (PHY_INTMSK_ENERGYON_ | \
0389                      PHY_INTMSK_AN_COMP_ | \
0390                      PHY_INTMSK_RFAULT_ | \
0391                      PHY_INTMSK_LNKDOWN_)
0392 
0393 #define ADVERTISE_PAUSE_ALL     (ADVERTISE_PAUSE_CAP | \
0394                      ADVERTISE_PAUSE_ASYM)
0395 
0396 #define LPA_PAUSE_ALL           (LPA_PAUSE_CAP | \
0397                      LPA_PAUSE_ASYM)
0398 
0399 /*
0400  * Provide hooks to let the arch add to the initialisation procedure
0401  * and to override the source of the MAC address.
0402  */
0403 #define SMSC_INITIALIZE()       do {} while (0)
0404 #define smsc_get_mac(dev)       smsc911x_read_mac_address((dev))
0405 
0406 #ifdef CONFIG_SMSC911X_ARCH_HOOKS
0407 #include <asm/smsc911x.h>
0408 #endif
0409 
0410 #include <linux/smscphy.h>
0411 
0412 #endif              /* __SMSC911X_H__ */