diff options
author | David S. Miller <davem@davemloft.net> | 2014-08-29 23:15:42 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-08-29 23:15:42 -0400 |
commit | 879ece6ecb2107ef1bbc3332cb2fea54c7d3a636 (patch) | |
tree | e47b74db9e3286139010d853affab0022c249c2a | |
parent | 10c51b56232d24f150e39884a9e749fd99cbc60c (diff) | |
parent | 07fbc6b79f63ae2a3e6afb88ec1b18abbf0430a0 (diff) |
Merge branch 'qlcnic-next'
Shahed Shaikh says:
====================
qlcnic: Feature addition and enhancements
This series contains following feature addition and enhancements,
- Update Link speed and Port type information for 83xx series adapters
- Support 0x8830 device ID
- Support for Power on Self Test (POST) feature for 83xx
- Use usleep_range() instead of msleep() for values less than 20ms
====================
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | MAINTAINERS | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 8 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 218 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | 156 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | 2 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 10 |
8 files changed, 335 insertions, 69 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index f01f54f27750..c9b4b55bcbb3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -7361,7 +7361,7 @@ F: drivers/net/ethernet/qlogic/qla3xxx.* | |||
7361 | 7361 | ||
7362 | QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER | 7362 | QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER |
7363 | M: Shahed Shaikh <shahed.shaikh@qlogic.com> | 7363 | M: Shahed Shaikh <shahed.shaikh@qlogic.com> |
7364 | M: Dept-HSGLinuxNICDev@qlogic.com | 7364 | M: Dept-GELinuxNICDev@qlogic.com |
7365 | L: netdev@vger.kernel.org | 7365 | L: netdev@vger.kernel.org |
7366 | S: Supported | 7366 | S: Supported |
7367 | F: drivers/net/ethernet/qlogic/qlcnic/ | 7367 | F: drivers/net/ethernet/qlogic/qlcnic/ |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h index b84f5ea3d659..e56c1bb36141 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | |||
@@ -39,8 +39,8 @@ | |||
39 | 39 | ||
40 | #define _QLCNIC_LINUX_MAJOR 5 | 40 | #define _QLCNIC_LINUX_MAJOR 5 |
41 | #define _QLCNIC_LINUX_MINOR 3 | 41 | #define _QLCNIC_LINUX_MINOR 3 |
42 | #define _QLCNIC_LINUX_SUBVERSION 61 | 42 | #define _QLCNIC_LINUX_SUBVERSION 62 |
43 | #define QLCNIC_LINUX_VERSIONID "5.3.61" | 43 | #define QLCNIC_LINUX_VERSIONID "5.3.62" |
44 | #define QLCNIC_DRV_IDC_VER 0x01 | 44 | #define QLCNIC_DRV_IDC_VER 0x01 |
45 | #define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\ | 45 | #define QLCNIC_DRIVER_VERSION ((_QLCNIC_LINUX_MAJOR << 16) |\ |
46 | (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION)) | 46 | (_QLCNIC_LINUX_MINOR << 8) | (_QLCNIC_LINUX_SUBVERSION)) |
@@ -540,6 +540,8 @@ struct qlcnic_hardware_context { | |||
540 | u8 lb_mode; | 540 | u8 lb_mode; |
541 | u16 vxlan_port; | 541 | u16 vxlan_port; |
542 | struct device *hwmon_dev; | 542 | struct device *hwmon_dev; |
543 | u32 post_mode; | ||
544 | bool run_post; | ||
543 | }; | 545 | }; |
544 | 546 | ||
545 | struct qlcnic_adapter_stats { | 547 | struct qlcnic_adapter_stats { |
@@ -2283,6 +2285,7 @@ extern const struct ethtool_ops qlcnic_ethtool_failed_ops; | |||
2283 | 2285 | ||
2284 | #define PCI_DEVICE_ID_QLOGIC_QLE824X 0x8020 | 2286 | #define PCI_DEVICE_ID_QLOGIC_QLE824X 0x8020 |
2285 | #define PCI_DEVICE_ID_QLOGIC_QLE834X 0x8030 | 2287 | #define PCI_DEVICE_ID_QLOGIC_QLE834X 0x8030 |
2288 | #define PCI_DEVICE_ID_QLOGIC_QLE8830 0x8830 | ||
2286 | #define PCI_DEVICE_ID_QLOGIC_VF_QLE834X 0x8430 | 2289 | #define PCI_DEVICE_ID_QLOGIC_VF_QLE834X 0x8430 |
2287 | #define PCI_DEVICE_ID_QLOGIC_QLE844X 0x8040 | 2290 | #define PCI_DEVICE_ID_QLOGIC_QLE844X 0x8040 |
2288 | #define PCI_DEVICE_ID_QLOGIC_VF_QLE844X 0x8440 | 2291 | #define PCI_DEVICE_ID_QLOGIC_VF_QLE844X 0x8440 |
@@ -2307,6 +2310,7 @@ static inline bool qlcnic_83xx_check(struct qlcnic_adapter *adapter) | |||
2307 | bool status; | 2310 | bool status; |
2308 | 2311 | ||
2309 | status = ((device == PCI_DEVICE_ID_QLOGIC_QLE834X) || | 2312 | status = ((device == PCI_DEVICE_ID_QLOGIC_QLE834X) || |
2313 | (device == PCI_DEVICE_ID_QLOGIC_QLE8830) || | ||
2310 | (device == PCI_DEVICE_ID_QLOGIC_QLE844X) || | 2314 | (device == PCI_DEVICE_ID_QLOGIC_QLE844X) || |
2311 | (device == PCI_DEVICE_ID_QLOGIC_VF_QLE844X) || | 2315 | (device == PCI_DEVICE_ID_QLOGIC_VF_QLE844X) || |
2312 | (device == PCI_DEVICE_ID_QLOGIC_VF_QLE834X)) ? true : false; | 2316 | (device == PCI_DEVICE_ID_QLOGIC_VF_QLE834X)) ? true : false; |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c index 476e4998ef99..840bf36b5e9d 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | |||
@@ -35,6 +35,35 @@ static void qlcnic_83xx_get_beacon_state(struct qlcnic_adapter *); | |||
35 | #define QLC_SKIP_INACTIVE_PCI_REGS 7 | 35 | #define QLC_SKIP_INACTIVE_PCI_REGS 7 |
36 | #define QLC_MAX_LEGACY_FUNC_SUPP 8 | 36 | #define QLC_MAX_LEGACY_FUNC_SUPP 8 |
37 | 37 | ||
38 | /* 83xx Module type */ | ||
39 | #define QLC_83XX_MODULE_FIBRE_10GBASE_LRM 0x1 /* 10GBase-LRM */ | ||
40 | #define QLC_83XX_MODULE_FIBRE_10GBASE_LR 0x2 /* 10GBase-LR */ | ||
41 | #define QLC_83XX_MODULE_FIBRE_10GBASE_SR 0x3 /* 10GBase-SR */ | ||
42 | #define QLC_83XX_MODULE_DA_10GE_PASSIVE_CP 0x4 /* 10GE passive | ||
43 | * copper(compliant) | ||
44 | */ | ||
45 | #define QLC_83XX_MODULE_DA_10GE_ACTIVE_CP 0x5 /* 10GE active limiting | ||
46 | * copper(compliant) | ||
47 | */ | ||
48 | #define QLC_83XX_MODULE_DA_10GE_LEGACY_CP 0x6 /* 10GE passive copper | ||
49 | * (legacy, best effort) | ||
50 | */ | ||
51 | #define QLC_83XX_MODULE_FIBRE_1000BASE_SX 0x7 /* 1000Base-SX */ | ||
52 | #define QLC_83XX_MODULE_FIBRE_1000BASE_LX 0x8 /* 1000Base-LX */ | ||
53 | #define QLC_83XX_MODULE_FIBRE_1000BASE_CX 0x9 /* 1000Base-CX */ | ||
54 | #define QLC_83XX_MODULE_TP_1000BASE_T 0xa /* 1000Base-T*/ | ||
55 | #define QLC_83XX_MODULE_DA_1GE_PASSIVE_CP 0xb /* 1GE passive copper | ||
56 | * (legacy, best effort) | ||
57 | */ | ||
58 | #define QLC_83XX_MODULE_UNKNOWN 0xf /* Unknown module type */ | ||
59 | |||
60 | /* Port types */ | ||
61 | #define QLC_83XX_10_CAPABLE BIT_8 | ||
62 | #define QLC_83XX_100_CAPABLE BIT_9 | ||
63 | #define QLC_83XX_1G_CAPABLE BIT_10 | ||
64 | #define QLC_83XX_10G_CAPABLE BIT_11 | ||
65 | #define QLC_83XX_AUTONEG_ENABLE BIT_15 | ||
66 | |||
38 | static const struct qlcnic_mailbox_metadata qlcnic_83xx_mbx_tbl[] = { | 67 | static const struct qlcnic_mailbox_metadata qlcnic_83xx_mbx_tbl[] = { |
39 | {QLCNIC_CMD_CONFIGURE_IP_ADDR, 6, 1}, | 68 | {QLCNIC_CMD_CONFIGURE_IP_ADDR, 6, 1}, |
40 | {QLCNIC_CMD_CONFIG_INTRPT, 18, 34}, | 69 | {QLCNIC_CMD_CONFIG_INTRPT, 18, 34}, |
@@ -667,6 +696,7 @@ void qlcnic_83xx_write_crb(struct qlcnic_adapter *adapter, char *buf, | |||
667 | 696 | ||
668 | int qlcnic_83xx_get_port_info(struct qlcnic_adapter *adapter) | 697 | int qlcnic_83xx_get_port_info(struct qlcnic_adapter *adapter) |
669 | { | 698 | { |
699 | struct qlcnic_hardware_context *ahw = adapter->ahw; | ||
670 | int status; | 700 | int status; |
671 | 701 | ||
672 | status = qlcnic_83xx_get_port_config(adapter); | 702 | status = qlcnic_83xx_get_port_config(adapter); |
@@ -674,13 +704,20 @@ int qlcnic_83xx_get_port_info(struct qlcnic_adapter *adapter) | |||
674 | dev_err(&adapter->pdev->dev, | 704 | dev_err(&adapter->pdev->dev, |
675 | "Get Port Info failed\n"); | 705 | "Get Port Info failed\n"); |
676 | } else { | 706 | } else { |
677 | if (QLC_83XX_SFP_10G_CAPABLE(adapter->ahw->port_config)) | ||
678 | adapter->ahw->port_type = QLCNIC_XGBE; | ||
679 | else | ||
680 | adapter->ahw->port_type = QLCNIC_GBE; | ||
681 | 707 | ||
682 | if (QLC_83XX_AUTONEG(adapter->ahw->port_config)) | 708 | if (ahw->port_config & QLC_83XX_10G_CAPABLE) { |
683 | adapter->ahw->link_autoneg = AUTONEG_ENABLE; | 709 | ahw->port_type = QLCNIC_XGBE; |
710 | } else if (ahw->port_config & QLC_83XX_10_CAPABLE || | ||
711 | ahw->port_config & QLC_83XX_100_CAPABLE || | ||
712 | ahw->port_config & QLC_83XX_1G_CAPABLE) { | ||
713 | ahw->port_type = QLCNIC_GBE; | ||
714 | } else { | ||
715 | ahw->port_type = QLCNIC_XGBE; | ||
716 | } | ||
717 | |||
718 | if (QLC_83XX_AUTONEG(ahw->port_config)) | ||
719 | ahw->link_autoneg = AUTONEG_ENABLE; | ||
720 | |||
684 | } | 721 | } |
685 | return status; | 722 | return status; |
686 | } | 723 | } |
@@ -2664,7 +2701,7 @@ static int qlcnic_83xx_poll_flash_status_reg(struct qlcnic_adapter *adapter) | |||
2664 | QLC_83XX_FLASH_STATUS_READY) | 2701 | QLC_83XX_FLASH_STATUS_READY) |
2665 | break; | 2702 | break; |
2666 | 2703 | ||
2667 | msleep(QLC_83XX_FLASH_STATUS_REG_POLL_DELAY); | 2704 | usleep_range(1000, 1100); |
2668 | } while (--retries); | 2705 | } while (--retries); |
2669 | 2706 | ||
2670 | if (!retries) | 2707 | if (!retries) |
@@ -3176,22 +3213,33 @@ int qlcnic_83xx_test_link(struct qlcnic_adapter *adapter) | |||
3176 | break; | 3213 | break; |
3177 | } | 3214 | } |
3178 | config = cmd.rsp.arg[3]; | 3215 | config = cmd.rsp.arg[3]; |
3179 | if (QLC_83XX_SFP_PRESENT(config)) { | 3216 | switch (QLC_83XX_SFP_MODULE_TYPE(config)) { |
3180 | switch (ahw->module_type) { | 3217 | case QLC_83XX_MODULE_FIBRE_10GBASE_LRM: |
3181 | case LINKEVENT_MODULE_OPTICAL_UNKNOWN: | 3218 | case QLC_83XX_MODULE_FIBRE_10GBASE_LR: |
3182 | case LINKEVENT_MODULE_OPTICAL_SRLR: | 3219 | case QLC_83XX_MODULE_FIBRE_10GBASE_SR: |
3183 | case LINKEVENT_MODULE_OPTICAL_LRM: | 3220 | ahw->supported_type = PORT_FIBRE; |
3184 | case LINKEVENT_MODULE_OPTICAL_SFP_1G: | 3221 | ahw->port_type = QLCNIC_XGBE; |
3185 | ahw->supported_type = PORT_FIBRE; | 3222 | break; |
3186 | break; | 3223 | case QLC_83XX_MODULE_FIBRE_1000BASE_SX: |
3187 | case LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLE: | 3224 | case QLC_83XX_MODULE_FIBRE_1000BASE_LX: |
3188 | case LINKEVENT_MODULE_TWINAX_UNSUPPORTED_CABLELEN: | 3225 | case QLC_83XX_MODULE_FIBRE_1000BASE_CX: |
3189 | case LINKEVENT_MODULE_TWINAX: | 3226 | ahw->supported_type = PORT_FIBRE; |
3190 | ahw->supported_type = PORT_TP; | 3227 | ahw->port_type = QLCNIC_GBE; |
3191 | break; | 3228 | break; |
3192 | default: | 3229 | case QLC_83XX_MODULE_TP_1000BASE_T: |
3193 | ahw->supported_type = PORT_OTHER; | 3230 | ahw->supported_type = PORT_TP; |
3194 | } | 3231 | ahw->port_type = QLCNIC_GBE; |
3232 | break; | ||
3233 | case QLC_83XX_MODULE_DA_10GE_PASSIVE_CP: | ||
3234 | case QLC_83XX_MODULE_DA_10GE_ACTIVE_CP: | ||
3235 | case QLC_83XX_MODULE_DA_10GE_LEGACY_CP: | ||
3236 | case QLC_83XX_MODULE_DA_1GE_PASSIVE_CP: | ||
3237 | ahw->supported_type = PORT_DA; | ||
3238 | ahw->port_type = QLCNIC_XGBE; | ||
3239 | break; | ||
3240 | default: | ||
3241 | ahw->supported_type = PORT_OTHER; | ||
3242 | ahw->port_type = QLCNIC_XGBE; | ||
3195 | } | 3243 | } |
3196 | if (config & 1) | 3244 | if (config & 1) |
3197 | err = 1; | 3245 | err = 1; |
@@ -3204,9 +3252,9 @@ out: | |||
3204 | int qlcnic_83xx_get_settings(struct qlcnic_adapter *adapter, | 3252 | int qlcnic_83xx_get_settings(struct qlcnic_adapter *adapter, |
3205 | struct ethtool_cmd *ecmd) | 3253 | struct ethtool_cmd *ecmd) |
3206 | { | 3254 | { |
3255 | struct qlcnic_hardware_context *ahw = adapter->ahw; | ||
3207 | u32 config = 0; | 3256 | u32 config = 0; |
3208 | int status = 0; | 3257 | int status = 0; |
3209 | struct qlcnic_hardware_context *ahw = adapter->ahw; | ||
3210 | 3258 | ||
3211 | if (!test_bit(__QLCNIC_MAINTENANCE_MODE, &adapter->state)) { | 3259 | if (!test_bit(__QLCNIC_MAINTENANCE_MODE, &adapter->state)) { |
3212 | /* Get port configuration info */ | 3260 | /* Get port configuration info */ |
@@ -3229,20 +3277,41 @@ int qlcnic_83xx_get_settings(struct qlcnic_adapter *adapter, | |||
3229 | ecmd->autoneg = AUTONEG_DISABLE; | 3277 | ecmd->autoneg = AUTONEG_DISABLE; |
3230 | } | 3278 | } |
3231 | 3279 | ||
3232 | if (ahw->port_type == QLCNIC_XGBE) { | 3280 | ecmd->supported = (SUPPORTED_10baseT_Full | |
3233 | ecmd->supported = SUPPORTED_10000baseT_Full; | 3281 | SUPPORTED_100baseT_Full | |
3234 | ecmd->advertising = ADVERTISED_10000baseT_Full; | 3282 | SUPPORTED_1000baseT_Full | |
3283 | SUPPORTED_10000baseT_Full | | ||
3284 | SUPPORTED_Autoneg); | ||
3285 | |||
3286 | if (ecmd->autoneg == AUTONEG_ENABLE) { | ||
3287 | if (ahw->port_config & QLC_83XX_10_CAPABLE) | ||
3288 | ecmd->advertising |= SUPPORTED_10baseT_Full; | ||
3289 | if (ahw->port_config & QLC_83XX_100_CAPABLE) | ||
3290 | ecmd->advertising |= SUPPORTED_100baseT_Full; | ||
3291 | if (ahw->port_config & QLC_83XX_1G_CAPABLE) | ||
3292 | ecmd->advertising |= SUPPORTED_1000baseT_Full; | ||
3293 | if (ahw->port_config & QLC_83XX_10G_CAPABLE) | ||
3294 | ecmd->advertising |= SUPPORTED_10000baseT_Full; | ||
3295 | if (ahw->port_config & QLC_83XX_AUTONEG_ENABLE) | ||
3296 | ecmd->advertising |= ADVERTISED_Autoneg; | ||
3235 | } else { | 3297 | } else { |
3236 | ecmd->supported = (SUPPORTED_10baseT_Half | | 3298 | switch (ahw->link_speed) { |
3237 | SUPPORTED_10baseT_Full | | 3299 | case SPEED_10: |
3238 | SUPPORTED_100baseT_Half | | 3300 | ecmd->advertising = SUPPORTED_10baseT_Full; |
3239 | SUPPORTED_100baseT_Full | | 3301 | break; |
3240 | SUPPORTED_1000baseT_Half | | 3302 | case SPEED_100: |
3241 | SUPPORTED_1000baseT_Full); | 3303 | ecmd->advertising = SUPPORTED_100baseT_Full; |
3242 | ecmd->advertising = (ADVERTISED_100baseT_Half | | 3304 | break; |
3243 | ADVERTISED_100baseT_Full | | 3305 | case SPEED_1000: |
3244 | ADVERTISED_1000baseT_Half | | 3306 | ecmd->advertising = SUPPORTED_1000baseT_Full; |
3245 | ADVERTISED_1000baseT_Full); | 3307 | break; |
3308 | case SPEED_10000: | ||
3309 | ecmd->advertising = SUPPORTED_10000baseT_Full; | ||
3310 | break; | ||
3311 | default: | ||
3312 | break; | ||
3313 | } | ||
3314 | |||
3246 | } | 3315 | } |
3247 | 3316 | ||
3248 | switch (ahw->supported_type) { | 3317 | switch (ahw->supported_type) { |
@@ -3258,6 +3327,12 @@ int qlcnic_83xx_get_settings(struct qlcnic_adapter *adapter, | |||
3258 | ecmd->port = PORT_TP; | 3327 | ecmd->port = PORT_TP; |
3259 | ecmd->transceiver = XCVR_INTERNAL; | 3328 | ecmd->transceiver = XCVR_INTERNAL; |
3260 | break; | 3329 | break; |
3330 | case PORT_DA: | ||
3331 | ecmd->supported |= SUPPORTED_FIBRE; | ||
3332 | ecmd->advertising |= ADVERTISED_FIBRE; | ||
3333 | ecmd->port = PORT_DA; | ||
3334 | ecmd->transceiver = XCVR_EXTERNAL; | ||
3335 | break; | ||
3261 | default: | 3336 | default: |
3262 | ecmd->supported |= SUPPORTED_FIBRE; | 3337 | ecmd->supported |= SUPPORTED_FIBRE; |
3263 | ecmd->advertising |= ADVERTISED_FIBRE; | 3338 | ecmd->advertising |= ADVERTISED_FIBRE; |
@@ -3272,35 +3347,60 @@ int qlcnic_83xx_get_settings(struct qlcnic_adapter *adapter, | |||
3272 | int qlcnic_83xx_set_settings(struct qlcnic_adapter *adapter, | 3347 | int qlcnic_83xx_set_settings(struct qlcnic_adapter *adapter, |
3273 | struct ethtool_cmd *ecmd) | 3348 | struct ethtool_cmd *ecmd) |
3274 | { | 3349 | { |
3275 | int status = 0; | 3350 | struct qlcnic_hardware_context *ahw = adapter->ahw; |
3276 | u32 config = adapter->ahw->port_config; | 3351 | u32 config = adapter->ahw->port_config; |
3352 | int status = 0; | ||
3277 | 3353 | ||
3278 | if (ecmd->autoneg) | 3354 | /* 83xx devices do not support Half duplex */ |
3279 | adapter->ahw->port_config |= BIT_15; | 3355 | if (ecmd->duplex == DUPLEX_HALF) { |
3280 | 3356 | netdev_info(adapter->netdev, | |
3281 | switch (ethtool_cmd_speed(ecmd)) { | 3357 | "Half duplex mode not supported\n"); |
3282 | case SPEED_10: | 3358 | return -EINVAL; |
3283 | adapter->ahw->port_config |= BIT_8; | ||
3284 | break; | ||
3285 | case SPEED_100: | ||
3286 | adapter->ahw->port_config |= BIT_9; | ||
3287 | break; | ||
3288 | case SPEED_1000: | ||
3289 | adapter->ahw->port_config |= BIT_10; | ||
3290 | break; | ||
3291 | case SPEED_10000: | ||
3292 | adapter->ahw->port_config |= BIT_11; | ||
3293 | break; | ||
3294 | default: | ||
3295 | return -EINVAL; | ||
3296 | } | 3359 | } |
3297 | 3360 | ||
3361 | if (ecmd->autoneg) { | ||
3362 | ahw->port_config |= QLC_83XX_AUTONEG_ENABLE; | ||
3363 | ahw->port_config |= (QLC_83XX_100_CAPABLE | | ||
3364 | QLC_83XX_1G_CAPABLE | | ||
3365 | QLC_83XX_10G_CAPABLE); | ||
3366 | } else { /* force speed */ | ||
3367 | ahw->port_config &= ~QLC_83XX_AUTONEG_ENABLE; | ||
3368 | switch (ethtool_cmd_speed(ecmd)) { | ||
3369 | case SPEED_10: | ||
3370 | ahw->port_config &= ~(QLC_83XX_100_CAPABLE | | ||
3371 | QLC_83XX_1G_CAPABLE | | ||
3372 | QLC_83XX_10G_CAPABLE); | ||
3373 | ahw->port_config |= QLC_83XX_10_CAPABLE; | ||
3374 | break; | ||
3375 | case SPEED_100: | ||
3376 | ahw->port_config &= ~(QLC_83XX_10_CAPABLE | | ||
3377 | QLC_83XX_1G_CAPABLE | | ||
3378 | QLC_83XX_10G_CAPABLE); | ||
3379 | ahw->port_config |= QLC_83XX_100_CAPABLE; | ||
3380 | break; | ||
3381 | case SPEED_1000: | ||
3382 | ahw->port_config &= ~(QLC_83XX_10_CAPABLE | | ||
3383 | QLC_83XX_100_CAPABLE | | ||
3384 | QLC_83XX_10G_CAPABLE); | ||
3385 | ahw->port_config |= QLC_83XX_1G_CAPABLE; | ||
3386 | break; | ||
3387 | case SPEED_10000: | ||
3388 | ahw->port_config &= ~(QLC_83XX_10_CAPABLE | | ||
3389 | QLC_83XX_100_CAPABLE | | ||
3390 | QLC_83XX_1G_CAPABLE); | ||
3391 | ahw->port_config |= QLC_83XX_10G_CAPABLE; | ||
3392 | break; | ||
3393 | default: | ||
3394 | return -EINVAL; | ||
3395 | } | ||
3396 | } | ||
3298 | status = qlcnic_83xx_set_port_config(adapter); | 3397 | status = qlcnic_83xx_set_port_config(adapter); |
3299 | if (status) { | 3398 | if (status) { |
3300 | dev_info(&adapter->pdev->dev, | 3399 | netdev_info(adapter->netdev, |
3301 | "Failed to Set Link Speed and autoneg.\n"); | 3400 | "Failed to Set Link Speed and autoneg.\n"); |
3302 | adapter->ahw->port_config = config; | 3401 | ahw->port_config = config; |
3303 | } | 3402 | } |
3403 | |||
3304 | return status; | 3404 | return status; |
3305 | } | 3405 | } |
3306 | 3406 | ||
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h index 2bf101a47d02..f3346a3779d3 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | |||
@@ -83,6 +83,7 @@ | |||
83 | /* Firmware image definitions */ | 83 | /* Firmware image definitions */ |
84 | #define QLC_83XX_BOOTLOADER_FLASH_ADDR 0x10000 | 84 | #define QLC_83XX_BOOTLOADER_FLASH_ADDR 0x10000 |
85 | #define QLC_83XX_FW_FILE_NAME "83xx_fw.bin" | 85 | #define QLC_83XX_FW_FILE_NAME "83xx_fw.bin" |
86 | #define QLC_83XX_POST_FW_FILE_NAME "83xx_post_fw.bin" | ||
86 | #define QLC_84XX_FW_FILE_NAME "84xx_fw.bin" | 87 | #define QLC_84XX_FW_FILE_NAME "84xx_fw.bin" |
87 | #define QLC_83XX_BOOT_FROM_FLASH 0 | 88 | #define QLC_83XX_BOOT_FROM_FLASH 0 |
88 | #define QLC_83XX_BOOT_FROM_FILE 0x12345678 | 89 | #define QLC_83XX_BOOT_FROM_FILE 0x12345678 |
@@ -360,7 +361,6 @@ enum qlcnic_83xx_states { | |||
360 | #define QLC_83XX_SFP_MODULE_TYPE(data) (((data) >> 4) & 0x1F) | 361 | #define QLC_83XX_SFP_MODULE_TYPE(data) (((data) >> 4) & 0x1F) |
361 | #define QLC_83XX_SFP_CU_LENGTH(data) (LSB((data) >> 16)) | 362 | #define QLC_83XX_SFP_CU_LENGTH(data) (LSB((data) >> 16)) |
362 | #define QLC_83XX_SFP_TX_FAULT(data) ((data) & BIT_10) | 363 | #define QLC_83XX_SFP_TX_FAULT(data) ((data) & BIT_10) |
363 | #define QLC_83XX_SFP_10G_CAPABLE(data) ((data) & BIT_11) | ||
364 | #define QLC_83XX_LINK_STATS(data) ((data) & BIT_0) | 364 | #define QLC_83XX_LINK_STATS(data) ((data) & BIT_0) |
365 | #define QLC_83XX_CURRENT_LINK_SPEED(data) (((data) >> 3) & 7) | 365 | #define QLC_83XX_CURRENT_LINK_SPEED(data) (((data) >> 3) & 7) |
366 | #define QLC_83XX_LINK_PAUSE(data) (((data) >> 6) & 3) | 366 | #define QLC_83XX_LINK_PAUSE(data) (((data) >> 6) & 3) |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c index 86783e1afcf7..9a2cfe4efac6 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_init.c | |||
@@ -2075,6 +2075,121 @@ static void qlcnic_83xx_init_hw(struct qlcnic_adapter *p_dev) | |||
2075 | dev_err(&p_dev->pdev->dev, "%s: failed\n", __func__); | 2075 | dev_err(&p_dev->pdev->dev, "%s: failed\n", __func__); |
2076 | } | 2076 | } |
2077 | 2077 | ||
2078 | /* POST FW related definations*/ | ||
2079 | #define QLC_83XX_POST_SIGNATURE_REG 0x41602014 | ||
2080 | #define QLC_83XX_POST_MODE_REG 0x41602018 | ||
2081 | #define QLC_83XX_POST_FAST_MODE 0 | ||
2082 | #define QLC_83XX_POST_MEDIUM_MODE 1 | ||
2083 | #define QLC_83XX_POST_SLOW_MODE 2 | ||
2084 | |||
2085 | /* POST Timeout values in milliseconds */ | ||
2086 | #define QLC_83XX_POST_FAST_MODE_TIMEOUT 690 | ||
2087 | #define QLC_83XX_POST_MED_MODE_TIMEOUT 2930 | ||
2088 | #define QLC_83XX_POST_SLOW_MODE_TIMEOUT 7500 | ||
2089 | |||
2090 | /* POST result values */ | ||
2091 | #define QLC_83XX_POST_PASS 0xfffffff0 | ||
2092 | #define QLC_83XX_POST_ASIC_STRESS_TEST_FAIL 0xffffffff | ||
2093 | #define QLC_83XX_POST_DDR_TEST_FAIL 0xfffffffe | ||
2094 | #define QLC_83XX_POST_ASIC_MEMORY_TEST_FAIL 0xfffffffc | ||
2095 | #define QLC_83XX_POST_FLASH_TEST_FAIL 0xfffffff8 | ||
2096 | |||
2097 | static int qlcnic_83xx_run_post(struct qlcnic_adapter *adapter) | ||
2098 | { | ||
2099 | struct qlc_83xx_fw_info *fw_info = adapter->ahw->fw_info; | ||
2100 | struct device *dev = &adapter->pdev->dev; | ||
2101 | int timeout, count, ret = 0; | ||
2102 | u32 signature; | ||
2103 | |||
2104 | /* Set timeout values with extra 2 seconds of buffer */ | ||
2105 | switch (adapter->ahw->post_mode) { | ||
2106 | case QLC_83XX_POST_FAST_MODE: | ||
2107 | timeout = QLC_83XX_POST_FAST_MODE_TIMEOUT + 2000; | ||
2108 | break; | ||
2109 | case QLC_83XX_POST_MEDIUM_MODE: | ||
2110 | timeout = QLC_83XX_POST_MED_MODE_TIMEOUT + 2000; | ||
2111 | break; | ||
2112 | case QLC_83XX_POST_SLOW_MODE: | ||
2113 | timeout = QLC_83XX_POST_SLOW_MODE_TIMEOUT + 2000; | ||
2114 | break; | ||
2115 | default: | ||
2116 | return -EINVAL; | ||
2117 | } | ||
2118 | |||
2119 | strncpy(fw_info->fw_file_name, QLC_83XX_POST_FW_FILE_NAME, | ||
2120 | QLC_FW_FILE_NAME_LEN); | ||
2121 | |||
2122 | ret = request_firmware(&fw_info->fw, fw_info->fw_file_name, dev); | ||
2123 | if (ret) { | ||
2124 | dev_err(dev, "POST firmware can not be loaded, skipping POST\n"); | ||
2125 | return 0; | ||
2126 | } | ||
2127 | |||
2128 | ret = qlcnic_83xx_copy_fw_file(adapter); | ||
2129 | if (ret) | ||
2130 | return ret; | ||
2131 | |||
2132 | /* clear QLC_83XX_POST_SIGNATURE_REG register */ | ||
2133 | qlcnic_ind_wr(adapter, QLC_83XX_POST_SIGNATURE_REG, 0); | ||
2134 | |||
2135 | /* Set POST mode */ | ||
2136 | qlcnic_ind_wr(adapter, QLC_83XX_POST_MODE_REG, | ||
2137 | adapter->ahw->post_mode); | ||
2138 | |||
2139 | QLC_SHARED_REG_WR32(adapter, QLCNIC_FW_IMG_VALID, | ||
2140 | QLC_83XX_BOOT_FROM_FILE); | ||
2141 | |||
2142 | qlcnic_83xx_start_hw(adapter); | ||
2143 | |||
2144 | count = 0; | ||
2145 | do { | ||
2146 | msleep(100); | ||
2147 | count += 100; | ||
2148 | |||
2149 | signature = qlcnic_ind_rd(adapter, QLC_83XX_POST_SIGNATURE_REG); | ||
2150 | if (signature == QLC_83XX_POST_PASS) | ||
2151 | break; | ||
2152 | } while (timeout > count); | ||
2153 | |||
2154 | if (timeout <= count) { | ||
2155 | dev_err(dev, "POST timed out, signature = 0x%08x\n", signature); | ||
2156 | return -EIO; | ||
2157 | } | ||
2158 | |||
2159 | switch (signature) { | ||
2160 | case QLC_83XX_POST_PASS: | ||
2161 | dev_info(dev, "POST passed, Signature = 0x%08x\n", signature); | ||
2162 | break; | ||
2163 | case QLC_83XX_POST_ASIC_STRESS_TEST_FAIL: | ||
2164 | dev_err(dev, "POST failed, Test case : ASIC STRESS TEST, Signature = 0x%08x\n", | ||
2165 | signature); | ||
2166 | ret = -EIO; | ||
2167 | break; | ||
2168 | case QLC_83XX_POST_DDR_TEST_FAIL: | ||
2169 | dev_err(dev, "POST failed, Test case : DDT TEST, Signature = 0x%08x\n", | ||
2170 | signature); | ||
2171 | ret = -EIO; | ||
2172 | break; | ||
2173 | case QLC_83XX_POST_ASIC_MEMORY_TEST_FAIL: | ||
2174 | dev_err(dev, "POST failed, Test case : ASIC MEMORY TEST, Signature = 0x%08x\n", | ||
2175 | signature); | ||
2176 | ret = -EIO; | ||
2177 | break; | ||
2178 | case QLC_83XX_POST_FLASH_TEST_FAIL: | ||
2179 | dev_err(dev, "POST failed, Test case : FLASH TEST, Signature = 0x%08x\n", | ||
2180 | signature); | ||
2181 | ret = -EIO; | ||
2182 | break; | ||
2183 | default: | ||
2184 | dev_err(dev, "POST failed, Test case : INVALID, Signature = 0x%08x\n", | ||
2185 | signature); | ||
2186 | ret = -EIO; | ||
2187 | break; | ||
2188 | } | ||
2189 | |||
2190 | return ret; | ||
2191 | } | ||
2192 | |||
2078 | static int qlcnic_83xx_load_fw_image_from_host(struct qlcnic_adapter *adapter) | 2193 | static int qlcnic_83xx_load_fw_image_from_host(struct qlcnic_adapter *adapter) |
2079 | { | 2194 | { |
2080 | struct qlc_83xx_fw_info *fw_info = adapter->ahw->fw_info; | 2195 | struct qlc_83xx_fw_info *fw_info = adapter->ahw->fw_info; |
@@ -2119,8 +2234,27 @@ static int qlcnic_83xx_restart_hw(struct qlcnic_adapter *adapter) | |||
2119 | 2234 | ||
2120 | if (qlcnic_83xx_copy_bootloader(adapter)) | 2235 | if (qlcnic_83xx_copy_bootloader(adapter)) |
2121 | return err; | 2236 | return err; |
2237 | |||
2238 | /* Check if POST needs to be run */ | ||
2239 | if (adapter->ahw->run_post) { | ||
2240 | err = qlcnic_83xx_run_post(adapter); | ||
2241 | if (err) | ||
2242 | return err; | ||
2243 | |||
2244 | /* No need to run POST in next reset sequence */ | ||
2245 | adapter->ahw->run_post = false; | ||
2246 | |||
2247 | /* Again reset the adapter to load regular firmware */ | ||
2248 | qlcnic_83xx_stop_hw(adapter); | ||
2249 | qlcnic_83xx_init_hw(adapter); | ||
2250 | |||
2251 | err = qlcnic_83xx_copy_bootloader(adapter); | ||
2252 | if (err) | ||
2253 | return err; | ||
2254 | } | ||
2255 | |||
2122 | /* Boot either flash image or firmware image from host file system */ | 2256 | /* Boot either flash image or firmware image from host file system */ |
2123 | if (qlcnic_load_fw_file) { | 2257 | if (qlcnic_load_fw_file == 1) { |
2124 | if (qlcnic_83xx_load_fw_image_from_host(adapter)) | 2258 | if (qlcnic_83xx_load_fw_image_from_host(adapter)) |
2125 | return err; | 2259 | return err; |
2126 | } else { | 2260 | } else { |
@@ -2284,6 +2418,7 @@ static int qlcnic_83xx_get_fw_info(struct qlcnic_adapter *adapter) | |||
2284 | fw_info = ahw->fw_info; | 2418 | fw_info = ahw->fw_info; |
2285 | switch (pdev->device) { | 2419 | switch (pdev->device) { |
2286 | case PCI_DEVICE_ID_QLOGIC_QLE834X: | 2420 | case PCI_DEVICE_ID_QLOGIC_QLE834X: |
2421 | case PCI_DEVICE_ID_QLOGIC_QLE8830: | ||
2287 | strncpy(fw_info->fw_file_name, QLC_83XX_FW_FILE_NAME, | 2422 | strncpy(fw_info->fw_file_name, QLC_83XX_FW_FILE_NAME, |
2288 | QLC_FW_FILE_NAME_LEN); | 2423 | QLC_FW_FILE_NAME_LEN); |
2289 | break; | 2424 | break; |
@@ -2328,6 +2463,25 @@ int qlcnic_83xx_init(struct qlcnic_adapter *adapter, int pci_using_dac) | |||
2328 | adapter->rx_mac_learn = false; | 2463 | adapter->rx_mac_learn = false; |
2329 | ahw->msix_supported = !!qlcnic_use_msi_x; | 2464 | ahw->msix_supported = !!qlcnic_use_msi_x; |
2330 | 2465 | ||
2466 | /* Check if POST needs to be run */ | ||
2467 | switch (qlcnic_load_fw_file) { | ||
2468 | case 2: | ||
2469 | ahw->post_mode = QLC_83XX_POST_FAST_MODE; | ||
2470 | ahw->run_post = true; | ||
2471 | break; | ||
2472 | case 3: | ||
2473 | ahw->post_mode = QLC_83XX_POST_MEDIUM_MODE; | ||
2474 | ahw->run_post = true; | ||
2475 | break; | ||
2476 | case 4: | ||
2477 | ahw->post_mode = QLC_83XX_POST_SLOW_MODE; | ||
2478 | ahw->run_post = true; | ||
2479 | break; | ||
2480 | default: | ||
2481 | ahw->run_post = false; | ||
2482 | break; | ||
2483 | } | ||
2484 | |||
2331 | qlcnic_83xx_init_rings(adapter); | 2485 | qlcnic_83xx_init_rings(adapter); |
2332 | 2486 | ||
2333 | err = qlcnic_83xx_init_mailbox_work(adapter); | 2487 | err = qlcnic_83xx_init_mailbox_work(adapter); |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c index 851cb4a80d50..8102673cb37f 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.c | |||
@@ -341,7 +341,7 @@ qlcnic_pcie_sem_lock(struct qlcnic_adapter *adapter, int sem, u32 id_reg) | |||
341 | } | 341 | } |
342 | return -EIO; | 342 | return -EIO; |
343 | } | 343 | } |
344 | msleep(1); | 344 | usleep_range(1000, 1500); |
345 | } | 345 | } |
346 | 346 | ||
347 | if (id_reg) | 347 | if (id_reg) |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c index c4262c23ed7c..be41e4c77b65 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_init.c | |||
@@ -537,7 +537,7 @@ int qlcnic_pinit_from_rom(struct qlcnic_adapter *adapter) | |||
537 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_3 + 0xc, 0); | 537 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_3 + 0xc, 0); |
538 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x8, 0); | 538 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_4 + 0x8, 0); |
539 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_4 + 0xc, 0); | 539 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_4 + 0xc, 0); |
540 | msleep(1); | 540 | usleep_range(1000, 1500); |
541 | 541 | ||
542 | QLC_SHARED_REG_WR32(adapter, QLCNIC_PEG_HALT_STATUS1, 0); | 542 | QLC_SHARED_REG_WR32(adapter, QLCNIC_PEG_HALT_STATUS1, 0); |
543 | QLC_SHARED_REG_WR32(adapter, QLCNIC_PEG_HALT_STATUS2, 0); | 543 | QLC_SHARED_REG_WR32(adapter, QLCNIC_PEG_HALT_STATUS2, 0); |
@@ -1198,7 +1198,7 @@ qlcnic_load_firmware(struct qlcnic_adapter *adapter) | |||
1198 | flashaddr += 8; | 1198 | flashaddr += 8; |
1199 | } | 1199 | } |
1200 | } | 1200 | } |
1201 | msleep(1); | 1201 | usleep_range(1000, 1500); |
1202 | 1202 | ||
1203 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x18, 0x1020); | 1203 | QLCWR32(adapter, QLCNIC_CRB_PEG_NET_0 + 0x18, 0x1020); |
1204 | QLCWR32(adapter, QLCNIC_ROMUSB_GLB_SW_RESET, 0x80001e); | 1204 | QLCWR32(adapter, QLCNIC_ROMUSB_GLB_SW_RESET, 0x80001e); |
@@ -1295,7 +1295,7 @@ next: | |||
1295 | rc = qlcnic_validate_firmware(adapter); | 1295 | rc = qlcnic_validate_firmware(adapter); |
1296 | if (rc != 0) { | 1296 | if (rc != 0) { |
1297 | release_firmware(adapter->fw); | 1297 | release_firmware(adapter->fw); |
1298 | msleep(1); | 1298 | usleep_range(1000, 1500); |
1299 | goto next; | 1299 | goto next; |
1300 | } | 1300 | } |
1301 | } | 1301 | } |
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c index cf08b2de071e..f5e29f7bdae3 100644 --- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c +++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | |||
@@ -52,7 +52,7 @@ MODULE_PARM_DESC(auto_fw_reset, "Auto firmware reset (0=disabled, 1=enabled)"); | |||
52 | module_param_named(auto_fw_reset, qlcnic_auto_fw_reset, int, 0644); | 52 | module_param_named(auto_fw_reset, qlcnic_auto_fw_reset, int, 0644); |
53 | 53 | ||
54 | int qlcnic_load_fw_file; | 54 | int qlcnic_load_fw_file; |
55 | MODULE_PARM_DESC(load_fw_file, "Load firmware from (0=flash, 1=file)"); | 55 | MODULE_PARM_DESC(load_fw_file, "Load firmware from (0=flash, 1=file, 2=POST in fast mode, 3= POST in medium mode, 4=POST in slow mode)"); |
56 | module_param_named(load_fw_file, qlcnic_load_fw_file, int, 0444); | 56 | module_param_named(load_fw_file, qlcnic_load_fw_file, int, 0444); |
57 | 57 | ||
58 | static int qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent); | 58 | static int qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent); |
@@ -111,6 +111,7 @@ static u32 qlcnic_vlan_tx_check(struct qlcnic_adapter *adapter) | |||
111 | static const struct pci_device_id qlcnic_pci_tbl[] = { | 111 | static const struct pci_device_id qlcnic_pci_tbl[] = { |
112 | ENTRY(PCI_DEVICE_ID_QLOGIC_QLE824X), | 112 | ENTRY(PCI_DEVICE_ID_QLOGIC_QLE824X), |
113 | ENTRY(PCI_DEVICE_ID_QLOGIC_QLE834X), | 113 | ENTRY(PCI_DEVICE_ID_QLOGIC_QLE834X), |
114 | ENTRY(PCI_DEVICE_ID_QLOGIC_QLE8830), | ||
114 | ENTRY(PCI_DEVICE_ID_QLOGIC_VF_QLE834X), | 115 | ENTRY(PCI_DEVICE_ID_QLOGIC_VF_QLE834X), |
115 | ENTRY(PCI_DEVICE_ID_QLOGIC_QLE844X), | 116 | ENTRY(PCI_DEVICE_ID_QLOGIC_QLE844X), |
116 | ENTRY(PCI_DEVICE_ID_QLOGIC_VF_QLE844X), | 117 | ENTRY(PCI_DEVICE_ID_QLOGIC_VF_QLE844X), |
@@ -228,6 +229,11 @@ static const struct qlcnic_board_info qlcnic_boards[] = { | |||
228 | PCI_DEVICE_ID_QLOGIC_QLE834X, | 229 | PCI_DEVICE_ID_QLOGIC_QLE834X, |
229 | 0x0, 0x0, "8300 Series 1/10GbE Controller" }, | 230 | 0x0, 0x0, "8300 Series 1/10GbE Controller" }, |
230 | { PCI_VENDOR_ID_QLOGIC, | 231 | { PCI_VENDOR_ID_QLOGIC, |
232 | PCI_DEVICE_ID_QLOGIC_QLE8830, | ||
233 | 0x0, | ||
234 | 0x0, | ||
235 | "8830 Series 1/10GbE Controller" }, | ||
236 | { PCI_VENDOR_ID_QLOGIC, | ||
231 | PCI_DEVICE_ID_QLOGIC_QLE824X, | 237 | PCI_DEVICE_ID_QLOGIC_QLE824X, |
232 | PCI_VENDOR_ID_QLOGIC, | 238 | PCI_VENDOR_ID_QLOGIC, |
233 | 0x203, | 239 | 0x203, |
@@ -1131,6 +1137,7 @@ static void qlcnic_get_bar_length(u32 dev_id, ulong *bar) | |||
1131 | *bar = QLCNIC_82XX_BAR0_LENGTH; | 1137 | *bar = QLCNIC_82XX_BAR0_LENGTH; |
1132 | break; | 1138 | break; |
1133 | case PCI_DEVICE_ID_QLOGIC_QLE834X: | 1139 | case PCI_DEVICE_ID_QLOGIC_QLE834X: |
1140 | case PCI_DEVICE_ID_QLOGIC_QLE8830: | ||
1134 | case PCI_DEVICE_ID_QLOGIC_QLE844X: | 1141 | case PCI_DEVICE_ID_QLOGIC_QLE844X: |
1135 | case PCI_DEVICE_ID_QLOGIC_VF_QLE834X: | 1142 | case PCI_DEVICE_ID_QLOGIC_VF_QLE834X: |
1136 | case PCI_DEVICE_ID_QLOGIC_VF_QLE844X: | 1143 | case PCI_DEVICE_ID_QLOGIC_VF_QLE844X: |
@@ -2474,6 +2481,7 @@ qlcnic_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | |||
2474 | ahw->reg_tbl = (u32 *) qlcnic_reg_tbl; | 2481 | ahw->reg_tbl = (u32 *) qlcnic_reg_tbl; |
2475 | break; | 2482 | break; |
2476 | case PCI_DEVICE_ID_QLOGIC_QLE834X: | 2483 | case PCI_DEVICE_ID_QLOGIC_QLE834X: |
2484 | case PCI_DEVICE_ID_QLOGIC_QLE8830: | ||
2477 | case PCI_DEVICE_ID_QLOGIC_QLE844X: | 2485 | case PCI_DEVICE_ID_QLOGIC_QLE844X: |
2478 | qlcnic_83xx_register_map(ahw); | 2486 | qlcnic_83xx_register_map(ahw); |
2479 | break; | 2487 | break; |