Lines Matching refs:self
128 nand_attach(device_t parent, device_t self, void *aux)
130 struct nand_softc *sc = device_private(self);
134 sc->sc_dev = self;
140 if (nand_check_wp(self)) {
145 if (nand_scan_media(self, chip)) {
159 if (flash_sync_thread_init(&sc->sc_flash_io, self, &nand_flash_if)) {
168 nand_bbt_init(self);
169 nand_bbt_scan(self);
175 config_search(self, NULL,
235 nand_detach(device_t self, int flags)
237 struct nand_softc *sc = device_private(self);
241 error = config_detach_children(self, flags);
248 nand_bbt_detach(self);
329 nand_quirks(device_t self, struct nand_chip *chip)
346 nand_fill_chip_structure_legacy(device_t self, struct nand_chip *chip)
350 return nand_read_parameters_micron(self, chip);
352 return nand_read_parameters_samsung(self, chip);
354 return nand_read_parameters_toshiba(self, chip);
367 nand_scan_media(device_t self, struct nand_chip *chip)
369 struct nand_softc *sc = device_private(self);
373 nand_select(self, true);
374 nand_command(self, ONFI_RESET);
375 KASSERT(nand_get_status(self) & ONFI_STATUS_RDY);
376 nand_select(self, false);
379 nand_select(self, true);
380 nand_command(self, ONFI_READ_ID);
381 nand_address(self, 0x20);
382 nand_read_1(self, &onfi_signature[0]);
383 nand_read_1(self, &onfi_signature[1]);
384 nand_read_1(self, &onfi_signature[2]);
385 nand_read_1(self, &onfi_signature[3]);
386 nand_select(self, false);
389 device_printf(self, "signature: %02x %02x %02x %02x\n",
400 nand_read_id(self, &chip->nc_manf_id, &chip->nc_dev_id);
402 if (nand_fill_chip_structure_legacy(self, chip)) {
403 aprint_error_dev(self,
412 nand_read_id(self, &chip->nc_manf_id, &chip->nc_dev_id);
414 if (nand_fill_chip_structure(self, chip)) {
415 aprint_error_dev(self,
421 aprint_normal_dev(self,
427 aprint_normal_dev(self,
432 aprint_normal_dev(self,
438 aprint_normal_dev(self, "column cycles: %" PRIu8 ", row cycles: %"
498 /* nand_quirks(self, chip); */
504 nand_read_id(device_t self, uint8_t *manf, uint8_t *dev)
506 nand_select(self, true);
507 nand_command(self, ONFI_READ_ID);
508 nand_address(self, 0x00);
510 nand_read_1(self, manf);
511 nand_read_1(self, dev);
513 nand_select(self, false);
517 nand_read_parameter_page(device_t self, struct onfi_parameter_page *params)
528 nand_select(self, true);
529 nand_command(self, ONFI_READ_PARAMETER_PAGE);
530 nand_address(self, 0x00);
532 nand_busy(self);
539 nand_read_1(self, &bufp[i]);
541 nand_select(self, false);
547 aprint_error_dev(self, "parameter page crc check failed\n");
556 nand_fill_chip_structure(device_t self, struct nand_chip *chip)
562 if (nand_read_parameter_page(self, ¶ms)) {
574 aprint_normal_dev(self, "vendor: %s, model: %s\n", vendor, model);
605 nand_shutdown(device_t self, int howto)
611 nand_address_column(device_t self, size_t row, size_t column)
613 struct nand_softc *sc = device_private(self);
627 nand_address(self, column & 0xff);
631 nand_address(self, row & 0xff);
635 nand_address_row(device_t self, size_t row)
637 struct nand_softc *sc = device_private(self);
646 nand_address(self, row & 0xff);
650 nand_get_status(device_t self)
654 nand_command(self, ONFI_READ_STATUS);
655 nand_busy(self);
656 nand_read_1(self, &status);
662 nand_check_wp(device_t self)
664 if (nand_get_status(self) & ONFI_STATUS_WP)
671 nand_prepare_read(device_t self, flash_off_t row, flash_off_t column)
673 nand_command(self, ONFI_READ);
674 nand_address_column(self, row, column);
675 nand_command(self, ONFI_READ_START);
677 nand_busy(self);
682 nand_default_read_page(device_t self, size_t offset, uint8_t *data)
684 struct nand_softc *sc = device_private(self);
690 nand_prepare_read(self, offset, 0);
698 nand_ecc_prepare(self, NAND_ECC_READ);
699 nand_read_buf_2(self, data + b, bs);
700 nand_ecc_compute(self, data + b,
705 nand_ecc_prepare(self, NAND_ECC_READ);
706 nand_read_buf_1(self, data + b, bs);
707 nand_ecc_compute(self, data + b,
717 nand_read_oob(self, offset, chip->nc_oob_cache);
738 result = nand_ecc_correct(self, data + b, ecc + e,
745 aprint_error_dev(self,
750 aprint_error_dev(self,
756 aprint_error_dev(self,
770 nand_default_program_page(device_t self, size_t page, const uint8_t *data)
772 struct nand_softc *sc = device_private(self);
778 nand_command(self, ONFI_PAGE_PROGRAM);
779 nand_address_column(self, page, 0);
781 nand_busy(self);
791 nand_ecc_prepare(self, NAND_ECC_WRITE);
792 nand_write_buf_2(self, data + b, bs);
793 nand_ecc_compute(self, data + b, ecc + e);
796 nand_write_buf_2(self, chip->nc_oob_cache,
800 nand_ecc_prepare(self, NAND_ECC_WRITE);
801 nand_write_buf_1(self, data + b, bs);
802 nand_ecc_compute(self, data + b, ecc + e);
805 nand_write_buf_1(self, chip->nc_oob_cache,
809 nand_command(self, ONFI_PAGE_PROGRAM_START);
811 nand_busy(self);
826 status = nand_get_status(self);
829 aprint_error_dev(self, "page program failed!\n");
838 nand_read_oob(device_t self, size_t page, uint8_t *oob)
840 struct nand_softc *sc = device_private(self);
843 nand_prepare_read(self, page, chip->nc_page_size);
846 nand_read_buf_2(self, oob, chip->nc_spare_size);
848 nand_read_buf_1(self, oob, chip->nc_spare_size);
859 nand_write_oob(device_t self, size_t offset, const void *oob)
861 struct nand_softc *sc = device_private(self);
865 nand_command(self, ONFI_PAGE_PROGRAM);
866 nand_address_column(self, offset, chip->nc_page_size);
867 nand_command(self, ONFI_PAGE_PROGRAM_START);
869 nand_busy(self);
872 nand_write_buf_2(self, oob, chip->nc_spare_size);
874 nand_write_buf_1(self, oob, chip->nc_spare_size);
876 status = nand_get_status(self);
885 nand_markbad(device_t self, size_t offset)
887 struct nand_softc *sc = device_private(self);
895 nand_bbt_block_markbad(self, block);
900 if (nand_isbad(self, blockoffset))
903 nand_read_oob(self, blockoffset, chip->nc_oob_cache);
908 nand_write_oob(self, blockoffset, chip->nc_oob_cache);
912 nand_isfactorybad(device_t self, flash_off_t offset)
914 struct nand_softc *sc = device_private(self);
930 nand_prepare_read(self, page, chip->nc_page_size);
934 nand_read_2(self, &word);
939 nand_read_1(self, &byte);
949 nand_iswornoutbad(device_t self, flash_off_t offset)
951 struct nand_softc *sc = device_private(self);
962 nand_prepare_read(self, block,
965 nand_read_2(self, &word);
974 nand_prepare_read(self, block,
977 nand_read_1(self, &byte);
986 nand_isbad(device_t self, flash_off_t offset)
989 struct nand_softc *sc = device_private(self);
995 return nand_bbt_block_isbad(self, block);
998 if (nand_isfactorybad(self, offset))
1002 if (nand_iswornoutbad(self, offset))
1010 nand_erase_block(device_t self, size_t offset)
1016 nand_command(self, ONFI_BLOCK_ERASE);
1017 nand_address_row(self, offset);
1018 nand_command(self, ONFI_BLOCK_ERASE_START);
1020 nand_busy(self);
1022 status = nand_get_status(self);
1025 aprint_error_dev(self, "block erase failed!\n");
1026 nand_markbad(self, offset);
1037 nand_default_ecc_compute(device_t self, const uint8_t *data, uint8_t *code)
1045 nand_default_ecc_correct(device_t self, uint8_t *data, const uint8_t *origcode,
1052 nand_default_select(device_t self, bool enable)
1061 nand_flash_submit(device_t self, struct buf * const bp)
1063 struct nand_softc *sc = device_private(self);
1072 nand_flash_write_unaligned(device_t self, flash_off_t offset, size_t len,
1075 struct nand_softc *sc = device_private(self);
1094 if (nand_isbad(self, addr)) {
1095 aprint_error_dev(self,
1102 error = nand_read_page(self, addr, chip->nc_page_cache);
1109 error = nand_program_page(self, addr, chip->nc_page_cache);
1122 if (nand_isbad(self, addr)) {
1123 aprint_error_dev(self,
1131 error = nand_read_page(self,
1141 error = nand_program_page(self,
1152 error = nand_read_page(self,
1160 error = nand_program_page(self,
1177 error = nand_program_page(self, addr, bufp);
1198 nand_flash_write(device_t self, flash_off_t offset, size_t len, size_t *retlen,
1201 struct nand_softc *sc = device_private(self);
1218 return nand_flash_write_unaligned(self,
1232 if (nand_isbad(self, addr)) {
1233 aprint_error_dev(self,
1240 error = nand_program_page(self, addr, bufp);
1260 nand_flash_read_unaligned(device_t self, size_t offset,
1263 struct nand_softc *sc = device_private(self);
1283 error = nand_read_page(self, addr, chip->nc_page_cache);
1295 error = nand_read_page(self, addr, chip->nc_page_cache);
1331 nand_flash_read(device_t self, flash_off_t offset, size_t len, size_t *retlen,
1334 struct nand_softc *sc = device_private(self);
1365 return nand_flash_read_unaligned(self,
1376 if (nand_isbad(self, addr)) {
1377 aprint_error_dev(self, "bad block encountered\n");
1381 error = nand_read_page(self, addr, bufp);
1396 nand_flash_isbad(device_t self, flash_off_t ofs, bool *is_bad)
1398 struct nand_softc *sc = device_private(self);
1417 result = nand_isbad(self, ofs);
1426 nand_flash_markbad(device_t self, flash_off_t ofs)
1428 struct nand_softc *sc = device_private(self);
1444 nand_markbad(self, ofs);
1451 nand_flash_erase(device_t self,
1454 struct nand_softc *sc = device_private(self);
1469 aprint_error_dev(self,
1478 aprint_error_dev(self,
1489 if (nand_isbad(self, addr)) {
1490 aprint_error_dev(self, "bad block encountered\n");
1496 error = nand_erase_block(self, addr);