|
857 | 857 | */
|
858 | 858 | #define PCS_MMD_SELECT 0xff
|
859 | 859 |
|
| 860 | +/* SerDes integration register offsets */ |
| 861 | +#define SIR0_KR_RT_1 0x002c |
| 862 | +#define SIR0_STATUS 0x0040 |
| 863 | +#define SIR1_SPEED 0x0000 |
| 864 | + |
| 865 | +/* SerDes integration register entry bit positions and sizes */ |
| 866 | +#define SIR0_KR_RT_1_RESET_INDEX 11 |
| 867 | +#define SIR0_KR_RT_1_RESET_WIDTH 1 |
| 868 | +#define SIR0_STATUS_RX_READY_INDEX 0 |
| 869 | +#define SIR0_STATUS_RX_READY_WIDTH 1 |
| 870 | +#define SIR0_STATUS_TX_READY_INDEX 8 |
| 871 | +#define SIR0_STATUS_TX_READY_WIDTH 1 |
| 872 | +#define SIR1_SPEED_CDR_RATE_INDEX 12 |
| 873 | +#define SIR1_SPEED_CDR_RATE_WIDTH 4 |
| 874 | +#define SIR1_SPEED_DATARATE_INDEX 4 |
| 875 | +#define SIR1_SPEED_DATARATE_WIDTH 2 |
| 876 | +#define SIR1_SPEED_PLLSEL_INDEX 3 |
| 877 | +#define SIR1_SPEED_PLLSEL_WIDTH 1 |
| 878 | +#define SIR1_SPEED_RATECHANGE_INDEX 6 |
| 879 | +#define SIR1_SPEED_RATECHANGE_WIDTH 1 |
| 880 | +#define SIR1_SPEED_TXAMP_INDEX 8 |
| 881 | +#define SIR1_SPEED_TXAMP_WIDTH 4 |
| 882 | +#define SIR1_SPEED_WORDMODE_INDEX 0 |
| 883 | +#define SIR1_SPEED_WORDMODE_WIDTH 3 |
| 884 | + |
| 885 | +/* SerDes RxTx register offsets */ |
| 886 | +#define RXTX_REG6 0x0018 |
| 887 | +#define RXTX_REG20 0x0050 |
| 888 | +#define RXTX_REG22 0x0058 |
| 889 | +#define RXTX_REG114 0x01c8 |
| 890 | +#define RXTX_REG129 0x0204 |
| 891 | + |
| 892 | +/* SerDes RxTx register entry bit positions and sizes */ |
| 893 | +#define RXTX_REG6_RESETB_RXD_INDEX 8 |
| 894 | +#define RXTX_REG6_RESETB_RXD_WIDTH 1 |
| 895 | +#define RXTX_REG20_BLWC_ENA_INDEX 2 |
| 896 | +#define RXTX_REG20_BLWC_ENA_WIDTH 1 |
| 897 | +#define RXTX_REG114_PQ_REG_INDEX 9 |
| 898 | +#define RXTX_REG114_PQ_REG_WIDTH 7 |
| 899 | +#define RXTX_REG129_RXDFE_CONFIG_INDEX 14 |
| 900 | +#define RXTX_REG129_RXDFE_CONFIG_WIDTH 2 |
| 901 | + |
860 | 902 | /* Descriptor/Packet entry bit positions and sizes */
|
861 | 903 | #define RX_PACKET_ERRORS_CRC_INDEX 2
|
862 | 904 | #define RX_PACKET_ERRORS_CRC_WIDTH 1
|
|
973 | 1015 | #define TX_NORMAL_DESC2_VLAN_INSERT 0x2
|
974 | 1016 |
|
975 | 1017 | /* MDIO undefined or vendor specific registers */
|
| 1018 | +#ifndef MDIO_PMA_10GBR_PMD_CTRL |
| 1019 | +#define MDIO_PMA_10GBR_PMD_CTRL 0x0096 |
| 1020 | +#endif |
| 1021 | + |
| 1022 | +#ifndef MDIO_PMA_10GBR_FECCTRL |
| 1023 | +#define MDIO_PMA_10GBR_FECCTRL 0x00ab |
| 1024 | +#endif |
| 1025 | + |
| 1026 | +#ifndef MDIO_AN_XNP |
| 1027 | +#define MDIO_AN_XNP 0x0016 |
| 1028 | +#endif |
| 1029 | + |
| 1030 | +#ifndef MDIO_AN_LPX |
| 1031 | +#define MDIO_AN_LPX 0x0019 |
| 1032 | +#endif |
| 1033 | + |
976 | 1034 | #ifndef MDIO_AN_COMP_STAT
|
977 | 1035 | #define MDIO_AN_COMP_STAT 0x0030
|
978 | 1036 | #endif
|
979 | 1037 |
|
| 1038 | +#ifndef MDIO_AN_INTMASK |
| 1039 | +#define MDIO_AN_INTMASK 0x8001 |
| 1040 | +#endif |
| 1041 | + |
| 1042 | +#ifndef MDIO_AN_INT |
| 1043 | +#define MDIO_AN_INT 0x8002 |
| 1044 | +#endif |
| 1045 | + |
| 1046 | +#ifndef MDIO_CTRL1_SPEED1G |
| 1047 | +#define MDIO_CTRL1_SPEED1G (MDIO_CTRL1_SPEED10G & ~BMCR_SPEED100) |
| 1048 | +#endif |
| 1049 | + |
| 1050 | +/* MDIO mask values */ |
| 1051 | +#define XGBE_XNP_MCF_NULL_MESSAGE 0x001 |
| 1052 | +#define XGBE_XNP_ACK_PROCESSED BIT(12) |
| 1053 | +#define XGBE_XNP_MP_FORMATTED BIT(13) |
| 1054 | +#define XGBE_XNP_NP_EXCHANGE BIT(15) |
| 1055 | + |
| 1056 | +#define XGBE_KR_TRAINING_START BIT(0) |
| 1057 | +#define XGBE_KR_TRAINING_ENABLE BIT(1) |
| 1058 | + |
980 | 1059 | /* Bit setting and getting macros
|
981 | 1060 | * The get macro will extract the current bit field value from within
|
982 | 1061 | * the variable
|
@@ -1118,6 +1197,82 @@ do { \
|
1118 | 1197 | #define XPCS_IOREAD(_pdata, _off) \
|
1119 | 1198 | ioread32((_pdata)->xpcs_regs + (_off))
|
1120 | 1199 |
|
| 1200 | +/* Macros for building, reading or writing register values or bits |
| 1201 | + * within the register values of SerDes integration registers. |
| 1202 | + */ |
| 1203 | +#define XSIR_GET_BITS(_var, _prefix, _field) \ |
| 1204 | + GET_BITS((_var), \ |
| 1205 | + _prefix##_##_field##_INDEX, \ |
| 1206 | + _prefix##_##_field##_WIDTH) |
| 1207 | + |
| 1208 | +#define XSIR_SET_BITS(_var, _prefix, _field, _val) \ |
| 1209 | + SET_BITS((_var), \ |
| 1210 | + _prefix##_##_field##_INDEX, \ |
| 1211 | + _prefix##_##_field##_WIDTH, (_val)) |
| 1212 | + |
| 1213 | +#define XSIR0_IOREAD(_pdata, _reg) \ |
| 1214 | + ioread16((_pdata)->sir0_regs + _reg) |
| 1215 | + |
| 1216 | +#define XSIR0_IOREAD_BITS(_pdata, _reg, _field) \ |
| 1217 | + GET_BITS(XSIR0_IOREAD((_pdata), _reg), \ |
| 1218 | + _reg##_##_field##_INDEX, \ |
| 1219 | + _reg##_##_field##_WIDTH) |
| 1220 | + |
| 1221 | +#define XSIR0_IOWRITE(_pdata, _reg, _val) \ |
| 1222 | + iowrite16((_val), (_pdata)->sir0_regs + _reg) |
| 1223 | + |
| 1224 | +#define XSIR0_IOWRITE_BITS(_pdata, _reg, _field, _val) \ |
| 1225 | +do { \ |
| 1226 | + u16 reg_val = XSIR0_IOREAD((_pdata), _reg); \ |
| 1227 | + SET_BITS(reg_val, \ |
| 1228 | + _reg##_##_field##_INDEX, \ |
| 1229 | + _reg##_##_field##_WIDTH, (_val)); \ |
| 1230 | + XSIR0_IOWRITE((_pdata), _reg, reg_val); \ |
| 1231 | +} while (0) |
| 1232 | + |
| 1233 | +#define XSIR1_IOREAD(_pdata, _reg) \ |
| 1234 | + ioread16((_pdata)->sir1_regs + _reg) |
| 1235 | + |
| 1236 | +#define XSIR1_IOREAD_BITS(_pdata, _reg, _field) \ |
| 1237 | + GET_BITS(XSIR1_IOREAD((_pdata), _reg), \ |
| 1238 | + _reg##_##_field##_INDEX, \ |
| 1239 | + _reg##_##_field##_WIDTH) |
| 1240 | + |
| 1241 | +#define XSIR1_IOWRITE(_pdata, _reg, _val) \ |
| 1242 | + iowrite16((_val), (_pdata)->sir1_regs + _reg) |
| 1243 | + |
| 1244 | +#define XSIR1_IOWRITE_BITS(_pdata, _reg, _field, _val) \ |
| 1245 | +do { \ |
| 1246 | + u16 reg_val = XSIR1_IOREAD((_pdata), _reg); \ |
| 1247 | + SET_BITS(reg_val, \ |
| 1248 | + _reg##_##_field##_INDEX, \ |
| 1249 | + _reg##_##_field##_WIDTH, (_val)); \ |
| 1250 | + XSIR1_IOWRITE((_pdata), _reg, reg_val); \ |
| 1251 | +} while (0) |
| 1252 | + |
| 1253 | +/* Macros for building, reading or writing register values or bits |
| 1254 | + * within the register values of SerDes RxTx registers. |
| 1255 | + */ |
| 1256 | +#define XRXTX_IOREAD(_pdata, _reg) \ |
| 1257 | + ioread16((_pdata)->rxtx_regs + _reg) |
| 1258 | + |
| 1259 | +#define XRXTX_IOREAD_BITS(_pdata, _reg, _field) \ |
| 1260 | + GET_BITS(XRXTX_IOREAD((_pdata), _reg), \ |
| 1261 | + _reg##_##_field##_INDEX, \ |
| 1262 | + _reg##_##_field##_WIDTH) |
| 1263 | + |
| 1264 | +#define XRXTX_IOWRITE(_pdata, _reg, _val) \ |
| 1265 | + iowrite16((_val), (_pdata)->rxtx_regs + _reg) |
| 1266 | + |
| 1267 | +#define XRXTX_IOWRITE_BITS(_pdata, _reg, _field, _val) \ |
| 1268 | +do { \ |
| 1269 | + u16 reg_val = XRXTX_IOREAD((_pdata), _reg); \ |
| 1270 | + SET_BITS(reg_val, \ |
| 1271 | + _reg##_##_field##_INDEX, \ |
| 1272 | + _reg##_##_field##_WIDTH, (_val)); \ |
| 1273 | + XRXTX_IOWRITE((_pdata), _reg, reg_val); \ |
| 1274 | +} while (0) |
| 1275 | + |
1121 | 1276 | /* Macros for building, reading or writing register values or bits
|
1122 | 1277 | * using MDIO. Different from above because of the use of standardized
|
1123 | 1278 | * Linux include values. No shifting is performed with the bit
|
|
0 commit comments