diff options
-rw-r--r-- | drivers/net/igb/e1000_82575.c | 239 | ||||
-rw-r--r-- | drivers/net/igb/e1000_defines.h | 3 | ||||
-rw-r--r-- | drivers/net/igb/e1000_hw.h | 3 | ||||
-rw-r--r-- | drivers/net/igb/e1000_nvm.c | 64 | ||||
-rw-r--r-- | drivers/net/igb/e1000_nvm.h | 1 | ||||
-rw-r--r-- | drivers/net/igb/igb_ethtool.c | 2 | ||||
-rw-r--r-- | drivers/net/igb/igb_main.c | 2 |
7 files changed, 306 insertions, 8 deletions
diff --git a/drivers/net/igb/e1000_82575.c b/drivers/net/igb/e1000_82575.c index 20d172aeb1c0..6b256c275e10 100644 --- a/drivers/net/igb/e1000_82575.c +++ b/drivers/net/igb/e1000_82575.c | |||
@@ -64,7 +64,14 @@ static s32 igb_reset_init_script_82575(struct e1000_hw *); | |||
64 | static s32 igb_read_mac_addr_82575(struct e1000_hw *); | 64 | static s32 igb_read_mac_addr_82575(struct e1000_hw *); |
65 | static s32 igb_set_pcie_completion_timeout(struct e1000_hw *hw); | 65 | static s32 igb_set_pcie_completion_timeout(struct e1000_hw *hw); |
66 | static s32 igb_reset_mdicnfg_82580(struct e1000_hw *hw); | 66 | static s32 igb_reset_mdicnfg_82580(struct e1000_hw *hw); |
67 | 67 | static s32 igb_validate_nvm_checksum_82580(struct e1000_hw *hw); | |
68 | static s32 igb_update_nvm_checksum_82580(struct e1000_hw *hw); | ||
69 | static s32 igb_update_nvm_checksum_with_offset(struct e1000_hw *hw, | ||
70 | u16 offset); | ||
71 | static s32 igb_validate_nvm_checksum_with_offset(struct e1000_hw *hw, | ||
72 | u16 offset); | ||
73 | static s32 igb_validate_nvm_checksum_i350(struct e1000_hw *hw); | ||
74 | static s32 igb_update_nvm_checksum_i350(struct e1000_hw *hw); | ||
68 | static const u16 e1000_82580_rxpbs_table[] = | 75 | static const u16 e1000_82580_rxpbs_table[] = |
69 | { 36, 72, 144, 1, 2, 4, 8, 16, | 76 | { 36, 72, 144, 1, 2, 4, 8, 16, |
70 | 35, 70, 140 }; | 77 | 35, 70, 140 }; |
@@ -237,10 +244,32 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw) | |||
237 | */ | 244 | */ |
238 | size += NVM_WORD_SIZE_BASE_SHIFT; | 245 | size += NVM_WORD_SIZE_BASE_SHIFT; |
239 | 246 | ||
240 | /* EEPROM access above 16k is unsupported */ | ||
241 | if (size > 14) | ||
242 | size = 14; | ||
243 | nvm->word_size = 1 << size; | 247 | nvm->word_size = 1 << size; |
248 | if (nvm->word_size == (1 << 15)) | ||
249 | nvm->page_size = 128; | ||
250 | |||
251 | /* NVM Function Pointers */ | ||
252 | nvm->ops.acquire = igb_acquire_nvm_82575; | ||
253 | if (nvm->word_size < (1 << 15)) | ||
254 | nvm->ops.read = igb_read_nvm_eerd; | ||
255 | else | ||
256 | nvm->ops.read = igb_read_nvm_spi; | ||
257 | |||
258 | nvm->ops.release = igb_release_nvm_82575; | ||
259 | switch (hw->mac.type) { | ||
260 | case e1000_82580: | ||
261 | nvm->ops.validate = igb_validate_nvm_checksum_82580; | ||
262 | nvm->ops.update = igb_update_nvm_checksum_82580; | ||
263 | break; | ||
264 | case e1000_i350: | ||
265 | nvm->ops.validate = igb_validate_nvm_checksum_i350; | ||
266 | nvm->ops.update = igb_update_nvm_checksum_i350; | ||
267 | break; | ||
268 | default: | ||
269 | nvm->ops.validate = igb_validate_nvm_checksum; | ||
270 | nvm->ops.update = igb_update_nvm_checksum; | ||
271 | } | ||
272 | nvm->ops.write = igb_write_nvm_spi; | ||
244 | 273 | ||
245 | /* if part supports SR-IOV then initialize mailbox parameters */ | 274 | /* if part supports SR-IOV then initialize mailbox parameters */ |
246 | switch (mac->type) { | 275 | switch (mac->type) { |
@@ -1759,6 +1788,207 @@ u16 igb_rxpbs_adjust_82580(u32 data) | |||
1759 | } | 1788 | } |
1760 | 1789 | ||
1761 | /** | 1790 | /** |
1791 | * igb_validate_nvm_checksum_with_offset - Validate EEPROM | ||
1792 | * checksum | ||
1793 | * @hw: pointer to the HW structure | ||
1794 | * @offset: offset in words of the checksum protected region | ||
1795 | * | ||
1796 | * Calculates the EEPROM checksum by reading/adding each word of the EEPROM | ||
1797 | * and then verifies that the sum of the EEPROM is equal to 0xBABA. | ||
1798 | **/ | ||
1799 | s32 igb_validate_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset) | ||
1800 | { | ||
1801 | s32 ret_val = 0; | ||
1802 | u16 checksum = 0; | ||
1803 | u16 i, nvm_data; | ||
1804 | |||
1805 | for (i = offset; i < ((NVM_CHECKSUM_REG + offset) + 1); i++) { | ||
1806 | ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data); | ||
1807 | if (ret_val) { | ||
1808 | hw_dbg("NVM Read Error\n"); | ||
1809 | goto out; | ||
1810 | } | ||
1811 | checksum += nvm_data; | ||
1812 | } | ||
1813 | |||
1814 | if (checksum != (u16) NVM_SUM) { | ||
1815 | hw_dbg("NVM Checksum Invalid\n"); | ||
1816 | ret_val = -E1000_ERR_NVM; | ||
1817 | goto out; | ||
1818 | } | ||
1819 | |||
1820 | out: | ||
1821 | return ret_val; | ||
1822 | } | ||
1823 | |||
1824 | /** | ||
1825 | * igb_update_nvm_checksum_with_offset - Update EEPROM | ||
1826 | * checksum | ||
1827 | * @hw: pointer to the HW structure | ||
1828 | * @offset: offset in words of the checksum protected region | ||
1829 | * | ||
1830 | * Updates the EEPROM checksum by reading/adding each word of the EEPROM | ||
1831 | * up to the checksum. Then calculates the EEPROM checksum and writes the | ||
1832 | * value to the EEPROM. | ||
1833 | **/ | ||
1834 | s32 igb_update_nvm_checksum_with_offset(struct e1000_hw *hw, u16 offset) | ||
1835 | { | ||
1836 | s32 ret_val; | ||
1837 | u16 checksum = 0; | ||
1838 | u16 i, nvm_data; | ||
1839 | |||
1840 | for (i = offset; i < (NVM_CHECKSUM_REG + offset); i++) { | ||
1841 | ret_val = hw->nvm.ops.read(hw, i, 1, &nvm_data); | ||
1842 | if (ret_val) { | ||
1843 | hw_dbg("NVM Read Error while updating checksum.\n"); | ||
1844 | goto out; | ||
1845 | } | ||
1846 | checksum += nvm_data; | ||
1847 | } | ||
1848 | checksum = (u16) NVM_SUM - checksum; | ||
1849 | ret_val = hw->nvm.ops.write(hw, (NVM_CHECKSUM_REG + offset), 1, | ||
1850 | &checksum); | ||
1851 | if (ret_val) | ||
1852 | hw_dbg("NVM Write Error while updating checksum.\n"); | ||
1853 | |||
1854 | out: | ||
1855 | return ret_val; | ||
1856 | } | ||
1857 | |||
1858 | /** | ||
1859 | * igb_validate_nvm_checksum_82580 - Validate EEPROM checksum | ||
1860 | * @hw: pointer to the HW structure | ||
1861 | * | ||
1862 | * Calculates the EEPROM section checksum by reading/adding each word of | ||
1863 | * the EEPROM and then verifies that the sum of the EEPROM is | ||
1864 | * equal to 0xBABA. | ||
1865 | **/ | ||
1866 | static s32 igb_validate_nvm_checksum_82580(struct e1000_hw *hw) | ||
1867 | { | ||
1868 | s32 ret_val = 0; | ||
1869 | u16 eeprom_regions_count = 1; | ||
1870 | u16 j, nvm_data; | ||
1871 | u16 nvm_offset; | ||
1872 | |||
1873 | ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data); | ||
1874 | if (ret_val) { | ||
1875 | hw_dbg("NVM Read Error\n"); | ||
1876 | goto out; | ||
1877 | } | ||
1878 | |||
1879 | if (nvm_data & NVM_COMPATIBILITY_BIT_MASK) { | ||
1880 | /* if chekcsums compatibility bit is set validate checksums | ||
1881 | * for all 4 ports. */ | ||
1882 | eeprom_regions_count = 4; | ||
1883 | } | ||
1884 | |||
1885 | for (j = 0; j < eeprom_regions_count; j++) { | ||
1886 | nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j); | ||
1887 | ret_val = igb_validate_nvm_checksum_with_offset(hw, | ||
1888 | nvm_offset); | ||
1889 | if (ret_val != 0) | ||
1890 | goto out; | ||
1891 | } | ||
1892 | |||
1893 | out: | ||
1894 | return ret_val; | ||
1895 | } | ||
1896 | |||
1897 | /** | ||
1898 | * igb_update_nvm_checksum_82580 - Update EEPROM checksum | ||
1899 | * @hw: pointer to the HW structure | ||
1900 | * | ||
1901 | * Updates the EEPROM section checksums for all 4 ports by reading/adding | ||
1902 | * each word of the EEPROM up to the checksum. Then calculates the EEPROM | ||
1903 | * checksum and writes the value to the EEPROM. | ||
1904 | **/ | ||
1905 | static s32 igb_update_nvm_checksum_82580(struct e1000_hw *hw) | ||
1906 | { | ||
1907 | s32 ret_val; | ||
1908 | u16 j, nvm_data; | ||
1909 | u16 nvm_offset; | ||
1910 | |||
1911 | ret_val = hw->nvm.ops.read(hw, NVM_COMPATIBILITY_REG_3, 1, &nvm_data); | ||
1912 | if (ret_val) { | ||
1913 | hw_dbg("NVM Read Error while updating checksum" | ||
1914 | " compatibility bit.\n"); | ||
1915 | goto out; | ||
1916 | } | ||
1917 | |||
1918 | if ((nvm_data & NVM_COMPATIBILITY_BIT_MASK) == 0) { | ||
1919 | /* set compatibility bit to validate checksums appropriately */ | ||
1920 | nvm_data = nvm_data | NVM_COMPATIBILITY_BIT_MASK; | ||
1921 | ret_val = hw->nvm.ops.write(hw, NVM_COMPATIBILITY_REG_3, 1, | ||
1922 | &nvm_data); | ||
1923 | if (ret_val) { | ||
1924 | hw_dbg("NVM Write Error while updating checksum" | ||
1925 | " compatibility bit.\n"); | ||
1926 | goto out; | ||
1927 | } | ||
1928 | } | ||
1929 | |||
1930 | for (j = 0; j < 4; j++) { | ||
1931 | nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j); | ||
1932 | ret_val = igb_update_nvm_checksum_with_offset(hw, nvm_offset); | ||
1933 | if (ret_val) | ||
1934 | goto out; | ||
1935 | } | ||
1936 | |||
1937 | out: | ||
1938 | return ret_val; | ||
1939 | } | ||
1940 | |||
1941 | /** | ||
1942 | * igb_validate_nvm_checksum_i350 - Validate EEPROM checksum | ||
1943 | * @hw: pointer to the HW structure | ||
1944 | * | ||
1945 | * Calculates the EEPROM section checksum by reading/adding each word of | ||
1946 | * the EEPROM and then verifies that the sum of the EEPROM is | ||
1947 | * equal to 0xBABA. | ||
1948 | **/ | ||
1949 | static s32 igb_validate_nvm_checksum_i350(struct e1000_hw *hw) | ||
1950 | { | ||
1951 | s32 ret_val = 0; | ||
1952 | u16 j; | ||
1953 | u16 nvm_offset; | ||
1954 | |||
1955 | for (j = 0; j < 4; j++) { | ||
1956 | nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j); | ||
1957 | ret_val = igb_validate_nvm_checksum_with_offset(hw, | ||
1958 | nvm_offset); | ||
1959 | if (ret_val != 0) | ||
1960 | goto out; | ||
1961 | } | ||
1962 | |||
1963 | out: | ||
1964 | return ret_val; | ||
1965 | } | ||
1966 | |||
1967 | /** | ||
1968 | * igb_update_nvm_checksum_i350 - Update EEPROM checksum | ||
1969 | * @hw: pointer to the HW structure | ||
1970 | * | ||
1971 | * Updates the EEPROM section checksums for all 4 ports by reading/adding | ||
1972 | * each word of the EEPROM up to the checksum. Then calculates the EEPROM | ||
1973 | * checksum and writes the value to the EEPROM. | ||
1974 | **/ | ||
1975 | static s32 igb_update_nvm_checksum_i350(struct e1000_hw *hw) | ||
1976 | { | ||
1977 | s32 ret_val = 0; | ||
1978 | u16 j; | ||
1979 | u16 nvm_offset; | ||
1980 | |||
1981 | for (j = 0; j < 4; j++) { | ||
1982 | nvm_offset = NVM_82580_LAN_FUNC_OFFSET(j); | ||
1983 | ret_val = igb_update_nvm_checksum_with_offset(hw, nvm_offset); | ||
1984 | if (ret_val != 0) | ||
1985 | goto out; | ||
1986 | } | ||
1987 | |||
1988 | out: | ||
1989 | return ret_val; | ||
1990 | } | ||
1991 | /** | ||
1762 | * igb_set_eee_i350 - Enable/disable EEE support | 1992 | * igb_set_eee_i350 - Enable/disable EEE support |
1763 | * @hw: pointer to the HW structure | 1993 | * @hw: pointer to the HW structure |
1764 | * | 1994 | * |
@@ -1798,6 +2028,7 @@ out: | |||
1798 | 2028 | ||
1799 | return ret_val; | 2029 | return ret_val; |
1800 | } | 2030 | } |
2031 | |||
1801 | static struct e1000_mac_operations e1000_mac_ops_82575 = { | 2032 | static struct e1000_mac_operations e1000_mac_ops_82575 = { |
1802 | .init_hw = igb_init_hw_82575, | 2033 | .init_hw = igb_init_hw_82575, |
1803 | .check_for_link = igb_check_for_link_82575, | 2034 | .check_for_link = igb_check_for_link_82575, |
diff --git a/drivers/net/igb/e1000_defines.h b/drivers/net/igb/e1000_defines.h index 79267813982a..97969ad8afef 100644 --- a/drivers/net/igb/e1000_defines.h +++ b/drivers/net/igb/e1000_defines.h | |||
@@ -566,6 +566,8 @@ | |||
566 | #define NVM_INIT_CONTROL3_PORT_A 0x0024 | 566 | #define NVM_INIT_CONTROL3_PORT_A 0x0024 |
567 | #define NVM_ALT_MAC_ADDR_PTR 0x0037 | 567 | #define NVM_ALT_MAC_ADDR_PTR 0x0037 |
568 | #define NVM_CHECKSUM_REG 0x003F | 568 | #define NVM_CHECKSUM_REG 0x003F |
569 | #define NVM_COMPATIBILITY_REG_3 0x0003 | ||
570 | #define NVM_COMPATIBILITY_BIT_MASK 0x8000 | ||
569 | 571 | ||
570 | #define E1000_NVM_CFG_DONE_PORT_0 0x040000 /* MNG config cycle done */ | 572 | #define E1000_NVM_CFG_DONE_PORT_0 0x040000 /* MNG config cycle done */ |
571 | #define E1000_NVM_CFG_DONE_PORT_1 0x080000 /* ...for second port */ | 573 | #define E1000_NVM_CFG_DONE_PORT_1 0x080000 /* ...for second port */ |
@@ -600,6 +602,7 @@ | |||
600 | /* NVM Commands - SPI */ | 602 | /* NVM Commands - SPI */ |
601 | #define NVM_MAX_RETRY_SPI 5000 /* Max wait of 5ms, for RDY signal */ | 603 | #define NVM_MAX_RETRY_SPI 5000 /* Max wait of 5ms, for RDY signal */ |
602 | #define NVM_WRITE_OPCODE_SPI 0x02 /* NVM write opcode */ | 604 | #define NVM_WRITE_OPCODE_SPI 0x02 /* NVM write opcode */ |
605 | #define NVM_READ_OPCODE_SPI 0x03 /* NVM read opcode */ | ||
603 | #define NVM_A8_OPCODE_SPI 0x08 /* opcode bit-3 = address bit-8 */ | 606 | #define NVM_A8_OPCODE_SPI 0x08 /* opcode bit-3 = address bit-8 */ |
604 | #define NVM_WREN_OPCODE_SPI 0x06 /* NVM set Write Enable latch */ | 607 | #define NVM_WREN_OPCODE_SPI 0x06 /* NVM set Write Enable latch */ |
605 | #define NVM_RDSR_OPCODE_SPI 0x05 /* NVM read Status register */ | 608 | #define NVM_RDSR_OPCODE_SPI 0x05 /* NVM read Status register */ |
diff --git a/drivers/net/igb/e1000_hw.h b/drivers/net/igb/e1000_hw.h index 17569bfe3f2e..27153e8d7b16 100644 --- a/drivers/net/igb/e1000_hw.h +++ b/drivers/net/igb/e1000_hw.h | |||
@@ -336,6 +336,8 @@ struct e1000_nvm_operations { | |||
336 | s32 (*read)(struct e1000_hw *, u16, u16, u16 *); | 336 | s32 (*read)(struct e1000_hw *, u16, u16, u16 *); |
337 | void (*release)(struct e1000_hw *); | 337 | void (*release)(struct e1000_hw *); |
338 | s32 (*write)(struct e1000_hw *, u16, u16, u16 *); | 338 | s32 (*write)(struct e1000_hw *, u16, u16, u16 *); |
339 | s32 (*update)(struct e1000_hw *); | ||
340 | s32 (*validate)(struct e1000_hw *); | ||
339 | }; | 341 | }; |
340 | 342 | ||
341 | struct e1000_info { | 343 | struct e1000_info { |
@@ -422,7 +424,6 @@ struct e1000_phy_info { | |||
422 | 424 | ||
423 | struct e1000_nvm_info { | 425 | struct e1000_nvm_info { |
424 | struct e1000_nvm_operations ops; | 426 | struct e1000_nvm_operations ops; |
425 | |||
426 | enum e1000_nvm_type type; | 427 | enum e1000_nvm_type type; |
427 | enum e1000_nvm_override override; | 428 | enum e1000_nvm_override override; |
428 | 429 | ||
diff --git a/drivers/net/igb/e1000_nvm.c b/drivers/net/igb/e1000_nvm.c index 6b5cc2cc453d..75bf36a4baee 100644 --- a/drivers/net/igb/e1000_nvm.c +++ b/drivers/net/igb/e1000_nvm.c | |||
@@ -318,6 +318,68 @@ out: | |||
318 | } | 318 | } |
319 | 319 | ||
320 | /** | 320 | /** |
321 | * igb_read_nvm_spi - Read EEPROM's using SPI | ||
322 | * @hw: pointer to the HW structure | ||
323 | * @offset: offset of word in the EEPROM to read | ||
324 | * @words: number of words to read | ||
325 | * @data: word read from the EEPROM | ||
326 | * | ||
327 | * Reads a 16 bit word from the EEPROM. | ||
328 | **/ | ||
329 | s32 igb_read_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | ||
330 | { | ||
331 | struct e1000_nvm_info *nvm = &hw->nvm; | ||
332 | u32 i = 0; | ||
333 | s32 ret_val; | ||
334 | u16 word_in; | ||
335 | u8 read_opcode = NVM_READ_OPCODE_SPI; | ||
336 | |||
337 | /* | ||
338 | * A check for invalid values: offset too large, too many words, | ||
339 | * and not enough words. | ||
340 | */ | ||
341 | if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || | ||
342 | (words == 0)) { | ||
343 | hw_dbg("nvm parameter(s) out of bounds\n"); | ||
344 | ret_val = -E1000_ERR_NVM; | ||
345 | goto out; | ||
346 | } | ||
347 | |||
348 | ret_val = nvm->ops.acquire(hw); | ||
349 | if (ret_val) | ||
350 | goto out; | ||
351 | |||
352 | ret_val = igb_ready_nvm_eeprom(hw); | ||
353 | if (ret_val) | ||
354 | goto release; | ||
355 | |||
356 | igb_standby_nvm(hw); | ||
357 | |||
358 | if ((nvm->address_bits == 8) && (offset >= 128)) | ||
359 | read_opcode |= NVM_A8_OPCODE_SPI; | ||
360 | |||
361 | /* Send the READ command (opcode + addr) */ | ||
362 | igb_shift_out_eec_bits(hw, read_opcode, nvm->opcode_bits); | ||
363 | igb_shift_out_eec_bits(hw, (u16)(offset*2), nvm->address_bits); | ||
364 | |||
365 | /* | ||
366 | * Read the data. SPI NVMs increment the address with each byte | ||
367 | * read and will roll over if reading beyond the end. This allows | ||
368 | * us to read the whole NVM from any offset | ||
369 | */ | ||
370 | for (i = 0; i < words; i++) { | ||
371 | word_in = igb_shift_in_eec_bits(hw, 16); | ||
372 | data[i] = (word_in >> 8) | (word_in << 8); | ||
373 | } | ||
374 | |||
375 | release: | ||
376 | nvm->ops.release(hw); | ||
377 | |||
378 | out: | ||
379 | return ret_val; | ||
380 | } | ||
381 | |||
382 | /** | ||
321 | * igb_read_nvm_eerd - Reads EEPROM using EERD register | 383 | * igb_read_nvm_eerd - Reads EEPROM using EERD register |
322 | * @hw: pointer to the HW structure | 384 | * @hw: pointer to the HW structure |
323 | * @offset: offset of word in the EEPROM to read | 385 | * @offset: offset of word in the EEPROM to read |
@@ -353,7 +415,7 @@ s32 igb_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data) | |||
353 | break; | 415 | break; |
354 | 416 | ||
355 | data[i] = (rd32(E1000_EERD) >> | 417 | data[i] = (rd32(E1000_EERD) >> |
356 | E1000_NVM_RW_REG_DATA); | 418 | E1000_NVM_RW_REG_DATA); |
357 | } | 419 | } |
358 | 420 | ||
359 | out: | 421 | out: |
diff --git a/drivers/net/igb/e1000_nvm.h b/drivers/net/igb/e1000_nvm.h index 29c956a84bd0..7f43564c4bcc 100644 --- a/drivers/net/igb/e1000_nvm.h +++ b/drivers/net/igb/e1000_nvm.h | |||
@@ -35,6 +35,7 @@ s32 igb_read_part_num(struct e1000_hw *hw, u32 *part_num); | |||
35 | s32 igb_read_part_string(struct e1000_hw *hw, u8 *part_num, | 35 | s32 igb_read_part_string(struct e1000_hw *hw, u8 *part_num, |
36 | u32 part_num_size); | 36 | u32 part_num_size); |
37 | s32 igb_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data); | 37 | s32 igb_read_nvm_eerd(struct e1000_hw *hw, u16 offset, u16 words, u16 *data); |
38 | s32 igb_read_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data); | ||
38 | s32 igb_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data); | 39 | s32 igb_write_nvm_spi(struct e1000_hw *hw, u16 offset, u16 words, u16 *data); |
39 | s32 igb_validate_nvm_checksum(struct e1000_hw *hw); | 40 | s32 igb_validate_nvm_checksum(struct e1000_hw *hw); |
40 | s32 igb_update_nvm_checksum(struct e1000_hw *hw); | 41 | s32 igb_update_nvm_checksum(struct e1000_hw *hw); |
diff --git a/drivers/net/igb/igb_ethtool.c b/drivers/net/igb/igb_ethtool.c index 78d420b4b2db..df15a915bbea 100644 --- a/drivers/net/igb/igb_ethtool.c +++ b/drivers/net/igb/igb_ethtool.c | |||
@@ -721,7 +721,7 @@ static int igb_set_eeprom(struct net_device *netdev, | |||
721 | /* Update the checksum over the first part of the EEPROM if needed | 721 | /* Update the checksum over the first part of the EEPROM if needed |
722 | * and flush shadow RAM for 82573 controllers */ | 722 | * and flush shadow RAM for 82573 controllers */ |
723 | if ((ret_val == 0) && ((first_word <= NVM_CHECKSUM_REG))) | 723 | if ((ret_val == 0) && ((first_word <= NVM_CHECKSUM_REG))) |
724 | igb_update_nvm_checksum(hw); | 724 | hw->nvm.ops.update(hw); |
725 | 725 | ||
726 | kfree(eeprom_buff); | 726 | kfree(eeprom_buff); |
727 | return ret_val; | 727 | return ret_val; |
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 8643f8c29199..8c6af11d93a6 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
@@ -1884,7 +1884,7 @@ static int __devinit igb_probe(struct pci_dev *pdev, | |||
1884 | hw->mac.ops.reset_hw(hw); | 1884 | hw->mac.ops.reset_hw(hw); |
1885 | 1885 | ||
1886 | /* make sure the NVM is good */ | 1886 | /* make sure the NVM is good */ |
1887 | if (igb_validate_nvm_checksum(hw) < 0) { | 1887 | if (hw->nvm.ops.validate(hw) < 0) { |
1888 | dev_err(&pdev->dev, "The NVM Checksum Is Not Valid\n"); | 1888 | dev_err(&pdev->dev, "The NVM Checksum Is Not Valid\n"); |
1889 | err = -EIO; | 1889 | err = -EIO; |
1890 | goto err_eeprom; | 1890 | goto err_eeprom; |