• Lina Iyer's avatar
    drivers: qcom: rpmh-rsc: add RPMH controller for QCOM SoCs · 658628e7
    Lina Iyer authored
    Add controller driver for QCOM SoCs that have hardware based shared
    resource management. The hardware IP known as RSC (Resource State
    Coordinator) houses multiple Direct Resource Voter (DRV) for different
    execution levels. A DRV is a unique voter on the state of a shared
    resource. A Trigger Control Set (TCS) is a bunch of slots that can house
    multiple resource state requests, that when triggered will issue those
    requests through an internal bus to the Resource Power Manager Hardened
    (RPMH) blocks. These hardware blocks are capable of adjusting clocks,
    voltages, etc. The resource state request from a DRV are aggregated
    along with state requests from other processors in the SoC and the
    aggregate value is applied on the resource.
    
    Some important aspects of the RPMH communication -
    - Requests are <addr, value> with some header information
    - Multiple requests (upto 16) may be sent through a TCS, at a time
    - Requests in a TCS are sent in sequence
    - Requests may be fire-n-forget or completion (response expected)
    - Multiple TCS from the same DRV may be triggered simultaneously
    - Cannot send a request if another request for the same addr is in
      progress from the same DRV
    - When all the requests from a TCS are complete, an IRQ is raised
    - The IRQ handler needs to clear the TCS before it is available for
      reuse
    - TCS configuration is specific to a DRV
    - Platform drivers may use DRV from different RSCs to make requests
    
    Resource state requests made when CPUs are active are called 'active'
    state requests. Requests made when all the CPUs are powered down (idle
    state) are called 'sleep' state requests. They are matched by a
    corresponding 'wake' state requests which puts the resources back in to
    previously requested active state before resuming any CPU. TCSes are
    dedicated for each type of requests. Active mode TCSes (AMC) are used to
    send requests immediately to the resource, while control TCS are used to
    provide specific information to the controller. Sleep and Wake TCS send
    sleep and wake requests, after and before the system halt respectively.
    Signed-off-by: default avatarLina Iyer <ilina@codeaurora.org>
    Signed-off-by: default avatarRaju P.L.S.S.S.N <rplsssn@codeaurora.org>
    Signed-off-by: default avatarAndy Gross <andy.gross@linaro.org>
    658628e7
rpmh-rsc.c 11.4 KB