From: "lianfeng.ouyang" <lianfeng.ouyang@starfivetech.com>
To: Olivia Mackall <olivia@selenic.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
Rob Herring <robh@kernel.org>,
Krzysztof Kozlowski <krzk+dt@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Philipp Zabel <p.zabel@pengutronix.de>
Cc: linux-crypto@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
Lianfeng Ouyang <lianfeng.ouyang@starfivetech.com>
Subject: [PATCH v10 0/6] hwrng: starfive - fixes and JHB100 support
Date: Fri, 23 Oct 2026 10:12:42 +0800 [thread overview]
Message-ID: <20261023021248.3763-1-lianfeng.ouyang@starfivetech.com> (raw)
From: Lianfeng Ouyang <lianfeng.ouyang@starfivetech.com>
This series adds support for the TRNG on the StarFive JHB100 SoC. The
JHB100 needs the clocks gated before the reset is asserted, so the
driver grows per-compatible match data describing the power-down
ordering.
Earlier versions of this series carried all of that in the
JHB100 patch, which made it hard to review. v10 splits it up:
1: dt-bindings for the new compatible (unchanged)
2: runtime PM / power teardown fix (backportable)
3: SEU reseed moved out of the interrupt handler, command
serialisation, IRQ lifecycle (backportable)
4: include and cleanup tidy-up, no functional change
5: match data and the JHB100 compatible
6: MAINTAINERS
This patch series adds support for the JHB100 SoC TRNG and fixes
clock/reset teardown ordering issues.
The first patch updates the device tree bindings by removing the
obsolete JH8100 compatible string and adding JHB100 support
while updating the maintainer.
The second patch reworks the driver to ensure proper clock gating
before reset assertion for JHB100 to avoid reset-domain crossing
glitches, fixes RPM usage count handling, and improves error
path cleanup through devm actions.
Changes in v1:
- Remove jh8100-trng and Fix the compatible description in .yaml
- add JHB100 and fix clk/reset teardown logic code
Changes in v2:
- Balance the PM via pm_runtime_set_active() in ->probe
- Add devm_add_action_or_reset() to register a resource rollback function
Changes in v3:
- Supplement .yaml commit message
- Add pm_runtime_get_if_active() to check PM in irq
- Balances pm_runtime_get/put calls in init, read, and cleanup paths
- Add per-compatible match data for the teardown order
Changes in v4:
- Modify .yaml commit information to non point description
- serialise the command sequences with a mutex.
Changes in v5:
- Run the reseed from a workqueue instead of hard IRQ context.
- Balance the probe reset_control_deassert() via a ->cleanup flag in the
PM suspend/resume callbacks (was skipped when already suspended).
- Use devm_pm_runtime_set_active_enabled() instead of manual PM enable.
- Register the IRQ after clk/reset/PM setup; reuse
starfive_trng_release() on request_irq() failure.
- Check reset_control_deassert();
- drop of_match_ptr() from the match table.
Changes in v6:
- check lock in starfive_trng_read() using mutex_trylock when wait is 0
Changes in v7:
- using mutex_trylock when wait is 0, otherwise use mutex_lock()
Changes in v8:
- rebase patches against the latest tree
Changes in v9:
- Fixed the PM runtime reference leak in starfive_trng_read()
- Drop redundant pm_runtime_get/put calls from the interrupt
handler (starfive_trng_irq).
- Use DEFINE_RUNTIME_DEV_PM_OPS() and pm_ptr() for power
management operations.
- Split clock/reset control into starfive_trng_power_on/off()
- Track power state with clk_on/rst_deassert/initialized/need_reseed
instead of open-coded clk control.
- IRQ now requested with IRQF_NO_AUTOEN and enabled only after init
succeeds.
- LFSR_LOCKUP no longer schedules work from hard IRQ: set need_reseed
flag and let starfive_trng_reseed_work() handle reseed on a
freezable workqueue.
- starfive_trng_cmd() takes timeout + wait args; read path checks idle,
reseeds on need_reseed, retries once on lockup, returns 0 for
non-blocking.
- Protect ctrl-cmd sequences with mutex + lockdep_assert_held.
- Cleanup/suspend disables IE, clears ISTAT, synchronize_irq() before
gating clocks/reset.
Changes in v10:
- Split the driver change into fixes, cleanup and the JHB100 addition.
- starfive_trng_init() only enables the interrupt line once and clears
trng->initialized on failure; starfive_trng_cleanup() only disables
the line if init left it enabled. Fixes the unbalanced enable_irq()
when the device is deselected and quickly reselected, and the double
disable_irq() after a failed init.
- Non-blocking reads re-queue the reseed work instead of assuming it
is pending, and starfive_trng_irq_clear() queues it when it clears a
lockup. Fixes the stall of non-blocking reads after a lockup seen
outside the interrupt handler or a failed reseed.
- Do not include <linux/mod_devicetable.h>, <linux/platform_device.h>
already provides struct of_device_id.
- Describe the header rearrangement in the commit log.
- Rebased on top of ace145efdd80.
Lianfeng Ouyang (6):
dt-bindings: rng: starfive,jh7110-trng: add jhb100, drop jh8100
hwrng: starfive - fix runtime PM and power teardown handling
hwrng: starfive - move the SEU reseed out of the interrupt handler
hwrng: starfive - tidy up includes and drop unused code
hwrng: starfive - add JHB100 support
MAINTAINERS: update the StarFive TRNG driver maintainer
.../bindings/rng/starfive,jh7110-trng.yaml | 10 +-
MAINTAINERS | 2 +-
drivers/char/hw_random/jh7110-trng.c | 578 +++++++++++++-----
3 files changed, 425 insertions(+), 165 deletions(-)
--
2.43.0
next reply other threads:[~2026-10-23 2:13 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-23 2:12 lianfeng.ouyang [this message]
2026-10-23 2:12 ` [PATCH v10 1/6] dt-bindings: rng: starfive,jh7110-trng: add jhb100, drop jh8100 lianfeng.ouyang
2026-10-23 2:12 ` [PATCH v10 2/6] hwrng: starfive - fix runtime PM and power teardown handling lianfeng.ouyang
2026-10-23 2:12 ` [PATCH v10 3/6] hwrng: starfive - move the SEU reseed out of the interrupt handler lianfeng.ouyang
2026-10-23 2:12 ` [PATCH v10 4/6] hwrng: starfive - tidy up includes and drop unused code lianfeng.ouyang
2026-10-23 2:12 ` [PATCH v10 5/6] hwrng: starfive - add JHB100 support lianfeng.ouyang
2026-10-23 2:12 ` [PATCH v10 6/6] MAINTAINERS: update the StarFive TRNG driver maintainer lianfeng.ouyang
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=20261023021248.3763-1-lianfeng.ouyang@starfivetech.com \
--to=lianfeng.ouyang@starfivetech.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=herbert@gondor.apana.org.au \
--cc=krzk+dt@kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=olivia@selenic.com \
--cc=p.zabel@pengutronix.de \
--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®