Lines Matching +full:read +full:- +full:out

1 // SPDX-License-Identifier: GPL-2.0
2 /* Copyright(c) 2007 - 2018 Intel Corporation. */
17 * igb_get_hw_semaphore_i210 - Acquire hardware semaphore
25 s32 timeout = hw->nvm.word_size + 1; in igb_get_hw_semaphore_i210()
42 if (hw->dev_spec._82575.clear_semaphore_once) { in igb_get_hw_semaphore_i210()
43 hw->dev_spec._82575.clear_semaphore_once = false; in igb_get_hw_semaphore_i210()
56 hw_dbg("Driver can't access device - SMBI bit is set.\n"); in igb_get_hw_semaphore_i210()
57 return -E1000_ERR_NVM; in igb_get_hw_semaphore_i210()
77 return -E1000_ERR_NVM; in igb_get_hw_semaphore_i210()
84 * igb_acquire_nvm_i210 - Request for access to EEPROM
90 * EEPROM access and return -E1000_ERR_NVM (-1).
98 * igb_release_nvm_i210 - Release exclusive access to EEPROM
110 * igb_acquire_swfw_sync_i210 - Acquire SW/FW semaphore
127 ret_val = -E1000_ERR_SWFW_SYNC; in igb_acquire_swfw_sync_i210()
128 goto out; in igb_acquire_swfw_sync_i210()
143 ret_val = -E1000_ERR_SWFW_SYNC; in igb_acquire_swfw_sync_i210()
144 goto out; in igb_acquire_swfw_sync_i210()
151 out: in igb_acquire_swfw_sync_i210()
156 * igb_release_swfw_sync_i210 - Release SW/FW semaphore
178 * igb_read_nvm_srrd_i210 - Reads Shadow Ram using EERD register
180 * @offset: offset of word in the Shadow Ram to read
181 * @words: number of words to read
182 * @data: word read from the Shadow Ram
195 * to read in bursts than synchronizing access for each word. in igb_read_nvm_srrd_i210()
198 count = (words - i) / E1000_EERD_EEWR_MAX_COUNT > 0 ? in igb_read_nvm_srrd_i210()
199 E1000_EERD_EEWR_MAX_COUNT : (words - i); in igb_read_nvm_srrd_i210()
200 if (!(hw->nvm.ops.acquire(hw))) { in igb_read_nvm_srrd_i210()
203 hw->nvm.ops.release(hw); in igb_read_nvm_srrd_i210()
216 * igb_write_nvm_srwr - Write to Shadow Ram using EEWR
230 struct e1000_nvm_info *nvm = &hw->nvm; in igb_write_nvm_srwr()
238 if ((offset >= nvm->word_size) || (words > (nvm->word_size - offset)) || in igb_write_nvm_srwr()
240 hw_dbg("nvm parameter(s) out of bounds\n"); in igb_write_nvm_srwr()
241 ret_val = -E1000_ERR_NVM; in igb_write_nvm_srwr()
242 goto out; in igb_write_nvm_srwr()
262 hw_dbg("Shadow RAM write EEWR timed out\n"); in igb_write_nvm_srwr()
267 out: in igb_write_nvm_srwr()
272 * igb_write_nvm_srwr_i210 - Write to Shadow RAM using EEWR
284 * If error code is returned, data and Shadow RAM may be inconsistent - buffer
298 count = (words - i) / E1000_EERD_EEWR_MAX_COUNT > 0 ? in igb_write_nvm_srwr_i210()
299 E1000_EERD_EEWR_MAX_COUNT : (words - i); in igb_write_nvm_srwr_i210()
300 if (!(hw->nvm.ops.acquire(hw))) { in igb_write_nvm_srwr_i210()
303 hw->nvm.ops.release(hw); in igb_write_nvm_srwr_i210()
316 * igb_read_invm_word_i210 - Reads OTP
318 * @address: the word address (aka eeprom offset) to read
319 * @data: pointer to the data read
321 * Reads 16-bit words from the OTP. Return error when the word is not
326 s32 status = -E1000_ERR_INVM_VALUE_NOT_FOUND; in igb_read_invm_word_i210()
345 hw_dbg("Read INVM Word 0x%02x = %x\n", in igb_read_invm_word_i210()
358 * igb_read_invm_i210 - Read invm wrapper function for I210/I211
360 * @offset: offset to read from
361 * @words: number of words to read (unused)
362 * @data: pointer to the data read
418 *data = hw->subsystem_device_id; in igb_read_invm_i210()
421 *data = hw->subsystem_vendor_id; in igb_read_invm_i210()
424 *data = hw->device_id; in igb_read_invm_i210()
427 *data = hw->vendor_id; in igb_read_invm_i210()
438 * igb_read_invm_version - Reads iNVM version and image type
440 * @invm_ver: version structure for the version read
450 u32 invm_blocks = E1000_INVM_SIZE - (E1000_INVM_ULT_BYTES_SIZE / in igb_read_invm_version()
453 s32 status = -E1000_ERR_INVM_VALUE_NOT_FOUND; in igb_read_invm_version()
456 /* Read iNVM memory */ in igb_read_invm_version()
462 /* Read version number */ in igb_read_invm_version()
464 record = &buffer[invm_blocks - i]; in igb_read_invm_version()
465 next_record = &buffer[invm_blocks - i + 1]; in igb_read_invm_version()
503 invm_ver->invm_major = (version & E1000_INVM_MAJOR_MASK) in igb_read_invm_version()
505 invm_ver->invm_minor = version & E1000_INVM_MINOR_MASK; in igb_read_invm_version()
507 /* Read Image Type */ in igb_read_invm_version()
509 record = &buffer[invm_blocks - i]; in igb_read_invm_version()
510 next_record = &buffer[invm_blocks - i + 1]; in igb_read_invm_version()
514 invm_ver->invm_img_type = 0; in igb_read_invm_version()
522 invm_ver->invm_img_type = in igb_read_invm_version()
532 * igb_validate_nvm_checksum_i210 - Validate EEPROM checksum
543 if (!(hw->nvm.ops.acquire(hw))) { in igb_validate_nvm_checksum_i210()
545 /* Replace the read function with semaphore grabbing with in igb_validate_nvm_checksum_i210()
549 read_op_ptr = hw->nvm.ops.read; in igb_validate_nvm_checksum_i210()
550 hw->nvm.ops.read = igb_read_nvm_eerd; in igb_validate_nvm_checksum_i210()
554 /* Revert original read operation. */ in igb_validate_nvm_checksum_i210()
555 hw->nvm.ops.read = read_op_ptr; in igb_validate_nvm_checksum_i210()
557 hw->nvm.ops.release(hw); in igb_validate_nvm_checksum_i210()
566 * igb_update_nvm_checksum_i210 - Update EEPROM checksum
579 /* Read the first word from the EEPROM. If this times out or fails, do in igb_update_nvm_checksum_i210()
581 * EEPROM read fails in igb_update_nvm_checksum_i210()
585 hw_dbg("EEPROM read failed\n"); in igb_update_nvm_checksum_i210()
586 goto out; in igb_update_nvm_checksum_i210()
589 if (!(hw->nvm.ops.acquire(hw))) { in igb_update_nvm_checksum_i210()
590 /* Do not use hw->nvm.ops.write, hw->nvm.ops.read in igb_update_nvm_checksum_i210()
598 hw->nvm.ops.release(hw); in igb_update_nvm_checksum_i210()
599 hw_dbg("NVM Read Error while updating checksum.\n"); in igb_update_nvm_checksum_i210()
600 goto out; in igb_update_nvm_checksum_i210()
604 checksum = (u16) NVM_SUM - checksum; in igb_update_nvm_checksum_i210()
608 hw->nvm.ops.release(hw); in igb_update_nvm_checksum_i210()
610 goto out; in igb_update_nvm_checksum_i210()
613 hw->nvm.ops.release(hw); in igb_update_nvm_checksum_i210()
617 ret_val = -E1000_ERR_SWFW_SYNC; in igb_update_nvm_checksum_i210()
619 out: in igb_update_nvm_checksum_i210()
624 * igb_pool_flash_update_done_i210 - Pool FLUDONE status.
630 s32 ret_val = -E1000_ERR_NVM; in igb_pool_flash_update_done_i210()
646 * igb_get_flash_presence_i210 - Check if flash device is detected.
663 * igb_update_flash_i210 - Commit EEPROM to the flash
673 if (ret_val == -E1000_ERR_NVM) { in igb_update_flash_i210()
674 hw_dbg("Flash update time out\n"); in igb_update_flash_i210()
675 goto out; in igb_update_flash_i210()
683 hw_dbg("Flash update time out\n"); in igb_update_flash_i210()
687 out: in igb_update_flash_i210()
692 * igb_valid_led_default_i210 - Verify a valid default LED config
696 * Read the EEPROM for the current default LED configuration. If the
703 ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data); in igb_valid_led_default_i210()
705 hw_dbg("NVM Read Error\n"); in igb_valid_led_default_i210()
706 goto out; in igb_valid_led_default_i210()
710 switch (hw->phy.media_type) { in igb_valid_led_default_i210()
720 out: in igb_valid_led_default_i210()
725 * __igb_access_xmdio_reg - Read/write XMDIO register
729 * @data: pointer to value to read/write from/to the XMDIO address
730 * @read: boolean flag to indicate read or write
733 u8 dev_addr, u16 *data, bool read) in __igb_access_xmdio_reg() argument
737 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, dev_addr); in __igb_access_xmdio_reg()
741 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAAD, address); in __igb_access_xmdio_reg()
745 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, E1000_MMDAC_FUNC_DATA | in __igb_access_xmdio_reg()
750 if (read) in __igb_access_xmdio_reg()
751 ret_val = hw->phy.ops.read_reg(hw, E1000_MMDAAD, data); in __igb_access_xmdio_reg()
753 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAAD, *data); in __igb_access_xmdio_reg()
758 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, 0); in __igb_access_xmdio_reg()
766 * igb_read_xmdio_reg - Read XMDIO register
770 * @data: value to be read from the EMI address
778 * igb_write_xmdio_reg - Write XMDIO register
790 * igb_init_nvm_params_i210 - Init NVM func ptrs.
795 struct e1000_nvm_info *nvm = &hw->nvm; in igb_init_nvm_params_i210()
797 nvm->ops.acquire = igb_acquire_nvm_i210; in igb_init_nvm_params_i210()
798 nvm->ops.release = igb_release_nvm_i210; in igb_init_nvm_params_i210()
799 nvm->ops.valid_led_default = igb_valid_led_default_i210; in igb_init_nvm_params_i210()
803 hw->nvm.type = e1000_nvm_flash_hw; in igb_init_nvm_params_i210()
804 nvm->ops.read = igb_read_nvm_srrd_i210; in igb_init_nvm_params_i210()
805 nvm->ops.write = igb_write_nvm_srwr_i210; in igb_init_nvm_params_i210()
806 nvm->ops.validate = igb_validate_nvm_checksum_i210; in igb_init_nvm_params_i210()
807 nvm->ops.update = igb_update_nvm_checksum_i210; in igb_init_nvm_params_i210()
809 hw->nvm.type = e1000_nvm_invm; in igb_init_nvm_params_i210()
810 nvm->ops.read = igb_read_invm_i210; in igb_init_nvm_params_i210()
811 nvm->ops.write = NULL; in igb_init_nvm_params_i210()
812 nvm->ops.validate = NULL; in igb_init_nvm_params_i210()
813 nvm->ops.update = NULL; in igb_init_nvm_params_i210()
854 ret_val = -E1000_ERR_PHY; in igb_pll_workaround_i210()
887 * igb_get_cfg_done_i210 - Read config done bit
890 * Read the management control register for the config done bit for
891 * completion status. NOTE: silicon which is EEPROM-less will fail trying
892 * to read the config done bit, so an error is *ONLY* logged and returns
893 * 0. If we were to return with error, EEPROM-less silicon
905 timeout--; in igb_get_cfg_done_i210()