Message ID | 20230802140606.2041889-1-quic_mmanikan@quicinc.com |
---|---|
Headers | show |
Series | Add multipd remoteproc support | expand |
On 8/2/2023 7:35 PM, Manikanta Mylavarapu wrote: > APSS brings Q6 out of reset and then Q6 brings > WCSS block (wifi radio's) out of reset. > > --------------- > --> |WiFi 2G radio| > | -------------- > | > -------- ------- | > | APSS | ---> |QDSP6| -----| > --------- ------- | > | > | > | -------------- > --> |WiFi 5G radio| > -------------- > > Problem here is if any radio crashes, subsequently other > radio also should crash because Q6 crashed. Let's say > 2G radio crashed, Q6 should pass this info to APSS. Only > Q6 processor interrupts registered with APSS. Obviously > Q6 should crash and raise fatal interrupt to APSS. Due > to this 5G radio also crashed. But no issue in 5G radio, > because of 2G radio crash 5G radio also impacted. > > In multi pd model, this problem is resolved. Here WCSS > functionality (WiFi radio's) moved out from Q6 root pd > to a separate user pd. Due to this, radio's independently > pass their status info to APPS with out crashing Q6. So > other radio's won't be impacted. > > Pd means protection domain. It's similar to process in Linux. > Here QDSP6 processor runs each wifi radio functionality on a > separate process. One process can't access other process > resources, so this is termed as PD i.e protection domain. > > APPS QDSP6 > ------- ------------- > | | Crash notification | | ---------- > | |<---------------------|----------|-------|WiFi | > | | | | |->|2G radio| > | | | ------- | | ---------- > | | | | | | | > |Root | Start/stop Q6 | | R | | | > |PD |<---------------------|->| | | | > |rproc| Crash notification | | O | | | > | | | | | | | > |User |Start/stop UserPD1(2G)| | O | | | > |PD1 |----------------------|->| |-|----| > |rproc| | | T | | | > | | | | | | | > |User |Start/stop UserPD2(5G)| | P | | | > |PD2 |----------------------|->| |-|----| > |rproc| | | D | | | > | | | ------- | | ----------- > | | Crash notification | | |->|WiFi | > | |<---------------------|----------|-------|5G radio | > ------- | | ----------- > ------------ > According to linux terminology, here consider Q6 as root > i.e it provide all services, WCSS (wifi radio's) as user > i.e it uses services provided by root. > > Since Q6 root & WCSS user pd's able to communicate with > APSS individually, multipd remoteproc driver registers > each PD with rproc framework. Here clients (Wifi host drivers) > intrested on WCSS PD rproc, so multipd driver start's root > pd in the context of WCSS user pd rproc start. Similarly > on down path, root pd will be stopped after wcss user pd > stopped. > > Here WCSS(user) PD is dependent on Q6(root) PD, so first > q6 pd should be up before wcss pd. After wcss pd goes down, > q6 pd should be turned off. > > IPQ5332, IPQ9574 supports multipd remoteproc driver. > > Manikanta Mylavarapu (11): > dt-bindings: remoteproc: qcom: Add support for multipd model > clk: qcom: ipq5332: remove q6 bring up clocks > clk: qcom: ipq9574: remove q6 bring up clocks > dt-bindings: clock: qcom: gcc-ipq5332: remove q6 bring up clock macros > dt-bindings: clock: qcom: gcc-ipq9574: remove q6 bring up clock macros > firmware: qcom_scm: ipq5332: add support to pass metadata size > firmware: qcom_scm: ipq5332: add msa lock/unlock support > remoteproc: qcom: q6v5: Add multipd interrupts support > remoteproc: qcom: Add Hexagon based multipd rproc driver > arm64: dts: qcom: ipq5332: Add nodes to bringup multipd > arm64: dts: qcom: ipq9574: Add nodes to bring up multipd > > .../bindings/remoteproc/qcom,multipd-pil.yaml | 189 +++++ > arch/arm64/boot/dts/qcom/ipq5332-rdp441.dts | 21 + > arch/arm64/boot/dts/qcom/ipq5332.dtsi | 60 ++ > arch/arm64/boot/dts/qcom/ipq9574.dtsi | 59 ++ > drivers/clk/qcom/gcc-ipq5332.c | 380 --------- > drivers/clk/qcom/gcc-ipq9574.c | 326 ------- > drivers/firmware/qcom_scm.c | 86 ++ > drivers/firmware/qcom_scm.h | 3 + > drivers/remoteproc/Kconfig | 19 + > drivers/remoteproc/Makefile | 1 + > drivers/remoteproc/qcom_q6v5.c | 41 +- > drivers/remoteproc/qcom_q6v5.h | 11 + > drivers/remoteproc/qcom_q6v5_mpd.c | 802 ++++++++++++++++++ > include/dt-bindings/clock/qcom,ipq5332-gcc.h | 20 - > include/dt-bindings/clock/qcom,ipq9574-gcc.h | 18 - > include/linux/firmware/qcom/qcom_scm.h | 2 + > 16 files changed, 1291 insertions(+), 747 deletions(-) > create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,multipd-pil.yaml > create mode 100644 drivers/remoteproc/qcom_q6v5_mpd.c Gentle reminder for review! Thanks & Regards, Manikanta.
On 8/2/2023 7:36 PM, Manikanta Mylavarapu wrote: > It adds support to bring up remoteproc's on multipd model. > Pd means protection domain. It's similar to process in Linux. > Here QDSP6 processor runs each wifi radio functionality on a > separate process. One process can't access other process > resources, so this is termed as PD i.e protection domain. > > Here we have two pd's called root and user pd. We can correlate > Root pd as root and user pd as user in linux. Root pd has more > privileges than user pd. Root will provide services to user pd. > > From remoteproc driver perspective, root pd corresponds to QDSP6 > processor bring up and user pd corresponds to Wifi radio (WCSS) > bring up. > > Here WCSS(user) PD is dependent on Q6(root) PD, so first > q6 pd should be up before wcss pd. After wcss pd goes down, > q6 pd should be turned off. > Thanks Krzysztof, Kalle, Rob, Bjorn for all your reviews. I have addressed them in this series. Can you please suggest and help me to take this forward ? Thanks & Regards, Manikanta.