<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/drivers/remoteproc, branch v6.19.11</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=v6.19.11</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=v6.19.11'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2026-03-19T15:14:45+00:00</updated>
<entry>
<title>remoteproc: mediatek: Unprepare SCP clock during system suspend</title>
<updated>2026-03-19T15:14:45+00:00</updated>
<author>
<name>Tzung-Bi Shih</name>
<email>tzungbi@kernel.org</email>
</author>
<published>2026-02-06T03:30:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=d946b6ff3f813f30a4ad1ea3f9fecf3d62f1b79a'/>
<id>urn:sha1:d946b6ff3f813f30a4ad1ea3f9fecf3d62f1b79a</id>
<content type='text'>
[ Upstream commit 35c3f72a2d55dbf52f28f4ecae51c76be1acf545 ]

Prior to commit d935187cfb27 ("remoteproc: mediatek: Break lock
dependency to prepare_lock"), `scp-&gt;clk` was prepared and enabled only
when it needs to communicate with the SCP.  The commit d935187cfb27
moved the prepare operation to remoteproc's prepare(), keeping the clock
prepared as long as the SCP is running.

The power consumption due to the prolonged clock preparation can be
negligible when the system is running, as SCP is designed to be a very
power efficient processor.

However, the clock remains prepared even when the system enters system
suspend.  This prevents the underlying clock controller (and potentially
the parent PLLs) from shutting down, which increases power consumption
and may block the system from entering deep sleep states.

Add suspend and resume callbacks.  Unprepare the clock in suspend() if
it was active and re-prepare it in resume() to ensure the clock is
properly disabled during system suspend, while maintaining the "always
prepared" semantics while the system is active.  The driver doesn't
implement .attach() callback, hence it only checks for RPROC_RUNNING.

Fixes: d935187cfb27 ("remoteproc: mediatek: Break lock dependency to prepare_lock")
Reviewed-by: AngeloGioacchino Del Regno &lt;angelogioacchino.delregno@collabora.com&gt;
Signed-off-by: Tzung-Bi Shih &lt;tzungbi@kernel.org&gt;
Link: https://lore.kernel.org/r/20260206033034.3031781-1-tzungbi@kernel.org
Signed-off-by: Mathieu Poirier &lt;mathieu.poirier@linaro.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>remoteproc: sysmon: Correct subsys_name_len type in QMI request</title>
<updated>2026-03-19T15:14:45+00:00</updated>
<author>
<name>Bjorn Andersson</name>
<email>bjorn.andersson@oss.qualcomm.com</email>
</author>
<published>2026-02-20T21:11:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=bc1c1832e56a321e6a1a58cf9dfe67f6c9bd045e'/>
<id>urn:sha1:bc1c1832e56a321e6a1a58cf9dfe67f6c9bd045e</id>
<content type='text'>
[ Upstream commit da994db94e60f9a9411108ddf4d1836147ad4c9c ]

The QMI message encoder has up until recently read a single byte (as
elem_size == 1), but with the introduction of big endian support it's
become apparent that this field is expected to be a full u32 -
regardless of the size of the length in the encoded message (which is
what elem_size specifies).

The result is that the encoder now reads past the length byte and
rejects the unreasonably large length formed when including the
following 3 bytes from the subsys_name array.

Fix this by changing to the expected type.

Fixes: 1fb82ee806d1 ("remoteproc: qcom: Introduce sysmon")
Signed-off-by: Bjorn Andersson &lt;bjorn.andersson@oss.qualcomm.com&gt;
Reviewed-by: Chris Lew &lt;christopher.lew@oss.qualcomm.com&gt;
Link: https://lore.kernel.org/r/20260220-qmi-encode-invalid-length-v2-1-5674be35ab29@oss.qualcomm.com
Signed-off-by: Bjorn Andersson &lt;andersson@kernel.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>remoteproc: qcom_wcnss: Fix reserved region mapping failure</title>
<updated>2026-03-19T15:14:44+00:00</updated>
<author>
<name>Rob Herring (Arm)</name>
<email>robh@kernel.org</email>
</author>
<published>2026-01-28T22:02:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=3a5736ac0c1f01e4ec0a89aa136177df5e308676'/>
<id>urn:sha1:3a5736ac0c1f01e4ec0a89aa136177df5e308676</id>
<content type='text'>
[ Upstream commit f9b888599418951b8229bbb28851ed4da50c58e9 ]

Commit c70b9d5fdcd7 ("remoteproc: qcom: Use of_reserved_mem_region_*
functions for "memory-region"") switched from devm_ioremap_wc() to
devm_ioremap_resource_wc(). The difference is devm_ioremap_resource_wc()
also requests the resource which fails. Testing of both fixed and
dynamic reserved regions indicates that requesting the resource should
work, so I'm not sure why it doesn't work in this case. Fix the issue by
reverting back to devm_ioremap_wc().

Reported-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Reported-by: André Apitzsch &lt;git@apitzsch.eu&gt;
Fixes: c70b9d5fdcd7 ("remoteproc: qcom: Use of_reserved_mem_region_* functions for "memory-region"")
Signed-off-by: Rob Herring (Arm) &lt;robh@kernel.org&gt;
Tested-by: Marek Szyprowski &lt;m.szyprowski@samsung.com&gt;
Tested-by: André Apitzsch &lt;git@apitzsch.eu&gt; # on BQ Aquaris M5
Link: https://lore.kernel.org/r/20260128220243.3018526-1-robh@kernel.org
Signed-off-by: Bjorn Andersson &lt;andersson@kernel.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>remoteproc: imx_rproc: Fix invalid loaded resource table detection</title>
<updated>2026-03-04T12:21:32+00:00</updated>
<author>
<name>Peng Fan</name>
<email>peng.fan@nxp.com</email>
</author>
<published>2026-01-29T01:44:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=198c629bd03863591f3fbf5ce8ff974a33f13dc9'/>
<id>urn:sha1:198c629bd03863591f3fbf5ce8ff974a33f13dc9</id>
<content type='text'>
[ Upstream commit 26aa5295010ffaebcf8f1991c53fa7cf2ee1b20d ]

imx_rproc_elf_find_loaded_rsc_table() may incorrectly report a loaded
resource table even when the current firmware does not provide one.

When the device tree contains a "rsc-table" entry, priv-&gt;rsc_table is
non-NULL and denotes where a resource table would be located if one is
present in memory. However, when the current firmware has no resource
table, rproc-&gt;table_ptr is NULL. The function still returns
priv-&gt;rsc_table, and the remoteproc core interprets this as a valid loaded
resource table.

Fix this by returning NULL from imx_rproc_elf_find_loaded_rsc_table() when
there is no resource table for the current firmware (i.e. when
rproc-&gt;table_ptr is NULL). This aligns the function's semantics with the
remoteproc core: a loaded resource table is only reported when a valid
table_ptr exists.

With this change, starting firmware without a resource table no longer
triggers a crash.

Fixes: e954a1bd1610 ("remoteproc: imx_rproc: Use imx specific hook for find_loaded_rsc_table")
Cc: stable@vger.kernel.org
Signed-off-by: Peng Fan &lt;peng.fan@nxp.com&gt;
Acked-by: Daniel Baluta &lt;daniel.baluta@nxp.com&gt;
Link: https://lore.kernel.org/r/20260129-imx-rproc-fix-v3-1-fc4e41e6e750@nxp.com
Signed-off-by: Mathieu Poirier &lt;mathieu.poirier@linaro.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>remoteproc: mediatek: Break lock dependency to `prepare_lock`</title>
<updated>2026-03-04T12:20:36+00:00</updated>
<author>
<name>Tzung-Bi Shih</name>
<email>tzungbi@kernel.org</email>
</author>
<published>2026-01-12T11:07:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=125ebbb13c16fc7fca86a76ab79612d401eb9f30'/>
<id>urn:sha1:125ebbb13c16fc7fca86a76ab79612d401eb9f30</id>
<content type='text'>
[ Upstream commit d935187cfb27fc4168f78f3959aef4eafaae76bb ]

A potential circular locking dependency (ABBA deadlock) exists between
`ec_dev-&gt;lock` and the clock framework's `prepare_lock`.

The first order (A -&gt; B) occurs when scp_ipi_send() is called while
`ec_dev-&gt;lock` is held (e.g., within cros_ec_cmd_xfer()):
1. cros_ec_cmd_xfer() acquires `ec_dev-&gt;lock` and calls scp_ipi_send().
2. scp_ipi_send() calls clk_prepare_enable(), which acquires
   `prepare_lock`.
See #0 in the following example calling trace.
(Lock Order: `ec_dev-&gt;lock` -&gt; `prepare_lock`)

The reverse order (B -&gt; A) is more complex and has been observed
(learned) by lockdep.  It involves the clock prepare operation
triggering power domain changes, which then propagates through sysfs
and power supply uevents, eventually calling back into the ChromeOS EC
driver and attempting to acquire `ec_dev-&gt;lock`:
1. Something calls clk_prepare(), which acquires `prepare_lock`.  It
   then triggers genpd operations like genpd_runtime_resume(), which
   takes `&amp;genpd-&gt;mlock`.
2. Power domain changes can trigger regulator changes; regulator
   changes can then trigger device link changes; device link changes
   can then trigger sysfs changes.  Eventually, power_supply_uevent()
   is called.
3. This leads to calls like cros_usbpd_charger_get_prop(), which calls
   cros_ec_cmd_xfer_status(), which then attempts to acquire
   `ec_dev-&gt;lock`.
See #1 ~ #6 in the following example calling trace.
(Lock Order: `prepare_lock` -&gt; `&amp;genpd-&gt;mlock` -&gt; ... -&gt; `&amp;ec_dev-&gt;lock`)

Move the clk_prepare()/clk_unprepare() operations for `scp-&gt;clk` to the
remoteproc prepare()/unprepare() callbacks.  This ensures `prepare_lock`
is only acquired in prepare()/unprepare() callbacks.  Since
`ec_dev-&gt;lock` is not involved in the callbacks, the dependency loop is
broken.

This means the clock is always "prepared" when the SCP is running.  The
prolonged "prepared time" for the clock should be acceptable as SCP is
designed to be a very power efficient processor.  The power consumption
impact can be negligible.

A simplified calling trace reported by lockdep:
&gt; -&gt; #6 (&amp;ec_dev-&gt;lock)
&gt;        cros_ec_cmd_xfer
&gt;        cros_ec_cmd_xfer_status
&gt;        cros_usbpd_charger_get_port_status
&gt;        cros_usbpd_charger_get_prop
&gt;        power_supply_get_property
&gt;        power_supply_show_property
&gt;        power_supply_uevent
&gt;        dev_uevent
&gt;        uevent_show
&gt;        dev_attr_show
&gt;        sysfs_kf_seq_show
&gt;        kernfs_seq_show
&gt; -&gt; #5 (kn-&gt;active#2)
&gt;        kernfs_drain
&gt;        __kernfs_remove
&gt;        kernfs_remove_by_name_ns
&gt;        sysfs_remove_file_ns
&gt;        device_del
&gt;        __device_link_del
&gt;        device_links_driver_bound
&gt; -&gt; #4 (device_links_lock)
&gt;        device_link_remove
&gt;        _regulator_put
&gt;        regulator_put
&gt; -&gt; #3 (regulator_list_mutex)
&gt;        regulator_lock_dependent
&gt;        regulator_disable
&gt;        scpsys_power_off
&gt;        _genpd_power_off
&gt;        genpd_power_off
&gt; -&gt; #2 (&amp;genpd-&gt;mlock/1)
&gt;        genpd_add_subdomain
&gt;        pm_genpd_add_subdomain
&gt;        scpsys_add_subdomain
&gt;        scpsys_probe
&gt; -&gt; #1 (&amp;genpd-&gt;mlock)
&gt;        genpd_runtime_resume
&gt;        __rpm_callback
&gt;        rpm_callback
&gt;        rpm_resume
&gt;        __pm_runtime_resume
&gt;        clk_core_prepare
&gt;        clk_prepare
&gt; -&gt; #0 (prepare_lock)
&gt;        clk_prepare
&gt;        scp_ipi_send
&gt;        scp_send_ipi
&gt;        mtk_rpmsg_send
&gt;        rpmsg_send
&gt;        cros_ec_pkt_xfer_rpmsg

Signed-off-by: Tzung-Bi Shih &lt;tzungbi@kernel.org&gt;
Reviewed-by: Chen-Yu Tsai &lt;wenst@chromium.org&gt;
Tested-by: Chen-Yu Tsai &lt;wenst@chromium.org&gt;
Link: https://lore.kernel.org/r/20260112110755.2435899-1-tzungbi@kernel.org
Signed-off-by: Mathieu Poirier &lt;mathieu.poirier@linaro.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>remoteproc: imx_dsp_rproc: Skip RP_MBOX_SUSPEND_SYSTEM when mailbox TX channel is uninitialized</title>
<updated>2026-03-04T12:20:36+00:00</updated>
<author>
<name>Iuliana Prodan</name>
<email>iuliana.prodan@nxp.com</email>
</author>
<published>2025-12-04T12:28:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=b9b6d429b6ec0687a4beac9e14bf1ae4a6202d85'/>
<id>urn:sha1:b9b6d429b6ec0687a4beac9e14bf1ae4a6202d85</id>
<content type='text'>
[ Upstream commit d62e0e92e589c53c4320ed5914af5fe103f5ce7e ]

Firmwares that do not use mailbox communication (e.g., the hello_world
sample) leave priv-&gt;tx_ch as NULL. The current suspend logic
unconditionally sends RP_MBOX_SUSPEND_SYSTEM, which is invalid without
an initialized TX channel.

Detect the no_mailboxes case early and skip sending the suspend
message. Instead, proceed directly to the runtime PM suspend path,
which is the correct behavior for firmwares that cannot respond to
mailbox requests.

Signed-off-by: Iuliana Prodan &lt;iuliana.prodan@nxp.com&gt;
Link: https://lore.kernel.org/r/20251204122825.756106-1-iuliana.prodan@oss.nxp.com
Signed-off-by: Mathieu Poirier &lt;mathieu.poirier@linaro.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>remoteproc: imx_dsp_rproc: Only reset carveout memory at RPROC_OFFLINE state</title>
<updated>2026-02-26T23:01:19+00:00</updated>
<author>
<name>Shengjiu Wang</name>
<email>shengjiu.wang@nxp.com</email>
</author>
<published>2025-12-18T07:17:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=238c421ad1c7be9c541f6e5ea4667494091b89b9'/>
<id>urn:sha1:238c421ad1c7be9c541f6e5ea4667494091b89b9</id>
<content type='text'>
[ Upstream commit b490ddf27be28e64a39c08ae643d7b22561beaf6 ]

Do not reset memory at suspend and resume stage, because some
memory is used to save the software state for resume, if it is cleared,
the resume operation can fail.

Fixes: c4c432dfb00f ("remoteproc: imx_dsp_rproc: Add support of recovery and coredump process")
Signed-off-by: Shengjiu Wang &lt;shengjiu.wang@nxp.com&gt;
Reviewed-by: Daniel Baluta &lt;daniel.baluta@nxp.com&gt;
Reviewed-by: Iuliana Prodan &lt;iuliana.prodan@nxp.com&gt;
Link: https://lore.kernel.org/r/20251218071750.2692132-1-shengjiu.wang@nxp.com
Signed-off-by: Mathieu Poirier &lt;mathieu.poirier@linaro.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>remoteproc: imx_dsp_rproc: Fix multiple start/stop operations</title>
<updated>2026-02-26T23:01:19+00:00</updated>
<author>
<name>Daniel Baluta</name>
<email>daniel.baluta@nxp.com</email>
</author>
<published>2025-12-10T15:49:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=e2eb8982f8d93cf1bd875d2db31e567f01f8a52f'/>
<id>urn:sha1:e2eb8982f8d93cf1bd875d2db31e567f01f8a52f</id>
<content type='text'>
[ Upstream commit a84a1e21c0678032f1185173f816cbb500a87877 ]

After commit 67a7bc7f0358 ("remoteproc: Use of reserved_mem_region_*
functions for "memory-region"") following commands with
imx-dsp-rproc started to fail:

$ echo zephyr.elf &gt; /sys/class/remoteproc/remoteproc0/firmware
$ echo start &gt; /sys/class/remoteproc/remoteproc0/state
$ echo stop &gt; /sys/class/remoteproc/remoteproc0/state
$ echo start &gt; /sys/class/remoteproc/remoteproc0/state #! This fails
-sh: echo: write error: Device or resource busy

This happens because aforementioned commit replaced devm_ioremap_wc with
devm_ioremap_resource_wc which will "reserve" the memory region with the
first start and then will fail at the second start if the memory
region is already reserved.

Even partially reverting the faulty commit won't fix the
underlying issue because we map the address in prepare() but we never
unmap it at unprepare(), so we will keep leaking memory regions.

So, lets use alloc() and release() callbacks for memory carveout
handling. This will nicely map() the memory region at prepare() time
and unmap() it at unprepare().

Fixes: 67a7bc7f0358 ("remoteproc: Use of_reserved_mem_region_* functions for "memory-region"")
Signed-off-by: Daniel Baluta &lt;daniel.baluta@nxp.com&gt;
Link: https://lore.kernel.org/r/20251210154906.99210-1-daniel.baluta@nxp.com
Signed-off-by: Mathieu Poirier &lt;mathieu.poirier@linaro.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>remoteproc: imx_rproc: Use strstarts for "rsc-table" check</title>
<updated>2026-02-26T23:01:19+00:00</updated>
<author>
<name>Shenwei Wang</name>
<email>shenwei.wang@nxp.com</email>
</author>
<published>2025-12-08T23:33:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=019a1d031cd8c80a97a745f30ea8c2bb776d1dcd'/>
<id>urn:sha1:019a1d031cd8c80a97a745f30ea8c2bb776d1dcd</id>
<content type='text'>
[ Upstream commit 93f51b9182a107cf5f5e8a7802cd90df0c9a7154 ]

The resource name may include an address suffix, for example:
rsc-table@1fff8000.

To handle such cases, use strstarts() instead of strcmp() when checking
for "rsc-table".

Signed-off-by: Shenwei Wang &lt;shenwei.wang@nxp.com&gt;
Reviewed-by: Daniel Baluta &lt;daniel.baluta@nxp.com&gt;
Reviewed-by: Frank Li &lt;Frank.Li@nxp.com&gt;
Reviewed-by: Zhongqiu Han &lt;zhongqiu.han@oss.qualcomm.com&gt;
Reviewed-by: Peng Fan &lt;peng.fan@nxp.com&gt;
Fixes: 67a7bc7f0358 ("remoteproc: Use of_reserved_mem_region_* functions for "memory-region"")
Link: https://lore.kernel.org/r/20251208233302.684139-1-shenwei.wang@nxp.com
Signed-off-by: Mathieu Poirier &lt;mathieu.poirier@linaro.org&gt;
Signed-off-by: Sasha Levin &lt;sashal@kernel.org&gt;
</content>
</entry>
<entry>
<title>remoteproc: qcom_q6v5_wcss: use optional reset for wcss_q6_bcr_reset</title>
<updated>2025-11-29T21:20:23+00:00</updated>
<author>
<name>Alexandru Gagniuc</name>
<email>mr.nuke.me@gmail.com</email>
</author>
<published>2025-11-29T01:32:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=641092c1bc1bbc3be059d9d723b1cec10a368617'/>
<id>urn:sha1:641092c1bc1bbc3be059d9d723b1cec10a368617</id>
<content type='text'>
The "wcss_q6_bcr_reset" is not used on IPQ8074, and IPQ6018. Use
devm_reset_control_get_optional_exclusive() for this reset so that
probe() does not fail on platforms where it is not used.

Signed-off-by: Alexandru Gagniuc &lt;mr.nuke.me@gmail.com&gt;
Link: https://lore.kernel.org/r/20251129013207.3981517-2-mr.nuke.me@gmail.com
Signed-off-by: Bjorn Andersson &lt;andersson@kernel.org&gt;
</content>
</entry>
</feed>
