• Ashwin Chaugule's avatar
    ACPI / CPPC: Optimize PCC Read Write operations · ad62e1e6
    Ashwin Chaugule authored
    Previously the send_pcc_cmd() code checked if the
    PCC operation had completed before returning from
    the function. This check was performed regardless
    of the PCC op type (i.e. Read/Write). Knowing
    the type of cmd can be used to optimize the check
    and avoid needless waiting. e.g. with Write ops,
    the actual Writing is done before calling send_pcc_cmd().
    And the subsequent Writes will check if the channel is
    free at the entry of send_pcc_cmd() anyway.
    
    However, for Read cmds, we need to wait for the cmd
    completion bit to be flipped, since the actual Read
    ops follow after returning from the send_pcc_cmd(). So,
    only do the looping check at the end for Read ops.
    
    Also, instead of using udelay() calls, use ktime as a
    means to check for deadlines. The current deadline
    in which the Remote should flip the cmd completion bit
    is defined as N * Nominal latency. Where N is arbitrary
    and large enough to work on slow emulators and Nominal
    latency comes from the ACPI table (PCCT). This helps
    in working around the CONFIG_HZ effects on udelay()
    and also avoids needing different ACPI tables for Silicon
    and Emulation platforms.
    Signed-off-by: default avatarAshwin Chaugule <ashwin.chaugule@linaro.org>
    Signed-off-by: default avatarPrashanth Prakash <pprakash@codeaurora.org>
    Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    ad62e1e6
cppc_acpi.c 20.2 KB