nand_block_markbad_lowlevel(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

okay bestie, welcome to the nand_block_markbad_lowlevel(9) page from the Kernel API Manual β€” yes, the name is a whole mouthful, but it's giving important. we're gonna mark blocks bad and be cute about it. πŸ’…

✨ NAME ✨

nand_block_markbad_lowlevel β€” mark a block bad. that's the whole errand, no cap. like, a block is getting cancelled. 🚫

🌸 SYNOPSIS 🌸

int nand_block_markbad_lowlevel (struct nand_chip *chip , loff_t ofs );

πŸŽ€ ARGUMENTS πŸŽ€

  • chip β€” NAND chip object. the NAND chip in question, the main character. πŸ‘‘
  • ofs β€” offset from device start. literally where the drama is located, measured from the start of the device. πŸ“

πŸ’– DESCRIPTION πŸ’–

so this function performs the generic NAND bad block marking steps β€” i.e., bad block table(s) and/or marker(s). that's the whole job. the hardware driver is only allowed to specify how to write bad block markers to OOB (chip->legacy.block_markbad), and that's it. we don't let it freestyle beyond that. periodt πŸ™…β€β™€οΈ

we try operations in this exact order, no skipping, no cap:

  1. erase the affected block, to allow OOB marker to be written cleanly
  2. write bad block marker to OOB area of affected block (unless flag NAND_BBT_NO_OOB_BBM is present)
  3. update the BBT

note that we retain the first error encountered in (2) or (3), finish the procedures, and dump the error in the end. yes bestie, we keep the first oopsie, finish the whole routine, and then spill the error at the end. the way that's such main character error handling. 😭πŸ”₯

πŸ¦‹ SEE ALSO πŸ¦‹

the kernel file is ./drivers/mtd/nand/raw/nand_base.c β€” that's the source file, iykyk. and then there's the whole extended friend group of references, every single one invited: nand_extract_bits(9), nand_select_target(9), nand_deselect_target(9), nand_release_device(9), nand_bbm_get_next_page(9), nand_block_bad(9), nand_region_is_secured(9), nand_get_device(9), nand_check_wp(9), nand_fill_oob(9), nand_do_write_oob(9), nand_default_block_markbad(9), nand_markbad_bbm(9), nand_block_isreserved(9), nand_block_checkbad(9), nand_soft_waitrdy(9), nand_gpio_waitrdy(9), panic_nand_wait(9), nand_reset_interface(9), nand_setup_interface(9), nand_choose_best_sdr_timings(9), nand_choose_best_nvddr_timings(9), nand_choose_best_timings(9), nand_choose_interface_config(9), nand_fill_column_cycles(9), nand_read_page_op(9), nand_read_param_page_op(9), nand_change_read_column_op(9), nand_read_oob_op(9), nand_prog_page_begin_op(9), nand_prog_page_end_op(9), nand_prog_page_op(9), nand_change_write_column_op(9), nand_readid_op(9), nand_status_op(9), nand_exit_status_op(9), nand_erase_op(9), nand_set_features_op(9), nand_get_features_op(9), nand_reset_op(9), nand_read_data_op(9), nand_write_data_op(9), struct nand_op_parser_ctx(9), nand_op_parser_must_split_instr(9), nand_op_parser_match_pat(9), nand_op_parser_exec_op(9), nand_subop_get_addr_start_off(9), nand_subop_get_num_addr_cyc(9), nand_subop_get_data_start_off(9), nand_subop_get_data_len(9), nand_reset(9), nand_get_features(9), nand_set_features(9), nand_read_page_raw_notsupp(9), nand_read_page_raw(9), nand_monolithic_read_page_raw(9), nand_read_page_raw_syndrome(9), nand_read_page_swecc(9), nand_read_subpage(9), nand_read_page_hwecc(9), nand_read_page_hwecc_oob_first(9), nand_read_page_syndrome(9), nand_transfer_oob(9), nand_setup_read_retry(9), nand_do_read_ops(9), nand_read_oob_std(9), nand_read_oob_syndrome(9), nand_write_oob_std(9), nand_write_oob_syndrome(9), nand_do_read_oob(9), nand_read_oob(9), nand_write_page_raw_notsupp(9), nand_write_page_raw(9), nand_monolithic_write_page_raw(9), nand_write_page_raw_syndrome(9), nand_write_page_swecc(9), nand_write_page_hwecc(9), nand_write_subpage_hwecc(9), nand_write_page_syndrome(9), nand_write_page(9), nand_do_write_ops(9), panic_nand_write(9), nand_write_oob(9), nand_erase(9), nand_erase_nand(9), nand_sync(9), nand_block_isbad(9), nand_block_markbad(9), nand_suspend(9), nand_resume(9), nand_shutdown(9), nand_lock(9), nand_unlock(9), rawnand_dt_parse_gpio_cs(9), nand_scan_ident(9), nand_check_ecc_caps(9), nand_match_ecc_req(9), nand_maximize_ecc(9), nand_ecc_choose_conf(9), nand_scan_tail(9), nand_scan_with_ids(9), nand_cleanup(9).


and that's the page, bestie. source/version: ./drivers/mtd/nand/raw Β· date: October 2026 Β· page: nand_block_markbad_lowlevel(9). go mark some blocks bad, but like, responsibly. mwah πŸ’‹πŸ’–

πŸ“¦ where this page comes from