spi_flash: Move (de-)assertion of /CS to single location
This consolidates all calls to spi_claim_bus() and spi_release_bus() to a single location where spi_xfer() is called. This avoids confusing (and potentially redundant) calls that were being done throughout the generic spi_flash.c functions and chip-specific functions. I don't think the current approach could even work since many chip drivers assert /CS once and then issue multiple commands such as page program followed by reading the status register. I suspect the reason we didn't notice it on x86 is because the ICH/PCH handled each individual command correctly (spi_claim_bus() and spi_release_bus() are noops) in spite of the broken code. BUG=none BRANCH=none TEST=tested on nyan and link Signed-off-by: David Hendricks <dhendrix@chromium.org> Original-Change-Id: I3257e2f6a2820834f4c9018069f90fcf2bab05f6 Original-Reviewed-on: https://chromium-review.googlesource.com/194510 Original-Reviewed-by: David Hendricks <dhendrix@chromium.org> Original-Commit-Queue: David Hendricks <dhendrix@chromium.org> Original-Tested-by: David Hendricks <dhendrix@chromium.org> (cherry picked from commit d3394d34fb49e9e252f67371674d5b3aa220bc9e) Signed-off-by: Marc Jones <marc.jones@se-eng.com> Change-Id: Ieb62309b18090d8f974f91a6e448af3d65dd3d1d Reviewed-on: http://review.coreboot.org/7829 Tested-by: build bot (Jenkins) Reviewed-by: Stefan Reinauer <stefan.reinauer@coreboot.org>
This commit is contained in:
		
				
					committed by
					
						 Marc Jones
						Marc Jones
					
				
			
			
				
	
			
			
			
						parent
						
							f101bbe4f0
						
					
				
				
					commit
					032c843817
				
			| @@ -73,7 +73,7 @@ static int eon_write(struct spi_flash *flash, | ||||
| 	unsigned long page_size; | ||||
| 	size_t chunk_len; | ||||
| 	size_t actual; | ||||
| 	int ret; | ||||
| 	int ret = 0; | ||||
| 	u8 cmd[4]; | ||||
|  | ||||
| 	page_size = eon->params->page_size; | ||||
| @@ -81,13 +81,7 @@ static int eon_write(struct spi_flash *flash, | ||||
| 	byte_addr = offset % page_size; | ||||
|  | ||||
| 	flash->spi->rw = SPI_WRITE_FLAG; | ||||
| 	ret = spi_claim_bus(flash->spi); | ||||
| 	if (ret) { | ||||
| 		printk(BIOS_WARNING, "SF: Unable to claim SPI bus\n"); | ||||
| 		return ret; | ||||
| 	} | ||||
|  | ||||
| 	ret = 0; | ||||
| 	for (actual = 0; actual < len; actual += chunk_len) { | ||||
| 		chunk_len = min(len - actual, page_size - byte_addr); | ||||
|  | ||||
| @@ -128,7 +122,6 @@ static int eon_write(struct spi_flash *flash, | ||||
| 	      len, offset); | ||||
| #endif | ||||
|  | ||||
| 	spi_release_bus(flash->spi); | ||||
| 	return ret; | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user