|  | @@ -66,7 +66,7 @@ static void icache_enable(void)
 | 
	
		
			
				|  |  |      cpu_sync(); 
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -static void dcache_invalidate_all(void)
 | 
	
		
			
				|  |  | +static void _dcache_op_all(volatile uint32_t *opreg)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      uint32_t ccsidr;
 | 
	
		
			
				|  |  |      unsigned int sets, ways;
 | 
	
	
		
			
				|  | @@ -78,12 +78,22 @@ static void dcache_invalidate_all(void)
 | 
	
		
			
				|  |  |      do {
 | 
	
		
			
				|  |  |          ways = CCSIDR_WAYS(ccsidr);
 | 
	
		
			
				|  |  |          do {
 | 
	
		
			
				|  |  | -            cache->dcisw = DCISW_SET(sets) | DCISW_WAY(ways);
 | 
	
		
			
				|  |  | +            *opreg = DCISW_SET(sets) | DCISW_WAY(ways);
 | 
	
		
			
				|  |  |          } while (ways--);
 | 
	
		
			
				|  |  |      } while (sets--);
 | 
	
		
			
				|  |  |      cpu_sync();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +static void dcache_invalidate_all(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    _dcache_op_all(&cache->dcisw);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static void dcache_clear_and_invalidate_all(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    _dcache_op_all(&cache->dccisw);
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  static void dcache_enable(void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      dcache_invalidate_all();
 | 
	
	
		
			
				|  | @@ -91,6 +101,13 @@ static void dcache_enable(void)
 | 
	
		
			
				|  |  |      cpu_sync();
 | 
	
		
			
				|  |  |  }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | +void dcache_disable(void)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +    scb->ccr &= ~SCB_CCR_DC;
 | 
	
		
			
				|  |  | +    cpu_sync();
 | 
	
		
			
				|  |  | +    dcache_clear_and_invalidate_all();
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  |  void peripheral_clock_delay(void)
 | 
	
		
			
				|  |  |  {
 | 
	
		
			
				|  |  |      delay_ticks(2);
 |