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 = FIELD_GET(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()
533 * igb_validate_nvm_checksum_i210 - Validate EEPROM checksum
544 if (!(hw->nvm.ops.acquire(hw))) { in igb_validate_nvm_checksum_i210()
546 /* Replace the read function with semaphore grabbing with in igb_validate_nvm_checksum_i210()
550 read_op_ptr = hw->nvm.ops.read; in igb_validate_nvm_checksum_i210()
551 hw->nvm.ops.read = igb_read_nvm_eerd; in igb_validate_nvm_checksum_i210()
555 /* Revert original read operation. */ in igb_validate_nvm_checksum_i210()
556 hw->nvm.ops.read = read_op_ptr; in igb_validate_nvm_checksum_i210()
558 hw->nvm.ops.release(hw); in igb_validate_nvm_checksum_i210()
567 * igb_update_nvm_checksum_i210 - Update EEPROM checksum
580 /* Read the first word from the EEPROM. If this times out or fails, do in igb_update_nvm_checksum_i210()
582 * EEPROM read fails in igb_update_nvm_checksum_i210()
586 hw_dbg("EEPROM read failed\n"); in igb_update_nvm_checksum_i210()
587 goto out; in igb_update_nvm_checksum_i210()
590 if (!(hw->nvm.ops.acquire(hw))) { in igb_update_nvm_checksum_i210()
591 /* Do not use hw->nvm.ops.write, hw->nvm.ops.read in igb_update_nvm_checksum_i210()
599 hw->nvm.ops.release(hw); in igb_update_nvm_checksum_i210()
600 hw_dbg("NVM Read Error while updating checksum.\n"); in igb_update_nvm_checksum_i210()
601 goto out; in igb_update_nvm_checksum_i210()
605 checksum = (u16) NVM_SUM - checksum; in igb_update_nvm_checksum_i210()
609 hw->nvm.ops.release(hw); in igb_update_nvm_checksum_i210()
611 goto out; in igb_update_nvm_checksum_i210()
614 hw->nvm.ops.release(hw); in igb_update_nvm_checksum_i210()
618 ret_val = -E1000_ERR_SWFW_SYNC; in igb_update_nvm_checksum_i210()
620 out: in igb_update_nvm_checksum_i210()
625 * igb_pool_flash_update_done_i210 - Pool FLUDONE status.
631 s32 ret_val = -E1000_ERR_NVM; in igb_pool_flash_update_done_i210()
647 * igb_get_flash_presence_i210 - Check if flash device is detected.
664 * igb_update_flash_i210 - Commit EEPROM to the flash
674 if (ret_val == -E1000_ERR_NVM) { in igb_update_flash_i210()
675 hw_dbg("Flash update time out\n"); in igb_update_flash_i210()
676 goto out; in igb_update_flash_i210()
684 hw_dbg("Flash update time out\n"); in igb_update_flash_i210()
688 out: in igb_update_flash_i210()
693 * igb_valid_led_default_i210 - Verify a valid default LED config
697 * Read the EEPROM for the current default LED configuration. If the
704 ret_val = hw->nvm.ops.read(hw, NVM_ID_LED_SETTINGS, 1, data); in igb_valid_led_default_i210()
706 hw_dbg("NVM Read Error\n"); in igb_valid_led_default_i210()
707 goto out; in igb_valid_led_default_i210()
711 switch (hw->phy.media_type) { in igb_valid_led_default_i210()
721 out: in igb_valid_led_default_i210()
726 * __igb_access_xmdio_reg - Read/write XMDIO register
730 * @data: pointer to value to read/write from/to the XMDIO address
731 * @read: boolean flag to indicate read or write
734 u8 dev_addr, u16 *data, bool read) in __igb_access_xmdio_reg() argument
738 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, dev_addr); in __igb_access_xmdio_reg()
742 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAAD, address); in __igb_access_xmdio_reg()
746 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, E1000_MMDAC_FUNC_DATA | in __igb_access_xmdio_reg()
751 if (read) in __igb_access_xmdio_reg()
752 ret_val = hw->phy.ops.read_reg(hw, E1000_MMDAAD, data); in __igb_access_xmdio_reg()
754 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAAD, *data); in __igb_access_xmdio_reg()
759 ret_val = hw->phy.ops.write_reg(hw, E1000_MMDAC, 0); in __igb_access_xmdio_reg()
767 * igb_read_xmdio_reg - Read XMDIO register
771 * @data: value to be read from the EMI address
779 * igb_write_xmdio_reg - Write XMDIO register
791 * igb_init_nvm_params_i210 - Init NVM func ptrs.
796 struct e1000_nvm_info *nvm = &hw->nvm; in igb_init_nvm_params_i210()
798 nvm->ops.acquire = igb_acquire_nvm_i210; in igb_init_nvm_params_i210()
799 nvm->ops.release = igb_release_nvm_i210; in igb_init_nvm_params_i210()
800 nvm->ops.valid_led_default = igb_valid_led_default_i210; in igb_init_nvm_params_i210()
804 hw->nvm.type = e1000_nvm_flash_hw; in igb_init_nvm_params_i210()
805 nvm->ops.read = igb_read_nvm_srrd_i210; in igb_init_nvm_params_i210()
806 nvm->ops.write = igb_write_nvm_srwr_i210; in igb_init_nvm_params_i210()
807 nvm->ops.validate = igb_validate_nvm_checksum_i210; in igb_init_nvm_params_i210()
808 nvm->ops.update = igb_update_nvm_checksum_i210; in igb_init_nvm_params_i210()
810 hw->nvm.type = e1000_nvm_invm; in igb_init_nvm_params_i210()
811 nvm->ops.read = igb_read_invm_i210; in igb_init_nvm_params_i210()
812 nvm->ops.write = NULL; in igb_init_nvm_params_i210()
813 nvm->ops.validate = NULL; in igb_init_nvm_params_i210()
814 nvm->ops.update = NULL; in igb_init_nvm_params_i210()
855 ret_val = -E1000_ERR_PHY; in igb_pll_workaround_i210()
888 * igb_get_cfg_done_i210 - Read config done bit
891 * Read the management control register for the config done bit for
892 * completion status. NOTE: silicon which is EEPROM-less will fail trying
893 * to read the config done bit, so an error is *ONLY* logged and returns
894 * 0. If we were to return with error, EEPROM-less silicon
906 timeout--; in igb_get_cfg_done_i210()