target/imx: reload cmp timer outside of the reload ptimer transaction
When running seL4 tests (https://docs.sel4.systems/projects/sel4test) on the sabrelight platform, the timer tests fail. The arm/imx6 EPIT timer interrupt does not fire properly, instead of a e.g. second in can take up to a minute to finally see the interrupt. Resolves: https://gitlab.com/qemu-project/qemu/-/issues/1263 Signed-off-by: Axel Heider <axel.heider@hensoldt.net> Message-id: 166663118138.13362.1229967229046092876-0@git.sr.ht Reviewed-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
		
							parent
							
								
									7764963b92
								
							
						
					
					
						commit
						7719419deb
					
				@ -275,10 +275,15 @@ static void imx_epit_write(void *opaque, hwaddr offset, uint64_t value,
 | 
			
		||||
            /* If IOVW bit is set then set the timer value */
 | 
			
		||||
            ptimer_set_count(s->timer_reload, s->lr);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /*
 | 
			
		||||
         * Commit the change to s->timer_reload, so it can propagate. Otherwise
 | 
			
		||||
         * the timer interrupt may not fire properly. The commit must happen
 | 
			
		||||
         * before calling imx_epit_reload_compare_timer(), which reads
 | 
			
		||||
         * s->timer_reload internally again.
 | 
			
		||||
         */
 | 
			
		||||
        ptimer_transaction_commit(s->timer_reload);
 | 
			
		||||
        imx_epit_reload_compare_timer(s);
 | 
			
		||||
        ptimer_transaction_commit(s->timer_cmp);
 | 
			
		||||
        ptimer_transaction_commit(s->timer_reload);
 | 
			
		||||
        break;
 | 
			
		||||
 | 
			
		||||
    case 3: /* CMP */
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user