Skip to content
Snippets Groups Projects
nand.h 34.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • 		return ONFI_TIMING_MODE_UNKNOWN;
    	return le16_to_cpu(chip->onfi_params.src_sync_timing_mode);
    }
    #endif
    
    
    /*
     * Check if it is a SLC nand.
     * The !nand_is_slc() can be used to check the MLC/TLC nand chips.
     * We do not distinguish the MLC and TLC now.
     */
    static inline bool nand_is_slc(struct nand_chip *chip)
    {
    	return chip->bits_per_cell == 1;
    }
    
    
    /**
     * Check if the opcode's address should be sent only on the lower 8 bits
     * @command: opcode to check
     */
    static inline int nand_opcode_8bits(unsigned int command)
    {
    
    	switch (command) {
    	case NAND_CMD_READID:
    	case NAND_CMD_PARAM:
    	case NAND_CMD_GET_FEATURES:
    	case NAND_CMD_SET_FEATURES:
    		return 1;
    	default:
    		break;
    	}
    	return 0;
    
    /* return the supported JEDEC features. */
    static inline int jedec_feature(struct nand_chip *chip)
    {
    	return chip->jedec_version ? le16_to_cpu(chip->jedec_params.features)
    		: 0;
    }
    
    
    /* Standard NAND functions from nand_base.c */
    void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len);
    void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len);
    void nand_read_buf(struct mtd_info *mtd, uint8_t *buf, int len);
    void nand_read_buf16(struct mtd_info *mtd, uint8_t *buf, int len);
    uint8_t nand_read_byte(struct mtd_info *mtd);
    
    Scott Wood's avatar
    Scott Wood committed
    
    /*
     * struct nand_sdr_timings - SDR NAND chip timings
     *
     * This struct defines the timing requirements of a SDR NAND chip.
     * These informations can be found in every NAND datasheets and the timings
     * meaning are described in the ONFI specifications:
     * www.onfi.org/~/media/ONFI/specs/onfi_3_1_spec.pdf (chapter 4.15 Timing
     * Parameters)
     *
     * All these timings are expressed in picoseconds.
     */
    
    struct nand_sdr_timings {
    	u32 tALH_min;
    	u32 tADL_min;
    	u32 tALS_min;
    	u32 tAR_min;
    	u32 tCEA_max;
    	u32 tCEH_min;
    	u32 tCH_min;
    	u32 tCHZ_max;
    	u32 tCLH_min;
    	u32 tCLR_min;
    	u32 tCLS_min;
    	u32 tCOH_min;
    	u32 tCS_min;
    	u32 tDH_min;
    	u32 tDS_min;
    	u32 tFEAT_max;
    	u32 tIR_min;
    	u32 tITC_max;
    	u32 tRC_min;
    	u32 tREA_max;
    	u32 tREH_min;
    	u32 tRHOH_min;
    	u32 tRHW_min;
    	u32 tRHZ_max;
    	u32 tRLOH_min;
    	u32 tRP_min;
    	u32 tRR_min;
    	u64 tRST_max;
    	u32 tWB_max;
    	u32 tWC_min;
    	u32 tWH_min;
    	u32 tWHR_min;
    	u32 tWP_min;
    	u32 tWW_min;
    };
    
    /* get timing characteristics from ONFI timing mode. */
    const struct nand_sdr_timings *onfi_async_timing_mode_to_sdr_timings(int mode);
    
    
    int nand_check_erased_ecc_chunk(void *data, int datalen,
    				void *ecc, int ecclen,
    				void *extraoob, int extraooblen,
    				int threshold);
    
    Wolfgang Denk's avatar
    Wolfgang Denk committed
    #endif /* __LINUX_MTD_NAND_H */