coreboot_tables: pass the early_mmc_wake_hw status to payload
Pass the return value from early_mmc_wake_hw() to the payload so that payload can skip sending CMD0 and resetting the card in case of success or in case of a failure in firmware, payload can recover by sending CMD0 and resetting the card. BUG=b:78106689 TEST=Boot to OS Change-Id: Ia4c57d05433c3966118c3642913d7017958cce55 Signed-off-by: Bora Guvendik <bora.guvendik@intel.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/25464 Reviewed-by: Lijian Zhao <lijian.zhao@intel.com> Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						 Patrick Georgi
						Patrick Georgi
					
				
			
			
				
	
			
			
			
						parent
						
							b7fe7a1a8e
						
					
				
				
					commit
					ddf2bc5081
				
			| @@ -287,6 +287,21 @@ struct cb_macs { | ||||
| 	struct mac_address mac_addrs[0]; | ||||
| }; | ||||
|  | ||||
| #define CB_TAG_MMC_INFO		0x0034 | ||||
| struct cb_mmc_info { | ||||
| 	uint32_t tag; | ||||
| 	uint32_t size; | ||||
| 	/* | ||||
| 	 * Passes the early mmc status to payload to indicate if firmware | ||||
| 	 * successfully sent CMD0, CMD1 to the card or not. In case of | ||||
| 	 * success, the payload can skip the first step of the initialization | ||||
| 	 * sequence which is to send CMD0, and instead start by sending CMD1 | ||||
| 	 * as described in Jedec Standard JESD83-B1 section 6.4.3. | ||||
| 	 * passes 1 on success | ||||
| 	 */ | ||||
| 	int32_t early_cmd1_status; | ||||
| }; | ||||
|  | ||||
| #define CB_TAG_SERIALNO		0x002a | ||||
| #define CB_MAX_SERIALNO_LENGTH	32 | ||||
|  | ||||
|   | ||||
| @@ -129,6 +129,7 @@ struct sysinfo_t { | ||||
| 	uint64_t mtc_start; | ||||
| 	uint32_t mtc_size; | ||||
| 	void	*chromeos_vpd; | ||||
| 	int	mmc_early_wake_status; | ||||
| }; | ||||
|  | ||||
| extern struct sysinfo_t lib_sysinfo; | ||||
|   | ||||
| @@ -102,6 +102,13 @@ static void cb_parse_vbnv(unsigned char *ptr, struct sysinfo_t *info) | ||||
| 	info->vbnv_size = vbnv->range_size; | ||||
| } | ||||
|  | ||||
| static void cb_parse_mmc_info(unsigned char *ptr, struct sysinfo_t *info) | ||||
| { | ||||
| 	struct cb_mmc_info *mmc_info = (struct cb_mmc_info *)ptr; | ||||
|  | ||||
| 	info->mmc_early_wake_status = mmc_info->early_cmd1_status; | ||||
| } | ||||
|  | ||||
| static void cb_parse_gpios(unsigned char *ptr, struct sysinfo_t *info) | ||||
| { | ||||
| 	int i; | ||||
| @@ -399,6 +406,9 @@ int cb_parse_header(void *addr, int len, struct sysinfo_t *info) | ||||
| 		case CB_TAG_SPI_FLASH: | ||||
| 			cb_parse_spi_flash(ptr, info); | ||||
| 			break; | ||||
| 		case CB_TAG_MMC_INFO: | ||||
| 			cb_parse_mmc_info(ptr, info); | ||||
| 			break; | ||||
| 		case CB_TAG_MTC: | ||||
| 			cb_parse_mtc(ptr, info); | ||||
| 			break; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user