 ecdce239a5
			
		
	
	ecdce239a5
	
	
	
		
			
			Some CFEs seem to misconfigure the mapped memory flash access with fast read but without a dummy byte, causing all accesses to be prefixed with 0xff. This of course breaks reading out the nvram, so do not just move back to single i/o accessors, but also ensure that the dummy byte is correctly set. Signed-off-by: Jonas Gorski <jogo@openwrt.org> SVN-Revision: 46707
		
			
				
	
	
		
			62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| From 8a30097a899b975709f728666d5ad20c8b832d21 Mon Sep 17 00:00:00 2001
 | |
| From: Jonas Gorski <jogo@openwrt.org>
 | |
| Date: Sun, 9 Mar 2014 04:28:14 +0100
 | |
| Subject: [PATCH 43/44] MIPS: BCM63XX: allow board implementations to force
 | |
|  flash address
 | |
| 
 | |
| Allow board implementations to force the physmap address.
 | |
| 
 | |
| Signed-off-by: Jonas Gorski <jogo@openwrt.org>
 | |
| ---
 | |
|  arch/mips/bcm63xx/dev-flash.c                         | 19 ++++++++++++++-----
 | |
|  .../mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h |  2 ++
 | |
|  2 files changed, 16 insertions(+), 5 deletions(-)
 | |
| 
 | |
| --- a/arch/mips/bcm63xx/dev-flash.c
 | |
| +++ b/arch/mips/bcm63xx/dev-flash.c
 | |
| @@ -58,6 +58,12 @@ static struct platform_device mtd_dev =
 | |
|  	},
 | |
|  };
 | |
|  
 | |
| +void __init bcm63xx_flash_force_phys_base_address(u32 start, u32 end)
 | |
| +{
 | |
| +	mtd_resources[0].start = start;
 | |
| +	mtd_resources[0].end = end;
 | |
| +}
 | |
| +
 | |
|  static int __init bcm63xx_detect_flash_type(void)
 | |
|  {
 | |
|  	u32 val;
 | |
| @@ -172,12 +178,15 @@ int __init bcm63xx_flash_register(void)
 | |
|  
 | |
|  	switch (flash_type) {
 | |
|  	case BCM63XX_FLASH_TYPE_PARALLEL:
 | |
| -		/* read base address of boot chip select (0) */
 | |
| -		val = bcm_mpi_readl(MPI_CSBASE_REG(0));
 | |
| -		val &= MPI_CSBASE_BASE_MASK;
 | |
|  
 | |
| -		mtd_resources[0].start = val;
 | |
| -		mtd_resources[0].end = 0x1FFFFFFF;
 | |
| +		if (!mtd_resources[0].start) {
 | |
| +			/* read base address of boot chip select (0) */
 | |
| +			val = bcm_mpi_readl(MPI_CSBASE_REG(0));
 | |
| +			val &= MPI_CSBASE_BASE_MASK;
 | |
| +
 | |
| +			mtd_resources[0].start = val;
 | |
| +			mtd_resources[0].end = 0x1FFFFFFF;
 | |
| +		}
 | |
|  
 | |
|  		return platform_device_register(&mtd_dev);
 | |
|  	case BCM63XX_FLASH_TYPE_SERIAL:
 | |
| --- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
 | |
| +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_flash.h
 | |
| @@ -9,6 +9,8 @@ enum {
 | |
|  
 | |
|  void bcm63xx_flash_detect(void);
 | |
|  
 | |
| +void bcm63xx_flash_force_phys_base_address(u32 start, u32 end);
 | |
| +
 | |
|  int __init bcm63xx_flash_register(void);
 | |
|  
 | |
|  #endif /* __BCM63XX_FLASH_H */
 |