aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2016-09-15 04:32:46 -0400
committerBoris Brezillon <boris.brezillon@free-electrons.com>2016-09-23 03:35:16 -0400
commiteee64b700e26b9bcc6fce024681c31f5e12271fc (patch)
tree89d2030d19fb62fd0053aed8c097c683cecc26e4 /include/linux
parent2f94abfe35b210e7711af9202a3dcfc9e779219a (diff)
mtd: nand: Introduce nand_data_interface
Currently we have no data structure to fully describe a NAND timing. We only have struct nand_sdr_timings for NAND timings in SDR mode, but nothing for DDR mode and also no container to store both types of timing. This patch adds struct nand_data_interface which stores the timing type and a union of different timings. This can be used to pass to drivers in order to configure the timing. Add kerneldoc for struct nand_sdr_timings while touching it anyway. Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/mtd/nand.h166
1 files changed, 117 insertions, 49 deletions
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index 73ccbf6e057c..a625e960c0c3 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -573,6 +573,123 @@ struct nand_buffers {
573}; 573};
574 574
575/** 575/**
576 * struct nand_sdr_timings - SDR NAND chip timings
577 *
578 * This struct defines the timing requirements of a SDR NAND chip.
579 * These information can be found in every NAND datasheets and the timings
580 * meaning are described in the ONFI specifications:
581 * www.onfi.org/~/media/ONFI/specs/onfi_3_1_spec.pdf (chapter 4.15 Timing
582 * Parameters)
583 *
584 * All these timings are expressed in picoseconds.
585 *
586 * @tALH_min: ALE hold time
587 * @tADL_min: ALE to data loading time
588 * @tALS_min: ALE setup time
589 * @tAR_min: ALE to RE# delay
590 * @tCEA_max: CE# access time
591 * @tCEH_min:
592 * @tCH_min: CE# hold time
593 * @tCHZ_max: CE# high to output hi-Z
594 * @tCLH_min: CLE hold time
595 * @tCLR_min: CLE to RE# delay
596 * @tCLS_min: CLE setup time
597 * @tCOH_min: CE# high to output hold
598 * @tCS_min: CE# setup time
599 * @tDH_min: Data hold time
600 * @tDS_min: Data setup time
601 * @tFEAT_max: Busy time for Set Features and Get Features
602 * @tIR_min: Output hi-Z to RE# low
603 * @tITC_max: Interface and Timing Mode Change time
604 * @tRC_min: RE# cycle time
605 * @tREA_max: RE# access time
606 * @tREH_min: RE# high hold time
607 * @tRHOH_min: RE# high to output hold
608 * @tRHW_min: RE# high to WE# low
609 * @tRHZ_max: RE# high to output hi-Z
610 * @tRLOH_min: RE# low to output hold
611 * @tRP_min: RE# pulse width
612 * @tRR_min: Ready to RE# low (data only)
613 * @tRST_max: Device reset time, measured from the falling edge of R/B# to the
614 * rising edge of R/B#.
615 * @tWB_max: WE# high to SR[6] low
616 * @tWC_min: WE# cycle time
617 * @tWH_min: WE# high hold time
618 * @tWHR_min: WE# high to RE# low
619 * @tWP_min: WE# pulse width
620 * @tWW_min: WP# transition to WE# low
621 */
622struct nand_sdr_timings {
623 u32 tALH_min;
624 u32 tADL_min;
625 u32 tALS_min;
626 u32 tAR_min;
627 u32 tCEA_max;
628 u32 tCEH_min;
629 u32 tCH_min;
630 u32 tCHZ_max;
631 u32 tCLH_min;
632 u32 tCLR_min;
633 u32 tCLS_min;
634 u32 tCOH_min;
635 u32 tCS_min;
636 u32 tDH_min;
637 u32 tDS_min;
638 u32 tFEAT_max;
639 u32 tIR_min;
640 u32 tITC_max;
641 u32 tRC_min;
642 u32 tREA_max;
643 u32 tREH_min;
644 u32 tRHOH_min;
645 u32 tRHW_min;
646 u32 tRHZ_max;
647 u32 tRLOH_min;
648 u32 tRP_min;
649 u32 tRR_min;
650 u64 tRST_max;
651 u32 tWB_max;
652 u32 tWC_min;
653 u32 tWH_min;
654 u32 tWHR_min;
655 u32 tWP_min;
656 u32 tWW_min;
657};
658
659/**
660 * enum nand_data_interface_type - NAND interface timing type
661 * @NAND_SDR_IFACE: Single Data Rate interface
662 */
663enum nand_data_interface_type {
664 NAND_SDR_IFACE,
665};
666
667/**
668 * struct nand_data_interface - NAND interface timing
669 * @type: type of the timing
670 * @timings: The timing, type according to @type
671 */
672struct nand_data_interface {
673 enum nand_data_interface_type type;
674 union {
675 struct nand_sdr_timings sdr;
676 } timings;
677};
678
679/**
680 * nand_get_sdr_timings - get SDR timing from data interface
681 * @conf: The data interface
682 */
683static inline const struct nand_sdr_timings *
684nand_get_sdr_timings(const struct nand_data_interface *conf)
685{
686 if (conf->type != NAND_SDR_IFACE)
687 return ERR_PTR(-EINVAL);
688
689 return &conf->timings.sdr;
690}
691
692/**
576 * struct nand_chip - NAND Private Flash Chip Data 693 * struct nand_chip - NAND Private Flash Chip Data
577 * @mtd: MTD device registered to the MTD framework 694 * @mtd: MTD device registered to the MTD framework
578 * @IO_ADDR_R: [BOARDSPECIFIC] address to read the 8 I/O lines of the 695 * @IO_ADDR_R: [BOARDSPECIFIC] address to read the 8 I/O lines of the
@@ -1030,55 +1147,6 @@ static inline int jedec_feature(struct nand_chip *chip)
1030 : 0; 1147 : 0;
1031} 1148}
1032 1149
1033/*
1034 * struct nand_sdr_timings - SDR NAND chip timings
1035 *
1036 * This struct defines the timing requirements of a SDR NAND chip.
1037 * These informations can be found in every NAND datasheets and the timings
1038 * meaning are described in the ONFI specifications:
1039 * www.onfi.org/~/media/ONFI/specs/onfi_3_1_spec.pdf (chapter 4.15 Timing
1040 * Parameters)
1041 *
1042 * All these timings are expressed in picoseconds.
1043 */
1044
1045struct nand_sdr_timings {
1046 u32 tALH_min;
1047 u32 tADL_min;
1048 u32 tALS_min;
1049 u32 tAR_min;
1050 u32 tCEA_max;
1051 u32 tCEH_min;
1052 u32 tCH_min;
1053 u32 tCHZ_max;
1054 u32 tCLH_min;
1055 u32 tCLR_min;
1056 u32 tCLS_min;
1057 u32 tCOH_min;
1058 u32 tCS_min;
1059 u32 tDH_min;
1060 u32 tDS_min;
1061 u32 tFEAT_max;
1062 u32 tIR_min;
1063 u32 tITC_max;
1064 u32 tRC_min;
1065 u32 tREA_max;
1066 u32 tREH_min;
1067 u32 tRHOH_min;
1068 u32 tRHW_min;
1069 u32 tRHZ_max;
1070 u32 tRLOH_min;
1071 u32 tRP_min;
1072 u32 tRR_min;
1073 u64 tRST_max;
1074 u32 tWB_max;
1075 u32 tWC_min;
1076 u32 tWH_min;
1077 u32 tWHR_min;
1078 u32 tWP_min;
1079 u32 tWW_min;
1080};
1081
1082/* get timing characteristics from ONFI timing mode. */ 1150/* get timing characteristics from ONFI timing mode. */
1083const struct nand_sdr_timings *onfi_async_timing_mode_to_sdr_timings(int mode); 1151const struct nand_sdr_timings *onfi_async_timing_mode_to_sdr_timings(int mode);
1084 1152