Lines Matching refs:hw
21 static int e1000_spi_xfer(struct e1000_hw *hw, unsigned int bitlen, in e1000_spi_xfer() argument
32 eecd = E1000_READ_REG(hw, EECD); in e1000_spi_xfer()
47 E1000_WRITE_REG(hw, EECD, eecd); in e1000_spi_xfer()
48 E1000_WRITE_FLUSH(hw); in e1000_spi_xfer()
52 e1000_raise_ee_clk(hw, &eecd); in e1000_spi_xfer()
55 eecd = E1000_READ_REG(hw, EECD); in e1000_spi_xfer()
64 e1000_lower_ee_clk(hw, &eecd); in e1000_spi_xfer()
87 struct e1000_hw *hw = e1000_find_card(bus); in spi_setup_slave() local
88 if (!hw) { in spi_setup_slave()
94 if (hw->eeprom.type != e1000_eeprom_spi) { in spi_setup_slave()
95 E1000_ERR(hw, "No attached SPI EEPROM found!\n"); in spi_setup_slave()
101 E1000_ERR(hw, "No such SPI chip: %u\n", cs); in spi_setup_slave()
105 E1000_ERR(hw, "Only SPI MODE-0 is supported!\n"); in spi_setup_slave()
110 E1000_DBG(hw->nic, "EEPROM SPI access requested\n"); in spi_setup_slave()
111 return &hw->spi; in spi_setup_slave()
116 __maybe_unused struct e1000_hw *hw = e1000_hw_from_spi(spi); in spi_free_slave() local
117 E1000_DBG(hw->nic, "EEPROM SPI access released\n"); in spi_free_slave()
122 struct e1000_hw *hw = e1000_hw_from_spi(spi); in spi_claim_bus() local
124 if (e1000_acquire_eeprom(hw)) { in spi_claim_bus()
125 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in spi_claim_bus()
134 struct e1000_hw *hw = e1000_hw_from_spi(spi); in spi_release_bus() local
135 e1000_release_eeprom(hw); in spi_release_bus()
142 struct e1000_hw *hw = e1000_hw_from_spi(spi); in spi_xfer() local
146 e1000_standby_eeprom(hw); in spi_xfer()
148 ret = e1000_spi_xfer(hw, bitlen, dout_mem, din_mem, true); in spi_xfer()
151 e1000_standby_eeprom(hw); in spi_xfer()
172 static int e1000_spi_eeprom_enable_wr(struct e1000_hw *hw, bool intr) in e1000_spi_eeprom_enable_wr() argument
175 e1000_standby_eeprom(hw); in e1000_spi_eeprom_enable_wr()
176 return e1000_spi_xfer(hw, 8*sizeof(op), op, NULL, intr); in e1000_spi_eeprom_enable_wr()
183 static __maybe_unused int e1000_spi_eeprom_disable_wr(struct e1000_hw *hw, in e1000_spi_eeprom_disable_wr() argument
187 e1000_standby_eeprom(hw); in e1000_spi_eeprom_disable_wr()
188 return e1000_spi_xfer(hw, 8*sizeof(op), op, NULL, intr); in e1000_spi_eeprom_disable_wr()
191 static __maybe_unused int e1000_spi_eeprom_write_status(struct e1000_hw *hw, in e1000_spi_eeprom_write_status() argument
195 e1000_standby_eeprom(hw); in e1000_spi_eeprom_write_status()
196 return e1000_spi_xfer(hw, 8*sizeof(op), op, NULL, intr); in e1000_spi_eeprom_write_status()
199 static int e1000_spi_eeprom_read_status(struct e1000_hw *hw, bool intr) in e1000_spi_eeprom_read_status() argument
202 e1000_standby_eeprom(hw); in e1000_spi_eeprom_read_status()
203 if (e1000_spi_xfer(hw, 8*sizeof(op), op, op, intr)) in e1000_spi_eeprom_read_status()
208 static int e1000_spi_eeprom_write_page(struct e1000_hw *hw, in e1000_spi_eeprom_write_page() argument
213 (off >> (hw->eeprom.address_bits - 8)) & 0xff, off & 0xff in e1000_spi_eeprom_write_page()
216 e1000_standby_eeprom(hw); in e1000_spi_eeprom_write_page()
218 if (e1000_spi_xfer(hw, 8 + hw->eeprom.address_bits, op, NULL, intr)) in e1000_spi_eeprom_write_page()
220 if (e1000_spi_xfer(hw, len << 3, data, NULL, intr)) in e1000_spi_eeprom_write_page()
226 static int e1000_spi_eeprom_read_page(struct e1000_hw *hw, in e1000_spi_eeprom_read_page() argument
231 (off >> (hw->eeprom.address_bits - 8)) & 0xff, off & 0xff in e1000_spi_eeprom_read_page()
234 e1000_standby_eeprom(hw); in e1000_spi_eeprom_read_page()
236 if (e1000_spi_xfer(hw, 8 + hw->eeprom.address_bits, op, NULL, intr)) in e1000_spi_eeprom_read_page()
238 if (e1000_spi_xfer(hw, len << 3, NULL, data, intr)) in e1000_spi_eeprom_read_page()
244 static int e1000_spi_eeprom_poll_ready(struct e1000_hw *hw, bool intr) in e1000_spi_eeprom_poll_ready() argument
247 while ((status = e1000_spi_eeprom_read_status(hw, intr)) >= 0) { in e1000_spi_eeprom_poll_ready()
254 static int e1000_spi_eeprom_dump(struct e1000_hw *hw, in e1000_spi_eeprom_dump() argument
258 if (e1000_spi_eeprom_poll_ready(hw, intr)) in e1000_spi_eeprom_dump()
264 u16 pg_off = off & (hw->eeprom.page_size - 1); in e1000_spi_eeprom_dump()
265 u16 pg_len = hw->eeprom.page_size - pg_off; in e1000_spi_eeprom_dump()
270 if (e1000_spi_eeprom_read_page(hw, data, off, pg_len, intr)) in e1000_spi_eeprom_dump()
283 static int e1000_spi_eeprom_program(struct e1000_hw *hw, in e1000_spi_eeprom_program() argument
289 u16 pg_off = off & (hw->eeprom.page_size - 1); in e1000_spi_eeprom_program()
290 u16 pg_len = hw->eeprom.page_size - pg_off; in e1000_spi_eeprom_program()
295 if (e1000_spi_eeprom_poll_ready(hw, intr)) in e1000_spi_eeprom_program()
299 if (e1000_spi_eeprom_enable_wr(hw, intr)) in e1000_spi_eeprom_program()
303 if (e1000_spi_eeprom_write_page(hw, data, off, pg_len, intr)) in e1000_spi_eeprom_program()
313 if (e1000_spi_eeprom_poll_ready(hw, intr)) in e1000_spi_eeprom_program()
320 static int do_e1000_spi_show(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi_show() argument
338 else if (offset < (hw->eeprom.word_size << 1)) in do_e1000_spi_show()
339 length = (hw->eeprom.word_size << 1) - offset; in do_e1000_spi_show()
343 E1000_ERR(hw, "Requested zero-sized dump!\n"); in do_e1000_spi_show()
347 E1000_ERR(hw, "Can't dump past 0xFFFF!\n"); in do_e1000_spi_show()
354 E1000_ERR(hw, "Out of Memory!\n"); in do_e1000_spi_show()
359 if (e1000_acquire_eeprom(hw)) { in do_e1000_spi_show()
360 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in do_e1000_spi_show()
364 err = e1000_spi_eeprom_dump(hw, buffer, offset, length, true); in do_e1000_spi_show()
365 e1000_release_eeprom(hw); in do_e1000_spi_show()
367 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_show()
374 hw->name, offset, offset + length - 1); in do_e1000_spi_show()
377 printf("\n%s: %04hX: ", hw->name, offset + i); in do_e1000_spi_show()
389 static int do_e1000_spi_dump(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi_dump() argument
408 E1000_ERR(hw, "Requested zero-sized dump!\n"); in do_e1000_spi_dump()
412 E1000_ERR(hw, "Can't dump past 0xFFFF!\n"); in do_e1000_spi_dump()
417 if (e1000_acquire_eeprom(hw)) { in do_e1000_spi_dump()
418 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in do_e1000_spi_dump()
423 if (e1000_spi_eeprom_dump(hw, dest, offset, length, true) < 0) { in do_e1000_spi_dump()
424 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_dump()
425 e1000_release_eeprom(hw); in do_e1000_spi_dump()
429 e1000_release_eeprom(hw); in do_e1000_spi_dump()
430 printf("%s: ===== EEPROM DUMP COMPLETE =====\n", hw->name); in do_e1000_spi_dump()
434 static int do_e1000_spi_program(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi_program() argument
452 if (e1000_acquire_eeprom(hw)) { in do_e1000_spi_program()
453 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in do_e1000_spi_program()
458 if (e1000_spi_eeprom_program(hw, source, offset, length, true) < 0) { in do_e1000_spi_program()
459 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_program()
460 e1000_release_eeprom(hw); in do_e1000_spi_program()
464 e1000_release_eeprom(hw); in do_e1000_spi_program()
465 printf("%s: ===== EEPROM PROGRAMMED =====\n", hw->name); in do_e1000_spi_program()
469 static int do_e1000_spi_checksum(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi_checksum() argument
489 E1000_ERR(hw, "Unable to allocate EEPROM buffer!\n"); in do_e1000_spi_checksum()
494 if (e1000_acquire_eeprom(hw)) { in do_e1000_spi_checksum()
495 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in do_e1000_spi_checksum()
500 if (e1000_spi_eeprom_dump(hw, buffer, 0, length, true) < 0) { in do_e1000_spi_checksum()
501 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_checksum()
502 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
515 hw->name, checksum); in do_e1000_spi_checksum()
516 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
521 E1000_ERR(hw, "EEPROM checksum is incorrect!\n"); in do_e1000_spi_checksum()
522 E1000_ERR(hw, " ...register was 0x%04hx, calculated 0x%04hx\n", in do_e1000_spi_checksum()
527 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
532 printf("%s: Reprogramming the EEPROM checksum...\n", hw->name); in do_e1000_spi_checksum()
534 if (e1000_spi_eeprom_program(hw, &buffer[i], i * sizeof(uint16_t), in do_e1000_spi_checksum()
536 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_checksum()
537 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
541 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
545 int do_e1000_spi(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi() argument
554 if (hw->eeprom.type != e1000_eeprom_spi) { in do_e1000_spi()
555 E1000_ERR(hw, "No attached SPI EEPROM found (%d)!\n", in do_e1000_spi()
556 hw->eeprom.type); in do_e1000_spi()
562 return do_e1000_spi_show(cmdtp, hw, argc - 1, argv + 1); in do_e1000_spi()
565 return do_e1000_spi_dump(cmdtp, hw, argc - 1, argv + 1); in do_e1000_spi()
568 return do_e1000_spi_program(cmdtp, hw, argc - 1, argv + 1); in do_e1000_spi()
571 return do_e1000_spi_checksum(cmdtp, hw, argc - 1, argv + 1); in do_e1000_spi()