• Home
  • Raw
  • Download

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()
84 struct e1000_hw *hw = e1000_find_card(bus); in spi_setup_slave() local
85 if (!hw) { in spi_setup_slave()
91 if (hw->eeprom.type != e1000_eeprom_spi) { in spi_setup_slave()
92 E1000_ERR(hw, "No attached SPI EEPROM found!\n"); in spi_setup_slave()
98 E1000_ERR(hw, "No such SPI chip: %u\n", cs); in spi_setup_slave()
102 E1000_ERR(hw, "Only SPI MODE-0 is supported!\n"); in spi_setup_slave()
107 E1000_DBG(hw->nic, "EEPROM SPI access requested\n"); in spi_setup_slave()
108 return &hw->spi; in spi_setup_slave()
113 __maybe_unused struct e1000_hw *hw = e1000_hw_from_spi(spi); in spi_free_slave() local
114 E1000_DBG(hw->nic, "EEPROM SPI access released\n"); in spi_free_slave()
119 struct e1000_hw *hw = e1000_hw_from_spi(spi); in spi_claim_bus() local
121 if (e1000_acquire_eeprom(hw)) { in spi_claim_bus()
122 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in spi_claim_bus()
131 struct e1000_hw *hw = e1000_hw_from_spi(spi); in spi_release_bus() local
132 e1000_release_eeprom(hw); in spi_release_bus()
139 struct e1000_hw *hw = e1000_hw_from_spi(spi); in spi_xfer() local
143 e1000_standby_eeprom(hw); in spi_xfer()
145 ret = e1000_spi_xfer(hw, bitlen, dout_mem, din_mem, true); in spi_xfer()
148 e1000_standby_eeprom(hw); in spi_xfer()
169 static int e1000_spi_eeprom_enable_wr(struct e1000_hw *hw, bool intr) in e1000_spi_eeprom_enable_wr() argument
172 e1000_standby_eeprom(hw); in e1000_spi_eeprom_enable_wr()
173 return e1000_spi_xfer(hw, 8*sizeof(op), op, NULL, intr); in e1000_spi_eeprom_enable_wr()
180 static __maybe_unused int e1000_spi_eeprom_disable_wr(struct e1000_hw *hw, in e1000_spi_eeprom_disable_wr() argument
184 e1000_standby_eeprom(hw); in e1000_spi_eeprom_disable_wr()
185 return e1000_spi_xfer(hw, 8*sizeof(op), op, NULL, intr); in e1000_spi_eeprom_disable_wr()
188 static __maybe_unused int e1000_spi_eeprom_write_status(struct e1000_hw *hw, in e1000_spi_eeprom_write_status() argument
192 e1000_standby_eeprom(hw); in e1000_spi_eeprom_write_status()
193 return e1000_spi_xfer(hw, 8*sizeof(op), op, NULL, intr); in e1000_spi_eeprom_write_status()
196 static int e1000_spi_eeprom_read_status(struct e1000_hw *hw, bool intr) in e1000_spi_eeprom_read_status() argument
199 e1000_standby_eeprom(hw); in e1000_spi_eeprom_read_status()
200 if (e1000_spi_xfer(hw, 8*sizeof(op), op, op, intr)) in e1000_spi_eeprom_read_status()
205 static int e1000_spi_eeprom_write_page(struct e1000_hw *hw, in e1000_spi_eeprom_write_page() argument
210 (off >> (hw->eeprom.address_bits - 8)) & 0xff, off & 0xff in e1000_spi_eeprom_write_page()
213 e1000_standby_eeprom(hw); in e1000_spi_eeprom_write_page()
215 if (e1000_spi_xfer(hw, 8 + hw->eeprom.address_bits, op, NULL, intr)) in e1000_spi_eeprom_write_page()
217 if (e1000_spi_xfer(hw, len << 3, data, NULL, intr)) in e1000_spi_eeprom_write_page()
223 static int e1000_spi_eeprom_read_page(struct e1000_hw *hw, in e1000_spi_eeprom_read_page() argument
228 (off >> (hw->eeprom.address_bits - 8)) & 0xff, off & 0xff in e1000_spi_eeprom_read_page()
231 e1000_standby_eeprom(hw); in e1000_spi_eeprom_read_page()
233 if (e1000_spi_xfer(hw, 8 + hw->eeprom.address_bits, op, NULL, intr)) in e1000_spi_eeprom_read_page()
235 if (e1000_spi_xfer(hw, len << 3, NULL, data, intr)) in e1000_spi_eeprom_read_page()
241 static int e1000_spi_eeprom_poll_ready(struct e1000_hw *hw, bool intr) in e1000_spi_eeprom_poll_ready() argument
244 while ((status = e1000_spi_eeprom_read_status(hw, intr)) >= 0) { in e1000_spi_eeprom_poll_ready()
251 static int e1000_spi_eeprom_dump(struct e1000_hw *hw, in e1000_spi_eeprom_dump() argument
255 if (e1000_spi_eeprom_poll_ready(hw, intr)) in e1000_spi_eeprom_dump()
261 u16 pg_off = off & (hw->eeprom.page_size - 1); in e1000_spi_eeprom_dump()
262 u16 pg_len = hw->eeprom.page_size - pg_off; in e1000_spi_eeprom_dump()
267 if (e1000_spi_eeprom_read_page(hw, data, off, pg_len, intr)) in e1000_spi_eeprom_dump()
280 static int e1000_spi_eeprom_program(struct e1000_hw *hw, in e1000_spi_eeprom_program() argument
286 u16 pg_off = off & (hw->eeprom.page_size - 1); in e1000_spi_eeprom_program()
287 u16 pg_len = hw->eeprom.page_size - pg_off; in e1000_spi_eeprom_program()
292 if (e1000_spi_eeprom_poll_ready(hw, intr)) in e1000_spi_eeprom_program()
296 if (e1000_spi_eeprom_enable_wr(hw, intr)) in e1000_spi_eeprom_program()
300 if (e1000_spi_eeprom_write_page(hw, data, off, pg_len, intr)) in e1000_spi_eeprom_program()
310 if (e1000_spi_eeprom_poll_ready(hw, intr)) in e1000_spi_eeprom_program()
317 static int do_e1000_spi_show(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi_show() argument
335 else if (offset < (hw->eeprom.word_size << 1)) in do_e1000_spi_show()
336 length = (hw->eeprom.word_size << 1) - offset; in do_e1000_spi_show()
340 E1000_ERR(hw, "Requested zero-sized dump!\n"); in do_e1000_spi_show()
344 E1000_ERR(hw, "Can't dump past 0xFFFF!\n"); in do_e1000_spi_show()
351 E1000_ERR(hw, "Out of Memory!\n"); in do_e1000_spi_show()
356 if (e1000_acquire_eeprom(hw)) { in do_e1000_spi_show()
357 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in do_e1000_spi_show()
361 err = e1000_spi_eeprom_dump(hw, buffer, offset, length, true); in do_e1000_spi_show()
362 e1000_release_eeprom(hw); in do_e1000_spi_show()
364 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_show()
371 hw->name, offset, offset + length - 1); in do_e1000_spi_show()
374 printf("\n%s: %04hX: ", hw->name, offset + i); in do_e1000_spi_show()
386 static int do_e1000_spi_dump(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi_dump() argument
405 E1000_ERR(hw, "Requested zero-sized dump!\n"); in do_e1000_spi_dump()
409 E1000_ERR(hw, "Can't dump past 0xFFFF!\n"); in do_e1000_spi_dump()
414 if (e1000_acquire_eeprom(hw)) { in do_e1000_spi_dump()
415 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in do_e1000_spi_dump()
420 if (e1000_spi_eeprom_dump(hw, dest, offset, length, true) < 0) { in do_e1000_spi_dump()
421 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_dump()
422 e1000_release_eeprom(hw); in do_e1000_spi_dump()
426 e1000_release_eeprom(hw); in do_e1000_spi_dump()
427 printf("%s: ===== EEPROM DUMP COMPLETE =====\n", hw->name); in do_e1000_spi_dump()
431 static int do_e1000_spi_program(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi_program() argument
449 if (e1000_acquire_eeprom(hw)) { in do_e1000_spi_program()
450 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in do_e1000_spi_program()
455 if (e1000_spi_eeprom_program(hw, source, offset, length, true) < 0) { in do_e1000_spi_program()
456 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_program()
457 e1000_release_eeprom(hw); in do_e1000_spi_program()
461 e1000_release_eeprom(hw); in do_e1000_spi_program()
462 printf("%s: ===== EEPROM PROGRAMMED =====\n", hw->name); in do_e1000_spi_program()
466 static int do_e1000_spi_checksum(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi_checksum() argument
486 E1000_ERR(hw, "Unable to allocate EEPROM buffer!\n"); in do_e1000_spi_checksum()
491 if (e1000_acquire_eeprom(hw)) { in do_e1000_spi_checksum()
492 E1000_ERR(hw, "EEPROM SPI cannot be acquired!\n"); in do_e1000_spi_checksum()
497 if (e1000_spi_eeprom_dump(hw, buffer, 0, length, true) < 0) { in do_e1000_spi_checksum()
498 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_checksum()
499 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
512 hw->name, checksum); in do_e1000_spi_checksum()
513 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
518 E1000_ERR(hw, "EEPROM checksum is incorrect!\n"); in do_e1000_spi_checksum()
519 E1000_ERR(hw, " ...register was 0x%04hx, calculated 0x%04hx\n", in do_e1000_spi_checksum()
524 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
529 printf("%s: Reprogramming the EEPROM checksum...\n", hw->name); in do_e1000_spi_checksum()
531 if (e1000_spi_eeprom_program(hw, &buffer[i], i * sizeof(uint16_t), in do_e1000_spi_checksum()
533 E1000_ERR(hw, "Interrupted!\n"); in do_e1000_spi_checksum()
534 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
538 e1000_release_eeprom(hw); in do_e1000_spi_checksum()
542 int do_e1000_spi(cmd_tbl_t *cmdtp, struct e1000_hw *hw, in do_e1000_spi() argument
551 if (hw->eeprom.type != e1000_eeprom_spi) { in do_e1000_spi()
552 E1000_ERR(hw, "No attached SPI EEPROM found (%d)!\n", in do_e1000_spi()
553 hw->eeprom.type); in do_e1000_spi()
559 return do_e1000_spi_show(cmdtp, hw, argc - 1, argv + 1); in do_e1000_spi()
562 return do_e1000_spi_dump(cmdtp, hw, argc - 1, argv + 1); in do_e1000_spi()
565 return do_e1000_spi_program(cmdtp, hw, argc - 1, argv + 1); in do_e1000_spi()
568 return do_e1000_spi_checksum(cmdtp, hw, argc - 1, argv + 1); in do_e1000_spi()