mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	mtd: nand: Add a few more timings to nand_sdr_timings
Add the tR_max, tBERS_max, tPROG_max and tCCS_min timings to the nand_sdr_timings struct. Assign default/safe values for the statically defined timings, and extract them from the ONFI parameter table if the NAND is ONFI compliant. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> Tested-by: Marc Gonzalez <marc_gonzalez@sigmadesigns.com> [Linux commit: 204e7ecd47e26cc12d9e8e8a7e7a2eeb9573f0ba Fixup commit: 6d29231000bbe0fb9e4893a9c68151ffdd3b5469] Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
This commit is contained in:
		
				
					committed by
					
						 Masahiro Yamada
						Masahiro Yamada
					
				
			
			
				
	
			
			
			
						parent
						
							3d841b3214
						
					
				
				
					commit
					6f84b26b53
				
			| @@ -17,6 +17,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = { | ||||
| 	{ | ||||
| 		.type = NAND_SDR_IFACE, | ||||
| 		.timings.sdr = { | ||||
| 			.tCCS_min = 500000, | ||||
| 			.tR_max = 200000000, | ||||
| 			.tADL_min = 400000, | ||||
| 			.tALH_min = 20000, | ||||
| 			.tALS_min = 50000, | ||||
| @@ -57,6 +59,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = { | ||||
| 	{ | ||||
| 		.type = NAND_SDR_IFACE, | ||||
| 		.timings.sdr = { | ||||
| 			.tCCS_min = 500000, | ||||
| 			.tR_max = 200000000, | ||||
| 			.tADL_min = 400000, | ||||
| 			.tALH_min = 10000, | ||||
| 			.tALS_min = 25000, | ||||
| @@ -97,6 +101,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = { | ||||
| 	{ | ||||
| 		.type = NAND_SDR_IFACE, | ||||
| 		.timings.sdr = { | ||||
| 			.tCCS_min = 500000, | ||||
| 			.tR_max = 200000000, | ||||
| 			.tADL_min = 400000, | ||||
| 			.tALH_min = 10000, | ||||
| 			.tALS_min = 15000, | ||||
| @@ -137,6 +143,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = { | ||||
| 	{ | ||||
| 		.type = NAND_SDR_IFACE, | ||||
| 		.timings.sdr = { | ||||
| 			.tCCS_min = 500000, | ||||
| 			.tR_max = 200000000, | ||||
| 			.tADL_min = 400000, | ||||
| 			.tALH_min = 5000, | ||||
| 			.tALS_min = 10000, | ||||
| @@ -177,6 +185,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = { | ||||
| 	{ | ||||
| 		.type = NAND_SDR_IFACE, | ||||
| 		.timings.sdr = { | ||||
| 			.tCCS_min = 500000, | ||||
| 			.tR_max = 200000000, | ||||
| 			.tADL_min = 400000, | ||||
| 			.tALH_min = 5000, | ||||
| 			.tALS_min = 10000, | ||||
| @@ -217,6 +227,8 @@ static const struct nand_data_interface onfi_sdr_timings[] = { | ||||
| 	{ | ||||
| 		.type = NAND_SDR_IFACE, | ||||
| 		.timings.sdr = { | ||||
| 			.tCCS_min = 500000, | ||||
| 			.tR_max = 200000000, | ||||
| 			.tADL_min = 400000, | ||||
| 			.tALH_min = 5000, | ||||
| 			.tALS_min = 10000, | ||||
| @@ -289,10 +301,22 @@ int onfi_init_data_interface(struct nand_chip *chip, | ||||
| 	*iface = onfi_sdr_timings[timing_mode]; | ||||
|  | ||||
| 	/* | ||||
| 	 * TODO: initialize timings that cannot be deduced from timing mode: | ||||
| 	 * Initialize timings that cannot be deduced from timing mode: | ||||
| 	 * tR, tPROG, tCCS, ... | ||||
| 	 * These information are part of the ONFI parameter page. | ||||
| 	 */ | ||||
| 	if (chip->onfi_version) { | ||||
| 		struct nand_onfi_params *params = &chip->onfi_params; | ||||
| 		struct nand_sdr_timings *timings = &iface->timings.sdr; | ||||
|  | ||||
| 		/* microseconds -> picoseconds */ | ||||
| 		timings->tPROG_max = 1000000ULL * le16_to_cpu(params->t_prog); | ||||
| 		timings->tBERS_max = 1000000ULL * le16_to_cpu(params->t_bers); | ||||
| 		timings->tR_max = 1000000ULL * le16_to_cpu(params->t_r); | ||||
|  | ||||
| 		/* nanoseconds -> picoseconds */ | ||||
| 		timings->tCCS_min = 1000UL * le16_to_cpu(params->t_ccs); | ||||
| 	} | ||||
|  | ||||
| 	return 0; | ||||
| } | ||||
|   | ||||
| @@ -595,6 +595,10 @@ struct nand_buffers { | ||||
|  * | ||||
|  * All these timings are expressed in picoseconds. | ||||
|  * | ||||
|  * @tBERS_max: Block erase time | ||||
|  * @tCCS_min: Change column setup time | ||||
|  * @tPROG_max: Page program time | ||||
|  * @tR_max: Page read time | ||||
|  * @tALH_min: ALE hold time | ||||
|  * @tADL_min: ALE to data loading time | ||||
|  * @tALS_min: ALE setup time | ||||
| @@ -632,6 +636,10 @@ struct nand_buffers { | ||||
|  * @tWW_min: WP# transition to WE# low | ||||
|  */ | ||||
| struct nand_sdr_timings { | ||||
| 	u64 tBERS_max; | ||||
| 	u32 tCCS_min; | ||||
| 	u64 tPROG_max; | ||||
| 	u64 tR_max; | ||||
| 	u32 tALH_min; | ||||
| 	u32 tADL_min; | ||||
| 	u32 tALS_min; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user