Skip to content
  • Joel Stanley's avatar
    8137355e
    aspeed/timer: Fix behaviour running Linux · 8137355e
    Joel Stanley authored
    
    
    The Linux kernel driver was updated in commit 4451d3f59f2a
    ("clocksource/drivers/fttmr010: Fix set_next_event handler) to fix an
    issue observed on hardware:
    
     > RELOAD register is loaded into COUNT register when the aspeed timer
     > is enabled, which means the next event may be delayed because timer
     > interrupt won't be generated until <0xFFFFFFFF - current_count +
     > cycles>.
    
    When running under Qemu, the system appeared "laggy". The guest is now
    scheduling timer events too regularly, starving the host of CPU time.
    
    This patch modifies the timer model to attempt to schedule the timer
    expiry as the guest requests, but if we have missed the deadline we
    re interrupt and try again, which allows the guest to catch up.
    
    Provides expected behaviour with old and new guest code.
    
    Fixes: c04bd47d ("hw/timer: Add ASPEED timer device model")
    Signed-off-by: default avatarJoel Stanley <joel@jms.id.au>
    Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
    Message-id: 20190618165311.27066-8-clg@kaod.org
    [clg: - merged a fix from Andrew Jeffery <andrew@aj.id.au>
            "Fire interrupt on failure to meet deadline"
            https://lists.ozlabs.org/pipermail/openbmc/2019-January/014641.html
    
    
          - adapted commit log
          - checkpatch fixes ]
    Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
    8137355e
    aspeed/timer: Fix behaviour running Linux
    Joel Stanley authored
    
    
    The Linux kernel driver was updated in commit 4451d3f59f2a
    ("clocksource/drivers/fttmr010: Fix set_next_event handler) to fix an
    issue observed on hardware:
    
     > RELOAD register is loaded into COUNT register when the aspeed timer
     > is enabled, which means the next event may be delayed because timer
     > interrupt won't be generated until <0xFFFFFFFF - current_count +
     > cycles>.
    
    When running under Qemu, the system appeared "laggy". The guest is now
    scheduling timer events too regularly, starving the host of CPU time.
    
    This patch modifies the timer model to attempt to schedule the timer
    expiry as the guest requests, but if we have missed the deadline we
    re interrupt and try again, which allows the guest to catch up.
    
    Provides expected behaviour with old and new guest code.
    
    Fixes: c04bd47d ("hw/timer: Add ASPEED timer device model")
    Signed-off-by: default avatarJoel Stanley <joel@jms.id.au>
    Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
    Message-id: 20190618165311.27066-8-clg@kaod.org
    [clg: - merged a fix from Andrew Jeffery <andrew@aj.id.au>
            "Fire interrupt on failure to meet deadline"
            https://lists.ozlabs.org/pipermail/openbmc/2019-January/014641.html
    
    
          - adapted commit log
          - checkpatch fixes ]
    Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
    Signed-off-by: default avatarPeter Maydell <peter.maydell@linaro.org>
Loading