Re: [PATCH v9 3/3] soc: qcom: rpmh: Invoke rpmh_flush() for dirty caches

From: Doug Anderson
Date: Thu Mar 05 2020 - 17:18:22 EST


Hi,

On Thu, Mar 5, 2020 at 1:41 AM Maulik Shah <mkshah@xxxxxxxxxxxxxx> wrote:
>> There are other cases like below which also gets impacted if driver
> >> don't cache anything...
> >>
> >> for example, when we donât have dedicated ACTIVE TCS ( if we have below
> >> config with ACTIVE TCS count 0)
> >> qcom,tcs-config = <ACTIVE_TCS 0>,
> >> <SLEEP_TCS 3>,
> >> <WAKE_TCS 3>,
> >>
> >> Now to send active data, driver may re-use/ re-purpose few of the sleep
> >> or wake TCS, to be used as ACTIVE TCS and once work is done,
> >> it will be re-allocated in SLEEP/ WAKE TCS pool accordingly. If driver
> >> donât cache, all the SLEEP and WAKE data is lost when one
> >> of TCS is repurposed to use as ACTIVE TCS.
> > Ah, interesting. I'll read the code more, but are you expecting this
> > type of situation to work today, or is it theoretical for the future?
> yes, we have targets which needs to work with this type of situation.

My brain is still slowly absorbing all the code, but something tells
me that targets with no ACTIVE TCS will not work properly with non-OSI
mode unless you change your patches more. Specifically to make the
zero ACTIVE TCS case work I think you need a rpmh_flush() call after
_ALL_ calls to rpmh_write() and rpmh_write_batch() (even those
modifying ACTIVE state). rpmh_write_async() will be yet more
interesting because you'd have to flush in rpmh_tx_done() I guess?
...and also somehow you need to inhibit entering sleep mode if an
async write was in progress? Maybe easier to just detect the
"non-OSI-mode + 0 ACTIVE TCS" case at probe time and fail to probe?


-Doug