ixgbe_common.c revision 190873
150476Speter/****************************************************************************** 258676Sbde 334192Sjdp Copyright (c) 2001-2009, Intel Corporation 455122Sjdp All rights reserved. 555122Sjdp 674814Sru Redistribution and use in source and binary forms, with or without 745501Sjdp modification, are permitted provided that the following conditions are met: 845501Sjdp 977348Sru 1. Redistributions of source code must retain the above copyright notice, 1056790Sjdp this list of conditions and the following disclaimer. 1138816Sdfr 1245501Sjdp 2. Redistributions in binary form must reproduce the above copyright 1345501Sjdp notice, this list of conditions and the following disclaimer in the 1445501Sjdp documentation and/or other materials provided with the distribution. 1544050Snate 1645501Sjdp 3. Neither the name of the Intel Corporation nor the names of its 1745501Sjdp contributors may be used to endorse or promote products derived from 1845501Sjdp this software without specific prior written permission. 1945501Sjdp 2045501Sjdp THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 2145501Sjdp AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2245501Sjdp IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2338816Sdfr ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 2445501Sjdp LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 2538816Sdfr CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 2645501Sjdp SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 2745501Sjdp INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 2845501Sjdp CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 2958676Sbde ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 3058676Sbde POSSIBILITY OF SUCH DAMAGE. 3145501Sjdp 3245501Sjdp******************************************************************************/ 3345501Sjdp/*$FreeBSD: head/sys/dev/ixgbe/ixgbe_common.c 190873 2009-04-10 00:22:48Z jfv $*/ 3458676Sbde 3558676Sbde#include "ixgbe_common.h" 3645501Sjdp#include "ixgbe_api.h" 3734192Sjdp 3845501Sjdpstatic s32 ixgbe_poll_eeprom_eerd_done(struct ixgbe_hw *hw); 3945501Sjdpstatic s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw); 4045501Sjdpstatic s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw); 4138816Sdfrstatic void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw); 4234192Sjdpstatic s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw); 4334192Sjdpstatic void ixgbe_standby_eeprom(struct ixgbe_hw *hw); 44static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data, 45 u16 count); 46static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count); 47static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec); 48static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec); 49static void ixgbe_release_eeprom(struct ixgbe_hw *hw); 50static u16 ixgbe_calc_eeprom_checksum(struct ixgbe_hw *hw); 51 52static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr); 53 54/** 55 * ixgbe_init_ops_generic - Inits function ptrs 56 * @hw: pointer to the hardware structure 57 * 58 * Initialize the function pointers. 59 **/ 60s32 ixgbe_init_ops_generic(struct ixgbe_hw *hw) 61{ 62 struct ixgbe_eeprom_info *eeprom = &hw->eeprom; 63 struct ixgbe_mac_info *mac = &hw->mac; 64 u32 eec = IXGBE_READ_REG(hw, IXGBE_EEC); 65 66 /* EEPROM */ 67 eeprom->ops.init_params = &ixgbe_init_eeprom_params_generic; 68 /* If EEPROM is valid (bit 8 = 1), use EERD otherwise use bit bang */ 69 if (eec & (1 << 8)) 70 eeprom->ops.read = &ixgbe_read_eeprom_generic; 71 else 72 eeprom->ops.read = &ixgbe_read_eeprom_bit_bang_generic; 73 eeprom->ops.write = &ixgbe_write_eeprom_generic; 74 eeprom->ops.validate_checksum = 75 &ixgbe_validate_eeprom_checksum_generic; 76 eeprom->ops.update_checksum = &ixgbe_update_eeprom_checksum_generic; 77 78 /* MAC */ 79 mac->ops.init_hw = &ixgbe_init_hw_generic; 80 mac->ops.reset_hw = NULL; 81 mac->ops.start_hw = &ixgbe_start_hw_generic; 82 mac->ops.clear_hw_cntrs = &ixgbe_clear_hw_cntrs_generic; 83 mac->ops.get_media_type = NULL; 84 mac->ops.get_supported_physical_layer = NULL; 85 mac->ops.enable_rx_dma = &ixgbe_enable_rx_dma_generic; 86 mac->ops.get_mac_addr = &ixgbe_get_mac_addr_generic; 87 mac->ops.stop_adapter = &ixgbe_stop_adapter_generic; 88 mac->ops.get_bus_info = &ixgbe_get_bus_info_generic; 89 mac->ops.set_lan_id = &ixgbe_set_lan_id_multi_port_pcie; 90 91 /* LEDs */ 92 mac->ops.led_on = &ixgbe_led_on_generic; 93 mac->ops.led_off = &ixgbe_led_off_generic; 94 mac->ops.blink_led_start = &ixgbe_blink_led_start_generic; 95 mac->ops.blink_led_stop = &ixgbe_blink_led_stop_generic; 96 97 /* RAR, Multicast, VLAN */ 98 mac->ops.set_rar = &ixgbe_set_rar_generic; 99 mac->ops.clear_rar = &ixgbe_clear_rar_generic; 100 mac->ops.insert_mac_addr = NULL; 101 mac->ops.set_vmdq = NULL; 102 mac->ops.clear_vmdq = NULL; 103 mac->ops.init_rx_addrs = &ixgbe_init_rx_addrs_generic; 104 mac->ops.update_uc_addr_list = &ixgbe_update_uc_addr_list_generic; 105 mac->ops.update_mc_addr_list = &ixgbe_update_mc_addr_list_generic; 106 mac->ops.enable_mc = &ixgbe_enable_mc_generic; 107 mac->ops.disable_mc = &ixgbe_disable_mc_generic; 108 mac->ops.clear_vfta = NULL; 109 mac->ops.set_vfta = NULL; 110 mac->ops.init_uta_tables = NULL; 111 112 /* Flow Control */ 113 mac->ops.fc_enable = &ixgbe_fc_enable_generic; 114 115 /* Link */ 116 mac->ops.get_link_capabilities = NULL; 117 mac->ops.setup_link = NULL; 118 mac->ops.setup_link_speed = NULL; 119 mac->ops.check_link = NULL; 120 121 return IXGBE_SUCCESS; 122} 123 124/** 125 * ixgbe_start_hw_generic - Prepare hardware for Tx/Rx 126 * @hw: pointer to hardware structure 127 * 128 * Starts the hardware by filling the bus info structure and media type, clears 129 * all on chip counters, initializes receive address registers, multicast 130 * table, VLAN filter table, calls routine to set up link and flow control 131 * settings, and leaves transmit and receive units disabled and uninitialized 132 **/ 133s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw) 134{ 135 u32 ctrl_ext; 136 s32 ret_val = IXGBE_SUCCESS; 137 138 /* Set the media type */ 139 hw->phy.media_type = hw->mac.ops.get_media_type(hw); 140 141 /* PHY ops initialization must be done in reset_hw() */ 142 143 /* Clear the VLAN filter table */ 144 hw->mac.ops.clear_vfta(hw); 145 146 /* Clear statistics registers */ 147 hw->mac.ops.clear_hw_cntrs(hw); 148 149 /* Set No Snoop Disable */ 150 ctrl_ext = IXGBE_READ_REG(hw, IXGBE_CTRL_EXT); 151 ctrl_ext |= IXGBE_CTRL_EXT_NS_DIS; 152 IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext); 153 IXGBE_WRITE_FLUSH(hw); 154 155 /* Setup flow control */ 156 ixgbe_setup_fc(hw, 0); 157 158 /* Clear adapter stopped flag */ 159 hw->adapter_stopped = FALSE; 160 161 return ret_val; 162} 163 164/** 165 * ixgbe_init_hw_generic - Generic hardware initialization 166 * @hw: pointer to hardware structure 167 * 168 * Initialize the hardware by resetting the hardware, filling the bus info 169 * structure and media type, clears all on chip counters, initializes receive 170 * address registers, multicast table, VLAN filter table, calls routine to set 171 * up link and flow control settings, and leaves transmit and receive units 172 * disabled and uninitialized 173 **/ 174s32 ixgbe_init_hw_generic(struct ixgbe_hw *hw) 175{ 176 s32 status = IXGBE_SUCCESS; 177 178 /* Reset the hardware */ 179 status = hw->mac.ops.reset_hw(hw); 180 181 if (status == IXGBE_SUCCESS) { 182 /* Start the HW */ 183 status = hw->mac.ops.start_hw(hw); 184 } 185 186 return status; 187} 188 189/** 190 * ixgbe_clear_hw_cntrs_generic - Generic clear hardware counters 191 * @hw: pointer to hardware structure 192 * 193 * Clears all hardware statistics counters by reading them from the hardware 194 * Statistics counters are clear on read. 195 **/ 196s32 ixgbe_clear_hw_cntrs_generic(struct ixgbe_hw *hw) 197{ 198 u16 i = 0; 199 200 IXGBE_READ_REG(hw, IXGBE_CRCERRS); 201 IXGBE_READ_REG(hw, IXGBE_ILLERRC); 202 IXGBE_READ_REG(hw, IXGBE_ERRBC); 203 IXGBE_READ_REG(hw, IXGBE_MSPDC); 204 for (i = 0; i < 8; i++) 205 IXGBE_READ_REG(hw, IXGBE_MPC(i)); 206 207 IXGBE_READ_REG(hw, IXGBE_MLFC); 208 IXGBE_READ_REG(hw, IXGBE_MRFC); 209 IXGBE_READ_REG(hw, IXGBE_RLEC); 210 IXGBE_READ_REG(hw, IXGBE_LXONTXC); 211 IXGBE_READ_REG(hw, IXGBE_LXOFFTXC); 212 if (hw->mac.type >= ixgbe_mac_82599EB) { 213 IXGBE_READ_REG(hw, IXGBE_LXONRXCNT); 214 IXGBE_READ_REG(hw, IXGBE_LXOFFRXCNT); 215 } else { 216 IXGBE_READ_REG(hw, IXGBE_LXONRXC); 217 IXGBE_READ_REG(hw, IXGBE_LXOFFRXC); 218 } 219 220 for (i = 0; i < 8; i++) { 221 IXGBE_READ_REG(hw, IXGBE_PXONTXC(i)); 222 IXGBE_READ_REG(hw, IXGBE_PXOFFTXC(i)); 223 if (hw->mac.type >= ixgbe_mac_82599EB) { 224 IXGBE_READ_REG(hw, IXGBE_PXONRXCNT(i)); 225 IXGBE_READ_REG(hw, IXGBE_PXOFFRXCNT(i)); 226 } else { 227 IXGBE_READ_REG(hw, IXGBE_PXONRXC(i)); 228 IXGBE_READ_REG(hw, IXGBE_PXOFFRXC(i)); 229 } 230 } 231 if (hw->mac.type >= ixgbe_mac_82599EB) 232 for (i = 0; i < 8; i++) 233 IXGBE_READ_REG(hw, IXGBE_PXON2OFFCNT(i)); 234 IXGBE_READ_REG(hw, IXGBE_PRC64); 235 IXGBE_READ_REG(hw, IXGBE_PRC127); 236 IXGBE_READ_REG(hw, IXGBE_PRC255); 237 IXGBE_READ_REG(hw, IXGBE_PRC511); 238 IXGBE_READ_REG(hw, IXGBE_PRC1023); 239 IXGBE_READ_REG(hw, IXGBE_PRC1522); 240 IXGBE_READ_REG(hw, IXGBE_GPRC); 241 IXGBE_READ_REG(hw, IXGBE_BPRC); 242 IXGBE_READ_REG(hw, IXGBE_MPRC); 243 IXGBE_READ_REG(hw, IXGBE_GPTC); 244 IXGBE_READ_REG(hw, IXGBE_GORCL); 245 IXGBE_READ_REG(hw, IXGBE_GORCH); 246 IXGBE_READ_REG(hw, IXGBE_GOTCL); 247 IXGBE_READ_REG(hw, IXGBE_GOTCH); 248 for (i = 0; i < 8; i++) 249 IXGBE_READ_REG(hw, IXGBE_RNBC(i)); 250 IXGBE_READ_REG(hw, IXGBE_RUC); 251 IXGBE_READ_REG(hw, IXGBE_RFC); 252 IXGBE_READ_REG(hw, IXGBE_ROC); 253 IXGBE_READ_REG(hw, IXGBE_RJC); 254 IXGBE_READ_REG(hw, IXGBE_MNGPRC); 255 IXGBE_READ_REG(hw, IXGBE_MNGPDC); 256 IXGBE_READ_REG(hw, IXGBE_MNGPTC); 257 IXGBE_READ_REG(hw, IXGBE_TORL); 258 IXGBE_READ_REG(hw, IXGBE_TORH); 259 IXGBE_READ_REG(hw, IXGBE_TPR); 260 IXGBE_READ_REG(hw, IXGBE_TPT); 261 IXGBE_READ_REG(hw, IXGBE_PTC64); 262 IXGBE_READ_REG(hw, IXGBE_PTC127); 263 IXGBE_READ_REG(hw, IXGBE_PTC255); 264 IXGBE_READ_REG(hw, IXGBE_PTC511); 265 IXGBE_READ_REG(hw, IXGBE_PTC1023); 266 IXGBE_READ_REG(hw, IXGBE_PTC1522); 267 IXGBE_READ_REG(hw, IXGBE_MPTC); 268 IXGBE_READ_REG(hw, IXGBE_BPTC); 269 for (i = 0; i < 16; i++) { 270 IXGBE_READ_REG(hw, IXGBE_QPRC(i)); 271 IXGBE_READ_REG(hw, IXGBE_QBRC(i)); 272 IXGBE_READ_REG(hw, IXGBE_QPTC(i)); 273 IXGBE_READ_REG(hw, IXGBE_QBTC(i)); 274 } 275 276 return IXGBE_SUCCESS; 277} 278 279/** 280 * ixgbe_read_pba_num_generic - Reads part number from EEPROM 281 * @hw: pointer to hardware structure 282 * @pba_num: stores the part number from the EEPROM 283 * 284 * Reads the part number from the EEPROM. 285 **/ 286s32 ixgbe_read_pba_num_generic(struct ixgbe_hw *hw, u32 *pba_num) 287{ 288 s32 ret_val; 289 u16 data; 290 291 DEBUGFUNC("ixgbe_read_pba_num_generic"); 292 293 ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM0_PTR, &data); 294 if (ret_val) { 295 DEBUGOUT("NVM Read Error\n"); 296 return ret_val; 297 } 298 *pba_num = (u32)(data << 16); 299 300 ret_val = hw->eeprom.ops.read(hw, IXGBE_PBANUM1_PTR, &data); 301 if (ret_val) { 302 DEBUGOUT("NVM Read Error\n"); 303 return ret_val; 304 } 305 *pba_num |= data; 306 307 return IXGBE_SUCCESS; 308} 309 310/** 311 * ixgbe_get_mac_addr_generic - Generic get MAC address 312 * @hw: pointer to hardware structure 313 * @mac_addr: Adapter MAC address 314 * 315 * Reads the adapter's MAC address from first Receive Address Register (RAR0) 316 * A reset of the adapter must be performed prior to calling this function 317 * in order for the MAC address to have been loaded from the EEPROM into RAR0 318 **/ 319s32 ixgbe_get_mac_addr_generic(struct ixgbe_hw *hw, u8 *mac_addr) 320{ 321 u32 rar_high; 322 u32 rar_low; 323 u16 i; 324 325 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(0)); 326 rar_low = IXGBE_READ_REG(hw, IXGBE_RAL(0)); 327 328 for (i = 0; i < 4; i++) 329 mac_addr[i] = (u8)(rar_low >> (i*8)); 330 331 for (i = 0; i < 2; i++) 332 mac_addr[i+4] = (u8)(rar_high >> (i*8)); 333 334 return IXGBE_SUCCESS; 335} 336 337/** 338 * ixgbe_get_bus_info_generic - Generic set PCI bus info 339 * @hw: pointer to hardware structure 340 * 341 * Sets the PCI bus info (speed, width, type) within the ixgbe_hw structure 342 **/ 343s32 ixgbe_get_bus_info_generic(struct ixgbe_hw *hw) 344{ 345 struct ixgbe_mac_info *mac = &hw->mac; 346 u16 link_status; 347 348 hw->bus.type = ixgbe_bus_type_pci_express; 349 350 /* Get the negotiated link width and speed from PCI config space */ 351 link_status = IXGBE_READ_PCIE_WORD(hw, IXGBE_PCI_LINK_STATUS); 352 353 switch (link_status & IXGBE_PCI_LINK_WIDTH) { 354 case IXGBE_PCI_LINK_WIDTH_1: 355 hw->bus.width = ixgbe_bus_width_pcie_x1; 356 break; 357 case IXGBE_PCI_LINK_WIDTH_2: 358 hw->bus.width = ixgbe_bus_width_pcie_x2; 359 break; 360 case IXGBE_PCI_LINK_WIDTH_4: 361 hw->bus.width = ixgbe_bus_width_pcie_x4; 362 break; 363 case IXGBE_PCI_LINK_WIDTH_8: 364 hw->bus.width = ixgbe_bus_width_pcie_x8; 365 break; 366 default: 367 hw->bus.width = ixgbe_bus_width_unknown; 368 break; 369 } 370 371 switch (link_status & IXGBE_PCI_LINK_SPEED) { 372 case IXGBE_PCI_LINK_SPEED_2500: 373 hw->bus.speed = ixgbe_bus_speed_2500; 374 break; 375 case IXGBE_PCI_LINK_SPEED_5000: 376 hw->bus.speed = ixgbe_bus_speed_5000; 377 break; 378 default: 379 hw->bus.speed = ixgbe_bus_speed_unknown; 380 break; 381 } 382 383 mac->ops.set_lan_id(hw); 384 385 return IXGBE_SUCCESS; 386} 387 388/** 389 * ixgbe_set_lan_id_multi_port_pcie - Set LAN id for PCIe multiple port devices 390 * @hw: pointer to the HW structure 391 * 392 * Determines the LAN function id by reading memory-mapped registers 393 * and swaps the port value if requested. 394 **/ 395void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw) 396{ 397 struct ixgbe_bus_info *bus = &hw->bus; 398 u32 reg; 399 400 reg = IXGBE_READ_REG(hw, IXGBE_STATUS); 401 bus->func = (reg & IXGBE_STATUS_LAN_ID) >> IXGBE_STATUS_LAN_ID_SHIFT; 402 bus->lan_id = bus->func; 403 404 /* check for a port swap */ 405 reg = IXGBE_READ_REG(hw, IXGBE_FACTPS); 406 if (reg & IXGBE_FACTPS_LFS) 407 bus->func ^= 0x1; 408} 409 410/** 411 * ixgbe_stop_adapter_generic - Generic stop Tx/Rx units 412 * @hw: pointer to hardware structure 413 * 414 * Sets the adapter_stopped flag within ixgbe_hw struct. Clears interrupts, 415 * disables transmit and receive units. The adapter_stopped flag is used by 416 * the shared code and drivers to determine if the adapter is in a stopped 417 * state and should not touch the hardware. 418 **/ 419s32 ixgbe_stop_adapter_generic(struct ixgbe_hw *hw) 420{ 421 u32 number_of_queues; 422 u32 reg_val; 423 u16 i; 424 425 /* 426 * Set the adapter_stopped flag so other driver functions stop touching 427 * the hardware 428 */ 429 hw->adapter_stopped = TRUE; 430 431 /* Disable the receive unit */ 432 reg_val = IXGBE_READ_REG(hw, IXGBE_RXCTRL); 433 reg_val &= ~(IXGBE_RXCTRL_RXEN); 434 IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, reg_val); 435 IXGBE_WRITE_FLUSH(hw); 436 msec_delay(2); 437 438 /* Clear interrupt mask to stop from interrupts being generated */ 439 IXGBE_WRITE_REG(hw, IXGBE_EIMC, IXGBE_IRQ_CLEAR_MASK); 440 441 /* Clear any pending interrupts */ 442 IXGBE_READ_REG(hw, IXGBE_EICR); 443 444 /* Disable the transmit unit. Each queue must be disabled. */ 445 number_of_queues = hw->mac.max_tx_queues; 446 for (i = 0; i < number_of_queues; i++) { 447 reg_val = IXGBE_READ_REG(hw, IXGBE_TXDCTL(i)); 448 if (reg_val & IXGBE_TXDCTL_ENABLE) { 449 reg_val &= ~IXGBE_TXDCTL_ENABLE; 450 IXGBE_WRITE_REG(hw, IXGBE_TXDCTL(i), reg_val); 451 } 452 } 453 454 /* 455 * Prevent the PCI-E bus from from hanging by disabling PCI-E master 456 * access and verify no pending requests 457 */ 458 if (ixgbe_disable_pcie_master(hw) != IXGBE_SUCCESS) 459 DEBUGOUT("PCI-E Master disable polling has failed.\n"); 460 461 return IXGBE_SUCCESS; 462} 463 464/** 465 * ixgbe_led_on_generic - Turns on the software controllable LEDs. 466 * @hw: pointer to hardware structure 467 * @index: led number to turn on 468 **/ 469s32 ixgbe_led_on_generic(struct ixgbe_hw *hw, u32 index) 470{ 471 u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); 472 473 /* To turn on the LED, set mode to ON. */ 474 led_reg &= ~IXGBE_LED_MODE_MASK(index); 475 led_reg |= IXGBE_LED_ON << IXGBE_LED_MODE_SHIFT(index); 476 IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg); 477 IXGBE_WRITE_FLUSH(hw); 478 479 return IXGBE_SUCCESS; 480} 481 482/** 483 * ixgbe_led_off_generic - Turns off the software controllable LEDs. 484 * @hw: pointer to hardware structure 485 * @index: led number to turn off 486 **/ 487s32 ixgbe_led_off_generic(struct ixgbe_hw *hw, u32 index) 488{ 489 u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); 490 491 /* To turn off the LED, set mode to OFF. */ 492 led_reg &= ~IXGBE_LED_MODE_MASK(index); 493 led_reg |= IXGBE_LED_OFF << IXGBE_LED_MODE_SHIFT(index); 494 IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg); 495 IXGBE_WRITE_FLUSH(hw); 496 497 return IXGBE_SUCCESS; 498} 499 500/** 501 * ixgbe_init_eeprom_params_generic - Initialize EEPROM params 502 * @hw: pointer to hardware structure 503 * 504 * Initializes the EEPROM parameters ixgbe_eeprom_info within the 505 * ixgbe_hw struct in order to set up EEPROM access. 506 **/ 507s32 ixgbe_init_eeprom_params_generic(struct ixgbe_hw *hw) 508{ 509 struct ixgbe_eeprom_info *eeprom = &hw->eeprom; 510 u32 eec; 511 u16 eeprom_size; 512 513 if (eeprom->type == ixgbe_eeprom_uninitialized) { 514 eeprom->type = ixgbe_eeprom_none; 515 /* Set default semaphore delay to 10ms which is a well 516 * tested value */ 517 eeprom->semaphore_delay = 10; 518 519 /* 520 * Check for EEPROM present first. 521 * If not present leave as none 522 */ 523 eec = IXGBE_READ_REG(hw, IXGBE_EEC); 524 if (eec & IXGBE_EEC_PRES) { 525 eeprom->type = ixgbe_eeprom_spi; 526 527 /* 528 * SPI EEPROM is assumed here. This code would need to 529 * change if a future EEPROM is not SPI. 530 */ 531 eeprom_size = (u16)((eec & IXGBE_EEC_SIZE) >> 532 IXGBE_EEC_SIZE_SHIFT); 533 eeprom->word_size = 1 << (eeprom_size + 534 IXGBE_EEPROM_WORD_SIZE_SHIFT); 535 } 536 537 if (eec & IXGBE_EEC_ADDR_SIZE) 538 eeprom->address_bits = 16; 539 else 540 eeprom->address_bits = 8; 541 DEBUGOUT3("Eeprom params: type = %d, size = %d, address bits: " 542 "%d\n", eeprom->type, eeprom->word_size, 543 eeprom->address_bits); 544 } 545 546 return IXGBE_SUCCESS; 547} 548 549/** 550 * ixgbe_write_eeprom_generic - Writes 16 bit value to EEPROM 551 * @hw: pointer to hardware structure 552 * @offset: offset within the EEPROM to be written to 553 * @data: 16 bit word to be written to the EEPROM 554 * 555 * If ixgbe_eeprom_update_checksum is not called after this function, the 556 * EEPROM will most likely contain an invalid checksum. 557 **/ 558s32 ixgbe_write_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 data) 559{ 560 s32 status; 561 u8 write_opcode = IXGBE_EEPROM_WRITE_OPCODE_SPI; 562 563 hw->eeprom.ops.init_params(hw); 564 565 if (offset >= hw->eeprom.word_size) { 566 status = IXGBE_ERR_EEPROM; 567 goto out; 568 } 569 570 /* Prepare the EEPROM for writing */ 571 status = ixgbe_acquire_eeprom(hw); 572 573 if (status == IXGBE_SUCCESS) { 574 if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) { 575 ixgbe_release_eeprom(hw); 576 status = IXGBE_ERR_EEPROM; 577 } 578 } 579 580 if (status == IXGBE_SUCCESS) { 581 ixgbe_standby_eeprom(hw); 582 583 /* Send the WRITE ENABLE command (8 bit opcode ) */ 584 ixgbe_shift_out_eeprom_bits(hw, IXGBE_EEPROM_WREN_OPCODE_SPI, 585 IXGBE_EEPROM_OPCODE_BITS); 586 587 ixgbe_standby_eeprom(hw); 588 589 /* 590 * Some SPI eeproms use the 8th address bit embedded in the 591 * opcode 592 */ 593 if ((hw->eeprom.address_bits == 8) && (offset >= 128)) 594 write_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI; 595 596 /* Send the Write command (8-bit opcode + addr) */ 597 ixgbe_shift_out_eeprom_bits(hw, write_opcode, 598 IXGBE_EEPROM_OPCODE_BITS); 599 ixgbe_shift_out_eeprom_bits(hw, (u16)(offset*2), 600 hw->eeprom.address_bits); 601 602 /* Send the data */ 603 data = (data >> 8) | (data << 8); 604 ixgbe_shift_out_eeprom_bits(hw, data, 16); 605 ixgbe_standby_eeprom(hw); 606 607 /* Done with writing - release the EEPROM */ 608 ixgbe_release_eeprom(hw); 609 } 610 611out: 612 return status; 613} 614 615/** 616 * ixgbe_read_eeprom_bit_bang_generic - Read EEPROM word using bit-bang 617 * @hw: pointer to hardware structure 618 * @offset: offset within the EEPROM to be read 619 * @data: read 16 bit value from EEPROM 620 * 621 * Reads 16 bit value from EEPROM through bit-bang method 622 **/ 623s32 ixgbe_read_eeprom_bit_bang_generic(struct ixgbe_hw *hw, u16 offset, 624 u16 *data) 625{ 626 s32 status; 627 u16 word_in; 628 u8 read_opcode = IXGBE_EEPROM_READ_OPCODE_SPI; 629 630 hw->eeprom.ops.init_params(hw); 631 632 if (offset >= hw->eeprom.word_size) { 633 status = IXGBE_ERR_EEPROM; 634 goto out; 635 } 636 637 /* Prepare the EEPROM for reading */ 638 status = ixgbe_acquire_eeprom(hw); 639 640 if (status == IXGBE_SUCCESS) { 641 if (ixgbe_ready_eeprom(hw) != IXGBE_SUCCESS) { 642 ixgbe_release_eeprom(hw); 643 status = IXGBE_ERR_EEPROM; 644 } 645 } 646 647 if (status == IXGBE_SUCCESS) { 648 ixgbe_standby_eeprom(hw); 649 650 /* 651 * Some SPI eeproms use the 8th address bit embedded in the 652 * opcode 653 */ 654 if ((hw->eeprom.address_bits == 8) && (offset >= 128)) 655 read_opcode |= IXGBE_EEPROM_A8_OPCODE_SPI; 656 657 /* Send the READ command (opcode + addr) */ 658 ixgbe_shift_out_eeprom_bits(hw, read_opcode, 659 IXGBE_EEPROM_OPCODE_BITS); 660 ixgbe_shift_out_eeprom_bits(hw, (u16)(offset*2), 661 hw->eeprom.address_bits); 662 663 /* Read the data. */ 664 word_in = ixgbe_shift_in_eeprom_bits(hw, 16); 665 *data = (word_in >> 8) | (word_in << 8); 666 667 /* End this read operation */ 668 ixgbe_release_eeprom(hw); 669 } 670 671out: 672 return status; 673} 674 675/** 676 * ixgbe_read_eeprom_generic - Read EEPROM word using EERD 677 * @hw: pointer to hardware structure 678 * @offset: offset of word in the EEPROM to read 679 * @data: word read from the EEPROM 680 * 681 * Reads a 16 bit word from the EEPROM using the EERD register. 682 **/ 683s32 ixgbe_read_eeprom_generic(struct ixgbe_hw *hw, u16 offset, u16 *data) 684{ 685 u32 eerd; 686 s32 status; 687 688 hw->eeprom.ops.init_params(hw); 689 690 if (offset >= hw->eeprom.word_size) { 691 status = IXGBE_ERR_EEPROM; 692 goto out; 693 } 694 695 eerd = (offset << IXGBE_EEPROM_READ_ADDR_SHIFT) + 696 IXGBE_EEPROM_READ_REG_START; 697 698 IXGBE_WRITE_REG(hw, IXGBE_EERD, eerd); 699 status = ixgbe_poll_eeprom_eerd_done(hw); 700 701 if (status == IXGBE_SUCCESS) 702 *data = (IXGBE_READ_REG(hw, IXGBE_EERD) >> 703 IXGBE_EEPROM_READ_REG_DATA); 704 else 705 DEBUGOUT("Eeprom read timed out\n"); 706 707out: 708 return status; 709} 710 711/** 712 * ixgbe_poll_eeprom_eerd_done - Poll EERD status 713 * @hw: pointer to hardware structure 714 * 715 * Polls the status bit (bit 1) of the EERD to determine when the read is done. 716 **/ 717static s32 ixgbe_poll_eeprom_eerd_done(struct ixgbe_hw *hw) 718{ 719 u32 i; 720 u32 reg; 721 s32 status = IXGBE_ERR_EEPROM; 722 723 for (i = 0; i < IXGBE_EERD_ATTEMPTS; i++) { 724 reg = IXGBE_READ_REG(hw, IXGBE_EERD); 725 if (reg & IXGBE_EEPROM_READ_REG_DONE) { 726 status = IXGBE_SUCCESS; 727 break; 728 } 729 usec_delay(5); 730 } 731 return status; 732} 733 734/** 735 * ixgbe_acquire_eeprom - Acquire EEPROM using bit-bang 736 * @hw: pointer to hardware structure 737 * 738 * Prepares EEPROM for access using bit-bang method. This function should 739 * be called before issuing a command to the EEPROM. 740 **/ 741static s32 ixgbe_acquire_eeprom(struct ixgbe_hw *hw) 742{ 743 s32 status = IXGBE_SUCCESS; 744 u32 eec; 745 u32 i; 746 747 if (ixgbe_acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) != IXGBE_SUCCESS) 748 status = IXGBE_ERR_SWFW_SYNC; 749 750 if (status == IXGBE_SUCCESS) { 751 eec = IXGBE_READ_REG(hw, IXGBE_EEC); 752 753 /* Request EEPROM Access */ 754 eec |= IXGBE_EEC_REQ; 755 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec); 756 757 for (i = 0; i < IXGBE_EEPROM_GRANT_ATTEMPTS; i++) { 758 eec = IXGBE_READ_REG(hw, IXGBE_EEC); 759 if (eec & IXGBE_EEC_GNT) 760 break; 761 usec_delay(5); 762 } 763 764 /* Release if grant not acquired */ 765 if (!(eec & IXGBE_EEC_GNT)) { 766 eec &= ~IXGBE_EEC_REQ; 767 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec); 768 DEBUGOUT("Could not acquire EEPROM grant\n"); 769 770 ixgbe_release_swfw_sync(hw, IXGBE_GSSR_EEP_SM); 771 status = IXGBE_ERR_EEPROM; 772 } 773 } 774 775 /* Setup EEPROM for Read/Write */ 776 if (status == IXGBE_SUCCESS) { 777 /* Clear CS and SK */ 778 eec &= ~(IXGBE_EEC_CS | IXGBE_EEC_SK); 779 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec); 780 IXGBE_WRITE_FLUSH(hw); 781 usec_delay(1); 782 } 783 return status; 784} 785 786/** 787 * ixgbe_get_eeprom_semaphore - Get hardware semaphore 788 * @hw: pointer to hardware structure 789 * 790 * Sets the hardware semaphores so EEPROM access can occur for bit-bang method 791 **/ 792static s32 ixgbe_get_eeprom_semaphore(struct ixgbe_hw *hw) 793{ 794 s32 status = IXGBE_ERR_EEPROM; 795 u32 timeout; 796 u32 i; 797 u32 swsm; 798 799 /* Set timeout value based on size of EEPROM */ 800 timeout = hw->eeprom.word_size + 1; 801 802 /* Get SMBI software semaphore between device drivers first */ 803 for (i = 0; i < timeout; i++) { 804 /* 805 * If the SMBI bit is 0 when we read it, then the bit will be 806 * set and we have the semaphore 807 */ 808 swsm = IXGBE_READ_REG(hw, IXGBE_SWSM); 809 if (!(swsm & IXGBE_SWSM_SMBI)) { 810 status = IXGBE_SUCCESS; 811 break; 812 } 813 usec_delay(50); 814 } 815 816 /* Now get the semaphore between SW/FW through the SWESMBI bit */ 817 if (status == IXGBE_SUCCESS) { 818 for (i = 0; i < timeout; i++) { 819 swsm = IXGBE_READ_REG(hw, IXGBE_SWSM); 820 821 /* Set the SW EEPROM semaphore bit to request access */ 822 swsm |= IXGBE_SWSM_SWESMBI; 823 IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm); 824 825 /* 826 * If we set the bit successfully then we got the 827 * semaphore. 828 */ 829 swsm = IXGBE_READ_REG(hw, IXGBE_SWSM); 830 if (swsm & IXGBE_SWSM_SWESMBI) 831 break; 832 833 usec_delay(50); 834 } 835 836 /* 837 * Release semaphores and return error if SW EEPROM semaphore 838 * was not granted because we don't have access to the EEPROM 839 */ 840 if (i >= timeout) { 841 DEBUGOUT("SWESMBI Software EEPROM semaphore " 842 "not granted.\n"); 843 ixgbe_release_eeprom_semaphore(hw); 844 status = IXGBE_ERR_EEPROM; 845 } 846 } else { 847 DEBUGOUT("Software semaphore SMBI between device drivers " 848 "not granted.\n"); 849 } 850 851 return status; 852} 853 854/** 855 * ixgbe_release_eeprom_semaphore - Release hardware semaphore 856 * @hw: pointer to hardware structure 857 * 858 * This function clears hardware semaphore bits. 859 **/ 860static void ixgbe_release_eeprom_semaphore(struct ixgbe_hw *hw) 861{ 862 u32 swsm; 863 864 swsm = IXGBE_READ_REG(hw, IXGBE_SWSM); 865 866 /* Release both semaphores by writing 0 to the bits SWESMBI and SMBI */ 867 swsm &= ~(IXGBE_SWSM_SWESMBI | IXGBE_SWSM_SMBI); 868 IXGBE_WRITE_REG(hw, IXGBE_SWSM, swsm); 869 IXGBE_WRITE_FLUSH(hw); 870} 871 872/** 873 * ixgbe_ready_eeprom - Polls for EEPROM ready 874 * @hw: pointer to hardware structure 875 **/ 876static s32 ixgbe_ready_eeprom(struct ixgbe_hw *hw) 877{ 878 s32 status = IXGBE_SUCCESS; 879 u16 i; 880 u8 spi_stat_reg; 881 882 /* 883 * Read "Status Register" repeatedly until the LSB is cleared. The 884 * EEPROM will signal that the command has been completed by clearing 885 * bit 0 of the internal status register. If it's not cleared within 886 * 5 milliseconds, then error out. 887 */ 888 for (i = 0; i < IXGBE_EEPROM_MAX_RETRY_SPI; i += 5) { 889 ixgbe_shift_out_eeprom_bits(hw, IXGBE_EEPROM_RDSR_OPCODE_SPI, 890 IXGBE_EEPROM_OPCODE_BITS); 891 spi_stat_reg = (u8)ixgbe_shift_in_eeprom_bits(hw, 8); 892 if (!(spi_stat_reg & IXGBE_EEPROM_STATUS_RDY_SPI)) 893 break; 894 895 usec_delay(5); 896 ixgbe_standby_eeprom(hw); 897 }; 898 899 /* 900 * On some parts, SPI write time could vary from 0-20mSec on 3.3V 901 * devices (and only 0-5mSec on 5V devices) 902 */ 903 if (i >= IXGBE_EEPROM_MAX_RETRY_SPI) { 904 DEBUGOUT("SPI EEPROM Status error\n"); 905 status = IXGBE_ERR_EEPROM; 906 } 907 908 return status; 909} 910 911/** 912 * ixgbe_standby_eeprom - Returns EEPROM to a "standby" state 913 * @hw: pointer to hardware structure 914 **/ 915static void ixgbe_standby_eeprom(struct ixgbe_hw *hw) 916{ 917 u32 eec; 918 919 eec = IXGBE_READ_REG(hw, IXGBE_EEC); 920 921 /* Toggle CS to flush commands */ 922 eec |= IXGBE_EEC_CS; 923 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec); 924 IXGBE_WRITE_FLUSH(hw); 925 usec_delay(1); 926 eec &= ~IXGBE_EEC_CS; 927 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec); 928 IXGBE_WRITE_FLUSH(hw); 929 usec_delay(1); 930} 931 932/** 933 * ixgbe_shift_out_eeprom_bits - Shift data bits out to the EEPROM. 934 * @hw: pointer to hardware structure 935 * @data: data to send to the EEPROM 936 * @count: number of bits to shift out 937 **/ 938static void ixgbe_shift_out_eeprom_bits(struct ixgbe_hw *hw, u16 data, 939 u16 count) 940{ 941 u32 eec; 942 u32 mask; 943 u32 i; 944 945 eec = IXGBE_READ_REG(hw, IXGBE_EEC); 946 947 /* 948 * Mask is used to shift "count" bits of "data" out to the EEPROM 949 * one bit at a time. Determine the starting bit based on count 950 */ 951 mask = 0x01 << (count - 1); 952 953 for (i = 0; i < count; i++) { 954 /* 955 * A "1" is shifted out to the EEPROM by setting bit "DI" to a 956 * "1", and then raising and then lowering the clock (the SK 957 * bit controls the clock input to the EEPROM). A "0" is 958 * shifted out to the EEPROM by setting "DI" to "0" and then 959 * raising and then lowering the clock. 960 */ 961 if (data & mask) 962 eec |= IXGBE_EEC_DI; 963 else 964 eec &= ~IXGBE_EEC_DI; 965 966 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec); 967 IXGBE_WRITE_FLUSH(hw); 968 969 usec_delay(1); 970 971 ixgbe_raise_eeprom_clk(hw, &eec); 972 ixgbe_lower_eeprom_clk(hw, &eec); 973 974 /* 975 * Shift mask to signify next bit of data to shift in to the 976 * EEPROM 977 */ 978 mask = mask >> 1; 979 }; 980 981 /* We leave the "DI" bit set to "0" when we leave this routine. */ 982 eec &= ~IXGBE_EEC_DI; 983 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec); 984 IXGBE_WRITE_FLUSH(hw); 985} 986 987/** 988 * ixgbe_shift_in_eeprom_bits - Shift data bits in from the EEPROM 989 * @hw: pointer to hardware structure 990 **/ 991static u16 ixgbe_shift_in_eeprom_bits(struct ixgbe_hw *hw, u16 count) 992{ 993 u32 eec; 994 u32 i; 995 u16 data = 0; 996 997 /* 998 * In order to read a register from the EEPROM, we need to shift 999 * 'count' bits in from the EEPROM. Bits are "shifted in" by raising 1000 * the clock input to the EEPROM (setting the SK bit), and then reading 1001 * the value of the "DO" bit. During this "shifting in" process the 1002 * "DI" bit should always be clear. 1003 */ 1004 eec = IXGBE_READ_REG(hw, IXGBE_EEC); 1005 1006 eec &= ~(IXGBE_EEC_DO | IXGBE_EEC_DI); 1007 1008 for (i = 0; i < count; i++) { 1009 data = data << 1; 1010 ixgbe_raise_eeprom_clk(hw, &eec); 1011 1012 eec = IXGBE_READ_REG(hw, IXGBE_EEC); 1013 1014 eec &= ~(IXGBE_EEC_DI); 1015 if (eec & IXGBE_EEC_DO) 1016 data |= 1; 1017 1018 ixgbe_lower_eeprom_clk(hw, &eec); 1019 } 1020 1021 return data; 1022} 1023 1024/** 1025 * ixgbe_raise_eeprom_clk - Raises the EEPROM's clock input. 1026 * @hw: pointer to hardware structure 1027 * @eec: EEC register's current value 1028 **/ 1029static void ixgbe_raise_eeprom_clk(struct ixgbe_hw *hw, u32 *eec) 1030{ 1031 /* 1032 * Raise the clock input to the EEPROM 1033 * (setting the SK bit), then delay 1034 */ 1035 *eec = *eec | IXGBE_EEC_SK; 1036 IXGBE_WRITE_REG(hw, IXGBE_EEC, *eec); 1037 IXGBE_WRITE_FLUSH(hw); 1038 usec_delay(1); 1039} 1040 1041/** 1042 * ixgbe_lower_eeprom_clk - Lowers the EEPROM's clock input. 1043 * @hw: pointer to hardware structure 1044 * @eecd: EECD's current value 1045 **/ 1046static void ixgbe_lower_eeprom_clk(struct ixgbe_hw *hw, u32 *eec) 1047{ 1048 /* 1049 * Lower the clock input to the EEPROM (clearing the SK bit), then 1050 * delay 1051 */ 1052 *eec = *eec & ~IXGBE_EEC_SK; 1053 IXGBE_WRITE_REG(hw, IXGBE_EEC, *eec); 1054 IXGBE_WRITE_FLUSH(hw); 1055 usec_delay(1); 1056} 1057 1058/** 1059 * ixgbe_release_eeprom - Release EEPROM, release semaphores 1060 * @hw: pointer to hardware structure 1061 **/ 1062static void ixgbe_release_eeprom(struct ixgbe_hw *hw) 1063{ 1064 u32 eec; 1065 1066 eec = IXGBE_READ_REG(hw, IXGBE_EEC); 1067 1068 eec |= IXGBE_EEC_CS; /* Pull CS high */ 1069 eec &= ~IXGBE_EEC_SK; /* Lower SCK */ 1070 1071 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec); 1072 IXGBE_WRITE_FLUSH(hw); 1073 1074 usec_delay(1); 1075 1076 /* Stop requesting EEPROM access */ 1077 eec &= ~IXGBE_EEC_REQ; 1078 IXGBE_WRITE_REG(hw, IXGBE_EEC, eec); 1079 1080 ixgbe_release_swfw_sync(hw, IXGBE_GSSR_EEP_SM); 1081} 1082 1083/** 1084 * ixgbe_calc_eeprom_checksum - Calculates and returns the checksum 1085 * @hw: pointer to hardware structure 1086 **/ 1087static u16 ixgbe_calc_eeprom_checksum(struct ixgbe_hw *hw) 1088{ 1089 u16 i; 1090 u16 j; 1091 u16 checksum = 0; 1092 u16 length = 0; 1093 u16 pointer = 0; 1094 u16 word = 0; 1095 1096 /* Include 0x0-0x3F in the checksum */ 1097 for (i = 0; i < IXGBE_EEPROM_CHECKSUM; i++) { 1098 if (hw->eeprom.ops.read(hw, i, &word) != IXGBE_SUCCESS) { 1099 DEBUGOUT("EEPROM read failed\n"); 1100 break; 1101 } 1102 checksum += word; 1103 } 1104 1105 /* Include all data from pointers except for the fw pointer */ 1106 for (i = IXGBE_PCIE_ANALOG_PTR; i < IXGBE_FW_PTR; i++) { 1107 hw->eeprom.ops.read(hw, i, &pointer); 1108 1109 /* Make sure the pointer seems valid */ 1110 if (pointer != 0xFFFF && pointer != 0) { 1111 hw->eeprom.ops.read(hw, pointer, &length); 1112 1113 if (length != 0xFFFF && length != 0) { 1114 for (j = pointer+1; j <= pointer+length; j++) { 1115 hw->eeprom.ops.read(hw, j, &word); 1116 checksum += word; 1117 } 1118 } 1119 } 1120 } 1121 1122 checksum = (u16)IXGBE_EEPROM_SUM - checksum; 1123 1124 return checksum; 1125} 1126 1127/** 1128 * ixgbe_validate_eeprom_checksum_generic - Validate EEPROM checksum 1129 * @hw: pointer to hardware structure 1130 * @checksum_val: calculated checksum 1131 * 1132 * Performs checksum calculation and validates the EEPROM checksum. If the 1133 * caller does not need checksum_val, the value can be NULL. 1134 **/ 1135s32 ixgbe_validate_eeprom_checksum_generic(struct ixgbe_hw *hw, 1136 u16 *checksum_val) 1137{ 1138 s32 status; 1139 u16 checksum; 1140 u16 read_checksum = 0; 1141 1142 /* 1143 * Read the first word from the EEPROM. If this times out or fails, do 1144 * not continue or we could be in for a very long wait while every 1145 * EEPROM read fails 1146 */ 1147 status = hw->eeprom.ops.read(hw, 0, &checksum); 1148 1149 if (status == IXGBE_SUCCESS) { 1150 checksum = ixgbe_calc_eeprom_checksum(hw); 1151 1152 hw->eeprom.ops.read(hw, IXGBE_EEPROM_CHECKSUM, &read_checksum); 1153 1154 /* 1155 * Verify read checksum from EEPROM is the same as 1156 * calculated checksum 1157 */ 1158 if (read_checksum != checksum) 1159 status = IXGBE_ERR_EEPROM_CHECKSUM; 1160 1161 /* If the user cares, return the calculated checksum */ 1162 if (checksum_val) 1163 *checksum_val = checksum; 1164 } else { 1165 DEBUGOUT("EEPROM read failed\n"); 1166 } 1167 1168 return status; 1169} 1170 1171/** 1172 * ixgbe_update_eeprom_checksum_generic - Updates the EEPROM checksum 1173 * @hw: pointer to hardware structure 1174 **/ 1175s32 ixgbe_update_eeprom_checksum_generic(struct ixgbe_hw *hw) 1176{ 1177 s32 status; 1178 u16 checksum; 1179 1180 /* 1181 * Read the first word from the EEPROM. If this times out or fails, do 1182 * not continue or we could be in for a very long wait while every 1183 * EEPROM read fails 1184 */ 1185 status = hw->eeprom.ops.read(hw, 0, &checksum); 1186 1187 if (status == IXGBE_SUCCESS) { 1188 checksum = ixgbe_calc_eeprom_checksum(hw); 1189 status = hw->eeprom.ops.write(hw, IXGBE_EEPROM_CHECKSUM, 1190 checksum); 1191 } else { 1192 DEBUGOUT("EEPROM read failed\n"); 1193 } 1194 1195 return status; 1196} 1197 1198/** 1199 * ixgbe_validate_mac_addr - Validate MAC address 1200 * @mac_addr: pointer to MAC address. 1201 * 1202 * Tests a MAC address to ensure it is a valid Individual Address 1203 **/ 1204s32 ixgbe_validate_mac_addr(u8 *mac_addr) 1205{ 1206 s32 status = IXGBE_SUCCESS; 1207 1208 /* Make sure it is not a multicast address */ 1209 if (IXGBE_IS_MULTICAST(mac_addr)) { 1210 DEBUGOUT("MAC address is multicast\n"); 1211 status = IXGBE_ERR_INVALID_MAC_ADDR; 1212 /* Not a broadcast address */ 1213 } else if (IXGBE_IS_BROADCAST(mac_addr)) { 1214 DEBUGOUT("MAC address is broadcast\n"); 1215 status = IXGBE_ERR_INVALID_MAC_ADDR; 1216 /* Reject the zero address */ 1217 } else if (mac_addr[0] == 0 && mac_addr[1] == 0 && mac_addr[2] == 0 && 1218 mac_addr[3] == 0 && mac_addr[4] == 0 && mac_addr[5] == 0) { 1219 DEBUGOUT("MAC address is all zeros\n"); 1220 status = IXGBE_ERR_INVALID_MAC_ADDR; 1221 } 1222 return status; 1223} 1224 1225/** 1226 * ixgbe_set_rar_generic - Set Rx address register 1227 * @hw: pointer to hardware structure 1228 * @index: Receive address register to write 1229 * @addr: Address to put into receive address register 1230 * @vmdq: VMDq "set" or "pool" index 1231 * @enable_addr: set flag that address is active 1232 * 1233 * Puts an ethernet address into a receive address register. 1234 **/ 1235s32 ixgbe_set_rar_generic(struct ixgbe_hw *hw, u32 index, u8 *addr, u32 vmdq, 1236 u32 enable_addr) 1237{ 1238 u32 rar_low, rar_high; 1239 u32 rar_entries = hw->mac.num_rar_entries; 1240 1241 /* setup VMDq pool selection before this RAR gets enabled */ 1242 hw->mac.ops.set_vmdq(hw, index, vmdq); 1243 1244 /* Make sure we are using a valid rar index range */ 1245 if (index < rar_entries) { 1246 /* 1247 * HW expects these in little endian so we reverse the byte 1248 * order from network order (big endian) to little endian 1249 */ 1250 rar_low = ((u32)addr[0] | 1251 ((u32)addr[1] << 8) | 1252 ((u32)addr[2] << 16) | 1253 ((u32)addr[3] << 24)); 1254 /* 1255 * Some parts put the VMDq setting in the extra RAH bits, 1256 * so save everything except the lower 16 bits that hold part 1257 * of the address and the address valid bit. 1258 */ 1259 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index)); 1260 rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV); 1261 rar_high |= ((u32)addr[4] | ((u32)addr[5] << 8)); 1262 1263 if (enable_addr != 0) 1264 rar_high |= IXGBE_RAH_AV; 1265 1266 IXGBE_WRITE_REG(hw, IXGBE_RAL(index), rar_low); 1267 IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high); 1268 } else { 1269 DEBUGOUT1("RAR index %d is out of range.\n", index); 1270 } 1271 1272 return IXGBE_SUCCESS; 1273} 1274 1275/** 1276 * ixgbe_clear_rar_generic - Remove Rx address register 1277 * @hw: pointer to hardware structure 1278 * @index: Receive address register to write 1279 * 1280 * Clears an ethernet address from a receive address register. 1281 **/ 1282s32 ixgbe_clear_rar_generic(struct ixgbe_hw *hw, u32 index) 1283{ 1284 u32 rar_high; 1285 u32 rar_entries = hw->mac.num_rar_entries; 1286 1287 /* Make sure we are using a valid rar index range */ 1288 if (index < rar_entries) { 1289 /* 1290 * Some parts put the VMDq setting in the extra RAH bits, 1291 * so save everything except the lower 16 bits that hold part 1292 * of the address and the address valid bit. 1293 */ 1294 rar_high = IXGBE_READ_REG(hw, IXGBE_RAH(index)); 1295 rar_high &= ~(0x0000FFFF | IXGBE_RAH_AV); 1296 1297 IXGBE_WRITE_REG(hw, IXGBE_RAL(index), 0); 1298 IXGBE_WRITE_REG(hw, IXGBE_RAH(index), rar_high); 1299 } else { 1300 DEBUGOUT1("RAR index %d is out of range.\n", index); 1301 } 1302 1303 /* clear VMDq pool/queue selection for this RAR */ 1304 hw->mac.ops.clear_vmdq(hw, index, IXGBE_CLEAR_VMDQ_ALL); 1305 1306 return IXGBE_SUCCESS; 1307} 1308 1309/** 1310 * ixgbe_init_rx_addrs_generic - Initializes receive address filters. 1311 * @hw: pointer to hardware structure 1312 * 1313 * Places the MAC address in receive address register 0 and clears the rest 1314 * of the receive address registers. Clears the multicast table. Assumes 1315 * the receiver is in reset when the routine is called. 1316 **/ 1317s32 ixgbe_init_rx_addrs_generic(struct ixgbe_hw *hw) 1318{ 1319 u32 i; 1320 u32 rar_entries = hw->mac.num_rar_entries; 1321 1322 /* 1323 * If the current mac address is valid, assume it is a software override 1324 * to the permanent address. 1325 * Otherwise, use the permanent address from the eeprom. 1326 */ 1327 if (ixgbe_validate_mac_addr(hw->mac.addr) == 1328 IXGBE_ERR_INVALID_MAC_ADDR) { 1329 /* Get the MAC address from the RAR0 for later reference */ 1330 hw->mac.ops.get_mac_addr(hw, hw->mac.addr); 1331 1332 DEBUGOUT3(" Keeping Current RAR0 Addr =%.2X %.2X %.2X ", 1333 hw->mac.addr[0], hw->mac.addr[1], 1334 hw->mac.addr[2]); 1335 DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3], 1336 hw->mac.addr[4], hw->mac.addr[5]); 1337 } else { 1338 /* Setup the receive address. */ 1339 DEBUGOUT("Overriding MAC Address in RAR[0]\n"); 1340 DEBUGOUT3(" New MAC Addr =%.2X %.2X %.2X ", 1341 hw->mac.addr[0], hw->mac.addr[1], 1342 hw->mac.addr[2]); 1343 DEBUGOUT3("%.2X %.2X %.2X\n", hw->mac.addr[3], 1344 hw->mac.addr[4], hw->mac.addr[5]); 1345 1346 hw->mac.ops.set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV); 1347 } 1348 hw->addr_ctrl.overflow_promisc = 0; 1349 1350 hw->addr_ctrl.rar_used_count = 1; 1351 1352 /* Zero out the other receive addresses. */ 1353 DEBUGOUT1("Clearing RAR[1-%d]\n", rar_entries - 1); 1354 for (i = 1; i < rar_entries; i++) { 1355 IXGBE_WRITE_REG(hw, IXGBE_RAL(i), 0); 1356 IXGBE_WRITE_REG(hw, IXGBE_RAH(i), 0); 1357 } 1358 1359 /* Clear the MTA */ 1360 hw->addr_ctrl.mta_in_use = 0; 1361 IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type); 1362 1363 DEBUGOUT(" Clearing MTA\n"); 1364 for (i = 0; i < hw->mac.mcft_size; i++) 1365 IXGBE_WRITE_REG(hw, IXGBE_MTA(i), 0); 1366 1367 ixgbe_init_uta_tables(hw); 1368 1369 return IXGBE_SUCCESS; 1370} 1371 1372/** 1373 * ixgbe_add_uc_addr - Adds a secondary unicast address. 1374 * @hw: pointer to hardware structure 1375 * @addr: new address 1376 * 1377 * Adds it to unused receive address register or goes into promiscuous mode. 1378 **/ 1379void ixgbe_add_uc_addr(struct ixgbe_hw *hw, u8 *addr, u32 vmdq) 1380{ 1381 u32 rar_entries = hw->mac.num_rar_entries; 1382 u32 rar; 1383 1384 DEBUGOUT6(" UC Addr = %.2X %.2X %.2X %.2X %.2X %.2X\n", 1385 addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); 1386 1387 /* 1388 * Place this address in the RAR if there is room, 1389 * else put the controller into promiscuous mode 1390 */ 1391 if (hw->addr_ctrl.rar_used_count < rar_entries) { 1392 rar = hw->addr_ctrl.rar_used_count; 1393 hw->mac.ops.set_rar(hw, rar, addr, vmdq, IXGBE_RAH_AV); 1394 DEBUGOUT1("Added a secondary address to RAR[%d]\n", rar); 1395 hw->addr_ctrl.rar_used_count++; 1396 } else { 1397 hw->addr_ctrl.overflow_promisc++; 1398 } 1399 1400 DEBUGOUT("ixgbe_add_uc_addr Complete\n"); 1401} 1402 1403/** 1404 * ixgbe_update_uc_addr_list_generic - Updates MAC list of secondary addresses 1405 * @hw: pointer to hardware structure 1406 * @addr_list: the list of new addresses 1407 * @addr_count: number of addresses 1408 * @next: iterator function to walk the address list 1409 * 1410 * The given list replaces any existing list. Clears the secondary addrs from 1411 * receive address registers. Uses unused receive address registers for the 1412 * first secondary addresses, and falls back to promiscuous mode as needed. 1413 * 1414 * Drivers using secondary unicast addresses must set user_set_promisc when 1415 * manually putting the device into promiscuous mode. 1416 **/ 1417s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, u8 *addr_list, 1418 u32 addr_count, ixgbe_mc_addr_itr next) 1419{ 1420 u8 *addr; 1421 u32 i; 1422 u32 old_promisc_setting = hw->addr_ctrl.overflow_promisc; 1423 u32 uc_addr_in_use; 1424 u32 fctrl; 1425 u32 vmdq; 1426 1427 /* 1428 * Clear accounting of old secondary address list, 1429 * don't count RAR[0] 1430 */ 1431 uc_addr_in_use = hw->addr_ctrl.rar_used_count - 1; 1432 hw->addr_ctrl.rar_used_count -= uc_addr_in_use; 1433 hw->addr_ctrl.overflow_promisc = 0; 1434 1435 /* Zero out the other receive addresses */ 1436 DEBUGOUT1("Clearing RAR[1-%d]\n", hw->addr_ctrl.rar_used_count); 1437 for (i = 1; i <= hw->addr_ctrl.rar_used_count; i++) { 1438 IXGBE_WRITE_REG(hw, IXGBE_RAL(i), 0); 1439 IXGBE_WRITE_REG(hw, IXGBE_RAH(i), 0); 1440 } 1441 1442 /* Add the new addresses */ 1443 for (i = 0; i < addr_count; i++) { 1444 DEBUGOUT(" Adding the secondary addresses:\n"); 1445 addr = next(hw, &addr_list, &vmdq); 1446 ixgbe_add_uc_addr(hw, addr, vmdq); 1447 } 1448 1449 if (hw->addr_ctrl.overflow_promisc) { 1450 /* enable promisc if not already in overflow or set by user */ 1451 if (!old_promisc_setting && !hw->addr_ctrl.user_set_promisc) { 1452 DEBUGOUT(" Entering address overflow promisc mode\n"); 1453 fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL); 1454 fctrl |= IXGBE_FCTRL_UPE; 1455 IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl); 1456 } 1457 } else { 1458 /* only disable if set by overflow, not by user */ 1459 if (old_promisc_setting && !hw->addr_ctrl.user_set_promisc) { 1460 DEBUGOUT(" Leaving address overflow promisc mode\n"); 1461 fctrl = IXGBE_READ_REG(hw, IXGBE_FCTRL); 1462 fctrl &= ~IXGBE_FCTRL_UPE; 1463 IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl); 1464 } 1465 } 1466 1467 DEBUGOUT("ixgbe_update_uc_addr_list_generic Complete\n"); 1468 return IXGBE_SUCCESS; 1469} 1470 1471/** 1472 * ixgbe_mta_vector - Determines bit-vector in multicast table to set 1473 * @hw: pointer to hardware structure 1474 * @mc_addr: the multicast address 1475 * 1476 * Extracts the 12 bits, from a multicast address, to determine which 1477 * bit-vector to set in the multicast table. The hardware uses 12 bits, from 1478 * incoming rx multicast addresses, to determine the bit-vector to check in 1479 * the MTA. Which of the 4 combination, of 12-bits, the hardware uses is set 1480 * by the MO field of the MCSTCTRL. The MO field is set during initialization 1481 * to mc_filter_type. 1482 **/ 1483static s32 ixgbe_mta_vector(struct ixgbe_hw *hw, u8 *mc_addr) 1484{ 1485 u32 vector = 0; 1486 1487 switch (hw->mac.mc_filter_type) { 1488 case 0: /* use bits [47:36] of the address */ 1489 vector = ((mc_addr[4] >> 4) | (((u16)mc_addr[5]) << 4)); 1490 break; 1491 case 1: /* use bits [46:35] of the address */ 1492 vector = ((mc_addr[4] >> 3) | (((u16)mc_addr[5]) << 5)); 1493 break; 1494 case 2: /* use bits [45:34] of the address */ 1495 vector = ((mc_addr[4] >> 2) | (((u16)mc_addr[5]) << 6)); 1496 break; 1497 case 3: /* use bits [43:32] of the address */ 1498 vector = ((mc_addr[4]) | (((u16)mc_addr[5]) << 8)); 1499 break; 1500 default: /* Invalid mc_filter_type */ 1501 DEBUGOUT("MC filter type param set incorrectly\n"); 1502 ASSERT(0); 1503 break; 1504 } 1505 1506 /* vector can only be 12-bits or boundary will be exceeded */ 1507 vector &= 0xFFF; 1508 return vector; 1509} 1510 1511/** 1512 * ixgbe_set_mta - Set bit-vector in multicast table 1513 * @hw: pointer to hardware structure 1514 * @hash_value: Multicast address hash value 1515 * 1516 * Sets the bit-vector in the multicast table. 1517 **/ 1518void ixgbe_set_mta(struct ixgbe_hw *hw, u8 *mc_addr) 1519{ 1520 u32 vector; 1521 u32 vector_bit; 1522 u32 vector_reg; 1523 u32 mta_reg; 1524 1525 hw->addr_ctrl.mta_in_use++; 1526 1527 vector = ixgbe_mta_vector(hw, mc_addr); 1528 DEBUGOUT1(" bit-vector = 0x%03X\n", vector); 1529 1530 /* 1531 * The MTA is a register array of 128 32-bit registers. It is treated 1532 * like an array of 4096 bits. We want to set bit 1533 * BitArray[vector_value]. So we figure out what register the bit is 1534 * in, read it, OR in the new bit, then write back the new value. The 1535 * register is determined by the upper 7 bits of the vector value and 1536 * the bit within that register are determined by the lower 5 bits of 1537 * the value. 1538 */ 1539 vector_reg = (vector >> 5) & 0x7F; 1540 vector_bit = vector & 0x1F; 1541 mta_reg = IXGBE_READ_REG(hw, IXGBE_MTA(vector_reg)); 1542 mta_reg |= (1 << vector_bit); 1543 IXGBE_WRITE_REG(hw, IXGBE_MTA(vector_reg), mta_reg); 1544} 1545 1546/** 1547 * ixgbe_update_mc_addr_list_generic - Updates MAC list of multicast addresses 1548 * @hw: pointer to hardware structure 1549 * @mc_addr_list: the list of new multicast addresses 1550 * @mc_addr_count: number of addresses 1551 * @next: iterator function to walk the multicast address list 1552 * 1553 * The given list replaces any existing list. Clears the MC addrs from receive 1554 * address registers and the multicast table. Uses unused receive address 1555 * registers for the first multicast addresses, and hashes the rest into the 1556 * multicast table. 1557 **/ 1558s32 ixgbe_update_mc_addr_list_generic(struct ixgbe_hw *hw, u8 *mc_addr_list, 1559 u32 mc_addr_count, ixgbe_mc_addr_itr next) 1560{ 1561 u32 i; 1562 u32 vmdq; 1563 1564 /* 1565 * Set the new number of MC addresses that we are being requested to 1566 * use. 1567 */ 1568 hw->addr_ctrl.num_mc_addrs = mc_addr_count; 1569 hw->addr_ctrl.mta_in_use = 0; 1570 1571 /* Clear the MTA */ 1572 DEBUGOUT(" Clearing MTA\n"); 1573 for (i = 0; i < hw->mac.mcft_size; i++) 1574 IXGBE_WRITE_REG(hw, IXGBE_MTA(i), 0); 1575 1576 /* Add the new addresses */ 1577 for (i = 0; i < mc_addr_count; i++) { 1578 DEBUGOUT(" Adding the multicast addresses:\n"); 1579 ixgbe_set_mta(hw, next(hw, &mc_addr_list, &vmdq)); 1580 } 1581 1582 /* Enable mta */ 1583 if (hw->addr_ctrl.mta_in_use > 0) 1584 IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, 1585 IXGBE_MCSTCTRL_MFE | hw->mac.mc_filter_type); 1586 1587 DEBUGOUT("ixgbe_update_mc_addr_list_generic Complete\n"); 1588 return IXGBE_SUCCESS; 1589} 1590 1591/** 1592 * ixgbe_enable_mc_generic - Enable multicast address in RAR 1593 * @hw: pointer to hardware structure 1594 * 1595 * Enables multicast address in RAR and the use of the multicast hash table. 1596 **/ 1597s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw) 1598{ 1599 struct ixgbe_addr_filter_info *a = &hw->addr_ctrl; 1600 1601 if (a->mta_in_use > 0) 1602 IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, IXGBE_MCSTCTRL_MFE | 1603 hw->mac.mc_filter_type); 1604 1605 return IXGBE_SUCCESS; 1606} 1607 1608/** 1609 * ixgbe_disable_mc_generic - Disable multicast address in RAR 1610 * @hw: pointer to hardware structure 1611 * 1612 * Disables multicast address in RAR and the use of the multicast hash table. 1613 **/ 1614s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw) 1615{ 1616 struct ixgbe_addr_filter_info *a = &hw->addr_ctrl; 1617 1618 if (a->mta_in_use > 0) 1619 IXGBE_WRITE_REG(hw, IXGBE_MCSTCTRL, hw->mac.mc_filter_type); 1620 1621 return IXGBE_SUCCESS; 1622} 1623 1624/** 1625 * ixgbe_fc_enable_generic - Enable flow control 1626 * @hw: pointer to hardware structure 1627 * @packetbuf_num: packet buffer number (0-7) 1628 * 1629 * Enable flow control according to the current settings. 1630 **/ 1631s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num) 1632{ 1633 s32 ret_val = IXGBE_SUCCESS; 1634 u32 mflcn_reg, fccfg_reg; 1635 u32 reg; 1636 1637 DEBUGFUNC("ixgbe_fc_enable_generic"); 1638 1639 /* Negotiate the fc mode to use */ 1640 ret_val = ixgbe_fc_autoneg(hw); 1641 if (ret_val) 1642 goto out; 1643 1644 /* Disable any previous flow control settings */ 1645 mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN); 1646 mflcn_reg &= ~(IXGBE_MFLCN_RFCE | IXGBE_MFLCN_RPFCE); 1647 1648 fccfg_reg = IXGBE_READ_REG(hw, IXGBE_FCCFG); 1649 fccfg_reg &= ~(IXGBE_FCCFG_TFCE_802_3X | IXGBE_FCCFG_TFCE_PRIORITY); 1650 1651 /* 1652 * The possible values of fc.current_mode are: 1653 * 0: Flow control is completely disabled 1654 * 1: Rx flow control is enabled (we can receive pause frames, 1655 * but not send pause frames). 1656 * 2: Tx flow control is enabled (we can send pause frames but 1657 * we do not support receiving pause frames). 1658 * 3: Both Rx and Tx flow control (symmetric) are enabled. 1659 * other: Invalid. 1660 */ 1661 switch (hw->fc.current_mode) { 1662 case ixgbe_fc_none: 1663 /* Flow control is disabled by software override or autoneg. 1664 * The code below will actually disable it in the HW. 1665 */ 1666 break; 1667 case ixgbe_fc_rx_pause: 1668 /* 1669 * Rx Flow control is enabled and Tx Flow control is 1670 * disabled by software override. Since there really 1671 * isn't a way to advertise that we are capable of RX 1672 * Pause ONLY, we will advertise that we support both 1673 * symmetric and asymmetric Rx PAUSE. Later, we will 1674 * disable the adapter's ability to send PAUSE frames. 1675 */ 1676 mflcn_reg |= IXGBE_MFLCN_RFCE; 1677 break; 1678 case ixgbe_fc_tx_pause: 1679 /* 1680 * Tx Flow control is enabled, and Rx Flow control is 1681 * disabled by software override. 1682 */ 1683 fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X; 1684 break; 1685 case ixgbe_fc_full: 1686 /* Flow control (both Rx and Tx) is enabled by SW override. */ 1687 mflcn_reg |= IXGBE_MFLCN_RFCE; 1688 fccfg_reg |= IXGBE_FCCFG_TFCE_802_3X; 1689 break; 1690 default: 1691 DEBUGOUT("Flow control param set incorrectly\n"); 1692 ret_val = -IXGBE_ERR_CONFIG; 1693 goto out; 1694 break; 1695 } 1696 1697 /* Set 802.3x based flow control settings. */ 1698 mflcn_reg |= IXGBE_MFLCN_DPF; 1699 IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn_reg); 1700 IXGBE_WRITE_REG(hw, IXGBE_FCCFG, fccfg_reg); 1701 1702 /* Set up and enable Rx high/low water mark thresholds, enable XON. */ 1703 if (hw->fc.current_mode & ixgbe_fc_tx_pause) { 1704 if (hw->fc.send_xon) { 1705 IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(packetbuf_num), 1706 (hw->fc.low_water | IXGBE_FCRTL_XONE)); 1707 } else { 1708 IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(packetbuf_num), 1709 hw->fc.low_water); 1710 } 1711 1712 IXGBE_WRITE_REG(hw, IXGBE_FCRTH_82599(packetbuf_num), 1713 (hw->fc.high_water | IXGBE_FCRTH_FCEN)); 1714 } 1715 1716 /* Configure pause time (2 TCs per register) */ 1717 reg = IXGBE_READ_REG(hw, IXGBE_FCTTV(packetbuf_num)); 1718 if ((packetbuf_num & 1) == 0) 1719 reg = (reg & 0xFFFF0000) | hw->fc.pause_time; 1720 else 1721 reg = (reg & 0x0000FFFF) | (hw->fc.pause_time << 16); 1722 IXGBE_WRITE_REG(hw, IXGBE_FCTTV(packetbuf_num / 2), reg); 1723 1724 IXGBE_WRITE_REG(hw, IXGBE_FCRTV, (hw->fc.pause_time >> 1)); 1725 1726out: 1727 return ret_val; 1728} 1729 1730/** 1731 * ixgbe_fc_autoneg - Configure flow control 1732 * @hw: pointer to hardware structure 1733 * 1734 * Compares our advertised flow control capabilities to those advertised by 1735 * our link partner, and determines the proper flow control mode to use. 1736 **/ 1737s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw) 1738{ 1739 s32 ret_val = IXGBE_SUCCESS; 1740 ixgbe_link_speed speed; 1741 u32 pcs_anadv_reg, pcs_lpab_reg, linkstat; 1742 bool link_up; 1743 1744 DEBUGFUNC("ixgbe_fc_autoneg"); 1745 1746 /* 1747 * AN should have completed when the cable was plugged in. 1748 * Look for reasons to bail out. Bail out if: 1749 * - FC autoneg is disabled, or if 1750 * - we don't have multispeed fiber, or if 1751 * - we're not running at 1G, or if 1752 * - link is not up, or if 1753 * - link is up but AN did not complete, or if 1754 * - link is up and AN completed but timed out 1755 * 1756 * Since we're being called from an LSC, link is already know to be up. 1757 * So use link_up_wait_to_complete=FALSE. 1758 */ 1759 hw->mac.ops.check_link(hw, &speed, &link_up, FALSE); 1760 linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA); 1761 1762 if (hw->fc.disable_fc_autoneg || 1763 !hw->phy.multispeed_fiber || 1764 (speed != IXGBE_LINK_SPEED_1GB_FULL) || 1765 !link_up || 1766 ((linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) || 1767 ((linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) { 1768 hw->fc.fc_was_autonegged = FALSE; 1769 hw->fc.current_mode = hw->fc.requested_mode; 1770 DEBUGOUT("Autoneg FC was skipped.\n"); 1771 goto out; 1772 } 1773 1774 /* 1775 * Read the AN advertisement and LP ability registers and resolve 1776 * local flow control settings accordingly 1777 */ 1778 pcs_anadv_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA); 1779 pcs_lpab_reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANLP); 1780 if ((pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) && 1781 (pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE)) { 1782 /* 1783 * Now we need to check if the user selected Rx ONLY 1784 * of pause frames. In this case, we had to advertise 1785 * FULL flow control because we could not advertise RX 1786 * ONLY. Hence, we must now check to see if we need to 1787 * turn OFF the TRANSMISSION of PAUSE frames. 1788 */ 1789 if (hw->fc.requested_mode == ixgbe_fc_full) { 1790 hw->fc.current_mode = ixgbe_fc_full; 1791 DEBUGOUT("Flow Control = FULL.\n"); 1792 } else { 1793 hw->fc.current_mode = ixgbe_fc_rx_pause; 1794 DEBUGOUT("Flow Control = RX PAUSE frames only.\n"); 1795 } 1796 } else if (!(pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) && 1797 (pcs_anadv_reg & IXGBE_PCS1GANA_ASM_PAUSE) && 1798 (pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE) && 1799 (pcs_lpab_reg & IXGBE_PCS1GANA_ASM_PAUSE)) { 1800 hw->fc.current_mode = ixgbe_fc_tx_pause; 1801 DEBUGOUT("Flow Control = TX PAUSE frames only.\n"); 1802 } else if ((pcs_anadv_reg & IXGBE_PCS1GANA_SYM_PAUSE) && 1803 (pcs_anadv_reg & IXGBE_PCS1GANA_ASM_PAUSE) && 1804 !(pcs_lpab_reg & IXGBE_PCS1GANA_SYM_PAUSE) && 1805 (pcs_lpab_reg & IXGBE_PCS1GANA_ASM_PAUSE)) { 1806 hw->fc.current_mode = ixgbe_fc_rx_pause; 1807 DEBUGOUT("Flow Control = RX PAUSE frames only.\n"); 1808 } else { 1809 hw->fc.current_mode = ixgbe_fc_none; 1810 DEBUGOUT("Flow Control = NONE.\n"); 1811 } 1812 1813 /* Record that current_mode is the result of a successful autoneg */ 1814 hw->fc.fc_was_autonegged = TRUE; 1815 1816out: 1817 return ret_val; 1818} 1819 1820/** 1821 * ixgbe_setup_fc - Set up flow control 1822 * @hw: pointer to hardware structure 1823 * 1824 * Called at init time to set up flow control. 1825 **/ 1826s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num) 1827{ 1828 s32 ret_val = IXGBE_SUCCESS; 1829 u32 reg; 1830 1831 1832 /* Validate the packetbuf configuration */ 1833 if (packetbuf_num < 0 || packetbuf_num > 7) { 1834 DEBUGOUT1("Invalid packet buffer number [%d], expected range is" 1835 " 0-7\n", packetbuf_num); 1836 ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; 1837 goto out; 1838 } 1839 1840 /* 1841 * Validate the water mark configuration. Zero water marks are invalid 1842 * because it causes the controller to just blast out fc packets. 1843 */ 1844 if (!hw->fc.low_water || !hw->fc.high_water || !hw->fc.pause_time) { 1845 DEBUGOUT("Invalid water mark configuration\n"); 1846 ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; 1847 goto out; 1848 } 1849 1850 /* 1851 * Validate the requested mode. Strict IEEE mode does not allow 1852 * ixgbe_fc_rx_pause because it will cause us to fail at UNH. 1853 */ 1854 if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) { 1855 DEBUGOUT("ixgbe_fc_rx_pause not valid in strict IEEE mode\n"); 1856 ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; 1857 goto out; 1858 } 1859 1860 /* 1861 * 10gig parts do not have a word in the EEPROM to determine the 1862 * default flow control setting, so we explicitly set it to full. 1863 */ 1864 if (hw->fc.requested_mode == ixgbe_fc_default) 1865 hw->fc.requested_mode = ixgbe_fc_full; 1866 1867 /* 1868 * Set up the 1G flow control advertisement registers so the HW will be 1869 * able to do fc autoneg once the cable is plugged in. If we end up 1870 * using 10g instead, this is harmless. 1871 */ 1872 reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA); 1873 1874 /* 1875 * The possible values of fc.requested_mode are: 1876 * 0: Flow control is completely disabled 1877 * 1: Rx flow control is enabled (we can receive pause frames, 1878 * but not send pause frames). 1879 * 2: Tx flow control is enabled (we can send pause frames but 1880 * we do not support receiving pause frames). 1881 * 3: Both Rx and Tx flow control (symmetric) are enabled. 1882 * other: Invalid. 1883 */ 1884 switch (hw->fc.requested_mode) { 1885 case ixgbe_fc_none: 1886 /* Flow control completely disabled by software override. */ 1887 reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE); 1888 break; 1889 case ixgbe_fc_rx_pause: 1890 /* 1891 * Rx Flow control is enabled and Tx Flow control is 1892 * disabled by software override. Since there really 1893 * isn't a way to advertise that we are capable of RX 1894 * Pause ONLY, we will advertise that we support both 1895 * symmetric and asymmetric Rx PAUSE. Later, we will 1896 * disable the adapter's ability to send PAUSE frames. 1897 */ 1898 reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE); 1899 break; 1900 case ixgbe_fc_tx_pause: 1901 /* 1902 * Tx Flow control is enabled, and Rx Flow control is 1903 * disabled by software override. 1904 */ 1905 reg |= (IXGBE_PCS1GANA_ASM_PAUSE); 1906 reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE); 1907 break; 1908 case ixgbe_fc_full: 1909 /* Flow control (both Rx and Tx) is enabled by SW override. */ 1910 reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE); 1911 break; 1912 default: 1913 DEBUGOUT("Flow control param set incorrectly\n"); 1914 ret_val = -IXGBE_ERR_CONFIG; 1915 goto out; 1916 break; 1917 } 1918 1919 IXGBE_WRITE_REG(hw, IXGBE_PCS1GANA, reg); 1920 reg = IXGBE_READ_REG(hw, IXGBE_PCS1GLCTL); 1921 1922 /* Enable and restart autoneg to inform the link partner */ 1923 reg |= IXGBE_PCS1GLCTL_AN_ENABLE | IXGBE_PCS1GLCTL_AN_RESTART; 1924 1925 /* Disable AN timeout */ 1926 if (hw->fc.strict_ieee) 1927 reg &= ~IXGBE_PCS1GLCTL_AN_1G_TIMEOUT_EN; 1928 1929 IXGBE_WRITE_REG(hw, IXGBE_PCS1GLCTL, reg); 1930 DEBUGOUT1("Set up FC; PCS1GLCTL = 0x%08X\n", reg); 1931 1932out: 1933 return ret_val; 1934} 1935 1936/** 1937 * ixgbe_disable_pcie_master - Disable PCI-express master access 1938 * @hw: pointer to hardware structure 1939 * 1940 * Disables PCI-Express master access and verifies there are no pending 1941 * requests. IXGBE_ERR_MASTER_REQUESTS_PENDING is returned if master disable 1942 * bit hasn't caused the master requests to be disabled, else IXGBE_SUCCESS 1943 * is returned signifying master requests disabled. 1944 **/ 1945s32 ixgbe_disable_pcie_master(struct ixgbe_hw *hw) 1946{ 1947 u32 i; 1948 u32 reg_val; 1949 u32 number_of_queues; 1950 s32 status = IXGBE_ERR_MASTER_REQUESTS_PENDING; 1951 1952 /* Disable the receive unit by stopping each queue */ 1953 number_of_queues = hw->mac.max_rx_queues; 1954 for (i = 0; i < number_of_queues; i++) { 1955 reg_val = IXGBE_READ_REG(hw, IXGBE_RXDCTL(i)); 1956 if (reg_val & IXGBE_RXDCTL_ENABLE) { 1957 reg_val &= ~IXGBE_RXDCTL_ENABLE; 1958 IXGBE_WRITE_REG(hw, IXGBE_RXDCTL(i), reg_val); 1959 } 1960 } 1961 1962 reg_val = IXGBE_READ_REG(hw, IXGBE_CTRL); 1963 reg_val |= IXGBE_CTRL_GIO_DIS; 1964 IXGBE_WRITE_REG(hw, IXGBE_CTRL, reg_val); 1965 1966 for (i = 0; i < IXGBE_PCI_MASTER_DISABLE_TIMEOUT; i++) { 1967 if (!(IXGBE_READ_REG(hw, IXGBE_STATUS) & IXGBE_STATUS_GIO)) { 1968 status = IXGBE_SUCCESS; 1969 break; 1970 } 1971 usec_delay(100); 1972 } 1973 1974 return status; 1975} 1976 1977 1978/** 1979 * ixgbe_acquire_swfw_sync - Acquire SWFW semaphore 1980 * @hw: pointer to hardware structure 1981 * @mask: Mask to specify which semaphore to acquire 1982 * 1983 * Acquires the SWFW semaphore thought the GSSR register for the specified 1984 * function (CSR, PHY0, PHY1, EEPROM, Flash) 1985 **/ 1986s32 ixgbe_acquire_swfw_sync(struct ixgbe_hw *hw, u16 mask) 1987{ 1988 u32 gssr; 1989 u32 swmask = mask; 1990 u32 fwmask = mask << 5; 1991 s32 timeout = 200; 1992 1993 while (timeout) { 1994 /* 1995 * SW EEPROM semaphore bit is used for access to all 1996 * SW_FW_SYNC/GSSR bits (not just EEPROM) 1997 */ 1998 if (ixgbe_get_eeprom_semaphore(hw)) 1999 return -IXGBE_ERR_SWFW_SYNC; 2000 2001 gssr = IXGBE_READ_REG(hw, IXGBE_GSSR); 2002 if (!(gssr & (fwmask | swmask))) 2003 break; 2004 2005 /* 2006 * Firmware currently using resource (fwmask) or other software 2007 * thread currently using resource (swmask) 2008 */ 2009 ixgbe_release_eeprom_semaphore(hw); 2010 msec_delay(5); 2011 timeout--; 2012 } 2013 2014 if (!timeout) { 2015 DEBUGOUT("Driver can't access resource, SW_FW_SYNC timeout.\n"); 2016 return -IXGBE_ERR_SWFW_SYNC; 2017 } 2018 2019 gssr |= swmask; 2020 IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr); 2021 2022 ixgbe_release_eeprom_semaphore(hw); 2023 return IXGBE_SUCCESS; 2024} 2025 2026/** 2027 * ixgbe_release_swfw_sync - Release SWFW semaphore 2028 * @hw: pointer to hardware structure 2029 * @mask: Mask to specify which semaphore to release 2030 * 2031 * Releases the SWFW semaphore thought the GSSR register for the specified 2032 * function (CSR, PHY0, PHY1, EEPROM, Flash) 2033 **/ 2034void ixgbe_release_swfw_sync(struct ixgbe_hw *hw, u16 mask) 2035{ 2036 u32 gssr; 2037 u32 swmask = mask; 2038 2039 ixgbe_get_eeprom_semaphore(hw); 2040 2041 gssr = IXGBE_READ_REG(hw, IXGBE_GSSR); 2042 gssr &= ~swmask; 2043 IXGBE_WRITE_REG(hw, IXGBE_GSSR, gssr); 2044 2045 ixgbe_release_eeprom_semaphore(hw); 2046 2047 /* Delay before attempt to obtain semaphore again to allow FW access */ 2048 msec_delay(hw->eeprom.semaphore_delay); 2049} 2050 2051/** 2052 * ixgbe_enable_rx_dma_generic - Enable the Rx DMA unit 2053 * @hw: pointer to hardware structure 2054 * @regval: register value to write to RXCTRL 2055 * 2056 * Enables the Rx DMA unit 2057 **/ 2058s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval) 2059{ 2060 IXGBE_WRITE_REG(hw, IXGBE_RXCTRL, regval); 2061 2062 return IXGBE_SUCCESS; 2063} 2064 2065/** 2066 * ixgbe_blink_led_start_generic - Blink LED based on index. 2067 * @hw: pointer to hardware structure 2068 * @index: led number to blink 2069 **/ 2070s32 ixgbe_blink_led_start_generic(struct ixgbe_hw *hw, u32 index) 2071{ 2072 ixgbe_link_speed speed = 0; 2073 bool link_up = 0; 2074 u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC); 2075 u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); 2076 2077 /* 2078 * Link must be up to auto-blink the LEDs; 2079 * Force it if link is down. 2080 */ 2081 hw->mac.ops.check_link(hw, &speed, &link_up, FALSE); 2082 2083 if (!link_up) { 2084 autoc_reg |= IXGBE_AUTOC_FLU; 2085 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg); 2086 msec_delay(10); 2087 } 2088 2089 led_reg &= ~IXGBE_LED_MODE_MASK(index); 2090 led_reg |= IXGBE_LED_BLINK(index); 2091 IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg); 2092 IXGBE_WRITE_FLUSH(hw); 2093 2094 return IXGBE_SUCCESS; 2095} 2096 2097/** 2098 * ixgbe_blink_led_stop_generic - Stop blinking LED based on index. 2099 * @hw: pointer to hardware structure 2100 * @index: led number to stop blinking 2101 **/ 2102s32 ixgbe_blink_led_stop_generic(struct ixgbe_hw *hw, u32 index) 2103{ 2104 u32 autoc_reg = IXGBE_READ_REG(hw, IXGBE_AUTOC); 2105 u32 led_reg = IXGBE_READ_REG(hw, IXGBE_LEDCTL); 2106 2107 autoc_reg &= ~IXGBE_AUTOC_FLU; 2108 autoc_reg |= IXGBE_AUTOC_AN_RESTART; 2109 IXGBE_WRITE_REG(hw, IXGBE_AUTOC, autoc_reg); 2110 2111 led_reg &= ~IXGBE_LED_MODE_MASK(index); 2112 led_reg &= ~IXGBE_LED_BLINK(index); 2113 led_reg |= IXGBE_LED_LINK_ACTIVE << IXGBE_LED_MODE_SHIFT(index); 2114 IXGBE_WRITE_REG(hw, IXGBE_LEDCTL, led_reg); 2115 IXGBE_WRITE_FLUSH(hw); 2116 2117 return IXGBE_SUCCESS; 2118} 2119 2120