From: Shawn Guo <shengchao.guo@oss.qualcomm.com>
To: Anurag Pateriya <anurag.pateriya@oss.qualcomm.com>
Cc: Bjorn Andersson <andersson@kernel.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Jingyi Wang <jingyi.wang@oss.qualcomm.com>,
linux-arm-msm@vger.kernel.org, linux-remoteproc@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
Bibek Kumar Patro <bibek.patro@oss.qualcomm.com>
Subject: Re: [PATCH RFC 2/2] remoteproc: qcom_q6v5_pas: map SOCCP carveout privileged-only
Date: Sat, 14 Nov 2026 12:28:06 +0800 [thread overview]
Message-ID: <avfjVqCHXABFg4ue@QCOM-aGQu4IUr3Y> (raw)
In-Reply-To: <20261113-nord_embedded_el2-v1-2-48f717e97066@oss.qualcomm.com>
On Fri, Nov 13, 2026 at 05:54:13PM +0530, Anurag Pateriya wrote:
> From: Bibek Kumar Patro <bibek.patro@oss.qualcomm.com>
>
> SOCCP is a RISC-V core whose instruction fetches go through the
> SMMU in privilege mode
>
> The memory region is mapped with IOMMU_READ | IOMMU_WRITE, which results
> in permission fault when SOCCP fetches instruction, append IOMMU_PRIV to
> mapping to allow it to fetch instructions.
This says what fails and what makes it go away, but not why. A reader
can't tell from this why an RW mapping is fine for a data access but
faults on an instruction fetch, or why IOMMU_PRIV fixes it.
As I understand it, the chain is:
- Without IOMMU_PRIV, io-pgtable-arm sets AP[1] in the stage-1 PTE,
so the carveout ends up AP[2:1] = 0b01, i.e. writable at the
unprivileged level.
- In the VMSAv8-64 stage-1 permission model, memory writable at the
unprivileged level is implicitly privileged-execute-never,
regardless of PXN.
- SoCCP fetches arrive as privileged instruction transactions, so
the first fetch takes a stage-1 permission fault (FSR.PF,
FSYNR0.IND=1).
- IOMMU_PRIV clears AP[1] (AP[2:1] = 0b00, privileged RW only),
which removes the implicit PXN.
Something along these lines:
On Nord, when Linux runs at EL2 it owns the SoCCP stream and the
remoteproc core maps the firmware carveout through a stage-1 SMMU
context bank. qcom_pas_map_carveout() uses IOMMU_READ | IOMMU_WRITE
without IOMMU_PRIV, so io-pgtable-arm builds stage-1 PTEs with
AP[2:1] = 0b01: read/write at both privileged and unprivileged
level.
SoCCP is a RISC-V core whose instruction fetches reach the SMMU as
privileged transactions. In the VMSAv8-64 stage-1 permission model,
memory that is writable at the unprivileged level is implicitly
privileged-execute-never, regardless of the PXN bit in the PTE. The
first SoCCP instruction fetch after PAS authentication therefore
takes a stage-1 permission fault (FSR.PF, FSYNR0.IND=1).
Map the SoCCP carveout with IOMMU_PRIV, so the stage-1 PTEs are
privileged read/write only (AP[2:1] = 0b00). This removes the
implicit privileged-execute-never and lets SoCCP fetch from the
carveout.
Other PIL subsystems (e.g. Hexagon Q6) are not affected as their
instruction fetches do not go through the SMMU in privileged mode.
Another nit: please use SoCCP (instead of SOCCP) everywhere, e.g. patch
subject, for sake of consistency.
Shawn
prev parent reply other threads:[~2026-11-14 4:28 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-13 12:24 [PATCH RFC 0/2] Add binding and fix SoCCP carveout for booting Nord devices at EL2 Anurag Pateriya
2026-11-13 12:24 ` [PATCH RFC 1/2] dt-bindings: remoteproc: qcom,kaanapali-soccp-pas: Allow 2 IOMMUs for Nord Anurag Pateriya
2026-11-13 12:24 ` [PATCH RFC 2/2] remoteproc: qcom_q6v5_pas: map SOCCP carveout privileged-only Anurag Pateriya
2026-11-14 4:28 ` Shawn Guo [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=avfjVqCHXABFg4ue@QCOM-aGQu4IUr3Y \
--to=shengchao.guo@oss.qualcomm.com \
--cc=andersson@kernel.org \
--cc=anurag.pateriya@oss.qualcomm.com \
--cc=bibek.patro@oss.qualcomm.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=jingyi.wang@oss.qualcomm.com \
--cc=krzk+dt@kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=robh@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®