* [PATCH v17 00/28] Add new general DRM property "color format"
From: Nicolas Frattaroli @ 2026-06-09 12:43 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Sandy Huang, Heiko Stübner,
Andy Yan, Jani Nikula, Rodrigo Vivi, Joonas Lahtinen,
Tvrtko Ursulin, Dmitry Baryshkov, Sascha Hauer, Rob Herring,
Jonathan Corbet, Shuah Khan, Daniel Stone
Cc: kernel, amd-gfx, dri-devel, linux-kernel, linux-arm-kernel,
linux-rockchip, intel-gfx, intel-xe, linux-doc, wayland-devel,
Nicolas Frattaroli, Werner Sembach, Andri Yngvason,
Cristian Ciocaltea, Marius Vlad, Dmitry Baryshkov, Andy Yan
Hello,
this is a follow-up to
https://lore.kernel.org/all/20250911130739.4936-1-marius.vlad@collabora.com/
which in of itself is a follow-up to
https://lore.kernel.org/dri-devel/20240115160554.720247-1-andri@yngvason.is/ where
a new DRM connector property has been added allowing users to
force a particular color format.
That in turn was actually also a follow-up from Werner Sembach's posted at
https://lore.kernel.org/dri-devel/20210630151018.330354-1-wse@tuxedocomputers.com/
As the number of cooks have reached critical mass, I'm hoping I'll be
the last person to touch this particular series.
We have an implementation in Weston at
https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/1825 that
adds support for this property. This patch series has been tested
against that MR on i915 (HDMI, DP), amdgpu (HDMI, DP) and on rockchip
(HDMI).
You can also manually test this with modetest like so, but beware that
this is a non-atomic invocation, so testing YUV420 like this will result
in weird outcomes if only some of the modes support YUV420:
$ modetest -s 115:1920x1080-60@NV12 -w 115:'color format':4
where 115 is the connector ID and '4' is the enum value for a particular
color format.
General notes on the approach taken by me: instead of silently switching
to a different format than was explicitly requested, or even worse,
outputting something to the sink the sink doesn't support, bubble up an
error to userspace instead. "color format" is a "I want this" type
property, not a "force this" type property, i.e. the kernel will respect
the limits imposed by the hardware.
Things I've tested:
- HDMI (YCbCr 4:4:4 + YCbCr 4:2:2 (8-bit) + RGB + Auto) on RK3588
- HDMI (YCbCr 4:4:4 + YCbCr 4:2:2 (8-bit) + RGB + Auto) on RK3576
- HDMI (YCbCr 4:4:4, YCbCr 4:2:0, RGB, Auto) + DP (YCbCr 4:4:4, RGB,
Auto) on Intel N97 (i915).
- HDMI (YCbCr 4:4:4, YCbCr 4:2:2, YCbCr 4:2:0, RGB, Auto) + DP (YCbCr
4:4:4, RGB, Auto) on an AMD Radeon RX 550 (amdgpu).
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
Changes in v17:
- Rebase onto drm-misc-next
- Reorder i915 patches to end of series
- Link to v16: https://patch.msgid.link/20260523-color-format-v16-0-24340c5e4732@collabora.com
Changes in v16:
- drm/i915/dp: Don't check for dfp conversion to determine ycbcr444
output capability
- drm/i915/dp: Replicate intel_dp_has_hdmi_sink check for YCBCR444 as well
- drm/i915/dp: Reorder formats and checks in sink_format_valid
- drm/i915/hdmi: Fix inverted HAS_GMCH check for YCBCR444 capability
- drm/i915/hdmi: Add has_hdmi_sink check to YCBCR444 sink_format_valid
- drm/i915/hdmi: Reorder formats in sink_format_valid
- drm/i915/hdmi: Drop documentation for internal function
- Link to v15: https://patch.msgid.link/20260522-color-format-v15-0-21fb136c9df2@collabora.com
Changes in v15:
- Drop redundant drm_connector_color_format_valid() function
- dw-hdmi-qp-rockchip: make dw_hdmi_qp_rockchip_get_vop_format()'s
return type int, check bstate for IS_ERR rather than NULL, and pass up
error codes to caller
- rebase onto recent drm-tip, necessitating
s/drm_atomic_state/drm_atomic_commit/ in the KUnit tests
- Link to v14: https://patch.msgid.link/20260423-color-format-v14-0-449a419ccbd4@collabora.com
Changes in v14:
- i915: Check for source support of YCbCr444 in both the sink format
validation and when registering the properites on the connectors.
- i915: Split HDMI and DP implementations into separate patches, with
their own supported color formats masks.
- Link to v13: https://patch.msgid.link/20260413-color-format-v13-0-ab37d4dfba48@collabora.com
Changes in v13:
- Introduce a new drm_connector_funcs member that returns the
connector state's color format with additional bells and whistles.
- Implement this new func in drm_bridge_connector to return whatever the
HDMI implementation did if an HDMI bridge is present.
- Call into the drm_connector.h function wrapping this new func in the
recursive bridge chain bus format selection code.
- Link to v12: https://patch.msgid.link/20260409-color-format-v12-0-ce84e1817a27@collabora.com
Changes in v12:
- Rebase on top of Ville's i915 format selection cleanup series
- i915: Reimplement based on new format selection code. Drop the DP-MST
implementation, as sinks with different sets of supported formats
complicate the matter.
- Adjust documentation on drm_connector_color_format enum values to
mention quantization ranges.
- Add documentation to drm-kms page to document the string values for
the property. Mostly the same documentation as the enum values, but
from a more userspace-centric perspective. This is done in the patch
that introduces the property, but I didn't drop the existing R-b as
it isn't a functional change.
- Update documentation of "colorspace" property to mention that "color
format" property controls the output format.
- amdgpu: Remove property from DP-MST, as it's unclear whether it'd work
properly with sinks that have different sets of supported formats
- Link to v11: https://patch.msgid.link/20260324-color-format-v11-0-605559af4fb4@collabora.com
Changes in v11:
- amdgpu: fix property registration on DP-MST
- i915: fix property registration on DP-MST
- rebase on drm-tip, which includes Maxime's refactor series that was
previously declared a dependency of this series
- Link to v10: https://lore.kernel.org/r/20260305-color-format-v10-0-a58c68a11868@collabora.com
Changes in v10:
- Make DRM_OUTPUT_COLOR_FORMAT_COUNT and
DRM_CONNECTOR_COLOR_FORMAT_COUNT part of the enum definition (thanks
to Maxime)
- Preemptively avoid the warning that would be generated by the
enumification of DRM_OUTPUT_COLOR_FORMAT_COUNT by modifying the
problematic switch statement in drm_hdmi_state_helper's
sink_supports_format_bpc.
- drm/bridge: Change HDMI check from checking for the last bridge having
a DRM_BRIDGE_OP_HDMI in ops to checking if last_bridge->type is HDMIA.
This is not quite the suggestion Dmitry had, but according to the
documentation of the drm_bridge.type member, and the
display-connector.c code, it should be correct.
- Combine drm_mode_create_color_format_property and
drm_connector_attach_color_format_property into one function named the
latter. (thanks to Dmitry Baryshkov)
- Change author of 'drm: Add new general DRM property "color format"'
to myself as it has by now changed quite a bit, and add Andri and
Werner as Co-developed-by, as per Andri's suggestion.
- hdmi-state-helper: Rework hdmi_compute_config to make code flow more
obvious, and drop Dmitry's R-b as a consequence (thanks to Maxime)
- Move dw-hdmi-qp's atomic_get_output_bus_fmts into
drm_bridge_helper.c, along with kernel doc string (thanks to Dmitry)
- Future-proof the aforementioned get_output_bus_fmts use of hweight8 on
the supported_formats bitmask with a BUILD_BUG_ON.
- Add a KUnit test for the HDMI output bus formats helper
- Link to v9: https://lore.kernel.org/r/20260227-color-format-v9-0-658c3b9db7ef@collabora.com
Changes in v9:
- Document what the "AUTO" behaviour is in the color format enum (thanks
to Maxime)
- drm/bridge: dw-hdmi-qp: Fix a rebase oopsie that reintroduced some
functions that were dropped. (thanks to Cristian)
- drm/bridge: Shuffle "1:1" in the bridge fmt selection docs to earlier
in the sentence. (thanks to Randy Dunlap)
- i915: Check chosen output format against requested format for dp-mst
- All color format driver implementations: rebase and rework on top of
Maxime's series
- As part of this rework, rename drm_color_format_enum to
drm_connector_color_format
- drm kunit tests: rework for the new enums. Changes were trivial, so
trailers were kept
- Link to v8: https://lore.kernel.org/r/20260216-color-format-v8-0-5722ce175dd5@collabora.com
Changes in v8:
- Drop "drm/rockchip: vop2: Fix YUV444 output", as the original problem
could not be reproduced anymore, and the justification did not make
sense.
- Remove the 12-bit format from "drm/rockchip: vop2: Recognise 10/12-bit
YUV422 as YUV formats".
- Refactor to keep the original DRM_COLOR_FORMAT bitshifted defines
as-is, but introduce a new drm_color_format_enum enum.
- Adjust conversion functions for the newly refactored enum, ensuring
they only return valid enum values, and only convert in directions
that open up no error value cans of worms.
- Rework the property uapi code for the newly refactored enum, since
it no longer needs to do any bitshifting or ffs().
- Rework all the device drivers for the new enum.
- Rework all the tests for the refactored enum.
- Rework the hdmi state helper for the new enum, and also make it more
explicit about the auto behaviour by not relying on a conversion
function to map AUTO to RGB, but do this in the framework itself.
- rockchip dw_hdmi_qp: Fix the GRF value to check for color >= 0 instead
of color > 0, as the latter broke switching back to RGB.
- Rebase onto a recent drm-tip. This necessitated blindly reworking some
of the i915 dp-mst code.
- Drop the __maybe_unused edid test patch, as I could no longer
reproduce the build warnings I added it for. I blame ghosts.
- drm_bridge tests: remove "destroyed" member from struct
drm_bridge_chain_priv and all associated code, as it was not used in
any test.
- Link to v7: https://lore.kernel.org/r/20260121-color-format-v7-0-ef790dae780c@collabora.com
Changes in v7:
- Fix drm_bridge kunit test build failure caused by rebasing across an
API change.
- Make compilers shut up about unused EDID definitions in the test
suites.
- Empty line checkpatch fixes that b4 prep --check didn't catch.
- Link to v6: https://lore.kernel.org/r/20260121-color-format-v6-0-7b81a771cd0b@collabora.com
Changes in v6:
- Checkpatch fixes
- Add drm_bridge.c kerneldoc fix patch to b4 deps so the kernel docs
required for every contribution to the subsystem can be built
- dw-hdmi-qp core has gained the atomic_get_output_bus_fmts bridge func,
which allows it to participate in the drm_bridge chain recursive format
selection code properly.
- The Rockchip dw-hdmi-qp integration now no longer reimplements the
color format logic (improperly), but reads the bus format of the first
bridge as set by the recursive bridge format selection. If the input
format is FIXED, it'll use the output format. Otherwise, the input
format is used.
- In the synopsys drivers, YUV422 uses the same bus format as the non-qp
hdmi encoder driver. Probably correcter this way. The Rockchip vop2
is_yuv function has been extended to recognise this format as well.
- KUnit tests for drm_bridge chains are now included, which exercise the
chain's recursive bus format selection.
- On HDMI connectors, the drm_bridge bus format selection will try to target
the color format that the HDMI layer came up with. This means the AUTO
logic is not duplicated for HDMI connectors.
- The enum conversion function commit gained a function for converting
from hdmi_colorspace to drm_color_format, and its author changed as no
original code remains anyway. Marius is still included as a
Co-developer.
- Some tests for the HDMI state helper's mode_valid have been written.
They are incomplete as we lack a test EDID for a 420-also mode that
would violate the clock constraints on RGB. I hacked one together with
a hex editor, but it reports a too high of a clock rate, and there's
no EDID editor I could find which supports these extension blocks.
- The color_format KUnit tests have been more heavily parameterised, the
auto case absorbed into other tests, and the comments around them
rewritten.
- Add a few paragraphs of documentation that explain the bridge format
selection, and how to make use of it in a display driver.
- Link to v5: https://lore.kernel.org/r/20251128-color-format-v5-0-63e82f1db1e1@collabora.com
Changes in v5:
- Rebase onto drm-tip
- Drop DRM_MODE_COLOR_FORMAT_* as an enum
- Unify DRM_COLOR_FORMAT_NONE and DRM_COLOR_FORMAT_AUTO, with AUTO being
0. This makes conversion and general logic much easier.
- Adjust the drm_color_format enum to not needlessly renumber the
existing defines, as it doesn't need to correspond to how HDMI numbers
them.
- Make the DRM-to-HDMI conversion function static inline __pure, because
the assembly it generates is tiny, and the function is pure.
- Don't accept nothing as the list of supported color formats for
registration of the property.
- Drop the per-connector variants of the color format registration
function, as it's not needed.
- drm_hdmi_state_helper: Fix mode_valid rejecting 420-only modes.
- drm_hdmi_state_helper: Only fall back to YUV420 with
DRM_COLOR_FORMAT_AUTO.
- drm_hdmi_state_helper: Remove redundant AUTO->RGB condition, as the
conversion already does this.
- Add KUnit tests for hdmi_compute_config.
- drm/bridge: Refactor bus_format_is_color_fmt and add a few more YUV422
formats.
- Register the color format property in drmm_connector_hdmi_init based
on the supported HDMI formats passed to it. This means rockchip
dw_hdmi_qp no longer needs to register it.
- amdgpu: Simplify YUV420 logic
- amdgpu: Don't try to pick YUV444 on YUV420-only modes
- i915: Try to make behaviour more or less the same as that of the drm
hdmi state helper.
- rockchip dw_hdmi_qp: Set supported HDMI formats
- rockchip dw_hdmi_qp: Set the right VO GRF values depending on color
format.
- rockchip dw_hdmi_qp: Act on the color format property in this driver,
rather than in VOP2, by setting the bus_format appropriately.
- rockchip VOP2: Can the BCSH-based implementation. BCSH isn't available
on all video ports of the hardware, and the code was extremely
suspect. Instead, plug into the existing YUV-to-RGB/RGB-to-YUV code,
which can be done now that the HDMI driver sets the bus format.
- A whole bunch of Rockchip VOP2 fixes.
- Link to v4: https://lore.kernel.org/r/20251117-color-format-v4-0-0ded72bd1b00@collabora.com
Changes in v4:
- Rebase onto next-20251117
- Get rid of HDMI_COLORSPACE_AUTO
- Split hdmi_compute_config change into separate patch
- Add missing symbol export for color_format_to_hdmi_colorspace to fix
builds in certain configurations
- Drop "drm: Pass supported color formats straight onto drm_bridge"
- Make dw-hdmi-qp set the platform data's supported color formats as
the bridge's supported HDMI color formats
- drm_hdmi_state_helper: pass requested color format to
hdmi_compute_format_bpc if set.
- drm_bridge: limit the bus formats to those explicitly requested with
the color format property during the atomic bridge check call,
specifically in drm_atomic_bridge_chain_select_bus_fmts.
- i915: Remove INTEL_OUTPUT_FORMAT_AUTO, as automatic format selection
does not need to involve the hardware state
- i915: Deduplicate ntel_output_format_to_drm_color_format code by
moving it as a static inline __pure function into a shared header
- i915: rework logic in HDMI, DP and DP-MST output config functions to
remove redundant locals, simplify execution flow, and return an error
to userspace if an explicit color_format request can't be satisfied.
- i915: assign myself as the author and make the others Co-developers,
so that they don't get the blame for any of my bugs.
- amdgpu: refactor fill_stream_properties_from_drm_display_mode to
improve readability and ensure that impossible color format requests
get bubbled up to userspace as errors
- amdgpu: don't pick YUV444 over RGB.
- amdgpu: assign authorship to myself, with others as Co-developers, as
logic was modified and the blame should fall on me
- dw_hdmi_qp-rockchip: set the supported color formats platform data
member
- rockchip: remove drm property registration for rk3066_hdmi and
inno_hdmi. None of the platforms that use these use vop2 as the
video output processor.
- Link to v3: https://lore.kernel.org/all/20250911130739.4936-1-marius.vlad@collabora.com/
Changes in v3 by mvlad compared to Andri's v2 series:
- renamed the property to just 'color format'
- the property is added dynamically similar to the Colorspace property
- a key point from previous comments was that drivers should advertise
the color formats they support and userspace would query EDID and
perform an intersection from those color formats which users can
further use. With this patch set each driver that adds this property
has such list of hard-coded color formats, but fundamentally the idea
is that driver can query the HW and do that on its own. The
infrastructure is now in place to allow to do that
- by default the 'AUTO' color format is set. With this patch series that
has been introduced as a fallback to RGB. Drivers could further
customize this behavour and could perform additional checks on the sink
to pick another suitable color format they'd like for AUTO
- drm_bridge bridge code has been improved to allow initialization with
the same color formats list as the DRM connector property. Similarly, bpc
pick-up now takes the color format into consideration when deciding
which bpc to choose from
- The new DRM color format re-uses HDMI_COLORPSACE enum and provides an
enum translations between the two to avoid touching all other drivers that
use HDMI_COLORPSACE enum. I believe at this point that this allows the
least amount of disruption and avoids a massive bike shedding around
that part
- a rockchip implementation has been by my colleague Derek Foreman
- YUV444 color format has been added in i915
- address comment about "Remove unnecessary SIGNAL_TYPE_HDMI_TYPE_A
check" where aconnector might be invalid
- Link to v2: https://lore.kernel.org/dri-devel/20240115160554.720247-1-andri@yngvason.is/
---
Nicolas Frattaroli (27):
drm/display: hdmi-state-helper: Use default case for unsupported formats
drm: Add new general DRM property "color format"
drm/connector: Let connectors have a say in their color format
drm/display: bridge_connector: Use HDMI color format for HDMI conns
drm/bridge: Act on the DRM color format property
drm/atomic-helper: Add HDMI bridge output bus formats helper
drm/display: hdmi-state-helper: Act on color format DRM property
drm/display: hdmi-state-helper: Try subsampling in mode_valid
drm/amdgpu: Implement "color format" DRM property
drm/rockchip: Add YUV422 output mode constants for VOP2
drm/rockchip: vop2: Add RK3576 to the RG swap special case
drm/rockchip: vop2: Recognise 10-bit YUV422 as YUV format
drm/rockchip: vop2: Set correct output format for RK3576 YUV422
drm/bridge: dw-hdmi-qp: Use common HDMI output bus fmts helper
drm/rockchip: dw_hdmi_qp: Implement "color format" DRM property
drm/rockchip: dw_hdmi_qp: Set supported_formats platdata
drm/connector: Register color format property on HDMI connectors
drm/tests: hdmi: Add tests for the color_format property
drm/tests: hdmi: Add tests for HDMI helper's mode_valid
drm/tests: bridge: Add KUnit tests for bridge chain format selection
drm/tests: bridge: Add test for HDMI output bus formats helper
drm/bridge: Document bridge chain format selection
drm/connector: Update docs of "colorspace" for color format prop
drm/i915/hdmi: Add YCBCR444 handling for sink formats
drm/i915/dp: Add YCBCR444 handling for sink formats
drm/i915/hdmi: Implement "color format" DRM property
drm/i915/dp: Implement "color format" DRM property
Werner Sembach (1):
drm/amd/display: Remove unnecessary SIGNAL_TYPE_HDMI_TYPE_A check
Documentation/gpu/drm-kms-helpers.rst | 6 +
Documentation/gpu/drm-kms.rst | 6 +
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 91 +-
drivers/gpu/drm/bridge/synopsys/dw-hdmi-qp.c | 1 +
drivers/gpu/drm/display/drm_bridge_connector.c | 24 +
drivers/gpu/drm/display/drm_hdmi_state_helper.c | 53 +-
drivers/gpu/drm/drm_atomic_helper.c | 86 ++
drivers/gpu/drm/drm_atomic_uapi.c | 4 +
drivers/gpu/drm/drm_bridge.c | 104 ++-
drivers/gpu/drm/drm_connector.c | 178 +++-
drivers/gpu/drm/i915/display/intel_dp.c | 81 +-
drivers/gpu/drm/i915/display/intel_hdmi.c | 76 +-
drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 111 ++-
drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 4 +
drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 21 +-
drivers/gpu/drm/tests/drm_bridge_test.c | 971 +++++++++++++++++++++
drivers/gpu/drm/tests/drm_hdmi_state_helper_test.c | 345 ++++++++
include/drm/drm_atomic_helper.h | 7 +
include/drm/drm_connector.h | 96 ++
19 files changed, 2228 insertions(+), 37 deletions(-)
---
base-commit: f2f4e6d45fecc6ead92bf5ea06a04a00c245904e
change-id: 20251028-color-format-49fd202b7183
Best regards,
--
Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
^ permalink raw reply
* [PATCH v17 01/28] drm/amd/display: Remove unnecessary SIGNAL_TYPE_HDMI_TYPE_A check
From: Nicolas Frattaroli @ 2026-06-09 12:43 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Sandy Huang, Heiko Stübner,
Andy Yan, Jani Nikula, Rodrigo Vivi, Joonas Lahtinen,
Tvrtko Ursulin, Dmitry Baryshkov, Sascha Hauer, Rob Herring,
Jonathan Corbet, Shuah Khan, Daniel Stone
Cc: kernel, amd-gfx, dri-devel, linux-kernel, linux-arm-kernel,
linux-rockchip, intel-gfx, intel-xe, linux-doc, wayland-devel,
Nicolas Frattaroli, Werner Sembach, Andri Yngvason
In-Reply-To: <20260609-color-format-v17-0-35739b5782cc@collabora.com>
From: Werner Sembach <wse@tuxedocomputers.com>
Remove unnecessary SIGNAL_TYPE_HDMI_TYPE_A check that was performed in the
drm_mode_is_420_only() case, but not in the drm_mode_is_420_also() &&
force_yuv420_output case.
Without further knowledge if YCbCr 4:2:0 is supported outside of HDMI,
there is no reason to use RGB when the display
reports drm_mode_is_420_only() even on a non HDMI connection.
This patch also moves both checks in the same if-case. This eliminates an
extra else-if-case.
Signed-off-by: Werner Sembach <wse@tuxedocomputers.com>
Signed-off-by: Andri Yngvason <andri@yngvason.is>
Tested-by: Andri Yngvason <andri@yngvason.is>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index ba7f98a87808..dfe97897127c 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -6917,12 +6917,9 @@ static void fill_stream_properties_from_drm_display_mode(
timing_out->v_border_top = 0;
timing_out->v_border_bottom = 0;
/* TODO: un-hardcode */
- if (drm_mode_is_420_only(info, mode_in)
- && stream->signal == SIGNAL_TYPE_HDMI_TYPE_A)
- timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR420;
- else if (drm_mode_is_420_also(info, mode_in)
- && aconnector
- && aconnector->force_yuv420_output)
+ if (drm_mode_is_420_only(info, mode_in) ||
+ (aconnector && aconnector->force_yuv420_output &&
+ drm_mode_is_420_also(info, mode_in)))
timing_out->pixel_encoding = PIXEL_ENCODING_YCBCR420;
else if ((connector->display_info.color_formats & BIT(DRM_OUTPUT_COLOR_FORMAT_YCBCR422))
&& aconnector
--
2.54.0
^ permalink raw reply related
* [PATCH v17 02/28] drm/display: hdmi-state-helper: Use default case for unsupported formats
From: Nicolas Frattaroli @ 2026-06-09 12:43 UTC (permalink / raw)
To: Harry Wentland, Leo Li, Rodrigo Siqueira, Alex Deucher,
Christian König, David Airlie, Simona Vetter,
Maarten Lankhorst, Maxime Ripard, Thomas Zimmermann,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Sandy Huang, Heiko Stübner,
Andy Yan, Jani Nikula, Rodrigo Vivi, Joonas Lahtinen,
Tvrtko Ursulin, Dmitry Baryshkov, Sascha Hauer, Rob Herring,
Jonathan Corbet, Shuah Khan, Daniel Stone
Cc: kernel, amd-gfx, dri-devel, linux-kernel, linux-arm-kernel,
linux-rockchip, intel-gfx, intel-xe, linux-doc, wayland-devel,
Nicolas Frattaroli, Cristian Ciocaltea
In-Reply-To: <20260609-color-format-v17-0-35739b5782cc@collabora.com>
Switch statements that do not handle all possible values of an
enumeration will generate a warning during compilation. In preparation
for adding a COUNT value to the end of the enum, this needs to be dealt
with.
Add a default case to sink_supports_format_bpc's DRM_OUTPUT_COLOR_FORMAT
switch statement, and move the log-and-return unknown pixel format
handling into it.
No functional change.
Reviewed-by: Maxime Ripard <mripard@kernel.org>
Reviewed-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Reviewed-by: Daniel Stone <daniel@fooishbar.org>
Signed-off-by: Nicolas Frattaroli <nicolas.frattaroli@collabora.com>
---
drivers/gpu/drm/display/drm_hdmi_state_helper.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/display/drm_hdmi_state_helper.c b/drivers/gpu/drm/display/drm_hdmi_state_helper.c
index a331ebdd65af..c68b159f0a7f 100644
--- a/drivers/gpu/drm/display/drm_hdmi_state_helper.c
+++ b/drivers/gpu/drm/display/drm_hdmi_state_helper.c
@@ -542,10 +542,11 @@ sink_supports_format_bpc(const struct drm_connector *connector,
drm_dbg_kms(dev, "YUV444 format supported in that configuration.\n");
return true;
- }
- drm_dbg_kms(dev, "Unsupported pixel format.\n");
- return false;
+ default:
+ drm_dbg_kms(dev, "Unsupported pixel format.\n");
+ return false;
+ }
}
static enum drm_mode_status
--
2.54.0
^ permalink raw reply related
* Re: [PATCH 23/37] drm/encoder: add drm_encoder_cleanup_from()
From: Maxime Ripard @ 2026-06-09 12:43 UTC (permalink / raw)
To: Luca Ceresoli
Cc: Maarten Lankhorst, Thomas Zimmermann, David Airlie, Simona Vetter,
Andrzej Hajda, Neil Armstrong, Robert Foss, Laurent Pinchart,
Jonas Karlman, Jernej Skrabec, Inki Dae, Jagan Teki,
Marek Szyprowski, Marek Vasut, Stefan Agner, Frank Li,
Sascha Hauer, Pengutronix Kernel Team, Fabio Estevam, Hui Pu,
Ian Ray, Thomas Petazzoni, dri-devel, linux-kernel, imx,
linux-arm-kernel
In-Reply-To: <DJ4FR339GCKY.21P0315EZLRJU@bootlin.com>
[-- Attachment #1: Type: text/plain, Size: 4344 bytes --]
On Tue, Jun 09, 2026 at 12:10:39PM +0200, Luca Ceresoli wrote:
> On Mon Jun 8, 2026 at 2:10 PM CEST, Maxime Ripard wrote:
> > On Tue, May 19, 2026 at 12:37:40PM +0200, Luca Ceresoli wrote:
> >> Supporting hardware whose final part of the DRM pipeline can be physically
> >> removed requires the ability to detach all bridges from a given point to
> >> the end of the pipeline.
> >>
> >> Introduce a variant of drm_encoder_cleanup() for this.
> >>
> >> Take care to not try detaching non-attached bridges. This is needed because
> >> when two or more bridges are removed not in the backwards order,
> >> drm_encoder_cleanup_from() is called more than once for bridges closer to
> >> the panel.
> >>
> >> Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com>
> >>
> >> ---
> >>
> >> Note: in theory drm_encoder_cleanup() is now a superset of
> >> drm_encoder_cleanup_from() and may be simplified to just call
> >> drm_encoder_cleanup_from() and then do the extra actions. However the
> >> common code is subtly different in terms of locking and checks, so this
> >> would complicate the code in this patch and has thus been kept separate for
> >> the time being to make reviewing sompler. Reimplementing
> >> drm_encoder_cleanup() by using drm_encoder_cleanup_from() cvacn be done
> >> later on.
> >>
> >> A much simpler and now obsolete version of this patch (missing locking and
> >> checks) previously appeared in
> >> https://lore.kernel.org/lkml/20250206-hotplug-drm-bridge-v6-13-9d6f2c9c3058@bootlin.com/
> >> ---
> >> drivers/gpu/drm/drm_encoder.c | 38 ++++++++++++++++++++++++++++++++++++++
> >> include/drm/drm_encoder.h | 1 +
> >> 2 files changed, 39 insertions(+)
> >>
> >> diff --git a/drivers/gpu/drm/drm_encoder.c b/drivers/gpu/drm/drm_encoder.c
> >> index 0d5dbed06db4..40ece477b302 100644
> >> --- a/drivers/gpu/drm/drm_encoder.c
> >> +++ b/drivers/gpu/drm/drm_encoder.c
> >> @@ -179,6 +179,44 @@ int drm_encoder_init(struct drm_device *dev,
> >> }
> >> EXPORT_SYMBOL(drm_encoder_init);
> >>
> >> +/**
> >> + * drm_encoder_cleanup_from - remove a given bridge and all the following
> >> + * @encoder: encoder whole list of bridges shall be pruned
> >> + * @bridge: first bridge to remove
> >> + *
> >> + * Removes from an encoder all the bridges starting with a given bridge
> >> + * and until the end of the chain.
> >> + *
> >> + * Does nothing if the bridge is not attached to an encoder chain.
> >> + *
> >> + * This should not be used in "normal" DRM pipelines. It is only useful for
> >> + * devices whose final part of the DRM chain can be physically removed and
> >> + * later reconnected (possibly with different hardware).
> >> + */
> >> +void drm_encoder_cleanup_from(struct drm_encoder *encoder, struct drm_bridge *bridge)
> >> +{
> >> + struct drm_bridge *next;
> >> + LIST_HEAD(tmplist);
> >> +
> >> + /*
> >> + * We need the bridge_chain_mutex to modify the chain, but
> >> + * drm_bridge_detach() will call DRM_MODESET_LOCK_ALL_BEGIN() (in
> >> + * drm_modeset_lock_fini()), resulting in a possible ABBA circular
> >> + * deadlock. Avoid it by first moving all the bridges to a
> >> + * temporary list holding the lock, and then calling
> >> + * drm_bridge_detach() without the lock.
> >> + */
> >> + mutex_lock(&encoder->bridge_chain_mutex);
> >> + if (!list_empty(&bridge->chain_node))
> >> + list_for_each_entry_safe_from(bridge, next, &encoder->bridge_chain, chain_node)
> >> + list_move_tail(&bridge->chain_node, &tmplist);
> >> + mutex_unlock(&encoder->bridge_chain_mutex);
> >> +
> >> + while (!list_empty(&tmplist))
> >> + drm_bridge_detach(list_first_entry(&tmplist, struct drm_bridge, chain_node));
> >> +}
> >> +EXPORT_SYMBOL(drm_encoder_cleanup_from);
> >> +
> >
> > The name is super confusing, because it doesn't clean up anything.
> > drm_encoder_cleanup is called that way because it cleans up the encoder.
> > This function doesn't.
> >
> > Unlike what's being documented, it doesn't remove any bridge either. It
> > just detaches bridge, so let's just call it that way?
>
> Good point.
>
> What about:
>
> * rename to drm_bridge_detach_from()
> * drop the @encoder argument (get if from bridge->encoder)
> * maybe even move to drm_bridge.c?
Yeah, sounds good
Maxime
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 273 bytes --]
^ permalink raw reply
* Re: [PATCH v2] gpiolib: handle gpio-hogs only once
From: Bartosz Golaszewski @ 2026-06-09 12:39 UTC (permalink / raw)
To: Daniel Drake; +Cc: linux-gpio, linux-arm-kernel, linusw, brgl
In-Reply-To: <20260608210108.36248-1-dan@reactivated.net>
On Mon, 8 Jun 2026 23:01:08 +0200, Daniel Drake <dan@reactivated.net> said:
> Commit d1d564ec49929 ("gpio: move hogs into GPIO core") introduced a
> behaviour change that breaks boot on Raspberry Pi 5 when using the
> firmware-supplied device tree:
>
> gpiochip_add_data_with_key: GPIOs 544..575
> (/soc@107c000000/gpio@7d517c00) failed to register, -22
> brcmstb-gpio 107d517c00.gpio: Could not add gpiochip for bank 1
> brcmstb-gpio 107d517c00.gpio: probe with driver brcmstb-gpio failed
> with error -22
>
> gpio-brcmstb registers two gpio_chips against the device tree
> node gpio@7d517c00, one for each bank. The firmware-supplied DT includes
> a gpio-hog on RP1 RUN, and this gpio-hog is attempted to be applied to
> *both* gpio_chips. This succeeds against bank 0 (which hosts the GPIO)
> and fails for bank 1 (which does not).
>
> In the previous implementation, failures to apply gpio-hogs were
> quietly ignored. In the new code, the error code propagates and causes
> probe to fail.
>
> Closely approximate the previous behaviour by using the OF_POPULATED flag
> to ensure that each gpio-hog is processed only once. The flag was
> previously being set before the gpio-hogs were processed, so as part
> of this change, the flag now gets set only after the gpio-hog is actioned.
> The handling of gpio-hogs on a DT node with multiple gpio_chips remains a
> bit incomplete/unclear, but this at least retains the ability to apply
> hogs to the first gpio_chip per node.
>
> Signed-off-by: Daniel Drake <dan@reactivated.net>
This needs a Fixes tag.
> ---
> drivers/gpio/gpiolib-of.c | 5 -----
> drivers/gpio/gpiolib.c | 8 ++++++++
> 2 files changed, 8 insertions(+), 5 deletions(-)
>
> v2: move OF_POPULATED flag setting to happen after the gpio-hog has
> been applied (otherwise all hogs were considered already-applied
> and never applied at all, oops!)
>
> This bug is only exposed by the RPi5 firmware-provided DT that has the
> gpio-hog. The DT shipped in the mainline kernel does not have the hog
> here. I'm not sure to what extent Linux cares about supporting the
> downstream firmware DT.
>
We care about not breaking working setups, I think this should be fixed.
> I'm also happy to consider other approaches. This multi-gpiochip setup is
> a bit weird and gpio-brcmstb could perhaps be converted to register only a
> single gpio_chip covering all banks. I verified that the other drivers
> that obviously follow this same multiple-gpiochip pattern
> (pinctrl-amlogic-a4, pinctrl-st and pinctrl-stm32) do not seem to be used by
> any board DTs that include gpio-hogs.
>
> diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
> index 2c923d17541f..813dbcb91f6f 100644
> --- a/drivers/gpio/gpiolib-of.c
> +++ b/drivers/gpio/gpiolib-of.c
> @@ -1066,11 +1066,6 @@ int of_gpiochip_add(struct gpio_chip *chip)
>
> of_node_get(np);
>
> - for_each_available_child_of_node_scoped(np, child) {
> - if (of_property_read_bool(child, "gpio-hog"))
> - of_node_set_flag(child, OF_POPULATED);
> - }
> -
> return ret;
> }
>
> diff --git a/drivers/gpio/gpiolib.c b/drivers/gpio/gpiolib.c
> index 1e6dce430dca..b02d711289d0 100644
> --- a/drivers/gpio/gpiolib.c
> +++ b/drivers/gpio/gpiolib.c
> @@ -1031,9 +1031,17 @@ static int gpiochip_hog_lines(struct gpio_chip *gc)
> if (!fwnode_property_present(fwnode, "gpio-hog"))
> continue;
>
> + /* The hog may have been handled by another gpio_chip on the same fwnode */
> + if (is_of_node(fwnode) &&
> + of_node_check_flag(to_of_node(fwnode), OF_POPULATED))
> + continue;
> +
> ret = gpiochip_add_hog(gc, fwnode);
> if (ret)
> return ret;
> +
> + if (is_of_node(fwnode))
> + of_node_set_flag(to_of_node(fwnode), OF_POPULATED);
Sashiko correctly points out that on errors, the state will be corrupted. We
could maybe move the clearing of the flag to gpiochip_free_hogs() and track its
state when processing fwnodes in order not to clear it incorrectly?
> }
>
> return 0;
> --
> 2.54.0
>
>
Thanks,
Bartosz
^ permalink raw reply
* Re: [GIT PULL] Allwinner DT Changes for 7.2
From: Chen-Yu Tsai @ 2026-06-09 12:38 UTC (permalink / raw)
To: Krzysztof Kozlowski, Stephen Boyd
Cc: soc, Jernej Skrabec, Samuel Holland, linux-sunxi,
linux-arm-kernel
In-Reply-To: <98f3e864-3a9e-4f96-a633-0c0053ec35fb@kernel.org>
On Tue, Jun 9, 2026 at 8:51 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
>
> On 09/06/2026 13:48, Chen-Yu Tsai wrote:
> > On Tue, Jun 9, 2026 at 8:43 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
> >>
> >> On Tue, Jun 02, 2026 at 03:09:52AM +0800, Chen-Yu Tsai wrote:
> >>> The following changes since commit 254f49634ee16a731174d2ae34bc50bd5f45e731:
> >>>
> >>> Linux 7.1-rc1 (2026-04-26 14:19:00 -0700)
> >>>
> >>> are available in the Git repository at:
> >>>
> >>> https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git tags/sunxi-dt-for-7.2
> >>>
> >>> for you to fetch changes up to 44cf19e41c769720750dbb8752aca75c247e565f:
> >>>
> >>> arm64: dts: allwinner: a523: add gpadc node (2026-05-25 05:02:58 +0800)
> >>>
> >>>
> >>> As mentioned in the tag, this pull request contains a change that should
> >>> be shared between the soc and clk trees. However since I don't have any
> >>> clk changes to send this cycle, I think it can just go through the soc
> >>> tree without any issues.
> >>
> >> But the clock driver change cannot be in the DTS branch. This should go
> >> via clock tree even if it is one change. And definitely not via DTS
> >> branch.
> >
> > It is a shared change, because it moves two symbols from the driver's
> > private header to the public DT binding header. I don't see how this
> > can go through just the clk tree when one of the subsequent patches
> > uses those new symbols.
> >
> > "clk: sunxi-ng: v3s: Export MBUS and DRAM clocks to the public header"
> > is needed by "ARM: dts: sun8i: v3s: Add mbus node to represent the
> > interconnect".
> >
> > The other way to go about this is to use raw numbers first, then
> > another patch in the next cycle to switch the numbers to actual
> > macros. IMHO not worth the churn and headache.
>
> You can have a duplicated define.
I honestly did not know that it worked.
However, splitting what is effectively one logical change (*move*
something) into two patches just to be able to merge them through two
separate trees still seems wrong to me.
Would it help if Stephen gave an ack?
ChenYu
^ permalink raw reply
* Re: [PATCH v6 04/20] dma-pool: track decrypted atomic pools and select them via attrs
From: Petr Tesarik @ 2026-06-09 12:23 UTC (permalink / raw)
To: Aneesh Kumar K.V (Arm)
Cc: iommu, linux-arm-kernel, linux-kernel, linux-coco, Robin Murphy,
Marek Szyprowski, Will Deacon, Marc Zyngier, Steven Price,
Suzuki K Poulose, Catalin Marinas, Jiri Pirko, Jason Gunthorpe,
Mostafa Saleh, Alexey Kardashevskiy, Dan Williams, Xu Yilun,
linuxppc-dev, linux-s390, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy (CS GROUP), Alexander Gordeev,
Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, x86, Jiri Pirko,
Michael Kelley
In-Reply-To: <20260604083959.1265923-5-aneesh.kumar@kernel.org>
On Thu, 4 Jun 2026 14:09:43 +0530
"Aneesh Kumar K.V (Arm)" <aneesh.kumar@kernel.org> wrote:
> Teach the atomic DMA pool code to distinguish between encrypted and
> unencrypted pools, and make pool allocation select the matching pool based
> on DMA attributes.
>
> Introduce a dma_gen_pool wrapper that records whether a pool is
> unencrypted, initialize that state when the atomic pools are created, and
> use it when expanding and resizing the pools. Update dma_alloc_from_pool()
> to take attrs and skip pools whose encrypted state does not match
> DMA_ATTR_CC_SHARED. Update dma_free_from_pool() accordingly.
>
> Also pass DMA_ATTR_CC_SHARED from the swiotlb atomic allocation path so
> decrypted swiotlb allocations are taken from the correct atomic pool.
>
> Tested-by: Jiri Pirko <jiri@nvidia.com>
> Tested-by: Michael Kelley <mhklinux@outlook.com>
> Tested-by: Mostafa Saleh <smostafa@google.com>
> Reviewed-by: Mostafa Saleh <smostafa@google.com>
> Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org>
FWIW this also looks good to me, but I don't think I'm the best person
to review changed to DMA generic pools.
Petr T
> ---
> drivers/iommu/dma-iommu.c | 2 +-
> include/linux/dma-map-ops.h | 2 +-
> kernel/dma/direct.c | 11 ++-
> kernel/dma/pool.c | 167 +++++++++++++++++++++++-------------
> kernel/dma/swiotlb.c | 7 +-
> 5 files changed, 123 insertions(+), 66 deletions(-)
>
> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index 54d96e847f16..c2595bee3d41 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
> @@ -1673,7 +1673,7 @@ void *iommu_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle,
> if (IS_ENABLED(CONFIG_DMA_DIRECT_REMAP) &&
> !gfpflags_allow_blocking(gfp) && !coherent)
> page = dma_alloc_from_pool(dev, PAGE_ALIGN(size), &cpu_addr,
> - gfp, NULL);
> + gfp, attrs, NULL);
> else
> cpu_addr = iommu_dma_alloc_pages(dev, size, &page, gfp, attrs);
> if (!cpu_addr)
> diff --git a/include/linux/dma-map-ops.h b/include/linux/dma-map-ops.h
> index 6a1832a73cad..696b2c3a2305 100644
> --- a/include/linux/dma-map-ops.h
> +++ b/include/linux/dma-map-ops.h
> @@ -212,7 +212,7 @@ void *dma_common_pages_remap(struct page **pages, size_t size, pgprot_t prot,
> void dma_common_free_remap(void *cpu_addr, size_t size);
>
> struct page *dma_alloc_from_pool(struct device *dev, size_t size,
> - void **cpu_addr, gfp_t flags,
> + void **cpu_addr, gfp_t flags, unsigned long attrs,
> bool (*phys_addr_ok)(struct device *, phys_addr_t, size_t));
> bool dma_free_from_pool(struct device *dev, void *start, size_t size);
>
> diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
> index 90dc5057a0c0..681f16a984ab 100644
> --- a/kernel/dma/direct.c
> +++ b/kernel/dma/direct.c
> @@ -154,7 +154,7 @@ static bool dma_direct_use_pool(struct device *dev, gfp_t gfp)
> }
>
> static void *dma_direct_alloc_from_pool(struct device *dev, size_t size,
> - dma_addr_t *dma_handle, gfp_t gfp)
> + dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs)
> {
> struct page *page;
> u64 phys_limit;
> @@ -164,7 +164,8 @@ static void *dma_direct_alloc_from_pool(struct device *dev, size_t size,
> return NULL;
>
> gfp |= dma_direct_optimal_gfp_mask(dev, &phys_limit);
> - page = dma_alloc_from_pool(dev, size, &ret, gfp, dma_coherent_ok);
> + page = dma_alloc_from_pool(dev, size, &ret, gfp, attrs,
> + dma_coherent_ok);
> if (!page)
> return NULL;
> *dma_handle = phys_to_dma_direct(dev, page_to_phys(page));
> @@ -253,7 +254,8 @@ void *dma_direct_alloc(struct device *dev, size_t size,
> */
> if ((remap || (attrs & DMA_ATTR_CC_SHARED)) &&
> dma_direct_use_pool(dev, gfp))
> - return dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
> + return dma_direct_alloc_from_pool(dev, size, dma_handle,
> + gfp, attrs);
>
> if (is_swiotlb_for_alloc(dev)) {
> page = dma_direct_alloc_swiotlb(dev, size);
> @@ -401,7 +403,8 @@ struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
> attrs |= DMA_ATTR_CC_SHARED;
>
> if ((attrs & DMA_ATTR_CC_SHARED) && dma_direct_use_pool(dev, gfp))
> - return dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
> + return dma_direct_alloc_from_pool(dev, size, dma_handle,
> + gfp, attrs);
>
> if (is_swiotlb_for_alloc(dev)) {
> page = dma_direct_alloc_swiotlb(dev, size);
> diff --git a/kernel/dma/pool.c b/kernel/dma/pool.c
> index 2b2fbb709242..be78474a6c49 100644
> --- a/kernel/dma/pool.c
> +++ b/kernel/dma/pool.c
> @@ -12,12 +12,18 @@
> #include <linux/set_memory.h>
> #include <linux/slab.h>
> #include <linux/workqueue.h>
> +#include <linux/cc_platform.h>
>
> -static struct gen_pool *atomic_pool_dma __ro_after_init;
> +struct dma_gen_pool {
> + bool unencrypted;
> + struct gen_pool *pool;
> +};
> +
> +static struct dma_gen_pool atomic_pool_dma __ro_after_init;
> static unsigned long pool_size_dma;
> -static struct gen_pool *atomic_pool_dma32 __ro_after_init;
> +static struct dma_gen_pool atomic_pool_dma32 __ro_after_init;
> static unsigned long pool_size_dma32;
> -static struct gen_pool *atomic_pool_kernel __ro_after_init;
> +static struct dma_gen_pool atomic_pool_kernel __ro_after_init;
> static unsigned long pool_size_kernel;
>
> /* Size can be defined by the coherent_pool command line */
> @@ -76,11 +82,12 @@ static bool cma_in_zone(gfp_t gfp)
> return true;
> }
>
> -static int atomic_pool_expand(struct gen_pool *pool, size_t pool_size,
> +static int atomic_pool_expand(struct dma_gen_pool *dma_pool, size_t pool_size,
> gfp_t gfp)
> {
> unsigned int order;
> struct page *page = NULL;
> + bool leak_pages = false;
> void *addr;
> int ret = -ENOMEM;
>
> @@ -113,12 +120,17 @@ static int atomic_pool_expand(struct gen_pool *pool, size_t pool_size,
> * Memory in the atomic DMA pools must be unencrypted, the pools do not
> * shrink so no re-encryption occurs in dma_direct_free().
> */
> - ret = set_memory_decrypted((unsigned long)page_to_virt(page),
> - 1 << order);
> - if (ret)
> - goto remove_mapping;
> - ret = gen_pool_add_virt(pool, (unsigned long)addr, page_to_phys(page),
> - pool_size, NUMA_NO_NODE);
> + if (dma_pool->unencrypted) {
> + ret = set_memory_decrypted((unsigned long)page_to_virt(page),
> + 1 << order);
> + if (ret) {
> + leak_pages = true;
> + goto remove_mapping;
> + }
> + }
> +
> + ret = gen_pool_add_virt(dma_pool->pool, (unsigned long)addr,
> + page_to_phys(page), pool_size, NUMA_NO_NODE);
> if (ret)
> goto encrypt_mapping;
>
> @@ -126,62 +138,67 @@ static int atomic_pool_expand(struct gen_pool *pool, size_t pool_size,
> return 0;
>
> encrypt_mapping:
> - ret = set_memory_encrypted((unsigned long)page_to_virt(page),
> - 1 << order);
> - if (WARN_ON_ONCE(ret)) {
> - /* Decrypt succeeded but encrypt failed, purposely leak */
> - goto out;
> - }
> + if (dma_pool->unencrypted &&
> + set_memory_encrypted((unsigned long)page_to_virt(page), 1 << order))
> + leak_pages = true;
> +
> remove_mapping:
> #ifdef CONFIG_DMA_DIRECT_REMAP
> dma_common_free_remap(addr, pool_size);
> free_page:
> - __free_pages(page, order);
> + if (!leak_pages)
> + __free_pages(page, order);
> #endif
> out:
> return ret;
> }
>
> -static void atomic_pool_resize(struct gen_pool *pool, gfp_t gfp)
> +static void atomic_pool_resize(struct dma_gen_pool *dma_pool, gfp_t gfp)
> {
> - if (pool && gen_pool_avail(pool) < atomic_pool_size)
> - atomic_pool_expand(pool, gen_pool_size(pool), gfp);
> + if (dma_pool->pool && gen_pool_avail(dma_pool->pool) < atomic_pool_size)
> + atomic_pool_expand(dma_pool, gen_pool_size(dma_pool->pool), gfp);
> }
>
> static void atomic_pool_work_fn(struct work_struct *work)
> {
> if (IS_ENABLED(CONFIG_ZONE_DMA))
> - atomic_pool_resize(atomic_pool_dma,
> + atomic_pool_resize(&atomic_pool_dma,
> GFP_KERNEL | GFP_DMA);
> if (IS_ENABLED(CONFIG_ZONE_DMA32))
> - atomic_pool_resize(atomic_pool_dma32,
> + atomic_pool_resize(&atomic_pool_dma32,
> GFP_KERNEL | GFP_DMA32);
> - atomic_pool_resize(atomic_pool_kernel, GFP_KERNEL);
> + atomic_pool_resize(&atomic_pool_kernel, GFP_KERNEL);
> }
>
> -static __init struct gen_pool *__dma_atomic_pool_init(size_t pool_size,
> - gfp_t gfp)
> +static __init struct dma_gen_pool *__dma_atomic_pool_init(struct dma_gen_pool *dma_pool,
> + size_t pool_size, gfp_t gfp)
> {
> - struct gen_pool *pool;
> int ret;
>
> - pool = gen_pool_create(PAGE_SHIFT, NUMA_NO_NODE);
> - if (!pool)
> + dma_pool->pool = gen_pool_create(PAGE_SHIFT, NUMA_NO_NODE);
> + if (!dma_pool->pool)
> return NULL;
>
> - gen_pool_set_algo(pool, gen_pool_first_fit_order_align, NULL);
> + gen_pool_set_algo(dma_pool->pool, gen_pool_first_fit_order_align, NULL);
> +
> + /* if platform is using memory encryption atomic pools are by default decrypted. */
> + if (cc_platform_has(CC_ATTR_MEM_ENCRYPT))
> + dma_pool->unencrypted = true;
> + else
> + dma_pool->unencrypted = false;
>
> - ret = atomic_pool_expand(pool, pool_size, gfp);
> + ret = atomic_pool_expand(dma_pool, pool_size, gfp);
> if (ret) {
> - gen_pool_destroy(pool);
> + gen_pool_destroy(dma_pool->pool);
> + dma_pool->pool = NULL;
> pr_err("DMA: failed to allocate %zu KiB %pGg pool for atomic allocation\n",
> pool_size >> 10, &gfp);
> return NULL;
> }
>
> pr_info("DMA: preallocated %zu KiB %pGg pool for atomic allocations\n",
> - gen_pool_size(pool) >> 10, &gfp);
> - return pool;
> + gen_pool_size(dma_pool->pool) >> 10, &gfp);
> + return dma_pool;
> }
>
> #ifdef CONFIG_ZONE_DMA32
> @@ -207,21 +224,22 @@ static int __init dma_atomic_pool_init(void)
>
> /* All memory might be in the DMA zone(s) to begin with */
> if (has_managed_zone(ZONE_NORMAL)) {
> - atomic_pool_kernel = __dma_atomic_pool_init(atomic_pool_size,
> - GFP_KERNEL);
> - if (!atomic_pool_kernel)
> + __dma_atomic_pool_init(&atomic_pool_kernel, atomic_pool_size, GFP_KERNEL);
> + if (!atomic_pool_kernel.pool)
> ret = -ENOMEM;
> }
> +
> if (has_managed_dma()) {
> - atomic_pool_dma = __dma_atomic_pool_init(atomic_pool_size,
> - GFP_KERNEL | GFP_DMA);
> - if (!atomic_pool_dma)
> + __dma_atomic_pool_init(&atomic_pool_dma, atomic_pool_size,
> + GFP_KERNEL | GFP_DMA);
> + if (!atomic_pool_dma.pool)
> ret = -ENOMEM;
> }
> +
> if (has_managed_dma32) {
> - atomic_pool_dma32 = __dma_atomic_pool_init(atomic_pool_size,
> - GFP_KERNEL | GFP_DMA32);
> - if (!atomic_pool_dma32)
> + __dma_atomic_pool_init(&atomic_pool_dma32, atomic_pool_size,
> + GFP_KERNEL | GFP_DMA32);
> + if (!atomic_pool_dma32.pool)
> ret = -ENOMEM;
> }
>
> @@ -230,19 +248,44 @@ static int __init dma_atomic_pool_init(void)
> }
> postcore_initcall(dma_atomic_pool_init);
>
> -static inline struct gen_pool *dma_guess_pool(struct gen_pool *prev, gfp_t gfp)
> +static inline struct dma_gen_pool *__dma_guess_pool(struct dma_gen_pool *first,
> + struct dma_gen_pool *second, struct dma_gen_pool *third)
> {
> - if (prev == NULL) {
> + if (first->pool)
> + return first;
> + if (second && second->pool)
> + return second;
> + if (third && third->pool)
> + return third;
> + return NULL;
> +}
> +
> +static inline struct dma_gen_pool *dma_guess_pool(struct dma_gen_pool *prev,
> + gfp_t gfp)
> +{
> + if (!prev) {
> if (gfp & GFP_DMA)
> - return atomic_pool_dma ?: atomic_pool_dma32 ?: atomic_pool_kernel;
> + return __dma_guess_pool(&atomic_pool_dma,
> + &atomic_pool_dma32,
> + &atomic_pool_kernel);
> +
> if (gfp & GFP_DMA32)
> - return atomic_pool_dma32 ?: atomic_pool_dma ?: atomic_pool_kernel;
> - return atomic_pool_kernel ?: atomic_pool_dma32 ?: atomic_pool_dma;
> + return __dma_guess_pool(&atomic_pool_dma32,
> + &atomic_pool_dma,
> + &atomic_pool_kernel);
> +
> + return __dma_guess_pool(&atomic_pool_kernel,
> + &atomic_pool_dma32,
> + &atomic_pool_dma);
> }
> - if (prev == atomic_pool_kernel)
> - return atomic_pool_dma32 ? atomic_pool_dma32 : atomic_pool_dma;
> - if (prev == atomic_pool_dma32)
> - return atomic_pool_dma;
> +
> + if (prev == &atomic_pool_kernel)
> + return __dma_guess_pool(&atomic_pool_dma32,
> + &atomic_pool_dma, NULL);
> +
> + if (prev == &atomic_pool_dma32)
> + return __dma_guess_pool(&atomic_pool_dma, NULL, NULL);
> +
> return NULL;
> }
>
> @@ -272,16 +315,20 @@ static struct page *__dma_alloc_from_pool(struct device *dev, size_t size,
> }
>
> struct page *dma_alloc_from_pool(struct device *dev, size_t size,
> - void **cpu_addr, gfp_t gfp,
> + void **cpu_addr, gfp_t gfp, unsigned long attrs,
> bool (*phys_addr_ok)(struct device *, phys_addr_t, size_t))
> {
> - struct gen_pool *pool = NULL;
> + struct dma_gen_pool *dma_pool = NULL;
> struct page *page;
> bool pool_found = false;
>
> - while ((pool = dma_guess_pool(pool, gfp))) {
> + while ((dma_pool = dma_guess_pool(dma_pool, gfp))) {
> +
> + if (dma_pool->unencrypted != !!(attrs & DMA_ATTR_CC_SHARED))
> + continue;
> +
> pool_found = true;
> - page = __dma_alloc_from_pool(dev, size, pool, cpu_addr,
> + page = __dma_alloc_from_pool(dev, size, dma_pool->pool, cpu_addr,
> phys_addr_ok);
> if (page)
> return page;
> @@ -296,12 +343,14 @@ struct page *dma_alloc_from_pool(struct device *dev, size_t size,
>
> bool dma_free_from_pool(struct device *dev, void *start, size_t size)
> {
> - struct gen_pool *pool = NULL;
> + struct dma_gen_pool *dma_pool = NULL;
> +
> + while ((dma_pool = dma_guess_pool(dma_pool, 0))) {
>
> - while ((pool = dma_guess_pool(pool, 0))) {
> - if (!gen_pool_has_addr(pool, (unsigned long)start, size))
> + if (!gen_pool_has_addr(dma_pool->pool, (unsigned long)start, size))
> continue;
> - gen_pool_free(pool, (unsigned long)start, size);
> +
> + gen_pool_free(dma_pool->pool, (unsigned long)start, size);
> return true;
> }
>
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> index ac03a6856c2e..be4d418d92ac 100644
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -612,6 +612,7 @@ static struct page *swiotlb_alloc_tlb(struct device *dev, size_t bytes,
> u64 phys_limit, gfp_t gfp)
> {
> struct page *page;
> + unsigned long attrs = 0;
>
> /*
> * Allocate from the atomic pools if memory is encrypted and
> @@ -623,8 +624,12 @@ static struct page *swiotlb_alloc_tlb(struct device *dev, size_t bytes,
> if (!IS_ENABLED(CONFIG_DMA_COHERENT_POOL))
> return NULL;
>
> + /* swiotlb considered decrypted by default */
> + if (cc_platform_has(CC_ATTR_MEM_ENCRYPT))
> + attrs = DMA_ATTR_CC_SHARED;
> +
> return dma_alloc_from_pool(dev, bytes, &vaddr, gfp,
> - dma_coherent_ok);
> + attrs, dma_coherent_ok);
> }
>
> gfp &= ~GFP_ZONEMASK;
^ permalink raw reply
* Re: [PATCH v6 05/20] dma: swiotlb: pass mapping attributes by reference
From: Petr Tesarik @ 2026-06-09 12:21 UTC (permalink / raw)
To: Aneesh Kumar K.V (Arm)
Cc: iommu, linux-arm-kernel, linux-kernel, linux-coco, Robin Murphy,
Marek Szyprowski, Will Deacon, Marc Zyngier, Steven Price,
Suzuki K Poulose, Catalin Marinas, Jiri Pirko, Jason Gunthorpe,
Mostafa Saleh, Alexey Kardashevskiy, Dan Williams, Xu Yilun,
linuxppc-dev, linux-s390, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy (CS GROUP), Alexander Gordeev,
Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, x86, Michael Kelley
In-Reply-To: <20260604083959.1265923-6-aneesh.kumar@kernel.org>
On Thu, 4 Jun 2026 14:09:44 +0530
"Aneesh Kumar K.V (Arm)" <aneesh.kumar@kernel.org> wrote:
> Change swiotlb_tbl_map_single() to take the DMA mapping attributes by
> reference and update the direct callers accordingly.
>
> This is a preparatory change for a follow-up patch which updates the
> attributes based on the selected swiotlb pool. Keeping the signature change
> separate makes the follow-up patch easier to review.
>
> No functional change in this patch.
>
> Tested-by: Michael Kelley <mhklinux@outlook.com>
> Tested-by: Mostafa Saleh <smostafa@google.com>
> Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org>
Reviewed-by: Petr Tesarik <ptesarik@suse.com>
Thanks
Petr T
> ---
> drivers/iommu/dma-iommu.c | 2 +-
> drivers/xen/swiotlb-xen.c | 2 +-
> include/linux/swiotlb.h | 2 +-
> kernel/dma/swiotlb.c | 6 +++---
> 4 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c
> index c2595bee3d41..725c7adb0a8d 100644
> --- a/drivers/iommu/dma-iommu.c
> +++ b/drivers/iommu/dma-iommu.c
> @@ -1180,7 +1180,7 @@ static phys_addr_t iommu_dma_map_swiotlb(struct device *dev, phys_addr_t phys,
> trace_swiotlb_bounced(dev, phys, size);
>
> phys = swiotlb_tbl_map_single(dev, phys, size, iova_mask(iovad), dir,
> - attrs);
> + &attrs);
>
> /*
> * Untrusted devices should not see padding areas with random leftover
> diff --git a/drivers/xen/swiotlb-xen.c b/drivers/xen/swiotlb-xen.c
> index 2cbf2b588f5b..8c4abe65cd49 100644
> --- a/drivers/xen/swiotlb-xen.c
> +++ b/drivers/xen/swiotlb-xen.c
> @@ -243,7 +243,7 @@ static dma_addr_t xen_swiotlb_map_phys(struct device *dev, phys_addr_t phys,
> */
> trace_swiotlb_bounced(dev, dev_addr, size);
>
> - map = swiotlb_tbl_map_single(dev, phys, size, 0, dir, attrs);
> + map = swiotlb_tbl_map_single(dev, phys, size, 0, dir, &attrs);
> if (map == (phys_addr_t)DMA_MAPPING_ERROR)
> return DMA_MAPPING_ERROR;
>
> diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
> index 133bb8ca9032..29187cec90d8 100644
> --- a/include/linux/swiotlb.h
> +++ b/include/linux/swiotlb.h
> @@ -238,7 +238,7 @@ static inline phys_addr_t default_swiotlb_limit(void)
>
> phys_addr_t swiotlb_tbl_map_single(struct device *hwdev, phys_addr_t phys,
> size_t mapping_size, unsigned int alloc_aligned_mask,
> - enum dma_data_direction dir, unsigned long attrs);
> + enum dma_data_direction dir, unsigned long *attrs);
> dma_addr_t swiotlb_map(struct device *dev, phys_addr_t phys,
> size_t size, enum dma_data_direction dir, unsigned long attrs);
>
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> index be4d418d92ac..78ce05857c00 100644
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -1391,7 +1391,7 @@ static unsigned long mem_used(struct io_tlb_mem *mem)
> */
> phys_addr_t swiotlb_tbl_map_single(struct device *dev, phys_addr_t orig_addr,
> size_t mapping_size, unsigned int alloc_align_mask,
> - enum dma_data_direction dir, unsigned long attrs)
> + enum dma_data_direction dir, unsigned long *attrs)
> {
> struct io_tlb_mem *mem = dev->dma_io_tlb_mem;
> unsigned int offset;
> @@ -1425,7 +1425,7 @@ phys_addr_t swiotlb_tbl_map_single(struct device *dev, phys_addr_t orig_addr,
> size = ALIGN(mapping_size + offset, alloc_align_mask + 1);
> index = swiotlb_find_slots(dev, orig_addr, size, alloc_align_mask, &pool);
> if (index == -1) {
> - if (!(attrs & DMA_ATTR_NO_WARN))
> + if (!(*attrs & DMA_ATTR_NO_WARN))
> dev_warn_ratelimited(dev,
> "swiotlb buffer is full (sz: %zd bytes), total %lu (slots), used %lu (slots)\n",
> size, mem->nslabs, mem_used(mem));
> @@ -1604,7 +1604,7 @@ dma_addr_t swiotlb_map(struct device *dev, phys_addr_t paddr, size_t size,
>
> trace_swiotlb_bounced(dev, phys_to_dma(dev, paddr), size);
>
> - swiotlb_addr = swiotlb_tbl_map_single(dev, paddr, size, 0, dir, attrs);
> + swiotlb_addr = swiotlb_tbl_map_single(dev, paddr, size, 0, dir, &attrs);
> if (swiotlb_addr == (phys_addr_t)DMA_MAPPING_ERROR)
> return DMA_MAPPING_ERROR;
>
^ permalink raw reply
* Re: [RESEND,GIT PULL] aspeed: First batch of ARM devicetree changes for v7.2
From: Krzysztof Kozlowski @ 2026-06-09 12:18 UTC (permalink / raw)
To: Andrew Jeffery
Cc: soc, linux-arm-kernel, linux-aspeed, linux-kernel, Joel Stanley
In-Reply-To: <cbd2822caa9fc7c2b4567703be785b9b4fd829cd.camel@codeconstruct.com.au>
On Wed, Jun 03, 2026 at 04:48:43PM +0930, Andrew Jeffery wrote:
> Hi SoC maintainers,
>
> The first attempt[1] missed the preamble, so here's the same again,
> this time with it included.
>
> [1]: https://lore.kernel.org/soc/55ab27bc5e09252b1dbfdf1505693eb193b8e846.camel@codeconstruct.com.au/
>
> Cheers,
>
> Andrew
>
> The following changes since commit 254f49634ee16a731174d2ae34bc50bd5f45e731:
>
> Linux 7.1-rc1 (2026-04-26 14:19:00 -0700)
>
> are available in the Git repository at:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/bmc/linux.git tags/aspeed-7.2-devicetree-0
>
> for you to fetch changes up to 1249ee157de518a76cec169e2a5db4d6e523cc90:
>
> ARM: dts: aspeed: sanmiguel: Fix the CPU_CHIPTHROT linename (2026-05-27 12:44:26 +0930)
>
Thanks, applied
Best regards,
Krzysztof
^ permalink raw reply
* Re: [PATCH v6 03/20] dma-direct: use DMA_ATTR_CC_SHARED in alloc/free paths
From: Petr Tesarik @ 2026-06-09 12:18 UTC (permalink / raw)
To: Aneesh Kumar K.V (Arm)
Cc: iommu, linux-arm-kernel, linux-kernel, linux-coco, Robin Murphy,
Marek Szyprowski, Will Deacon, Marc Zyngier, Steven Price,
Suzuki K Poulose, Catalin Marinas, Jiri Pirko, Jason Gunthorpe,
Mostafa Saleh, Alexey Kardashevskiy, Dan Williams, Xu Yilun,
linuxppc-dev, linux-s390, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy (CS GROUP), Alexander Gordeev,
Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, x86, Jiri Pirko,
Michael Kelley
In-Reply-To: <20260604083959.1265923-4-aneesh.kumar@kernel.org>
On Thu, 4 Jun 2026 14:09:42 +0530
"Aneesh Kumar K.V (Arm)" <aneesh.kumar@kernel.org> wrote:
> Propagate force_dma_unencrypted() into DMA_ATTR_CC_SHARED in the
> dma-direct allocation path and use the attribute to drive the related
> decisions.
>
> This updates dma_direct_alloc(), dma_direct_free(), and
> dma_direct_alloc_pages() to fold the forced unencrypted case into attrs.
>
> Tested-by: Jiri Pirko <jiri@nvidia.com>
> Tested-by: Michael Kelley <mhklinux@outlook.com>
> Tested-by: Mostafa Saleh <smostafa@google.com>
> Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org>
Reviewed-by: Petr Tesarik <ptesarik@suse.com>
Petr T
> ---
> kernel/dma/direct.c | 53 +++++++++++++++++++++++++++++++++++++--------
> 1 file changed, 44 insertions(+), 9 deletions(-)
>
> diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
> index a741c8a2ee66..90dc5057a0c0 100644
> --- a/kernel/dma/direct.c
> +++ b/kernel/dma/direct.c
> @@ -193,16 +193,31 @@ void *dma_direct_alloc(struct device *dev, size_t size,
> dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs)
> {
> bool remap = false, set_uncached = false;
> - bool mark_mem_decrypt = true;
> + bool mark_mem_decrypt = false;
> struct page *page;
> void *ret;
>
> + /*
> + * DMA_ATTR_CC_SHARED is not a caller-visible dma_alloc_*()
> + * attribute. The direct allocator uses it internally after it has
> + * decided that the backing pages must be shared/decrypted, so the
> + * rest of the allocation path can consistently select DMA addresses,
> + * choose compatible pools and restore encryption on free.
> + */
> + if (attrs & DMA_ATTR_CC_SHARED)
> + return NULL;
> +
> + if (force_dma_unencrypted(dev)) {
> + attrs |= DMA_ATTR_CC_SHARED;
> + mark_mem_decrypt = true;
> + }
> +
> size = PAGE_ALIGN(size);
> if (attrs & DMA_ATTR_NO_WARN)
> gfp |= __GFP_NOWARN;
>
> - if ((attrs & DMA_ATTR_NO_KERNEL_MAPPING) &&
> - !force_dma_unencrypted(dev) && !is_swiotlb_for_alloc(dev))
> + if (((attrs & (DMA_ATTR_NO_KERNEL_MAPPING | DMA_ATTR_CC_SHARED)) ==
> + DMA_ATTR_NO_KERNEL_MAPPING) && !is_swiotlb_for_alloc(dev))
> return dma_direct_alloc_no_mapping(dev, size, dma_handle, gfp);
>
> if (!dev_is_dma_coherent(dev)) {
> @@ -236,7 +251,7 @@ void *dma_direct_alloc(struct device *dev, size_t size,
> * Remapping or decrypting memory may block, allocate the memory from
> * the atomic pools instead if we aren't allowed block.
> */
> - if ((remap || force_dma_unencrypted(dev)) &&
> + if ((remap || (attrs & DMA_ATTR_CC_SHARED)) &&
> dma_direct_use_pool(dev, gfp))
> return dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
>
> @@ -312,12 +327,24 @@ void dma_direct_free(struct device *dev, size_t size,
> void *cpu_addr, dma_addr_t dma_addr, unsigned long attrs)
> {
> phys_addr_t phys;
> - bool mark_mem_encrypted = true;
> + bool mark_mem_encrypted = false;
> struct io_tlb_pool *swiotlb_pool;
> unsigned int page_order = get_order(size);
>
> - if ((attrs & DMA_ATTR_NO_KERNEL_MAPPING) &&
> - !force_dma_unencrypted(dev) && !is_swiotlb_for_alloc(dev)) {
> + /* see dma_direct_alloc() for details */
> + WARN_ON(attrs & DMA_ATTR_CC_SHARED);
> +
> + /*
> + * if the device had requested for an unencrypted buffer,
> + * convert it to encrypted on free
> + */
> + if (force_dma_unencrypted(dev)) {
> + attrs |= DMA_ATTR_CC_SHARED;
> + mark_mem_encrypted = true;
> + }
> +
> + if (((attrs & (DMA_ATTR_NO_KERNEL_MAPPING | DMA_ATTR_CC_SHARED)) ==
> + DMA_ATTR_NO_KERNEL_MAPPING) && !is_swiotlb_for_alloc(dev)) {
> /* cpu_addr is a struct page cookie, not a kernel address */
> dma_free_contiguous(dev, cpu_addr, size);
> return;
> @@ -366,10 +393,14 @@ void dma_direct_free(struct device *dev, size_t size,
> struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
> dma_addr_t *dma_handle, enum dma_data_direction dir, gfp_t gfp)
> {
> + unsigned long attrs = 0;
> struct page *page;
> void *ret;
>
> - if (force_dma_unencrypted(dev) && dma_direct_use_pool(dev, gfp))
> + if (force_dma_unencrypted(dev))
> + attrs |= DMA_ATTR_CC_SHARED;
> +
> + if ((attrs & DMA_ATTR_CC_SHARED) && dma_direct_use_pool(dev, gfp))
> return dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
>
> if (is_swiotlb_for_alloc(dev)) {
> @@ -403,7 +434,11 @@ void dma_direct_free_pages(struct device *dev, size_t size,
> phys_addr_t phys;
> void *vaddr = page_address(page);
> struct io_tlb_pool *swiotlb_pool;
> - bool mark_mem_encrypted = true;
> + /*
> + * if the device had requested for an unencrypted buffer,
> + * convert it to encrypted on free
> + */
> + bool mark_mem_encrypted = force_dma_unencrypted(dev);
>
> /* If cpu_addr is not from an atomic pool, dma_free_from_pool() fails */
> if (IS_ENABLED(CONFIG_DMA_COHERENT_POOL) &&
^ permalink raw reply
* Re: [PATCH v8 4/5] arm64: dts: exynos: gs101: Add thermal management unit
From: Tudor Ambarus @ 2026-06-09 12:17 UTC (permalink / raw)
To: André Draszik, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartlomiej Zolnierkiewicz, Krzysztof Kozlowski, Kees Cook,
Gustavo A. R. Silva, Peter Griffin, Alim Akhtar
Cc: jyescas, linux-kernel, linux-samsung-soc, linux-pm, devicetree,
linux-hardening, linux-arm-kernel
In-Reply-To: <08d7299968e14e5fc07fa4791479abd9a2b11c2d.camel@linaro.org>
On 6/9/26 2:44 PM, André Draszik wrote:
> Hi Tudor,
>
Hi!
> On Wed, 2026-06-03 at 13:00 +0000, Tudor Ambarus wrote:
>
>>
>> [...]
>>
>> diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi
>> index 86933f22647b..b6866ef99fb3 100644
>> --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi
>> +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi
>>
>> [...]
>>
>> @@ -639,6 +647,15 @@ watchdog_cl1: watchdog@10070000 {
>> status = "disabled";
>> };
>>
>> + tmu_top: thermal-sensor@100a0000 {
>> + compatible = "google,gs101-tmu-top";
>> + reg = <0x100a0000 0x800>;
>> + clocks = <&cmu_misc CLK_GOUT_MISC_TMU_TOP_PCLK>;
>> + interrupts = <GIC_SPI 769 IRQ_TYPE_LEVEL_HIGH 0>;
>> + samsung,acpm-ipc = <&acpm_ipc>;
>> + #thermal-sensor-cells = <1>;
>
> Vendor-specific properties should always come after generic ones
> (samsung,... to move to end here).
Yes, thanks! I'll address this after I get some feedback on the driver
from the thermal maintainers.
Cheers,
ta
^ permalink raw reply
* Re: [PATCH v6 02/20] dma-direct: swiotlb: handle swiotlb alloc/free outside __dma_direct_alloc_pages
From: Petr Tesarik @ 2026-06-09 12:15 UTC (permalink / raw)
To: Aneesh Kumar K.V (Arm)
Cc: iommu, linux-arm-kernel, linux-kernel, linux-coco, Robin Murphy,
Marek Szyprowski, Will Deacon, Marc Zyngier, Steven Price,
Suzuki K Poulose, Catalin Marinas, Jiri Pirko, Jason Gunthorpe,
Mostafa Saleh, Alexey Kardashevskiy, Dan Williams, Xu Yilun,
linuxppc-dev, linux-s390, Madhavan Srinivasan, Michael Ellerman,
Nicholas Piggin, Christophe Leroy (CS GROUP), Alexander Gordeev,
Gerald Schaefer, Heiko Carstens, Vasily Gorbik,
Christian Borntraeger, Sven Schnelle, x86, Jiri Pirko,
Michael Kelley
In-Reply-To: <20260604083959.1265923-3-aneesh.kumar@kernel.org>
On Thu, 4 Jun 2026 14:09:41 +0530
"Aneesh Kumar K.V (Arm)" <aneesh.kumar@kernel.org> wrote:
> Move swiotlb allocation out of __dma_direct_alloc_pages() and handle it in
> dma_direct_alloc() / dma_direct_alloc_pages().
>
> This is needed for follow-up changes that simplify the handling of
> memory encryption/decryption based on the DMA attribute flags.
>
> swiotlb backing pages are already mapped decrypted by
> swiotlb_update_mem_attributes() and rmem_swiotlb_device_init(), so
> dma-direct should not call dma_set_decrypted() on allocation nor
> dma_set_encrypted() on free for swiotlb-backed memory.
>
> Update alloc/free paths to detect swiotlb-backed pages and skip
> encrypt/decrypt transitions for those paths. Keep the existing highmem
> rejection in dma_direct_alloc_pages() for swiotlb allocations.
>
> Only for "restricted-dma-pool", we currently set `for_alloc = true`, while
> rmem_swiotlb_device_init() decrypts the whole pool up front. This pool is
> typically used together with "shared-dma-pool", where the shared region is
> accessed after remap/ioremap and the returned address is suitable for
> decrypted memory access. So existing code paths remain valid.
>
> Tested-by: Jiri Pirko <jiri@nvidia.com>
> Tested-by: Michael Kelley <mhklinux@outlook.com>
> Tested-by: Mostafa Saleh <smostafa@google.com>
> Signed-off-by: Aneesh Kumar K.V (Arm) <aneesh.kumar@kernel.org>
> ---
> include/linux/swiotlb.h | 6 ++++
> kernel/dma/direct.c | 71 ++++++++++++++++++++++++++++++-----------
> kernel/dma/swiotlb.c | 6 ++++
> 3 files changed, 65 insertions(+), 18 deletions(-)
>
> diff --git a/include/linux/swiotlb.h b/include/linux/swiotlb.h
> index 3dae0f592063..133bb8ca9032 100644
> --- a/include/linux/swiotlb.h
> +++ b/include/linux/swiotlb.h
> @@ -284,6 +284,8 @@ extern void swiotlb_print_info(void);
> #ifdef CONFIG_DMA_RESTRICTED_POOL
> struct page *swiotlb_alloc(struct device *dev, size_t size);
> bool swiotlb_free(struct device *dev, struct page *page, size_t size);
> +void swiotlb_free_from_pool(struct device *dev, phys_addr_t tlb_addr,
> + size_t size, struct io_tlb_pool *pool);
>
> static inline bool is_swiotlb_for_alloc(struct device *dev)
> {
> @@ -299,6 +301,10 @@ static inline bool swiotlb_free(struct device *dev, struct page *page,
> {
> return false;
> }
> +static inline void swiotlb_free_from_pool(struct device *dev, phys_addr_t tlb_addr,
> + size_t size, struct io_tlb_pool *pool)
> +{
> +}
> static inline bool is_swiotlb_for_alloc(struct device *dev)
> {
> return false;
> diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c
> index 583c5922bca2..a741c8a2ee66 100644
> --- a/kernel/dma/direct.c
> +++ b/kernel/dma/direct.c
> @@ -96,14 +96,6 @@ static int dma_set_encrypted(struct device *dev, void *vaddr, size_t size)
> return ret;
> }
>
> -static void __dma_direct_free_pages(struct device *dev, struct page *page,
> - size_t size)
> -{
> - if (swiotlb_free(dev, page, size))
> - return;
> - dma_free_contiguous(dev, page, size);
> -}
> -
> static struct page *dma_direct_alloc_swiotlb(struct device *dev, size_t size)
> {
> struct page *page = swiotlb_alloc(dev, size);
> @@ -125,9 +117,6 @@ static struct page *__dma_direct_alloc_pages(struct device *dev, size_t size,
>
> WARN_ON_ONCE(!PAGE_ALIGNED(size));
>
> - if (is_swiotlb_for_alloc(dev))
> - return dma_direct_alloc_swiotlb(dev, size);
> -
> gfp |= dma_direct_optimal_gfp_mask(dev, &phys_limit);
> page = dma_alloc_contiguous(dev, size, gfp);
> if (page) {
> @@ -204,6 +193,7 @@ void *dma_direct_alloc(struct device *dev, size_t size,
> dma_addr_t *dma_handle, gfp_t gfp, unsigned long attrs)
> {
> bool remap = false, set_uncached = false;
> + bool mark_mem_decrypt = true;
> struct page *page;
> void *ret;
>
> @@ -250,11 +240,21 @@ void *dma_direct_alloc(struct device *dev, size_t size,
> dma_direct_use_pool(dev, gfp))
> return dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
>
> + if (is_swiotlb_for_alloc(dev)) {
> + page = dma_direct_alloc_swiotlb(dev, size);
> + if (page) {
> + mark_mem_decrypt = false;
> + goto setup_page;
> + }
> + return NULL;
> + }
> +
> /* we always manually zero the memory once we are done */
> page = __dma_direct_alloc_pages(dev, size, gfp & ~__GFP_ZERO, true);
> if (!page)
> return NULL;
>
> +setup_page:
> /*
> * dma_alloc_contiguous can return highmem pages depending on a
> * combination the cma= arguments and per-arch setup. These need to be
> @@ -281,7 +281,7 @@ void *dma_direct_alloc(struct device *dev, size_t size,
> goto out_free_pages;
> } else {
> ret = page_address(page);
> - if (dma_set_decrypted(dev, ret, size))
> + if (mark_mem_decrypt && dma_set_decrypted(dev, ret, size))
> goto out_leak_pages;
> }
>
> @@ -298,10 +298,11 @@ void *dma_direct_alloc(struct device *dev, size_t size,
> return ret;
>
> out_encrypt_pages:
> - if (dma_set_encrypted(dev, page_address(page), size))
> + if (mark_mem_decrypt && dma_set_encrypted(dev, page_address(page), size))
> return NULL;
> out_free_pages:
> - __dma_direct_free_pages(dev, page, size);
> + if (!swiotlb_free(dev, page, size))
> + dma_free_contiguous(dev, page, size);
> return NULL;
> out_leak_pages:
> return NULL;
> @@ -310,6 +311,9 @@ void *dma_direct_alloc(struct device *dev, size_t size,
> void dma_direct_free(struct device *dev, size_t size,
> void *cpu_addr, dma_addr_t dma_addr, unsigned long attrs)
> {
> + phys_addr_t phys;
> + bool mark_mem_encrypted = true;
> + struct io_tlb_pool *swiotlb_pool;
> unsigned int page_order = get_order(size);
>
> if ((attrs & DMA_ATTR_NO_KERNEL_MAPPING) &&
> @@ -338,16 +342,25 @@ void dma_direct_free(struct device *dev, size_t size,
> dma_free_from_pool(dev, cpu_addr, PAGE_ALIGN(size)))
> return;
>
> + phys = dma_to_phys(dev, dma_addr);
> + swiotlb_pool = swiotlb_find_pool(dev, phys);
> + if (swiotlb_pool)
> + /* Swiotlb doesn't need a page attribute update on free */
> + mark_mem_encrypted = false;
> +
> if (is_vmalloc_addr(cpu_addr)) {
> vunmap(cpu_addr);
> } else {
> if (IS_ENABLED(CONFIG_ARCH_HAS_DMA_CLEAR_UNCACHED))
> arch_dma_clear_uncached(cpu_addr, size);
> - if (dma_set_encrypted(dev, cpu_addr, size))
> + if (mark_mem_encrypted && dma_set_encrypted(dev, cpu_addr, size))
> return;
> }
>
> - __dma_direct_free_pages(dev, dma_direct_to_page(dev, dma_addr), size);
> + if (swiotlb_pool)
> + swiotlb_free_from_pool(dev, phys, size, swiotlb_pool);
> + else
> + dma_free_contiguous(dev, dma_direct_to_page(dev, dma_addr), size);
> }
>
> struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
> @@ -359,6 +372,15 @@ struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
> if (force_dma_unencrypted(dev) && dma_direct_use_pool(dev, gfp))
> return dma_direct_alloc_from_pool(dev, size, dma_handle, gfp);
>
> + if (is_swiotlb_for_alloc(dev)) {
> + page = dma_direct_alloc_swiotlb(dev, size);
> + if (!page)
> + return NULL;
> +
> + ret = page_address(page);
> + goto setup_page;
> + }
> +
> page = __dma_direct_alloc_pages(dev, size, gfp, false);
> if (!page)
> return NULL;
> @@ -366,6 +388,7 @@ struct page *dma_direct_alloc_pages(struct device *dev, size_t size,
> ret = page_address(page);
> if (dma_set_decrypted(dev, ret, size))
> goto out_leak_pages;
> +setup_page:
> memset(ret, 0, size);
> *dma_handle = phys_to_dma_direct(dev, page_to_phys(page));
> return page;
> @@ -377,16 +400,28 @@ void dma_direct_free_pages(struct device *dev, size_t size,
> struct page *page, dma_addr_t dma_addr,
> enum dma_data_direction dir)
> {
> + phys_addr_t phys;
> void *vaddr = page_address(page);
> + struct io_tlb_pool *swiotlb_pool;
> + bool mark_mem_encrypted = true;
>
> /* If cpu_addr is not from an atomic pool, dma_free_from_pool() fails */
> if (IS_ENABLED(CONFIG_DMA_COHERENT_POOL) &&
> dma_free_from_pool(dev, vaddr, size))
> return;
>
> - if (dma_set_encrypted(dev, vaddr, size))
> + phys = page_to_phys(page);
> + swiotlb_pool = swiotlb_find_pool(dev, phys);
> + if (swiotlb_pool)
> + mark_mem_encrypted = false;
> +
> + if (mark_mem_encrypted && dma_set_encrypted(dev, vaddr, size))
> return;
> - __dma_direct_free_pages(dev, page, size);
> +
> + if (swiotlb_pool)
> + swiotlb_free_from_pool(dev, phys, size, swiotlb_pool);
> + else
> + dma_free_contiguous(dev, page, size);
> }
>
> #if defined(CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE) || \
> diff --git a/kernel/dma/swiotlb.c b/kernel/dma/swiotlb.c
> index 1abd3e6146f4..ac03a6856c2e 100644
> --- a/kernel/dma/swiotlb.c
> +++ b/kernel/dma/swiotlb.c
> @@ -1809,6 +1809,12 @@ bool swiotlb_free(struct device *dev, struct page *page, size_t size)
> return true;
> }
>
> +void swiotlb_free_from_pool(struct device *dev, phys_addr_t tlb_addr, size_t size,
> + struct io_tlb_pool *pool)
What's the reason to pass the buffer size if it's not used?
Other than that, this patch looks good to me.
Petr T
> +{
> + swiotlb_release_slots(dev, tlb_addr, pool);
> +}
> +
> static int rmem_swiotlb_device_init(struct reserved_mem *rmem,
> struct device *dev)
> {
^ permalink raw reply
* Re: [PATCH v3 03/17] clocksource/drivers/arm_arch_timer: Default to EL2 virtual timer when running VHE
From: Marc Zyngier @ 2026-06-09 12:15 UTC (permalink / raw)
To: Marek Szyprowski
Cc: linux-arm-kernel, linux-acpi, linux-kernel, devicetree,
Lorenzo Pieralisi, Hanjun Guo, Sudeep Holla, Catalin Marinas,
Will Deacon, Rafael J. Wysocki, Mark Rutland, Daniel Lezcano,
Thomas Gleixner, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Chen-Yu Tsai, Jernej Skrabec, Samuel Holland, Neil Armstrong,
Kevin Hilman, Jerome Brunet, Martin Blumenstingl, Ge Gordon,
BST Linux Kernel Upstream Group, Jesper Nilsson, Lars Persson,
Alim Akhtar, Ivaylo Ivanov, Frank Li, Sascha Hauer,
Pengutronix Kernel Team, Fabio Estevam, Dinh Nguyen,
Matthias Brugger, AngeloGioacchino Del Regno, Thierry Reding,
Jonathan Hunter, Bjorn Andersson, Konrad Dybcio,
Andreas Färber,
"Yu-Chun Lin [林祐君]", Heiko Stuebner,
Shawn Lin, Orson Zhai, Baolin Wang, Michal Simek,
Florian Fainelli
In-Reply-To: <658bffa9-bd70-4b62-ac03-505822ba0be9@samsung.com>
On Tue, 09 Jun 2026 12:32:24 +0100,
Marek Szyprowski <m.szyprowski@samsung.com> wrote:
>
> On 09.06.2026 12:46, Marc Zyngier wrote:
> > On Tue, 09 Jun 2026 11:35:24 +0100,
> > Marek Szyprowski <m.szyprowski@samsung.com> wrote:
> >> On 09.06.2026 12:21, Marc Zyngier wrote:
> >>> On Tue, 09 Jun 2026 11:03:21 +0100,
> >>> Marek Szyprowski <m.szyprowski@samsung.com> wrote:
> >>>> On 23.05.2026 16:02, Marc Zyngier wrote:
> >>>>> When running with at EL2 with VHE enabled, the architecture provides
> >>>>> two EL2 timer/counters, dubbed physical and virtual. Apart from their
> >>>>> names, they are strictly identical.
> >>>>>
> >>>>> However, they don't get virtualised the same way, specially when
> >>>>> it comes to adding arbitrary offsets to the timers. When running as
> >>>>> a guest, the host CNTVOFF_EL2 does apply to the guest's view of
> >>>>> CNTHV*_El2. This is not true for CNTPOFF_EL2 and CNTHP*_EL2, as
> >>>>> the architecture is broken past the first level of virtualisation
> >>>>> (it lacks some essential mechanisms to be usable, despite what
> >>>>> the ARM ARM pretends).
> >>>>>
> >>>>> This means that when running as a L2 guest hypervisor, using the
> >>>>> physical timer results in traps to L0, which are then forwarded to
> >>>>> L1 in order to emulate the offset, leading to even worse performance
> >>>>> due to massive trap amplification (the combination of register and
> >>>>> ERET trapping is absolutely lethal).
> >>>>>
> >>>>> Switch the arch timer code to using the virtual timer when running
> >>>>> in VHE by default, only using the physical timer if the interrupt
> >>>>> is not correctly described in the firmware tables (which seems
> >>>>> to be an unfortunately common case). This comes as no impact on
> >>>>> bare-metal, and slightly improves the situation in the virtualised
> >>>>> case.
> >>>>>
> >>>>> Signed-off-by: Marc Zyngier <maz@kernel.org>
> >>>> This patch landed recently in linux-next as commit d87773de9efe
> >>>> ("clocksource/drivers/arm_arch_timer: Default to EL2 virtual timer when
> >>>> running VHE"). In my tests I found that it breaks booting of RaspberryPi5
> >>>> board. Reverting it on top of linux-next fixes the issue. Here is a boot
> >>>> log:
> >>> Huh.
> >>>
> >>> [...]
> >>>
> >>>> arch_timer: cp15 timer running at 54.00MHz (hyp-virt).
> >>>> clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0xc743ce346, max_idle_ns: 440795203123 ns
> >>>> sched_clock: 56 bits at 54MHz, resolution 18ns, wraps every 4398046511102ns
> >>> The interrupt appears to be advertised in the DT, but doesn't seem to
> >>> fire. That's obviously not going to end well. My suspicion is that
> >>> either the interrupt isn't wired (that'd be hilariously abd), or is
> >>> left as Group-0 by the firmware (copy-paste from RPi4).
> >>>
> >>> Can you try the following hack and let me know if the kernel shouts at
> >>> you?
> >>>
> >>> Thanks,
> >>>
> >>> M.
> >>>
> >>> diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
> >>> index ec70c84e9f91d..d05791e6cc0db 100644
> >>> --- a/drivers/irqchip/irq-gic.c
> >>> +++ b/drivers/irqchip/irq-gic.c
> >>> @@ -213,6 +213,7 @@ static void gic_eoimode1_mask_irq(struct irq_data *d)
> >>> static void gic_unmask_irq(struct irq_data *d)
> >>> {
> >>> gic_poke_irq(d, GIC_DIST_ENABLE_SET);
> >>> + WARN_ON(!gic_peek_irq(d, GIC_DIST_ENABLE_SET));
> >>> }
> >>>
> >>> static void gic_eoi_irq(struct irq_data *d)
> >> I've applied this change, but it doesn't trigger any warning in the boot log.
> > [+ Florian]
> >
> > Huh. So that really points at the timer not being wired into the GIC,
> > Samsung style... Can you confirm that removing the EL2 virtual timer
> > from the DT results in a booting machine?
>
> With the following diff the board boots again:
OK, so it really is the EL2 virtual timer PPI that is misbehaving.
Let's see what Florian comes up with on the status of this interrupt.
Thanks,
M.
--
Without deviation from the norm, progress is not possible.
^ permalink raw reply
* [PATCH] Bluetooth: btmtksdio: fix infinite loop in btmtksdio_txrx_work()
From: Sergey Senozhatsky @ 2026-06-09 12:10 UTC (permalink / raw)
To: Marcel Holtmann, Luiz Augusto von Dentz, Mark-yw Chen, Sean Wang
Cc: Tomasz Figa, linux-bluetooth, linux-kernel, linux-arm-kernel,
linux-mediatek, Sergey Senozhatsky, stable
Every once in a while we see a hung btmtksdio_flush() task:
INFO: task kworker/u17:0:189 blocked for more than 122 seconds.
__cancel_work_timer+0x3f4/0x460
cancel_work_sync+0x1c/0x2c
btmtksdio_flush+0x2c/0x40
hci_dev_open_sync+0x10c4/0x2190
[..]
It all boils down to incorrect time_is_before_jiffies() usage in
btmtksdio_txrx_work(). The btmtksdio_txrx_work() loop is expected
to be terminated if running for longer than 5*HZ. However the
timeout check is twisted: time_is_before_jiffies(old_jiffies + 5*HZ)
evaluates to true when old_jiffies + 5*HZ is in the past i.e. when a
timeout has occurred. Using OR with time_is_before_jiffies(txrx_timeout)
means that:
- before the 5-second timeout: the condition is `int_status || false`,
so it loops as long as there are pending interrupts.
- after the 5-second timeout: the condition becomes `int_status || true`,
which is always true.
When the loop becomes infinite btmtksdio_txrx_work() loop never
terminates and never releases the SDIO host.
Fix loop termination condition to actually enforce a 5*HZ timeout.
Fixes: 26270bc189ea4 ("Bluetooth: btmtksdio: move interrupt service to work")
Cc: stable@vger.kernel.org
Signed-off-by: Sergey Senozhatsky <senozhatsky@chromium.org>
---
drivers/bluetooth/btmtksdio.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c
index 5b0fab7b89b5..c6f80c419e90 100644
--- a/drivers/bluetooth/btmtksdio.c
+++ b/drivers/bluetooth/btmtksdio.c
@@ -620,7 +620,7 @@ static void btmtksdio_txrx_work(struct work_struct *work)
if (btmtksdio_rx_packet(bdev, rx_size) < 0)
bdev->hdev->stat.err_rx++;
}
- } while (int_status || time_is_before_jiffies(txrx_timeout));
+ } while (int_status && time_is_after_jiffies(txrx_timeout));
/* Enable interrupt */
if (bdev->func->irq_handler)
--
2.54.0.1064.gd145956f57-goog
^ permalink raw reply related
* Re: [PATCH] regulator: mt6359: Fix vbbck default internal supply name
From: AngeloGioacchino Del Regno @ 2026-06-09 11:27 UTC (permalink / raw)
To: Chen-Yu Tsai, Mark Brown, Liam Girdwood, Matthias Brugger
Cc: linux-arm-kernel, linux-mediatek, linux-kernel
In-Reply-To: <20260609083630.1600070-1-wenst@chromium.org>
On 6/9/26 10:36, Chen-Yu Tsai wrote:
> This issue was pointed out by Sashiko.
>
> vbbck is fed internally from vio18. For the MT6359, the default supply
> name was incorrectly set as "VIO18", instead of the supply's default
> "VIO18". In practice this still works, but it causes the regulator
> description copy and replace to always happen. For the MT6359P the
> name is correct.
>
> Fix the supply name for MT6359 so that both instances are the same and
> correct. Also copy the comment about the internal supply from the MT6359
> list to the MT6359P list.
>
> Fixes: 10be8fc1d534 ("regulator: mt6359: Add regulator supply names")
> Signed-off-by: Chen-Yu Tsai <wenst@chromium.org>
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
^ permalink raw reply
* Re: [GIT PULL] nuvoton: First batch of arm64 devicetree changes for v7.2
From: Krzysztof Kozlowski @ 2026-06-09 12:08 UTC (permalink / raw)
To: Andrew Jeffery; +Cc: soc, linux-arm-kernel, openbmc, linux-kernel, Joel Stanley
In-Reply-To: <0743460993783da99c633acbfb84bfe065cb303d.camel@codeconstruct.com.au>
On Wed, Jun 03, 2026 at 11:25:29AM +0930, Andrew Jeffery wrote:
> The following changes since commit 254f49634ee16a731174d2ae34bc50bd5f45e731:
>
> Linux 7.1-rc1 (2026-04-26 14:19:00 -0700)
>
> are available in the Git repository at:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/bmc/linux.git tags/nuvoton-7.2-devicetree-0
>
> for you to fetch changes up to eae82b6e8c2399892e145195cae9aaa0b960fdaf:
>
> arm64: dts: nuvoton: Add Ethernet nodes (2026-05-18 23:18:01 +0930)
>
> ----------------------------------------------------------------
Thanks, applied
Best regards,
Krzysztof
^ permalink raw reply
* Re: [RFC PATCH v3 0/9] accel: rocket: Add RK3568 NPU support
From: Midgy Balon @ 2026-06-09 11:11 UTC (permalink / raw)
To: Chaoyi Chen
Cc: tomeu, ogabbay, heiko, robh, krzk+dt, conor+dt, joro, will,
robin.murphy, dri-devel, linux-rockchip, devicetree,
linux-arm-kernel, iommu, linux-kernel, Simon Xue, Finley Xiao
In-Reply-To: <bcedaff0-abf8-4585-a0ea-057062cd0411@rock-chips.com>
[-- Attachment #1: Type: text/plain, Size: 4983 bytes --]
Hello Chaoyi,
You were right - building rocket as a module fixes it. Thanks for the pointer.
I rebuilt with CONFIG_DRM_ACCEL_ROCKET=m (everything else the same:
need_regulator on
the RK3568 NPU power domain via a DOMAIN_M_R variant, domain-supply =
<&vdd_npu>, and the
regulator-always-on workaround dropped). The board now boots cleanly
and, more importantly,
an NPU job submit no longer hangs: I ran the test workload five times
with no RCU stall and
no freeze.
So with rocket=m the need_regulator approach works on RK3568, and I'll
keep it for v4
(domain-supply + need_regulator, instead of marking vdd_npu
always-on). rocket=m is the
normal configuration anyway; my earlier hang came from building it =y
in a self-contained
image, so it probed in the initcalls (around 2 s) and the genpd ->
I2C-PMIC regulator
transition ran before the system was ready. As a module it loads from
udev much later
(~6.8 s here), after the I2C controller and regulator core are fully up.
On your question of when the device-link error is printed - it is at
power-domain
controller probe, not at the rocket probe:
[ 2.700618] vdd_npu: Bringing 500000uV into 825000-825000uV
[ 2.749637] rockchip-pm-domain fdd90000.power-management:power-controller:
Failed to create device link (0x180) with supplier 0-0020 for
/power-management@fdd90000/power-controller/power-domain@6
[ 2.945955] platform fde40000.npu: Adding to iommu group 3
...
[ 6.840374] rocket: loading out-of-tree module taints kernel.
[ 6.877647] [drm] Initialized rocket 0.0.0 for rknn on minor 0
[ 6.879950] rocket fde40000.npu: Rockchip NPU core 0 version: 0
So the device-link to the rk809 PMIC (0-0020) fails to form at ~2.75
s, well before rocket
loads at ~6.8 s. It is non-fatal here - the vdd_npu rail is brought up
by the regulator core
and all jobs run - and there is no "failed to get ack on domain npu"
NoC warning this boot
(the always-on kernel had one). The complete boot log is attached.
Two notes / one question:
- This boot used fw_devlink=permissive on the command line. Is the
"Failed to create device
link ... supplier 0-0020" at pmdomain probe expected/benign, or is
there a clean way to make
it order correctly (so it also works without permissive, and a =y
build wouldn't deadlock in
the initcalls)?
- (The convolution output is still uniform zero-point / the job times
out - that is the
separate NPU compute-completion issue, unrelated to the power-domain
work. Finley, that is
the one I flagged earlier re PVTPLL/NoC.)
Kind regards,
Midgy
Le lun. 8 juin 2026 à 11:38, Chaoyi Chen <chaoyi.chen@rock-chips.com> a écrit :
>
> Hi Midgy,
>
> On 6/8/2026 5:14 PM, Midgy Balon wrote:
> > Hello Chaoyi,
> >
> > Following up on the need_regulator suggestion -- I implemented and
> > tested it on the
> > board, and unfortunately it doesn't avoid the deadlock on RK3568; it
> > moves it from
> > boot to the NPU job submit.
> >
> > What I did: gave the RK3568 NPU power domain a regulator (a DOMAIN_M_R
> > variant with
> > need_regulator = true), wired domain-supply = <&vdd_npu>, and dropped the
> > regulator-always-on workaround.
> >
> > Boot is now clean and the NPU probes, but there is a warning during boot:
> >
> > rockchip-pm-domain ...: Failed to create device link (0x180) with supplier
> > 0-0020 for .../power-domain@6
> >
> > (0-0020 is the rk809 PMIC that supplies vdd_npu.) Then on the first NPU job
> > submit the board hard-hangs with an RCU stall:
> >
> > rcu: INFO: rcu_preempt detected stalls on CPUs/tasks:
> > rcu: 3-...!: (1 GPs behind) ...
> > rcu: rcu_preempt kthread starved for 5115 jiffies! ... RCU_GP_WAIT_FQS(5)
> > rcu: Unless rcu_preempt kthread gets sufficient CPU time, OOM is now expected
> >
> > My reading: vdd_npu is on the rk809 *I2C* PMIC, so when genpd
> > enables/disables the
> > regulator during the NPU's runtime-PM power transition, the I2C
> > transfer runs in a
> > context that starves RCU and the box freezes. (I suspect
> > need_regulator is fine on
> > the RK3588 NPU because its supply isn't behind an I2C PMIC.) The always-on
> > workaround avoids this precisely because genpd never touches the I2C
> > regulator in
> > that path.
> >
>
> No, they are all controlled by RK809.
>
> And This looks werid. Is your rocket driver compiled as a module?
> Please try compiling it as a module. When is the above error printed?
> Please provide the complete boot log.
>
> > So: for an NPU domain whose supply is an I2C PMIC, is there a
> > supported way to let
> > genpd own the regulator without performing the I2C op in the
> > power-transition path
> > (a deferred/async regulator enable, or a flag), or should RK3568 keep vdd_npu as
> > regulator-always-on? For v4 I'll keep always-on unless there's a cleaner path.
> >
>
> --
> Best,
> Chaoyi
[-- Attachment #2: 2026-06-09_rocket-m-needreg.log --]
[-- Type: text/x-log, Size: 70113 bytes --]
sudo reboot
Password:
Login incorrect
rock-3b login: radxa
Password:
Linux rock-3b 6.19.0-rc5-00003-gb16c04e5e619-dirty #65 SMP PREEMPT Thu May 21 11:16:54 CEST 2026 aarch64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Mon Jun 8 14:14:44 CEST 2026 from 10.160.1.15 on pts/1
^[[?2004hradxa@rock-3b:~$ [ 1800.807070] hdmi-audio-codec hdmi-audio-codec.11.auto: HDMI: Unknown ELD version 0
[ 1800.811885] hdmi-audio-codec hdmi-audio-codec.11.auto: HDMI: Unknown ELD version 0
[ 1800.813239] hdmi-audio-codec hdmi-audio-codec.11.auto: HDMI: Unknown ELD version 0
[ 1800.814408] hdmi-audio-codec hdmi-audio-codec.11.auto: HDMI: Unknown ELD version 0
[ 1800.815613] hdmi-audio-codec hdmi-audio-codec.11.auto: HDMI: Unknown ELD version 0
[ 1800.817175] hdmi-audio-codec hdmi-audio-codec.11.auto: HDMI: Unknown ELD version 0
[ 1800.821487] hdmi-audio-codec hdmi-audio-codec.11.auto: HDMI: Unknown ELD version 0
d\b^[[Ksudo reboot
^[[?2004l\r Stopping ^[[0;1;39mSession 42 of user radxa^[[0m.
[^[[0;32m OK ^[[0m] Removed slice ^[[0;1;39msystem-modprobe.slice^[[0m.
[^[[0;32m OK ^[[0m] Removed slice ^[[0;1;39msystem-ssh.slice^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mGraphical Interface^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mMulti-User System^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mLogin Prompts^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mRemote Encrypted Volumes^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mSound Card^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mTimers^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mDaily apt upgrade and clean activities^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mDaily apt download activities^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mDiscard unused blocks once a week^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mDaily man-db regeneration^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mDaily Cleanup of Temporary Directories^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mSystem Time Synchronized^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mSystem Time Set^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mHardware activated USB gadget^[[0m.
[^[[0;32m OK ^[[0m] Closed ^[[0;1;39mLoad/Save RF Kill Switch Status /dev/rfkill Watch^[[0m.
Unmounting ^[[0;1;39m/config^[[0m...
Stopping ^[[0;1;39mSave/Restore Sound Card State^[[0m...
Stopping ^[[0;1;39mAvahi mDNS/DNS-SD Stack^[[0m...
Stopping ^[[0;1;39mGetty on tty1^[[0m...
Stopping ^[[0;1;39mNetdata, X-Ray Vi…on for your infrastructure!^[[0m...
Stopping ^[[0;1;39mEnable adbd on supported Radxa products^[[0m...
Stopping ^[[0;1;39mEnable USB Ethern…on supported Radxa products^[[0m...
Stopping ^[[0;1;39mSerial Getty on ttyS2^[[0m...
Stopping ^[[0;1;39mLSB: Set sysfs variables from /etc/sysfs.conf^[[0m...
Stopping ^[[0;1;39mJournal Service for Namespace netdata^[[0m...
Stopping ^[[0;1;39mLoad/Save Random Seed^[[0m...
Stopping ^[[0;1;39mTailscale node agent^[[0m...
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mAvahi mDNS/DNS-SD Stack^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mGetty on tty1^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mSerial Getty on ttyS2^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mJournal Service for Namespace netdata^[[0m.
[^[[0;32m OK ^[[0m] Unmounted ^[[0;1;39m/config^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mSave/Restore Sound Card State^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mLoad/Save Random Seed^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mSession 42 of user radxa^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mLSB: Set sysfs variables from /etc/sysfs.conf^[[0m.
[^[[0;32m OK ^[[0m] Removed slice ^[[0;1;39msystem-getty.slice^[[0m.
[^[[0;32m OK ^[[0m] Removed slice ^[[0;1;39msystem-serial\x2dgetty.slice^[[0m.
Stopping ^[[0;1;39mUser Login Management^[[0m...
Stopping ^[[0;1;39mUser Manager for UID 1000^[[0m...
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mUser Manager for UID 1000^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mUser Login Management^[[0m.
Stopping ^[[0;1;39mUser Runtime Directory /run/user/1000^[[0m...
[^[[0;32m OK ^[[0m] Unmounted ^[[0;1;39m/run/user/1000^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mUser Runtime Directory /run/user/1000^[[0m.
[^[[0;32m OK ^[[0m] Removed slice ^[[0;1;39mUser Slice of UID 1000^[[0m.
Stopping ^[[0;1;39mPermit User Sessions^[[0m...
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mPermit User Sessions^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mRemote File Systems^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mTailscale node agent^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mNetdata, X-Ray Vision for your infrastructure!^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mNetwork is Online^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mHost and Network Name Lookups^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mNetwork Manager Wait Online^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mWait for Network to be Configured^[[0m.
[ 1809.095948] dwc3 fcc00000.usb: request 00000000d5d2d033 was not queued to ep0out
[ 1809.143743] unloading
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mEnable USB Ethernet on supported Radxa products^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mEnable adbd on supported Radxa products^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mNetwork^[[0m.
Stopping ^[[0;1;39mNetwork Manager^[[0m...
Stopping ^[[0;1;39mRaise network interfaces^[[0m...
Stopping ^[[0;1;39mNetwork Name Resolution^[[0m...
Stopping ^[[0;1;39mWPA supplicant^[[0m...
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mRaise network interfaces^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mNetwork Name Resolution^[[0m.
Stopping ^[[0;1;39mNetwork Service^[[0m...
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mNetwork Service^[[0m.
[ 1809.276260] wlp1s0: deauthenticating from 38:ff:36:bb:04:ac by local choice (Reason: 3=DEAUTH_LEAVING)
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mWPA supplicant^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mNetwork Manager^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mNetwork (Pre)^[[0m.
Stopping ^[[0;1;39mD-Bus System Message Bus^[[0m...
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mD-Bus System Message Bus^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mBasic System^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mPaths^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mSlices^[[0m.
[^[[0;32m OK ^[[0m] Removed slice ^[[0;1;39mUser and Session Slice^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mSockets^[[0m.
[^[[0;32m OK ^[[0m] Closed ^[[0;1;39mAvahi mDNS/DNS-SD Stack Activation Socket^[[0m.
[^[[0;32m OK ^[[0m] Closed ^[[0;1;39mD-Bus System Message Bus Socket^[[0m.
[^[[0;32m OK ^[[0m] Closed ^[[0;1;39mOpenBSD Secure Shell server socket^[[0m.
[^[[0;32m OK ^[[0m] Closed ^[[0;1;39mJournal Varlink Socket for Namespace netdata^[[0m.
[^[[0;32m OK ^[[0m] Removed slice ^[[0;1;39msystem-syste…\x2djournald\x2dvarlink.slice^[[0m.
[^[[0;32m OK ^[[0m] Closed ^[[0;1;39mJournal Socket for Namespace netdata^[[0m.
[^[[0;32m OK ^[[0m] Removed slice ^[[0;1;39msystem-systemd\x2djournald.slice^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mSystem Initialization^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mLocal Encrypted Volumes^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mDispatch Password …ts to Console Directory Watch^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mForward Password R…uests to Wall Directory Watch^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mSwap^[[0m.
Deactivating swap ^[[0;1;39m/mnt/nvme/swapfile^[[0m...
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mApply Kernel Variables^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mLoad Kernel Modules^[[0m.
Stopping ^[[0;1;39mNetwork Time Synchronization^[[0m...
Stopping ^[[0;1;39mUpdate UTMP about System Boot/Shutdown^[[0m...
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mNetwork Time Synchronization^[[0m.
[^[[0;32m OK ^[[0m] Deactivated swap ^[[0;1;39m/mnt/nvme/swapfile^[[0m.
Unmounting ^[[0;1;39m/mnt/nvme^[[0m...
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mUpdate UTMP about System Boot/Shutdown^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mCreate Volatile Files and Directories^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mLocal File Systems^[[0m.
[^[[0;32m OK ^[[0m] Unset automount ^[[0;1;39mboot-efi.automount^[[0m.
[^[[0;32m OK ^[[0m] Unset automount ^[[0;1;39mconfig.automount^[[0m.
[ 1811.430689] EXT4-fs (nvme0n1): unmounting filesystem 0d9000fd-1edf-455d-9058-56e0855a1edb.
[^[[0;32m OK ^[[0m] Unmounted ^[[0;1;39m/mnt/nvme^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mUnmount All Filesystems^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mFile System Check …d-1edf-455d-9058-56e0855a1edb^[[0m.
[^[[0;32m OK ^[[0m] Removed slice ^[[0;1;39msystem-systemd\x2dfsck.slice^[[0m.
[^[[0;32m OK ^[[0m] Stopped target ^[[0;1;39mLocal File Systems (Pre)^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mCreate Static Device Nodes in /dev^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mCreate System Users^[[0m.
[^[[0;32m OK ^[[0m] Stopped ^[[0;1;39mRemount Root and Kernel File Systems^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mShutdown^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mFinal Step^[[0m.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mReboot^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mReboot^[[0m.
[ 1811.697989] watchdog: watchdog0: watchdog did not stop!
[ 1811.815097] systemd-shutdown[1]: Syncing filesystems and block devices.
[ 1811.829482] systemd-shutdown[1]: Sending SIGTERM to remaining processes...
[ 1811.853568] systemd-journald[204]: Received SIGTERM from PID 1 (systemd-shutdow).
[ 1811.899622] systemd-shutdown[1]: Sending SIGKILL to remaining processes...
[ 1811.913025] systemd-shutdown[1]: Using hardware watchdog 'Synopsys DesignWare Watchdog', version 0, device /dev/watchdog
[ 1811.917532] systemd-shutdown[1]: Unmounting file systems.
[ 1811.920424] [11189]: Remounting '/' read-only in with options '(null)'.
[ 1811.983886] EXT4-fs (mmcblk0p3): re-mounted d210e617-6a4c-4771-b955-ddd835a32d2b ro.
[ 1812.006902] systemd-shutdown[1]: All filesystems unmounted.
[ 1812.007480] systemd-shutdown[1]: Deactivating swaps.
[ 1812.008275] systemd-shutdown[1]: All swaps deactivated.
[ 1812.008802] systemd-shutdown[1]: Detaching loop devices.
[ 1812.015813] systemd-shutdown[1]: All loop devices detached.
[ 1812.016332] systemd-shutdown[1]: Stopping MD devices.
[ 1812.017106] systemd-shutdown[1]: All MD devices stopped.
[ 1812.017591] systemd-shutdown[1]: Detaching DM devices.
[ 1812.018320] systemd-shutdown[1]: All DM devices detached.
[ 1812.018817] systemd-shutdown[1]: All filesystems, swaps, loop devices, MD devices and DM devices detached.
[ 1812.027209] systemd-shutdown[1]: Syncing filesystems and block devices.
[ 1812.031042] systemd-shutdown[1]: Rebooting.
[ 1812.186088] kvm: exiting hardware virtualization
[ 1812.186550] reboot: Restarting system
\0\0DDR 03ea844c5d typ 24/09/03-10:42:57,fwver: v1.23
In
wdqs_if: 0x1010100
LP4/4x derate en, other dram:1x trefi
ddrconfig:7
MID:0xff
LPDDR4X, 324MHz
BW=32 Col=10 Bk=8 CS0 Row=17 CS1 Row=17 CS=2 Die BW=16 Size=8192MB
tdqss_lf: cs0 dqs0: -24ps, dqs1: -96ps, dqs2: -48ps, dqs3: -168ps,
tdqss_lf: cs1 dqs0: 24ps, dqs1: -72ps, dqs2: -48ps, dqs3: -144ps,
tdqss_hf: cs0 dqs0: -24ps, dqs1: -96ps, dqs2: -48ps, dqs3: -168ps,
tdqss_hf: cs1 dqs0: 24ps, dqs1: -72ps, dqs2: -48ps, dqs3: -144ps,
change to: 324MHz
PHY drv:clk:36,ca:36,DQ:29,odt:240
vrefinner:16%, vrefout:41%
dram drv:40,odt:0
clk skew:0x62
change to: 528MHz
PHY drv:clk:36,ca:36,DQ:29,odt:240
vrefinner:16%, vrefout:41%
dram drv:40,odt:0
clk skew:0x58
change to: 780MHz
PHY drv:clk:36,ca:36,DQ:29,odt:60
vrefinner:16%, vrefout:41%
dram drv:40,odt:0
clk skew:0x58
rx vref: 14.6%
tx vref: 34.0%
change to: 1560MHz(final freq)
PHY drv:clk:36,ca:36,DQ:29,odt:60
vrefinner:16%, vrefout:22%
dram drv:40,odt:80
vref_ca:00000071
clk skew:0x26
rx vref: 15.6%
tx vref: 22.8%
cs 0:
rdtrn RS:
DQS0:0x30, DQS1:0x31, DQS2:0x33, DQS3:0x2c,
min : 0xd 0xe 0x10 0xe 0x1 0x2 0x8 0x5 , 0xa 0x7 0x2 0x3 0xc 0xb 0xd 0xa ,
0x11 0xf 0xa 0xa 0x2 0x2 0x2 0x6 , 0xc 0x7 0x6 0x3 0x10 0x11 0xd 0x11 ,
mid :0x26 0x26 0x29 0x27 0x1b 0x1c 0x22 0x1f ,0x24 0x21 0x1b 0x1c 0x26 0x25 0x26 0x25 ,
0x2c 0x2a 0x24 0x24 0x1c 0x1b 0x1b 0x20 ,0x24 0x20 0x1e 0x1a 0x27 0x29 0x25 0x29 ,
max :0x3f 0x3f 0x43 0x40 0x35 0x36 0x3c 0x39 ,0x3e 0x3c 0x35 0x36 0x41 0x3f 0x3f 0x40 ,
0x47 0x45 0x3e 0x3e 0x36 0x35 0x34 0x3b ,0x3d 0x39 0x37 0x32 0x3f 0x41 0x3e 0x42 ,
range:0x32 0x31 0x33 0x32 0x34 0x34 0x34 0x34 ,0x34 0x35 0x33 0x33 0x35 0x34 0x32 0x36 ,
0x36 0x36 0x34 0x34 0x34 0x33 0x32 0x35 ,0x31 0x32 0x31 0x2f 0x2f 0x30 0x31 0x31 ,
wrtrn RS:
DQS0:0x22, DQS1:0x13, DQS2:0x1d, DQS3:0x5,
min :0x76 0x79 0x7c 0x78 0x6c 0x6f 0x73 0x72 0x72 ,0x63 0x5f 0x59 0x59 0x65 0x63 0x64 0x62 0x5e ,
0x6a 0x6a 0x66 0x64 0x5d 0x5c 0x5c 0x60 0x63 ,0x55 0x51 0x51 0x4c 0x58 0x5a 0x55 0x5b 0x53 ,
mid :0x91 0x93 0x95 0x92 0x84 0x88 0x8c 0x8b 0x8a ,0x7c 0x79 0x73 0x73 0x7d 0x7b 0x7c 0x7b 0x77 ,
0x85 0x84 0x7f 0x7e 0x76 0x75 0x75 0x7a 0x7b ,0x70 0x6b 0x6b 0x66 0x73 0x73 0x6f 0x75 0x6c ,
max :0xac 0xae 0xaf 0xad 0x9c 0xa1 0xa5 0xa5 0xa2 ,0x96 0x94 0x8e 0x8d 0x96 0x94 0x95 0x94 0x90 ,
0xa1 0x9f 0x98 0x98 0x90 0x8e 0x8f 0x94 0x94 ,0x8b 0x85 0x86 0x80 0x8f 0x8d 0x89 0x8f 0x86 ,
range:0x36 0x35 0x33 0x35 0x30 0x32 0x32 0x33 0x30 ,0x33 0x35 0x35 0x34 0x31 0x31 0x31 0x32 0x32 ,
0x37 0x35 0x32 0x34 0x33 0x32 0x33 0x34 0x31 ,0x36 0x34 0x35 0x34 0x37 0x33 0x34 0x34 0x33 ,
cs 1:
rdtrn RS:
DQS0:0x30, DQS1:0x31, DQS2:0x33, DQS3:0x2c,
min : 0xd 0xe 0x10 0xe 0x1 0x2 0x8 0x5 , 0xa 0x7 0x2 0x3 0xc 0xb 0xd 0xa ,
0x11 0xf 0xa 0xa 0x2 0x2 0x2 0x6 , 0xc 0x7 0x6 0x3 0x10 0x11 0xd 0x11 ,
mid :0x26 0x26 0x29 0x27 0x1b 0x1c 0x22 0x1f ,0x24 0x21 0x1b 0x1c 0x26 0x25 0x26 0x25 ,
0x2c 0x2a 0x24 0x24 0x1c 0x1b 0x1b 0x20 ,0x24 0x20 0x1e 0x1a 0x27 0x29 0x25 0x29 ,
max :0x3f 0x3f 0x43 0x40 0x35 0x36 0x3c 0x39 ,0x3e 0x3c 0x35 0x36 0x41 0x3f 0x3f 0x40 ,
0x47 0x45 0x3e 0x3e 0x36 0x35 0x34 0x3b ,0x3d 0x39 0x37 0x32 0x3f 0x41 0x3e 0x42 ,
range:0x32 0x31 0x33 0x32 0x34 0x34 0x34 0x34 ,0x34 0x35 0x33 0x33 0x35 0x34 0x32 0x36 ,
0x36 0x36 0x34 0x34 0x34 0x33 0x32 0x35 ,0x31 0x32 0x31 0x2f 0x2f 0x30 0x31 0x31 ,
wrtrn RS:
DQS0:0x22, DQS1:0x13, DQS2:0x1d, DQS3:0x5,
min :0x76 0x79 0x7c 0x78 0x6c 0x6f 0x73 0x72 0x72 ,0x63 0x5f 0x59 0x59 0x65 0x63 0x64 0x62 0x5e ,
0x6a 0x6a 0x66 0x64 0x5d 0x5c 0x5c 0x60 0x63 ,0x55 0x51 0x51 0x4c 0x58 0x5a 0x55 0x5b 0x53 ,
mid :0x91 0x93 0x95 0x92 0x84 0x88 0x8c 0x8b 0x8a ,0x7c 0x79 0x73 0x73 0x7d 0x7b 0x7c 0x7b 0x77 ,
0x85 0x84 0x7f 0x7e 0x76 0x75 0x75 0x7a 0x7b ,0x70 0x6b 0x6b 0x66 0x73 0x73 0x6f 0x75 0x6c ,
max :0xac 0xae 0xaf 0xad 0x9c 0xa1 0xa5 0xa5 0xa2 ,0x96 0x94 0x8e 0x8d 0x96 0x94 0x95 0x94 0x90 ,
0xa1 0x9f 0x98 0x98 0x90 0x8e 0x8f 0x94 0x94 ,0x8b 0x85 0x86 0x80 0x8f 0x8d 0x89 0x8f 0x86 ,
range:0x36 0x35 0x33 0x35 0x30 0x32 0x32 0x33 0x30 ,0x33 0x35 0x35 0x34 0x31 0x31 0x31 0x32 0x32 ,
0x37 0x35 0x32 0x34 0x33 0x32 0x33 0x34 0x31 ,0x36 0x34 0x35 0x34 0x37 0x33 0x34 0x34 0x33 ,
CBT RS:
cs:0 min :0x43 0x39 0x38 0x2d 0x36 0x27 0x3c ,0x44 0x36 0x37 0x2a 0x35 0x2a 0x3d ,
cs:0 mid :0x7d 0x7d 0x71 0x71 0x70 0x6c 0x69 ,0x7d 0x7a 0x70 0x6d 0x6e 0x6e 0x69 ,
cs:0 max :0xb7 0xc1 0xab 0xb5 0xab 0xb1 0x97 ,0xb7 0xbf 0xa9 0xb0 0xa7 0xb2 0x96 ,
cs:0 range:0x74 0x88 0x73 0x88 0x75 0x8a 0x5b ,0x73 0x89 0x72 0x86 0x72 0x88 0x59 ,
cs:1 min :0x42 0x3e 0x39 0x33 0x38 0x2f 0x40 ,0x43 0x3c 0x35 0x2f 0x37 0x30 0x3f ,
cs:1 mid :0x7f 0x7f 0x75 0x72 0x74 0x6e 0x6e ,0x7f 0x7c 0x72 0x6e 0x73 0x6f 0x6e ,
cs:1 max :0xbd 0xc0 0xb2 0xb2 0xb0 0xad 0x9c ,0xbc 0xbc 0xb0 0xae 0xaf 0xae 0x9d ,
cs:1 range:0x7b 0x82 0x79 0x7f 0x78 0x7e 0x5c ,0x79 0x80 0x7b 0x7f 0x78 0x7e 0x5e ,
out
<debug_uart>
dmc
pinctrl
serial@fe660000
U-Boot SPL 2025.07-rc4-dirty (Mar 25 2026 - 16:29:49 +0100)
mmc@fe310000
clock-controller@fdd20000
clock-controller@fdd00000
mmc@fe2b0000
Trying to boot from MMC1
## Checking hash(es) for config config-1 ... OK
## Checking hash(es) for Image atf-1 ... sha256+ OK
## Checking hash(es) for Image u-boot ... sha256+ OK
## Checking hash(es) for Image fdt-1 ... sha256+ OK
## Checking hash(es) for Image atf-2 ... sha256+ OK
## Checking hash(es) for Image atf-3 ... sha256+ OK
NOTICE: BL31: v2.14.0(release):8dae086
NOTICE: BL31: Built : 14:26:06, Mar 25 2026
NOTICE: BL31: Rockchip release version: v1.0
<debug_uart>
A
B
C
D
E
F
G
H
pinctrl
serial@fe660000
U-Boot 2025.07-rc4-dirty (Mar 25 2026 - 16:29:49 +0100)
clock-controller@fdd20000
clock-controller@fdd00000
Model: Radxa ROCK 3B
nvmem@fe38c000
SoC: RK3568
I
DRAM: dmc
J
8 GiB (total 7.7 GiB)
io-domains
clock-controller@fdd00000
pinctrl
i2c@fdd40000
clock-controller@fdd20000
pmic@20
PMIC: RK809 (on=0x02, off=0x00)
LDO_REG6
LDO_REG4
LDO_REG5
DCDC_REG5
SWITCH_REG1
DCDC_REG1
DCDC_REG2
DCDC_REG3
LDO_REG2
LDO_REG3
LDO_REG7
LDO_REG8
SWITCH_REG2
led-0
gpio@fdd60000
serial@fe660000
Core: 340 devices, 33 uclasses, devicetree: separate
MMC: mmc@fe310000
mmc@fe2b0000
mmc@fe2b0000: 1, mmc@fe310000: 0
Loading Environment from nowhere... OK
In: serial@fe660000
Out: serial@fe660000
Err: serial@fe660000
Model: Radxa ROCK 3B
nvmem@fe38c000
SoC: RK3568
saradc@fe720000
reset
Net: ethernet@fe010000
gpio@fe760000
ethernet@fe2a0000
eth1: ethernet@fe010000, eth0: ethernet@fe2a0000
Hit any key to stop autoboot: 2 \b\b\b 1 \b\b\b 0
bootstd
Scanning for bootflows in all bootdevs
Seq Method State Uclass Part Name Filename
--- ----------- ------ -------- ---- ------------------------ ----------------
vbe_simple
vbe_simple
Scanning global bootmeth 'efi_mgr':
^[7^[[r^[[999;999H^[[6n^[8mmc@fe2b0000.blk
Card did not respond to voltage select! : -110
mmc@fe310000.blk
rng@fe388000
psci
0 efi_mgr ready (none) 0 <NULL>
** Booting bootflow '<NULL>' with efi_mgr
Loading Boot0000 'mmc 0' failed
EFI boot manager: Cannot load any image
Boot failed (err=-14)
Scanning bootdev 'mmc@fe2b0000.bootdev':
mmc@fe2b0000.blk
Card did not respond to voltage select! : -110
Scanning bootdev 'mmc@fe310000.bootdev':
1 extlinux ready mmc 3 mmc@fe310000.bootdev.part /boot/extlinux/extlinux.conf
** Booting bootflow 'mmc@fe310000.bootdev.part_3' with extlinux
U-Boot menu
1: Mainline 6.19 NPU IOMMU (default)
2: Mainline 6.19 NPU non-IOMMU (fallback)
3: Mainline 6.19 Rocket accel driver (test)
4: Mainline 7.1-rc6 Rocket NPU (test)
5: Mainline 7.1-rc6 Rocket NPU + Chaoyi AUTO_GATING BIT(31) (test)
6: Mainline 7.1-rc6 NPU need_regulator + rocket=m (test)
Enter choice: 6
6: Mainline 7.1-rc6 NPU need_regulator + rocket=m (test)
Retrieving file: /boot/Image-7.1-needreg-m
Retrieving file: /boot/initrd.img-7.1.0-rc6-00007-g043be7a551c4
append: root=UUID=d210e617-6a4c-4771-b955-ddd835a32d2b rw rootwait earlycon console=ttyFIQ0,1500000n8 console=ttyS2,1500000n8 clk_ignore_unused cma=128M kernel.panic=5 fw_devlink=permissive
Retrieving file: /boot/rk3568-rock-3b-7.1-needreg-m.dtb
## Flattened Device Tree blob at 12000000
Booting using the fdt blob at 0x12000000
Working FDT set to 12000000
Loading Ramdisk to eb2c0000, end ecead483 ... OK
Loading Device Tree to 00000000eb2ac000, end 00000000eb2bf1e3 ... OK
Working FDT set to eb2ac000
Starting kernel ...
[ 0.000000] Booting Linux on physical CPU 0x0000000000 [0x412fd050]
[ 0.000000] Linux version 7.1.0-rc6-chaoyi-00011-ga31e2e6fae27 (radxa@rock-3b) (gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #5 SMP PREEMPT Tue Jun 9 12:40:22 CEST 2026
[ 0.000000] KASLR enabled
[ 0.000000] Machine model: Radxa ROCK 3B
[ 0.000000] efi: UEFI not found.
[ 0.000000] earlycon: uart0 at MMIO32 0x00000000fe660000 (options '1500000n8')
[ 0.000000] printk: legacy bootconsole [uart0] enabled
[ 0.000000] OF: reserved mem: 0x000000000010f000..0x000000000010f0ff (0 KiB) nomap non-reusable shmem@10f000
[ 0.000000] NUMA: Faking a node at [mem 0x0000000000200000-0x00000001ffffffff]
[ 0.000000] NODE_DATA(0) allocated [mem 0x1ff01df80-0x1ff02067f]
[ 0.000000] cma: Reserved 128 MiB at 0x00000000e3200000
[ 0.000000] psci: probing for conduit method from DT.
[ 0.000000] psci: PSCIv1.1 detected in firmware.
[ 0.000000] psci: Using standard PSCI v0.2 function IDs
[ 0.000000] psci: MIGRATE_INFO_TYPE not supported.
[ 0.000000] psci: SMC Calling Convention v1.5
[ 0.000000] Zone ranges:
[ 0.000000] DMA [mem 0x0000000000200000-0x00000000ffffffff]
[ 0.000000] DMA32 empty
[ 0.000000] Normal [mem 0x0000000100000000-0x00000001ffffffff]
[ 0.000000] Movable zone start for each node
[ 0.000000] Early memory node ranges
[ 0.000000] node 0: [mem 0x0000000000200000-0x00000000efffffff]
[ 0.000000] node 0: [mem 0x0000000100000000-0x00000001ffffffff]
[ 0.000000] Initmem setup node 0 [mem 0x0000000000200000-0x00000001ffffffff]
[ 0.000000] On node 0, zone DMA: 512 pages in unavailable ranges
[ 0.000000] percpu: Embedded 26 pages/cpu s67288 r8192 d31016 u106496
[ 0.000000] Detected VIPT I-cache on CPU0
[ 0.000000] CPU features: detected: GICv3 CPU interface
[ 0.000000] CPU features: detected: Virtualization Host Extensions
[ 0.000000] CPU features: kernel page table isolation forced ON by KASLR
[ 0.000000] CPU features: detected: Kernel page table isolation (KPTI)
[ 0.000000] CPU features: detected: ARM errata 1165522, 1319367, or 1530923
[ 0.000000] alternatives: applying boot alternatives
[ 0.000000] Kernel command line: root=UUID=d210e617-6a4c-4771-b955-ddd835a32d2b rw rootwait earlycon console=ttyFIQ0,1500000n8 console=ttyS2,1500000n8 clk_ignore_unused cma=128M kernel.panic=5 fw_devlink=permissive
[ 0.000000] printk: log buffer data + meta data: 131072 + 458752 = 589824 bytes
[ 0.000000] Dentry cache hash table entries: 1048576 (order: 11, 8388608 bytes, linear)
[ 0.000000] Inode-cache hash table entries: 524288 (order: 10, 4194304 bytes, linear)
[ 0.000000] software IO TLB: area num 4.
[ 0.000000] software IO TLB: mapped [mem 0x00000000df200000-0x00000000e3200000] (64MB)
[ 0.000000] Fallback order for Node 0: 0
[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 2031104
[ 0.000000] Policy zone: Normal
[ 0.000000] mem auto-init: stack:off, heap alloc:off, heap free:off
[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=4, Nodes=1
[ 0.000000] rcu: Preemptible hierarchical RCU implementation.
[ 0.000000] rcu: RCU event tracing is enabled.
[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=512 to nr_cpu_ids=4.
[ 0.000000] Trampoline variant of Tasks RCU enabled.
[ 0.000000] Tracing variant of Tasks RCU enabled.
[ 0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 25 jiffies.
[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[ 0.000000] RCU Tasks: Setting shift to 2 and lim to 1 rcu_task_cb_adjust=1 rcu_task_cpu_ids=4.
[ 0.000000] NR_IRQS: 64, nr_irqs: 64, preallocated irqs: 0
[ 0.000000] GIC: enabling workaround for GICv3: non-coherent attribute
[ 0.000000] GICv3: GIC: Using split EOI/Deactivate mode
[ 0.000000] GICv3: 320 SPIs implemented
[ 0.000000] GICv3: 0 Extended SPIs implemented
[ 0.000000] GICv3: MBI range [296:319]
[ 0.000000] GICv3: Using MBI frame 0x00000000fd410000
[ 0.000000] Root IRQ handler: gic_handle_irq
[ 0.000000] GICv3: GICv3 features: 16 PPIs
[ 0.000000] GICv3: GICD_CTLR.DS=0, SCR_EL3.FIQ=0
[ 0.000000] GICv3: CPU0: found redistributor 0 region 0:0x00000000fd460000
[ 0.000000] ITS [mem 0xfd440000-0xfd45ffff]
[ 0.000000] GIC: enabling workaround for ITS: Rockchip erratum RK3568002
[ 0.000000] GIC: enabling workaround for ITS: non-coherent attribute
[ 0.000000] ITS@0x00000000fd440000: allocated 8192 Devices @410000 (indirect, esz 8, psz 64K, shr 0)
[ 0.000000] ITS@0x00000000fd440000: allocated 32768 Interrupt Collections @420000 (flat, esz 2, psz 64K, shr 0)
[ 0.000000] ITS: using cache flushing for cmd queue
[ 0.000000] GICv3: using LPI property table @0x0000000000430000
[ 0.000000] GIC: using cache flushing for LPI property table
[ 0.000000] GICv3: CPU0: using allocated LPI pending table @0x0000000000440000
[ 0.000000] rcu: srcu_init: Setting srcu_struct sizes based on contention.
[ 0.000000] arch_timer: cp15 timer running at 24.00MHz (phys).
[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[ 0.000001] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps every 4398046511097ns
[ 0.004345] Console: colour dummy device 80x25
[ 0.004930] Calibrating delay loop (skipped), value calculated using timer frequency.. 48.00 BogoMIPS (lpj=96000)
[ 0.005946] pid_max: default: 32768 minimum: 301
[ 0.006823] Mount-cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[ 0.007612] Mountpoint-cache hash table entries: 16384 (order: 5, 131072 bytes, linear)
[ 0.008917] VFS: Finished mounting rootfs on nullfs
[ 0.012680] rcu: Hierarchical SRCU implementation.
[ 0.013171] rcu: Max phase no-delay instances is 1000.
[ 0.014123] Timer migration: 1 hierarchy levels; 8 children per group; 1 crossnode level
[ 0.015214] fsl-mc MSI: msi-controller@fd440000 domain created
[ 0.020987] EFI services will not be available.
[ 0.021934] smp: Bringing up secondary CPUs ...
[ 0.023391] Detected VIPT I-cache on CPU1
[ 0.023553] GICv3: CPU1: found redistributor 100 region 0:0x00000000fd480000
[ 0.023577] GICv3: CPU1: using allocated LPI pending table @0x0000000000450000
[ 0.023640] CPU1: Booted secondary processor 0x0000000100 [0x412fd050]
[ 0.024763] Detected VIPT I-cache on CPU2
[ 0.024907] GICv3: CPU2: found redistributor 200 region 0:0x00000000fd4a0000
[ 0.024929] GICv3: CPU2: using allocated LPI pending table @0x0000000000460000
[ 0.024978] CPU2: Booted secondary processor 0x0000000200 [0x412fd050]
[ 0.026138] Detected VIPT I-cache on CPU3
[ 0.026279] GICv3: CPU3: found redistributor 300 region 0:0x00000000fd4c0000
[ 0.026303] GICv3: CPU3: using allocated LPI pending table @0x0000000000470000
[ 0.026352] CPU3: Booted secondary processor 0x0000000300 [0x412fd050]
[ 0.026541] smp: Brought up 1 node, 4 CPUs
[ 0.034241] SMP: Total of 4 processors activated.
[ 0.034710] CPU: All CPU(s) started at EL2
[ 0.035116] CPU features: detected: 32-bit EL0 Support
[ 0.035620] CPU features: detected: 32-bit EL1 Support
[ 0.036127] CPU features: detected: Data cache clean to the PoU not required for I/D coherence
[ 0.036969] CPU features: detected: Common not Private translations
[ 0.037582] CPU features: detected: CRC32 instructions
[ 0.038125] CPU features: detected: RCpc load-acquire (LDAPR)
[ 0.038694] CPU features: detected: LSE atomic instructions
[ 0.039244] CPU features: detected: Privileged Access Never
[ 0.039791] CPU features: detected: PMUv3
[ 0.040186] CPU features: detected: RAS Extension Support
[ 0.040719] CPU features: detected: XNX
[ 0.041102] CPU features: detected: Speculative Store Bypassing Safe (SSBS)
[ 0.041855] alternatives: applying system-wide alternatives
[ 0.047418] CPU features: detected: ICV_DIR_EL1 trapping
[ 0.048557] Memory: 7683552K/8124416K available (20736K kernel code, 5018K rwdata, 14920K rodata, 12480K init, 724K bss, 305152K reserved, 131072K cma-reserved)
[ 0.053188] devtmpfs: initialized
[ 0.076194] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 7645041785100000 ns
[ 0.077193] posixtimers hash table entries: 2048 (order: 3, 32768 bytes, linear)
[ 0.077991] futex hash table entries: 1024 (65536 bytes on 1 NUMA nodes, total 64 KiB, linear).
[ 0.080642] 2G module region forced by RANDOMIZE_MODULE_REGION_FULL
[ 0.081302] 0 pages in range for non-PLT usage
[ 0.081310] 510752 pages in range for PLT usage
[ 0.087203] DMI: not present or invalid.
[ 0.092012] NET: Registered PF_NETLINK/PF_ROUTE protocol family
[ 0.094182] DMA: preallocated 1024 KiB GFP_KERNEL pool for atomic allocations
[ 0.095295] DMA: preallocated 1024 KiB GFP_KERNEL|GFP_DMA pool for atomic allocations
[ 0.096163] audit: initializing netlink subsys (disabled)
[ 0.096954] audit: type=2000 audit(0.092:1): state=initialized audit_enabled=0 res=1
[ 0.102019] thermal_sys: Registered thermal governor 'step_wise'
[ 0.102040] thermal_sys: Registered thermal governor 'power_allocator'
[ 0.102800] cpuidle: using governor menu
[ 0.104380] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[ 0.105274] ASID allocator initialised with 32768 entries
[ 0.111040] Serial: AMBA PL011 UART driver
[ 0.140432] /vop@fe040000: Fixed dependency cycle(s) with /hdmi@fe0a0000
[ 0.141206] /hdmi@fe0a0000: Fixed dependency cycle(s) with /vop@fe040000
[ 0.157642] /pcie@fe260000: Fixed dependency cycle(s) with /pcie@fe260000/legacy-interrupt-controller
[ 0.178928] rockchip-gpio fdd60000.gpio: probed /pinctrl/gpio@fdd60000
[ 0.180729] rockchip-gpio fe740000.gpio: probed /pinctrl/gpio@fe740000
[ 0.182380] rockchip-gpio fe750000.gpio: probed /pinctrl/gpio@fe750000
[ 0.184237] rockchip-gpio fe760000.gpio: probed /pinctrl/gpio@fe760000
[ 0.185880] rockchip-gpio fe770000.gpio: probed /pinctrl/gpio@fe770000
[ 0.192768] /pcie@fe280000: Fixed dependency cycle(s) with /pcie@fe280000/legacy-interrupt-controller
[ 0.196426] /hdmi@fe0a0000: Fixed dependency cycle(s) with /hdmi-con
[ 0.197174] /hdmi-con: Fixed dependency cycle(s) with /hdmi@fe0a0000
[ 0.207741] HugeTLB: registered 1.00 GiB page size, pre-allocated 0 pages
[ 0.208425] HugeTLB: 0 KiB vmemmap can be freed for a 1.00 GiB page
[ 0.209043] HugeTLB: registered 32.0 MiB page size, pre-allocated 0 pages
[ 0.209708] HugeTLB: 0 KiB vmemmap can be freed for a 32.0 MiB page
[ 0.210324] HugeTLB: registered 2.00 MiB page size, pre-allocated 0 pages
[ 0.210986] HugeTLB: 0 KiB vmemmap can be freed for a 2.00 MiB page
[ 0.211638] HugeTLB: registered 64.0 KiB page size, pre-allocated 0 pages
[ 0.212304] HugeTLB: 0 KiB vmemmap can be freed for a 64.0 KiB page
[ 0.216832] ACPI: Interpreter disabled.
[ 0.226115] iommu: Default domain type: Translated
[ 0.226612] iommu: DMA domain TLB invalidation policy: strict mode
[ 0.229120] SCSI subsystem initialized
[ 0.230219] usbcore: registered new interface driver usbfs
[ 0.230824] usbcore: registered new interface driver hub
[ 0.231419] usbcore: registered new device driver usb
[ 0.234769] pps_core: LinuxPPS API ver. 1 registered
[ 0.235266] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti <giometti@linux.it>
[ 0.236205] PTP clock support registered
[ 0.236952] EDAC MC: Ver: 3.0.0
[ 0.238218] scmi_core: SCMI protocol bus registered
[ 0.241592] FPGA manager framework
[ 0.244246] vgaarb: loaded
[ 0.245545] clocksource: Switched to clocksource arch_sys_counter
[ 0.246553] VFS: Disk quotas dquot_6.6.0
[ 0.246977] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[ 0.248448] pnp: PnP ACPI: disabled
[ 0.262673] NET: Registered PF_INET protocol family
[ 0.263673] IP idents hash table entries: 131072 (order: 8, 1048576 bytes, linear)
[ 0.271846] tcp_listen_portaddr_hash hash table entries: 4096 (order: 4, 65536 bytes, linear)
[ 0.272763] Table-perturb hash table entries: 65536 (order: 6, 262144 bytes, linear)
[ 0.273581] TCP established hash table entries: 65536 (order: 7, 524288 bytes, linear)
[ 0.274889] TCP bind hash table entries: 65536 (order: 9, 2097152 bytes, linear)
[ 0.277519] TCP: Hash tables configured (established 65536 bind 65536)
[ 0.278369] UDP hash table entries: 4096 (order: 6, 262144 bytes, linear)
[ 0.279544] NET: Registered PF_UNIX/PF_LOCAL protocol family
[ 0.280868] RPC: Registered named UNIX socket transport module.
[ 0.281459] RPC: Registered udp transport module.
[ 0.281967] RPC: Registered tcp transport module.
[ 0.282433] RPC: Registered tcp-with-tls transport module.
[ 0.282973] RPC: Registered tcp NFSv4.1 backchannel transport module.
[ 0.285066] PCI: CLS 0 bytes, default 64
[ 0.285751] Unpacking initramfs...
[ 0.294394] kvm [1]: nv: 570 coarse grained trap handlers
[ 0.295328] kvm [1]: nv: 710 fine grained trap handlers
[ 0.296530] kvm [1]: IPA Size Limit: 40 bits
[ 0.296999] kvm [1]: GICv3: no GICV resource entry
[ 0.297475] kvm [1]: disabling GICv2 emulation
[ 0.297989] kvm [1]: GIC system register CPU interface enabled
[ 0.298599] kvm [1]: vgic interrupt IRQ9
[ 0.299039] kvm [1]: VHE mode initialized successfully
[ 0.302206] Initialise system trusted keyrings
[ 0.303030] workingset: timestamp_bits=42 (anon: 38) max_order=21 bucket_order=0 (anon: 0)
[ 0.304530] squashfs: version 4.0 (2009/01/31) Phillip Lougher
[ 0.305699] NFS: Registering the id_resolver key type
[ 0.306250] Key type id_resolver registered
[ 0.306668] Key type id_legacy registered
[ 0.307105] nfs4filelayout_init: NFSv4 File Layout Driver Registering...
[ 0.307767] nfs4flexfilelayout_init: NFSv4 Flexfile Layout Driver Registering...
[ 0.308845] 9p: Installing v9fs 9p2000 file system support
[ 0.378356] Key type asymmetric registered
[ 0.378791] Asymmetric key parser 'x509' registered
[ 0.379447] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 244)
[ 0.380179] io scheduler mq-deadline registered
[ 0.380628] io scheduler kyber registered
[ 0.381094] io scheduler bfq registered
[ 2.017986] Freeing initrd memory: 28596K
[ 2.025771] ledtrig-cpu: registered to indicate activity on CPUs
[ 2.036309] phy phy-fe8c0000.phy.3: lane number 0, val 1
[ 2.036934] rockchip-dw-pcie 3c0800000.pcie: host bridge /pcie@fe280000 ranges:
[ 2.037737] rockchip-dw-pcie 3c0800000.pcie: IO 0x00f0100000..0x00f01fffff -> 0x00f0100000
[ 2.038623] rockchip-dw-pcie 3c0800000.pcie: MEM 0x00f0200000..0x00f1ffffff -> 0x00f0200000
[ 2.039516] rockchip-dw-pcie 3c0800000.pcie: MEM 0x0380000000..0x03bfffffff -> 0x0380000000
[ 2.048377] rockchip-dw-pcie 3c0800000.pcie: iATU: unroll T, 8 ob, 8 ib, align 64K, limit 8G
[ 2.349576] rockchip-dw-pcie 3c0800000.pcie: PCIe Gen.3 x2 link up
[ 2.350587] rockchip-dw-pcie 3c0800000.pcie: PCI host bridge to bus 0002:20
[ 2.351289] pci_bus 0002:20: root bus resource [bus 20-2f]
[ 2.351840] pci_bus 0002:20: root bus resource [io 0x0000-0xfffff] (bus address [0xf0100000-0xf01fffff])
[ 2.352778] pci_bus 0002:20: root bus resource [mem 0xf0200000-0xf1ffffff]
[ 2.353456] pci_bus 0002:20: root bus resource [mem 0x380000000-0x3bfffffff]
[ 2.354237] pci 0002:20:00.0: [1d87:3566] type 01 class 0x060400 PCIe Root Port
[ 2.354983] pci 0002:20:00.0: ROM [mem 0x00000000-0x0000ffff pref]
[ 2.355597] pci 0002:20:00.0: PCI bridge to [bus 01-ff]
[ 2.356120] pci 0002:20:00.0: bridge window [io 0x0000-0x0fff]
[ 2.356722] pci 0002:20:00.0: bridge window [mem 0x00000000-0x000fffff]
[ 2.357397] pci 0002:20:00.0: bridge window [mem 0x00000000-0x000fffff 64bit pref]
[ 2.358247] pci 0002:20:00.0: supports D1 D2
[ 2.358677] pci 0002:20:00.0: PME# supported from D0 D1 D3hot
[ 2.364773] pci 0002:20:00.0: Primary bus is hard wired to 0
[ 2.365345] pci 0002:20:00.0: bridge configuration invalid ([bus 01-ff]), reconfiguring
[ 2.366452] pci 0002:21:00.0: [10ec:5765] type 00 class 0x010802 PCIe Endpoint
[ 2.367380] pci 0002:21:00.0: BAR 0 [mem 0x00000000-0x00003fff 64bit]
[ 2.368045] pci 0002:21:00.0: BAR 5 [mem 0x00000000-0x00001fff]
[ 2.369416] pci 0002:21:00.0: 15.752 Gb/s available PCIe bandwidth, limited by 8.0 GT/s PCIe x2 link at 0002:20:00.0 (capable of 31.504 Gb/s with 8.0 GT/s PCIe x4 link)
[ 2.377603] pci 0002:21:00.0: ASPM: default states L1
[ 2.378208] pci_bus 0002:21: busn_res: [bus 21-2f] end is updated to 21
[ 2.378898] pci 0002:20:00.0: bridge window [mem 0xf0200000-0xf02fffff]: assigned
[ 2.379643] pci 0002:20:00.0: ROM [mem 0xf0300000-0xf030ffff pref]: assigned
[ 2.380348] pci 0002:21:00.0: BAR 0 [mem 0xf0200000-0xf0203fff 64bit]: assigned
[ 2.381111] pci 0002:21:00.0: BAR 5 [mem 0xf0204000-0xf0205fff]: assigned
[ 2.381824] pci 0002:20:00.0: PCI bridge to [bus 21]
[ 2.382325] pci 0002:20:00.0: bridge window [mem 0xf0200000-0xf02fffff]
[ 2.383002] pci_bus 0002:20: resource 4 [io 0x0000-0xfffff]
[ 2.383562] pci_bus 0002:20: resource 5 [mem 0xf0200000-0xf1ffffff]
[ 2.384181] pci_bus 0002:20: resource 6 [mem 0x380000000-0x3bfffffff]
[ 2.384817] pci_bus 0002:21: resource 1 [mem 0xf0200000-0xf02fffff]
[ 2.390163] pcieport 0002:20:00.0: PME: Signaling with IRQ 31
[ 2.391304] pcieport 0002:20:00.0: AER: enabled with IRQ 32
[ 2.461045] dma-pl330 fe530000.dma-controller: Loaded driver for PL330 DMAC-241330
[ 2.461857] dma-pl330 fe530000.dma-controller: DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
[ 2.465804] dma-pl330 fe550000.dma-controller: Loaded driver for PL330 DMAC-241330
[ 2.466560] dma-pl330 fe550000.dma-controller: DBUFF-128x8bytes Num_Chans-8 Num_Peri-32 Num_Events-16
[ 2.506402] Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled
[ 2.512775] printk: legacy console [ttyS2] disabled
[ 2.513873] fe660000.serial: ttyS2 at MMIO 0xfe660000 (irq = 37, base_baud = 1500000) is a 16550A
[ 2.514882] printk: legacy console [ttyS2] enabled
[ 2.514882] printk: legacy console [ttyS2] enabled
[ 2.515784] printk: legacy bootconsole [uart0] disabled
[ 2.515784] printk: legacy bootconsole [uart0] disabled
[ 2.523685] msm_serial: driver initialized
[ 2.525677] SuperH (H)SCI(F) driver initialized
[ 2.526792] STM32 USART driver initialized
[ 2.538263] random: crng init done
[ 2.538643] platform fdea0000.video-codec: Adding to iommu group 0
[ 2.541147] platform fdee0000.video-codec: Adding to iommu group 1
[ 2.543525] platform fe040000.vop: Adding to iommu group 2
[ 2.545348] Error: Driver 'efi-framebuffer' is already registered, aborting...
[ 2.556173] loop: module loaded
[ 2.560241] megasas: 07.734.00.00-rc1
[ 2.563304] nvme nvme0: pci function 0002:21:00.0
[ 2.563774] nvme 0002:21:00.0: enabling device (0000 -> 0002)
[ 2.581994] tun: Universal TUN/TAP device driver, 1.6
[ 2.585959] thunder_xcv, ver 1.0
[ 2.586353] thunder_bgx, ver 1.0
[ 2.586717] nicpf, ver 1.0
[ 2.591410] e1000: Intel(R) PRO/1000 Network Driver
[ 2.591864] e1000: Copyright (c) 1999-2006 Intel Corporation.
[ 2.592455] e1000e: Intel(R) PRO/1000 Network Driver
[ 2.592904] e1000e: Copyright(c) 1999 - 2015 Intel Corporation.
[ 2.593517] igb: Intel(R) Gigabit Ethernet Network Driver
[ 2.594043] igb: Copyright (c) 2007-2014 Intel Corporation.
[ 2.594615] igbvf: Intel(R) Gigabit Virtual Function Network Driver
[ 2.595175] igbvf: Copyright (c) 2009 - 2012 Intel Corporation.
[ 2.596815] sky2: driver version 1.30
[ 2.601784] rk_gmac-dwmac fe010000.ethernet: IRQ sfty not found
[ 2.604039] rk_gmac-dwmac fe2a0000.ethernet: IRQ sfty not found
[ 2.606627] usbcore: registered new device driver r8152-cfgselector
[ 2.607267] usbcore: registered new interface driver r8152
[ 2.607825] usbcore: registered new interface driver asix
[ 2.608408] usbcore: registered new interface driver ax88179_178a
[ 2.609582] VFIO - User Level meta-driver version: 0.3
[ 2.624316] ehci-platform fd800000.usb: EHCI Host Controller
[ 2.624342] ohci-platform fd840000.usb: Generic Platform OHCI controller
[ 2.624869] ehci-platform fd800000.usb: new USB bus registered, assigned bus number 1
[ 2.625452] ohci-platform fd840000.usb: new USB bus registered, assigned bus number 2
[ 2.625481] usbcore: registered new interface driver usb-storage
[ 2.626353] ehci-platform fd800000.usb: irq 46, io mem 0xfd800000
[ 2.627002] ohci-platform fd840000.usb: irq 47, io mem 0xfd840000
[ 2.636410] i2c_dev: i2c /dev entries driver
[ 2.637620] ehci-platform fd800000.usb: USB 2.0 started, EHCI 1.00
[ 2.639265] hub 1-0:1.0: USB hub found
[ 2.639666] hub 1-0:1.0: 1 port detected
[ 2.643281] fan53555-regulator 0-001c: FAN53555 Option[12] Rev[15] Detected!
[ 2.686641] hub 2-0:1.0: USB hub found
[ 2.687081] hub 2-0:1.0: 1 port detected
[ 2.700618] vdd_npu: Bringing 500000uV into 825000-825000uV
[ 2.701202] nvme nvme0: passthrough uses implicit buffer lengths
[ 2.709720] vdda0v9_image: Bringing 600000uV into 900000-900000uV
[ 2.714524] nvme nvme0: allocated 64 MiB host memory buffer (16 segments).
[ 2.737292] vcca1v8_image: Bringing 600000uV into 1800000-1800000uV
[ 2.749637] rockchip-pm-domain fdd90000.power-management:power-controller: Failed to create device link (0x180) with supplier 0-0020 for /power-management@fdd90000/power-controller/power-domain@6
[ 2.750502] nvme nvme0: 4/0/0 default/read/poll queues
[ 2.773746] nvme nvme0: Ignoring bogus Namespace Identifiers
[ 2.788100] dwmmc_rockchip fe2b0000.mmc: IDMAC supports 32-bit address mode.
[ 2.788831] dwmmc_rockchip fe2b0000.mmc: Using internal DMA controller.
[ 2.789432] dwmmc_rockchip fe2b0000.mmc: Version ID is 270a
[ 2.790037] dwmmc_rockchip fe2b0000.mmc: DW MMC controller at irq 80,32 bit host data width,256 deep fifo
[ 2.802482] arm-scmi arm-scmi.6.auto: Using scmi_smc_transport
[ 2.803032] arm-scmi arm-scmi.6.auto: SCMI max-rx-timeout: 30ms / max-msg-size: 104bytes / max-msg: 20
[ 2.804109] scmi_protocol scmi_dev.1: Enabled polling mode TX channel - prot_id:16
[ 2.805142] arm-scmi arm-scmi.6.auto: SCMI Notifications - Core Enabled.
[ 2.805740] mmc_host mmc1: Bus speed = 375000Hz (req 400000Hz, actual 375000HZ div = 0)
[ 2.806552] arm-scmi arm-scmi.6.auto: SCMI Protocol v2.0 'rockchip:' Firmware version 0x0
[ 2.807391] arm-scmi arm-scmi.6.auto: Enabling SCMI Quirk [quirk_clock_rates_triplet_out_of_spec]
[ 2.810214] SMCCC: SOC_ID: ARCH_SOC_ID not implemented, skipping ....
[ 2.815909] usbcore: registered new interface driver usbhid
[ 2.816421] usbhid: USB HID core driver
[ 2.825563] mmc0: SDHCI controller on fe310000.mmc [fe310000.mmc] using ADMA
[ 2.829265] hw perfevents: enabled with armv8_cortex_a55 PMU driver, 7 (0,8000003f) counters available
[ 2.849585] NET: Registered PF_INET6 protocol family
[ 2.851218] Segment Routing with IPv6
[ 2.851605] In-situ OAM (IOAM) with IPv6
[ 2.852047] NET: Registered PF_PACKET protocol family
[ 2.852619] 9pnet: Installing 9P2000 support
[ 2.853103] Key type dns_resolver registered
[ 2.878282] registered taskstats version 1
[ 2.878959] Loading compiled-in X.509 certificates
[ 2.885591] usb 1-1: new high-speed USB device number 2 using ehci-platform
[ 2.889469] sdhci-dwcmshc fe310000.mmc: Can't reduce the clock below 52MHz in HS200/HS400 mode
[ 2.890328] sdhci-dwcmshc fe310000.mmc: Can't reduce the clock below 52MHz in HS200/HS400 mode
[ 2.891109] sdhci-dwcmshc fe310000.mmc: Can't reduce the clock below 52MHz in HS200/HS400 mode
[ 2.892871] mmc0: new HS200 MMC card at address 0001
[ 2.894399] mmcblk0: mmc0:0001 BJTD4R 29.1 GiB
[ 2.894880] Demotion targets for Node 0: null
[ 2.899582] mmcblk0: p1 p2 p3
[ 2.901085] mmcblk0boot0: mmc0:0001 BJTD4R 4.00 MiB
[ 2.904012] mmcblk0boot1: mmc0:0001 BJTD4R 4.00 MiB
[ 2.907113] mmcblk0rpmb: mmc0:0001 BJTD4R 4.00 MiB, chardev (509:0)
[ 2.945955] platform fde40000.npu: Adding to iommu group 3
[ 2.950953] rk_gmac-dwmac fe010000.ethernet: IRQ sfty not found
[ 2.952440] rk_gmac-dwmac fe010000.ethernet: clock input or output? (input).
[ 2.953079] rk_gmac-dwmac fe010000.ethernet: Can not read property: tx_delay.
[ 2.953754] rk_gmac-dwmac fe010000.ethernet: set tx_delay to 0x30
[ 2.954304] rk_gmac-dwmac fe010000.ethernet: Can not read property: rx_delay.
[ 2.954936] rk_gmac-dwmac fe010000.ethernet: set rx_delay to 0x10
[ 2.955485] rk_gmac-dwmac fe010000.ethernet: integrated PHY? (no).
[ 2.956079] rk_gmac-dwmac fe010000.ethernet: clock input from PHY
[ 2.961643] rk_gmac-dwmac fe010000.ethernet: init for RGMII_ID
[ 2.962534] rk_gmac-dwmac fe010000.ethernet: User ID: 0x30, Synopsys ID: 0x51
[ 2.963181] rk_gmac-dwmac fe010000.ethernet: DWMAC4/5
[ 2.963645] rk_gmac-dwmac fe010000.ethernet: DMA HW capability register supported
[ 2.964309] rk_gmac-dwmac fe010000.ethernet: Active PHY interface: RGMII (1)
[ 2.964933] rk_gmac-dwmac fe010000.ethernet: RX Checksum Offload Engine supported
[ 2.965638] rk_gmac-dwmac fe010000.ethernet: TX Checksum insertion supported
[ 2.966267] rk_gmac-dwmac fe010000.ethernet: Wake-Up On Lan supported
[ 2.966926] rk_gmac-dwmac fe010000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[ 2.967641] rk_gmac-dwmac fe010000.ethernet: Enabled RFS Flow TC (entries=10)
[ 2.968277] rk_gmac-dwmac fe010000.ethernet: TSO supported
[ 2.968766] rk_gmac-dwmac fe010000.ethernet: TSO feature enabled
[ 2.969301] rk_gmac-dwmac fe010000.ethernet: Using 32/32 bits DMA host/device width
[ 3.035000] hub 1-1:1.0: USB hub found
[ 3.035550] hub 1-1:1.0: 4 ports detected
[ 3.073444] rk_gmac-dwmac fe2a0000.ethernet: IRQ sfty not found
[ 3.075209] rk_gmac-dwmac fe2a0000.ethernet: clock input or output? (input).
[ 3.075852] rk_gmac-dwmac fe2a0000.ethernet: Can not read property: tx_delay.
[ 3.076485] rk_gmac-dwmac fe2a0000.ethernet: set tx_delay to 0x30
[ 3.077027] rk_gmac-dwmac fe2a0000.ethernet: Can not read property: rx_delay.
[ 3.077695] rk_gmac-dwmac fe2a0000.ethernet: set rx_delay to 0x10
[ 3.078252] rk_gmac-dwmac fe2a0000.ethernet: integrated PHY? (no).
[ 3.078851] rk_gmac-dwmac fe2a0000.ethernet: clock input from PHY
[ 3.084415] rk_gmac-dwmac fe2a0000.ethernet: init for RGMII_ID
[ 3.085289] rk_gmac-dwmac fe2a0000.ethernet: User ID: 0x30, Synopsys ID: 0x51
[ 3.085968] rk_gmac-dwmac fe2a0000.ethernet: DWMAC4/5
[ 3.086436] rk_gmac-dwmac fe2a0000.ethernet: DMA HW capability register supported
[ 3.087099] rk_gmac-dwmac fe2a0000.ethernet: Active PHY interface: RGMII (1)
[ 3.087724] rk_gmac-dwmac fe2a0000.ethernet: RX Checksum Offload Engine supported
[ 3.088385] rk_gmac-dwmac fe2a0000.ethernet: TX Checksum insertion supported
[ 3.089008] rk_gmac-dwmac fe2a0000.ethernet: Wake-Up On Lan supported
[ 3.089683] rk_gmac-dwmac fe2a0000.ethernet: Enable RX Mitigation via HW Watchdog Timer
[ 3.090398] rk_gmac-dwmac fe2a0000.ethernet: Enabled RFS Flow TC (entries=10)
[ 3.091034] rk_gmac-dwmac fe2a0000.ethernet: TSO supported
[ 3.091521] rk_gmac-dwmac fe2a0000.ethernet: TSO feature enabled
[ 3.092056] rk_gmac-dwmac fe2a0000.ethernet: Using 32/32 bits DMA host/device width
[ 3.228427] cfg80211: Loading compiled-in X.509 certificates for regulatory database
[ 3.244306] Loaded X.509 cert 'sforshee: 00b28ddf47aef9cea7'
[ 3.245444] Loaded X.509 cert 'wens: 61c038651aabdcf94bd0ac7ff06c7248db18c600'
[ 3.246270] faux_driver regulatory: Direct firmware load for regulatory.db failed with error -2
[ 3.246879] clk: Not disabling unused clocks
[ 3.247042] cfg80211: failed to load regulatory.db
[ 3.247425] PM: genpd: Disabling unused power domains
[ 3.248577] dw-apb-uart fe660000.serial: forbid DMA for kernel console
[ 3.254849] Freeing unused kernel memory: 12480K
[ 3.255399] Run /init as init process
Loading, please wait...
Starting version 247.3-7+deb11u4
Begin: Loading essential drivers ... done.
Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.
Begin: Running /scripts/local-premount ... done.
Begin: Will now check root file system ... fsck from util-linux 2.36.1
[/sbin/fsck.ext4 (1) -- /dev/mmcblk0p3] fsck.ext4 -a -C0 /dev/mmcblk0p3
rootfs: clean, 297753/1855392 files, 4946612/7548923 blocks
done.
[ 4.081211] EXT4-fs (mmcblk0p3): mounted filesystem d210e617-6a4c-4771-b955-ddd835a32d2b r/w with ordered data mode. Quota mode: none.
done.
Begin: Running /scripts/local-bottom ... done.
Begin: Running /scripts/init-bottom ... done.
[ 4.488149] systemd[1]: System time before build time, advancing clock.
[ 4.545777] systemd[1]: systemd 247.3-7+deb11u4 running in system mode. (+PAM +AUDIT +SELINUX +IMA +APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 +ZSTD +SECCOMP +BLKID +ELFUTILS +KMOD +IDN2 -IDN +PCRE2 default-hierarchy=unified)
[ 4.549900] systemd[1]: Detected architecture arm64.
Welcome to ^[[1mDebian GNU/Linux 11 (bullseye)^[[0m!
[ 4.563093] systemd[1]: Set hostname to <rock-3b>.
[ 4.712335] block mmcblk0: the capability attribute has been deprecated.
[ 5.090660] systemd[1]: Queued start job for default target Graphical Interface.
[ 5.131927] systemd[1]: Created slice system-getty.slice.
[^[[0;32m OK ^[[0m] Created slice ^[[0;1;39msystem-getty.slice^[[0m.
[ 5.134792] systemd[1]: Created slice system-modprobe.slice.
[^[[0;32m OK ^[[0m] Created slice ^[[0;1;39msystem-modprobe.slice^[[0m.
[ 5.143177] systemd[1]: Created slice system-serial\x2dgetty.slice.
[^[[0;32m OK ^[[0m] Created slice ^[[0;1;39msystem-serial\x2dgetty.slice^[[0m.
[ 5.151765] systemd[1]: Created slice system-systemd\x2dfsck.slice.
[^[[0;32m OK ^[[0m] Created slice ^[[0;1;39msystem-systemd\x2dfsck.slice^[[0m.
[ 5.163903] systemd[1]: Created slice system-systemd\x2djournald.slice.
[^[[0;32m OK ^[[0m] Created slice ^[[0;1;39msystem-systemd\x2djournald.slice^[[0m.
[ 5.175785] systemd[1]: Created slice system-systemd\x2djournald\x2dvarlink.slice.
[^[[0;32m OK ^[[0m] Created slice ^[[0;1;39msystem-syste…\x2djournald\x2dvarlink.slice^[[0m.
[ 5.183362] systemd[1]: Created slice User and Session Slice.
[^[[0;32m OK ^[[0m] Created slice ^[[0;1;39mUser and Session Slice^[[0m.
[ 5.190135] systemd[1]: Started Dispatch Password Requests to Console Directory Watch.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mDispatch Password …ts to Console Directory Watch^[[0m.
[ 5.202212] systemd[1]: Started Forward Password Requests to Wall Directory Watch.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mForward Password R…uests to Wall Directory Watch^[[0m.
[ 5.210105] systemd[1]: Condition check resulted in Arbitrary Executable File Formats File System Automount Point being skipped.
[ 5.211439] systemd[1]: Reached target Local Encrypted Volumes.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mLocal Encrypted Volumes^[[0m.
[ 5.222078] systemd[1]: Reached target Network (Pre).
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mNetwork (Pre)^[[0m.
[ 5.229939] systemd[1]: Reached target Paths.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mPaths^[[0m.
[ 5.238057] systemd[1]: Reached target Remote Encrypted Volumes.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mRemote Encrypted Volumes^[[0m.
[ 5.245910] systemd[1]: Reached target Remote File Systems.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mRemote File Systems^[[0m.
[ 5.247592] systemd[1]: Reached target Slices.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mSlices^[[0m.
[ 5.250927] systemd[1]: Listening on fsck to fsckd communication Socket.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mfsck to fsckd communication Socket^[[0m.
[ 5.258649] systemd[1]: Listening on initctl Compatibility Named Pipe.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39minitctl Compatibility Named Pipe^[[0m.
[ 5.267782] systemd[1]: Listening on Journal Audit Socket.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mJournal Audit Socket^[[0m.
[ 5.270864] systemd[1]: systemd-journald-dev-log.socket: SO_PASSSEC failed: Operation not supported
[ 5.271966] systemd[1]: Listening on Journal Socket (/dev/log).
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mJournal Socket (/dev/log)^[[0m.
[ 5.274918] systemd[1]: systemd-journald.socket: SO_PASSSEC failed: Operation not supported
[ 5.276098] systemd[1]: systemd-journald.socket: SO_PASSSEC failed: Operation not supported
[ 5.277020] systemd[1]: Listening on Journal Socket.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mJournal Socket^[[0m.
[ 5.280707] systemd[1]: Listening on Network Service Netlink Socket.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mNetwork Service Netlink Socket^[[0m.
[ 5.291657] systemd[1]: Listening on udev Control Socket.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mudev Control Socket^[[0m.
[ 5.294591] systemd[1]: Listening on udev Kernel Socket.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mudev Kernel Socket^[[0m.
[ 5.321932] systemd[1]: Mounting Huge Pages File System...
Mounting ^[[0;1;39mHuge Pages File System^[[0m...
[ 5.334172] systemd[1]: Mounting POSIX Message Queue File System...
Mounting ^[[0;1;39mPOSIX Message Queue File System^[[0m...
[ 5.339943] systemd[1]: Mounting Kernel Debug File System...
Mounting ^[[0;1;39mKernel Debug File System^[[0m...
[ 5.346080] systemd[1]: Condition check resulted in Kernel Trace File System being skipped.
[ 5.351151] systemd[1]: Starting Wait for network to be configured by ifupdown...
Starting ^[[0;1;39mWait for network to be configured by ifupdown^[[0m...
[ 5.357911] systemd[1]: Condition check resulted in Create list of static device nodes for the current kernel being skipped.
[ 5.363081] systemd[1]: Starting Load Kernel Module configfs...
Starting ^[[0;1;39mLoad Kernel Module configfs^[[0m...
[ 5.368299] systemd[1]: Starting Load Kernel Module drm...
Starting ^[[0;1;39mLoad Kernel Module drm^[[0m...
[ 5.376882] systemd[1]: Starting Load Kernel Module fuse...
Starting ^[[0;1;39mLoad Kernel Module fuse^[[0m...
[ 5.386967] systemd[1]: Condition check resulted in Set Up Additional Binary Formats being skipped.
[ 5.387937] systemd[1]: Condition check resulted in File System Check on Root Device being skipped.
[ 5.398865] systemd[1]: Starting Journal Service...
Starting ^[[0;1;39mJournal Service^[[0m...
[ 5.407719] systemd[1]: Starting Load Kernel Modules...
Starting ^[[0;1;39mLoad Kernel Modules^[[0m...
[ 5.412414] systemd[1]: Starting Remount Root and Kernel File Systems...
Starting ^[[0;1;39mRemount Root and Kernel File Systems^[[0m...
[ 5.429850] systemd[1]: Starting Coldplug All udev Devices...
Starting ^[[0;1;39mColdplug All udev Devices^[[0m...
[ 5.447220] systemd[1]: Mounted Huge Pages File System.
[^[[0;32m OK ^[[0m] Mounted ^[[0;1;39mHuge Pages File System^[[0m.
[ 5.449061] systemd[1]: Mounted POSIX Message Queue File System.
[^[[0;32m OK ^[[0m] Mounted ^[[0;1;39mPOSIX Message Queue File System^[[0m.
[ 5.453688] EXT4-fs (mmcblk0p3): re-mounted d210e617-6a4c-4771-b955-ddd835a32d2b.
[ 5.459654] systemd[1]: Mounted Kernel Debug File System.
[^[[0;32m OK ^[[0m] Mounted ^[[0;1;39mKernel Debug File System^[[0m.
[ 5.467229] systemd[1]: Finished Wait for network to be configured by ifupdown.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mWait for network to be configured by ifupdown^[[0m.
[ 5.474892] systemd[1]: modprobe@configfs.service: Succeeded.
[ 5.476453] systemd[1]: Finished Load Kernel Module configfs.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mLoad Kernel Module configfs^[[0m.
[ 5.486629] systemd[1]: modprobe@drm.service: Succeeded.
[ 5.488053] systemd[1]: Finished Load Kernel Module drm.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mLoad Kernel Module drm^[[0m.
[ 5.498681] systemd[1]: modprobe@fuse.service: Succeeded.
[ 5.500190] systemd[1]: Finished Load Kernel Module fuse.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mLoad Kernel Module fuse^[[0m.
[ 5.511197] systemd[1]: Finished Load Kernel Modules.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mLoad Kernel Modules^[[0m.
[ 5.523376] systemd[1]: Finished Remount Root and Kernel File Systems.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mRemount Root and Kernel File Systems^[[0m.
[ 5.534599] systemd[1]: Condition check resulted in FUSE Control File System being skipped.
[ 5.550113] systemd[1]: Mounting Kernel Configuration File System...
Mounting ^[[0;1;39mKernel Configuration File System^[[0m...
[ 5.556704] systemd[1]: Condition check resulted in Rebuild Hardware Database being skipped.
[ 5.557696] systemd[1]: Condition check resulted in Platform Persistent Storage Archival being skipped.
[ 5.561425] systemd[1]: Starting Load/Save Random Seed...
Starting ^[[0;1;39mLoad/Save Random Seed^[[0m...
[ 5.572806] systemd[1]: Starting Apply Kernel Variables...
Starting ^[[0;1;39mApply Kernel Variables^[[0m...
[ 5.584810] systemd[1]: Starting Create System Users...
Starting ^[[0;1;39mCreate System Users^[[0m...
[ 5.596109] systemd[1]: Started Journal Service.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mJournal Service^[[0m.
[^[[0;32m OK ^[[0m] Mounted ^[[0;1;39mKernel Configuration File System^[[0m.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mLoad/Save Random Seed^[[0m.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mApply Kernel Variables^[[0m.
Starting ^[[0;1;39mFlush Journal to Persistent Storage^[[0m...
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mCreate System Users^[[0m.
[ 5.637155] systemd-journald[230]: Received client request to flush runtime journal.
[ 5.640079] systemd-journald[230]: File /var/log/journal/f26be486655e4e559a1282889eb20124/system.journal corrupted or uncleanly shut down, renaming and replacing.
Starting ^[[0;1;39mCreate Static Device Nodes in /dev^[[0m...
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mCreate Static Device Nodes in /dev^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mLocal File Systems (Pre)^[[0m.
[^[[0;32m OK ^[[0m] Set up automount ^[[0;1;39mboot-efi.automount^[[0m.
[^[[0;32m OK ^[[0m] Set up automount ^[[0;1;39mconfig.automount^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mLocal File Systems^[[0m.
Starting ^[[0;1;39mRule-based Manage…for Device Events and Files^[[0m...
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mFlush Journal to Persistent Storage^[[0m.
Starting ^[[0;1;39mCreate Volatile Files and Directories^[[0m...
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mRule-based Manager for Device Events and Files^[[0m.
Starting ^[[0;1;39mNetwork Service^[[0m...
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mCreate Volatile Files and Directories^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mEntropy Daemon based on the HAVEGE algorithm^[[0m.
Starting ^[[0;1;39mNetwork Time Synchronization^[[0m...
Starting ^[[0;1;39mUpdate UTMP about System Boot/Shutdown^[[0m...
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mColdplug All udev Devices^[[0m.
Starting ^[[0;1;39mHelper to synchronize boot up for ifupdown^[[0m...
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mHelper to synchronize boot up for ifupdown^[[0m.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mUpdate UTMP about System Boot/Shutdown^[[0m.
Starting ^[[0;1;39mRaise network interfaces^[[0m...
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mNetwork Service^[[0m.
Starting ^[[0;1;39mWait for Network to be Configured^[[0m...
Starting ^[[0;1;39mNetwork Name Resolution^[[0m...
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mNetwork Time Synchronization^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mSystem Time Set^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mSystem Time Synchronized^[[0m.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mRaise network interfaces^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mNetwork Name Resolution^[[0m.
[ 6.840374] rocket: loading out-of-tree module taints kernel.
[ 6.877647] [drm] Initialized rocket 0.0.0 for rknn on minor 0
[ 6.879950] rocket fde40000.npu: Rockchip NPU core 0 version: 0
[^[[0;32m OK ^[[0m] Found device ^[[0;1;39mEDILOCA EN605 512GB^[[0m.
Starting ^[[0;1;39mFile System Check…1edf-455d-9058-56e0855a1edb^[[0m...
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mFile System Check Daemon to report status^[[0m.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mLoad/Save RF …itch Status /dev/rfkill Watch^[[0m.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mFile System Check…d-1edf-455d-9058-56e0855a1edb^[[0m.
[^[[0;32m OK ^[[0m] Found device ^[[0;1;39m/dev/ttyS2^[[0m.
Mounting ^[[0;1;39m/mnt/nvme^[[0m...
[ 7.209346] EXT4-fs (nvme0n1): mounted filesystem 0d9000fd-1edf-455d-9058-56e0855a1edb r/w with ordered data mode. Quota mode: none.
[^[[0;32m OK ^[[0m] Mounted ^[[0;1;39m/mnt/nvme^[[0m.
Activating swap ^[[0;1;39m/mnt/nvme/swapfile^[[0m...
[ 7.236341] Adding 10485756k swap on /mnt/nvme/swapfile. Priority:-1 extents:10 across:19374076k SS
[^[[0;32m OK ^[[0m] Activated swap ^[[0;1;39m/mnt/nvme/swapfile^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mSwap^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mSystem Initialization^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mDaily apt download activities^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mDaily apt upgrade and clean activities^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mPeriodic ext4 Onli…ata Check for All Filesystems^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mDiscard unused blocks once a week^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mDaily man-db regeneration^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mDaily Cleanup of Temporary Directories^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mTimers^[[0m.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mAvahi mDNS/DNS-SD Stack Activation Socket^[[0m.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mD-Bus System Message Bus Socket^[[0m.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mOpenBSD Secure Shell server socket^[[0m.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mJournal Varli… Socket for Namespace netdata^[[0m.
[^[[0;32m OK ^[[0m] Listening on ^[[0;1;39mJournal Socket for Namespace netdata^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mSockets^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mBasic System^[[0m.
Starting ^[[0;1;39mAvahi mDNS/DNS-SD Stack^[[0m...
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mD-Bus System Message Bus^[[0m.
Starting ^[[0;1;39mNetwork Manager^[[0m...
Starting ^[[0;1;39mRemove Stale Onli…t4 Metadata Check Snapshots^[[0m...
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mrsetup configuration service^[[0m.
Starting ^[[0;1;39mLSB: Set sysfs variables from /etc/sysfs.conf^[[0m...
Starting ^[[0;1;39mUser Login Management^[[0m...
Starting ^[[0;1;39mWPA supplicant^[[0m...
Starting ^[[0;1;39mLinux zramswap setup^[[0m...
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mAvahi mDNS/DNS-SD Stack^[[0m.
Mounting ^[[0;1;39m/config^[[0m...
[ 7.640448] FAT-fs (mmcblk0p1): Volume was not properly unmounted. Some data may be corrupt. Please run fsck.
[^[[0;1;31mFAILED^[[0m] Failed to start ^[[0;1;39mLinux zramswap setup^[[0m.
See 'systemctl status zramswap.service' for details.
[^[[0;32m OK ^[[0m] Mounted ^[[0;1;39m/config^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mWPA supplicant^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mLSB: Set sysfs variables from /etc/sysfs.conf^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mUser Login Management^[[0m.
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mRemove Stale Onli…ext4 Metadata Check Snapshots^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mNetwork Manager^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mNetwork^[[0m.
Starting ^[[0;1;39mNetwork Manager Wait Online^[[0m...
Starting ^[[0;1;39mdnsmasq - A light…DHCP and caching DNS server^[[0m...
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mEnable adbd on supported Radxa products^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mEnable USB Ethernet on supported Radxa products^[[0m.
Starting ^[[0;1;39mPermit User Sessions^[[0m...
Starting ^[[0;1;39mTailscale node agent^[[0m...
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mPermit User Sessions^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mGetty on tty1^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mSerial Getty on ttyS2^[[0m.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mLogin Prompts^[[0m.
Starting ^[[0;1;39mHostname Service^[[0m...
[^[[0;1;31mFAILED^[[0m] Failed to start ^[[0;1;39mdnsmasq - …t DHCP and caching DNS server^[[0m.
See 'systemctl status dnsmasq.service' for details.
[^[[0;32m OK ^[[0m] Reached target ^[[0;1;39mHost and Network Name Lookups^[[0m.
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mHostname Service^[[0m.
Starting ^[[0;1;39mNetwork Manager Script Dispatcher Service^[[0m...
[ 8.192053] rk_gmac-dwmac fe010000.ethernet eth0: Register MEM_TYPE_PAGE_POOL RxQ-0
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mNetwork Manager Script Dispatcher Service^[[0m.
[ 8.221724] rk_gmac-dwmac fe010000.ethernet eth0: PHY [stmmac-1:01] driver [RTL8211F Gigabit Ethernet] (irq=POLL)
[ 8.224669] dwmac4: Master AXI performs any burst length
[ 8.225174] rk_gmac-dwmac fe010000.ethernet eth0: No Safety Features support found
[ 8.227524] rk_gmac-dwmac fe010000.ethernet eth0: IEEE 1588-2008 Advanced Timestamp supported
[ 8.229192] rk_gmac-dwmac fe010000.ethernet eth0: registered PTP clock
[ 8.229923] rk_gmac-dwmac fe010000.ethernet eth0: configuring for phy/rgmii-id link mode
[ 8.284289] rk_gmac-dwmac fe2a0000.ethernet eth1: Register MEM_TYPE_PAGE_POOL RxQ-0
[^[[0;32m OK ^[[0m] Started ^[[0;1;39mTailscale node agent^[[0m.
[ 8.313571] rk_gmac-dwmac fe2a0000.ethernet eth1: PHY [stmmac-0:01] driver [RTL8211F Gigabit Ethernet] (irq=POLL)
[ 8.325571] dwmac4: Master AXI performs any burst length
[ 8.326067] rk_gmac-dwmac fe2a0000.ethernet eth1: No Safety Features support found
[ 8.327175] rk_gmac-dwmac fe2a0000.ethernet eth1: IEEE 1588-2008 Advanced Timestamp supported
[ 8.328451] rk_gmac-dwmac fe2a0000.ethernet eth1: registered PTP clock
[ 8.329047] rk_gmac-dwmac fe2a0000.ethernet eth1: configuring for phy/rgmii-id link mode
[^[[0;32m OK ^[[0m] Finished ^[[0;1;39mWait for Network to be Configured^[[0m.
[ 12.359432] rk_gmac-dwmac fe010000.ethernet eth0: Link is Up - 1Gbps/Full - flow control rx/tx
Debian GNU/Linux 11 rock-3b ttyS2
rock-3b login: [ 17.158640] platform sdio-pwrseq: deferred probe pending: pwrseq_simple: reset control not ready
[ 17.159481] platform 3c0000000.pcie: deferred probe pending: rockchip-dw-pcie: failed to initialize the phy
[ 17.160361] platform fcc00000.usb: deferred probe pending: dwc3: failed to initialize core
[ 17.161108] platform fd000000.usb: deferred probe pending: dwc3: failed to initialize core
[ 17.161993] rockchip-pm-domain fdd90000.power-management:power-controller: sync_state() pending due to fd000000.usb
[ 17.162945] rockchip-pm-domain fdd90000.power-management:power-controller: sync_state() pending due to fcc00000.usb
[ 17.163884] rockchip-pm-domain fdd90000.power-management:power-controller: sync_state() pending due to fde60000.gpu
[ 17.164821] rockchip-pm-domain fdd90000.power-management:power-controller: sync_state() pending due to fdea0000.video-codec
[ 17.165877] rockchip-pm-domain fdd90000.power-management:power-controller: sync_state() pending due to fdeb0000.rga
[ 17.166824] rockchip-pm-domain fdd90000.power-management:power-controller: sync_state() pending due to fdee0000.video-codec
[ 17.167821] rockchip-pm-domain fdd90000.power-management:power-controller: sync_state() pending due to fe040000.vop
[ 17.168757] rockchip-pm-domain fdd90000.power-management:power-controller: sync_state() pending due to fe0a0000.hdmi
[ 17.169795] rockchip-pm-domain fdd90000.power-management:power-controller: sync_state() pending due to 3c0000000.pcie
rock-3b login: radxa
Password:
Linux rock-3b 7.1.0-rc6-chaoyi-00011-ga31e2e6fae27 #5 SMP PREEMPT Tue Jun 9 12:40:22 CEST 2026 aarch64
The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Jun 9 12:55:51 CEST 2026 on ttyS2
^[[?2004hradxa@rock-3b:~$ ^[[7mlsmod | grep rocket^[[27m\r^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[Clsmod | grep rocket
^[[?2004l\r^[[01;31m^[[Krocket^[[m^[[K 24576 0
^[[?2004hradxa@rock-3b:~$ ^[[7msudo dmesg -C; python3 ~/npu-debug/teflon_test.py^[[27m\r^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[C^[[Csudo dmesg -C; python3 ~/npu-debug/teflon_test.py
^[[?2004l\rInput: [ 1 80 80 16] <class 'numpy.uint8'>
Output: [ 1 40 40 128] <class 'numpy.uint8'>
[ 136.899509] rocket fde40000.npu: NPU job timed out
Run 0: elapsed=529.6ms out_sum=26214400
[ 137.443518] rocket fde40000.npu: NPU job timed out
Run 1: elapsed=538.0ms out_sum=26214400
[ 137.987451] rocket fde40000.npu: NPU job timed out
Run 2: elapsed=543.3ms out_sum=26214400
[ 138.531447] rocket fde40000.npu: NPU job timed out
Run 3: elapsed=540.3ms out_sum=26214400
[ 139.075418] rocket fde40000.npu: NPU job timed out
Run 4: elapsed=541.1ms out_sum=26214400
Done
^[[?2004hradxa@rock-3b:~$
^ permalink raw reply
* Re: [GIT PULL] aspeed: First batch of driver changes for v7.2
From: Krzysztof Kozlowski @ 2026-06-09 12:05 UTC (permalink / raw)
To: Andrew Jeffery
Cc: soc, linux-arm-kernel, linux-aspeed, linux-kernel, Joel Stanley
In-Reply-To: <6b6b592163523beea48e875a047afc8b4bdbb00b.camel@codeconstruct.com.au>
On Wed, Jun 03, 2026 at 11:15:25AM +0930, Andrew Jeffery wrote:
> The following changes since commit 254f49634ee16a731174d2ae34bc50bd5f45e731:
>
> Linux 7.1-rc1 (2026-04-26 14:19:00 -0700)
>
> are available in the Git repository at:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/bmc/linux.git tags/aspeed-7.2-drivers-0
>
> for you to fetch changes up to bc13f14f5cd3d15054de38dc1232b49343d36297:
>
> soc: aspeed: cleanup dead default for ASPEED_SOCINFO (2026-06-03 10:47:55 +0930)
>
Thanks, applied
Best regards,
Krzysztof
^ permalink raw reply
* Re: [PATCHv2] arm64/entry: Fix arm64-specific rseq brokenness
From: Mathias Stearn @ 2026-06-09 12:04 UTC (permalink / raw)
To: Jinjie Ruan
Cc: Mark Rutland, linux-arm-kernel, Catalin Marinas, Peter Zijlstra,
Thomas Gleixner, Will Deacon, ckennelly, dvyukov, linux-kernel,
mathieu.desnoyers
In-Reply-To: <54ffcf73-dfc5-417c-b9d5-6dee551f8d39@huawei.com>
Did the arm64-specific fix to rseq not get backportted to 7.0? We just
ran our test suite against 7.0.10 which has the other rseq fixes and
everything was fine on x86_64, but arm64 was frequently segfaulting.
I had an AI agent look into this and it reported:
"""
The fix (commits b9eac6a9d93c, 82f572449cfe, 99428157dcf3,
411c1cf43039) first appeared in v7.1-rc1 and will be included in
v7.1.0.
The three commits backported to linux-7.0.y:
- 663121edad54 — "rseq: Revert to historical performance killing behaviour"
- d242126fd21a — "rseq: Implement read only ABI enforcement for
optimized RSEQ V2 mode"
- fb742945d61a — "rseq: Reenable performance optimizations conditionally"
The arm64-specific fix (411c1cf43039 "arm64/entry: Fix arm64-specific
rseq brokenness") was not backported to any stable branch — it will
only appear in v7.1.0.
"""
Is it possible to get 411c1cf43039 backported to 7.0 or was it omitted
intentionally?
^ permalink raw reply
* Re: [GIT PULL] amlogic ARM64 DT updates for v7.2 take 1
From: Krzysztof Kozlowski @ 2026-06-09 12:02 UTC (permalink / raw)
To: Neil Armstrong; +Cc: soc, arm, linux-amlogic, linux-arm-kernel
In-Reply-To: <9d4694cb-f596-4538-a437-6f2fbb6304f4@linaro.org>
On Tue, Jun 02, 2026 at 09:52:55AM +0200, Neil Armstrong wrote:
> Hi,
>
> Here's the v2 of Amlogic ARM64 DT changes for v7.2, contains improvements for the Khadas VIM4
> and VIM1s SBCs, plus some additions for the Phicomm N1 and a couple of low priority fixes.
>
> A bad "Fixes" commit sha was introduced for a commit in the same PR, I squashed it with the
> appropriate commit and dropped the previous tag.
>
> This PR is largely the same as `amlogic-arm64-dt-for-v7.1`, but I sent the fixes
> separately as `amlogic-fixes-v7.1-rc` as discussed with Arnd, so this tag
> `amlogic-arm64-dt-for-v7.2-v1` is based on top of `amlogic-fixes-v7.1-rc`.
>
> Thanks,
> Neil
>
> The following changes since commit 174a0ef3b33434f475c87e66f37980e39b73805a:
>
> arm64: dts: meson-gxl-p230: fix ethernet PHY interrupt number (2026-04-21 15:46:29 +0200)
>
> are available in the Git repository at:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/amlogic/linux.git tags/amlogic-arm64-dt-for-v7.2-v2
>
> for you to fetch changes up to eec0722a5cac08ba995847c8eb63118cc708560b:
>
> arm64: dts: amlogic: t7: Add i2c pinctrl node (2026-06-02 09:49:46 +0200)
>
Thanks, applied
Best regards,
Krzysztof
^ permalink raw reply
* Re: [PATCH v8 2/5] thermal: samsung: Add Exynos ACPM TMU driver GS101
From: André Draszik @ 2026-06-09 11:51 UTC (permalink / raw)
To: Tudor Ambarus, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartlomiej Zolnierkiewicz, Krzysztof Kozlowski, Kees Cook,
Gustavo A. R. Silva, Peter Griffin, Alim Akhtar
Cc: jyescas, linux-kernel, linux-samsung-soc, linux-pm, devicetree,
linux-hardening, linux-arm-kernel, Krzysztof Kozlowski
In-Reply-To: <20260603-acpm-tmu-v8-2-0f1810a356e6@linaro.org>
On Wed, 2026-06-03 at 13:00 +0000, Tudor Ambarus wrote:
> Add driver for the Thermal Management Unit (TMU) managed via the Alive
> Clock and Power Manager (ACPM), found on Samsung Exynos SoCs such as
> the Google GS101.
>
> The TMU on the GS101 utilizes a hybrid management model shared between
> the Application Processor (AP) and the ACPM firmware. The driver
> maintains direct memory-mapped access to the TMU interrupt pending
> registers to identify thermal events, while delegating functional
> tasks - such as sensor initialization, threshold configuration, and
> temperature acquisition, to the ACPM firmware via the ACPM IPC
> protocol.
>
> Signed-off-by: Tudor Ambarus <tudor.ambarus@linaro.org>
> Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>
> ---
> drivers/thermal/samsung/Kconfig | 19 ++
> drivers/thermal/samsung/Makefile | 2 +
> drivers/thermal/samsung/acpm-tmu.c | 651 +++++++++++++++++++++++++++++++++++++
> 3 files changed, 672 insertions(+)
>
> diff --git a/drivers/thermal/samsung/Kconfig b/drivers/thermal/samsung/Kconfig
> index f4eff5a41a84..bf9fb52e848e 100644
> --- a/drivers/thermal/samsung/Kconfig
> +++ b/drivers/thermal/samsung/Kconfig
> @@ -9,3 +9,22 @@ config EXYNOS_THERMAL
> the TMU, reports temperature and handles cooling action if defined.
> This driver uses the Exynos core thermal APIs and TMU configuration
> data from the supported SoCs.
> +
> +config EXYNOS_ACPM_THERMAL
> + tristate "Exynos ACPM thermal management unit driver"
> + depends on THERMAL_OF
> + depends on HAS_IOMEM
> + depends on EXYNOS_ACPM_PROTOCOL
> + default ARCH_EXYNOS
> + help
> + Support for the Thermal Management Unit (TMU) on Samsung Exynos SoCs
> + utilizing the ACPM IPC protocol, such as the Google GS101.
> +
> + The TMU on these platforms is managed through a hybrid architecture.
> + This driver handles direct register access for thermal interrupt status
> + monitoring and communicates with the Alive Clock and Power Manager
> + (ACPM) firmware via the ACPM IPC protocol for functional sensor control
> + and configuration.
> +
> + Select this if you want to monitor device temperature and enable
> + thermal mitigation on Samsung Exynos ACPM based devices.
If you're sending a new version, it might make sense to add a brief
clarification to the existing CONFIG_EXYNOS_THERMAL in that it only
supports (the older?) non-ACPM designs.
In any case:
Reviewed-by: André Draszik <andre.draszik@linaro.org>
^ permalink raw reply
* Re: [GIT PULL] Allwinner DT Changes for 7.2
From: Krzysztof Kozlowski @ 2026-06-09 11:51 UTC (permalink / raw)
To: wens
Cc: soc, Jernej Skrabec, Samuel Holland, linux-sunxi,
linux-arm-kernel, Stephen Boyd
In-Reply-To: <CAGb2v64guguXmg-=WYmZyz=rw3PNRvh+TnEE1yWFz=AJbryssw@mail.gmail.com>
On 09/06/2026 13:48, Chen-Yu Tsai wrote:
> On Tue, Jun 9, 2026 at 8:43 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
>>
>> On Tue, Jun 02, 2026 at 03:09:52AM +0800, Chen-Yu Tsai wrote:
>>> The following changes since commit 254f49634ee16a731174d2ae34bc50bd5f45e731:
>>>
>>> Linux 7.1-rc1 (2026-04-26 14:19:00 -0700)
>>>
>>> are available in the Git repository at:
>>>
>>> https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git tags/sunxi-dt-for-7.2
>>>
>>> for you to fetch changes up to 44cf19e41c769720750dbb8752aca75c247e565f:
>>>
>>> arm64: dts: allwinner: a523: add gpadc node (2026-05-25 05:02:58 +0800)
>>>
>>>
>>> As mentioned in the tag, this pull request contains a change that should
>>> be shared between the soc and clk trees. However since I don't have any
>>> clk changes to send this cycle, I think it can just go through the soc
>>> tree without any issues.
>>
>> But the clock driver change cannot be in the DTS branch. This should go
>> via clock tree even if it is one change. And definitely not via DTS
>> branch.
>
> It is a shared change, because it moves two symbols from the driver's
> private header to the public DT binding header. I don't see how this
> can go through just the clk tree when one of the subsequent patches
> uses those new symbols.
>
> "clk: sunxi-ng: v3s: Export MBUS and DRAM clocks to the public header"
> is needed by "ARM: dts: sun8i: v3s: Add mbus node to represent the
> interconnect".
>
> The other way to go about this is to use raw numbers first, then
> another patch in the next cycle to switch the numbers to actual
> macros. IMHO not worth the churn and headache.
You can have a duplicated define.
Best regards,
Krzysztof
^ permalink raw reply
* Re: [GIT PULL] Allwinner DT Changes for 7.2
From: Chen-Yu Tsai @ 2026-06-09 11:48 UTC (permalink / raw)
To: Krzysztof Kozlowski
Cc: soc, Jernej Skrabec, Samuel Holland, linux-sunxi,
linux-arm-kernel, Stephen Boyd
In-Reply-To: <20260609-mighty-excellent-shoebill-04d7fa@quoll>
On Tue, Jun 9, 2026 at 8:43 PM Krzysztof Kozlowski <krzk@kernel.org> wrote:
>
> On Tue, Jun 02, 2026 at 03:09:52AM +0800, Chen-Yu Tsai wrote:
> > The following changes since commit 254f49634ee16a731174d2ae34bc50bd5f45e731:
> >
> > Linux 7.1-rc1 (2026-04-26 14:19:00 -0700)
> >
> > are available in the Git repository at:
> >
> > https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git tags/sunxi-dt-for-7.2
> >
> > for you to fetch changes up to 44cf19e41c769720750dbb8752aca75c247e565f:
> >
> > arm64: dts: allwinner: a523: add gpadc node (2026-05-25 05:02:58 +0800)
> >
> >
> > As mentioned in the tag, this pull request contains a change that should
> > be shared between the soc and clk trees. However since I don't have any
> > clk changes to send this cycle, I think it can just go through the soc
> > tree without any issues.
>
> But the clock driver change cannot be in the DTS branch. This should go
> via clock tree even if it is one change. And definitely not via DTS
> branch.
It is a shared change, because it moves two symbols from the driver's
private header to the public DT binding header. I don't see how this
can go through just the clk tree when one of the subsequent patches
uses those new symbols.
"clk: sunxi-ng: v3s: Export MBUS and DRAM clocks to the public header"
is needed by "ARM: dts: sun8i: v3s: Add mbus node to represent the
interconnect".
The other way to go about this is to use raw numbers first, then
another patch in the next cycle to switch the numbers to actual
macros. IMHO not worth the churn and headache.
ChenYu
^ permalink raw reply
* Re: [PATCH v8 4/5] arm64: dts: exynos: gs101: Add thermal management unit
From: André Draszik @ 2026-06-09 11:44 UTC (permalink / raw)
To: Tudor Ambarus, Rafael J. Wysocki, Daniel Lezcano, Zhang Rui,
Lukasz Luba, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Bartlomiej Zolnierkiewicz, Krzysztof Kozlowski, Kees Cook,
Gustavo A. R. Silva, Peter Griffin, Alim Akhtar
Cc: jyescas, linux-kernel, linux-samsung-soc, linux-pm, devicetree,
linux-hardening, linux-arm-kernel
In-Reply-To: <20260603-acpm-tmu-v8-4-0f1810a356e6@linaro.org>
Hi Tudor,
On Wed, 2026-06-03 at 13:00 +0000, Tudor Ambarus wrote:
>
> [...]
>
> diff --git a/arch/arm64/boot/dts/exynos/google/gs101.dtsi b/arch/arm64/boot/dts/exynos/google/gs101.dtsi
> index 86933f22647b..b6866ef99fb3 100644
> --- a/arch/arm64/boot/dts/exynos/google/gs101.dtsi
> +++ b/arch/arm64/boot/dts/exynos/google/gs101.dtsi
>
> [...]
>
> @@ -639,6 +647,15 @@ watchdog_cl1: watchdog@10070000 {
> status = "disabled";
> };
>
> + tmu_top: thermal-sensor@100a0000 {
> + compatible = "google,gs101-tmu-top";
> + reg = <0x100a0000 0x800>;
> + clocks = <&cmu_misc CLK_GOUT_MISC_TMU_TOP_PCLK>;
> + interrupts = <GIC_SPI 769 IRQ_TYPE_LEVEL_HIGH 0>;
> + samsung,acpm-ipc = <&acpm_ipc>;
> + #thermal-sensor-cells = <1>;
Vendor-specific properties should always come after generic ones
(samsung,... to move to end here).
Cheers,
Andre'
^ permalink raw reply
* Re: [GIT PULL] Allwinner DT Changes for 7.2
From: Krzysztof Kozlowski @ 2026-06-09 11:43 UTC (permalink / raw)
To: Chen-Yu Tsai
Cc: soc, Jernej Skrabec, Samuel Holland, linux-sunxi,
linux-arm-kernel, Stephen Boyd
In-Reply-To: <ah3ZAPLzh8ORGmpH@home.wens.tw>
On Tue, Jun 02, 2026 at 03:09:52AM +0800, Chen-Yu Tsai wrote:
> The following changes since commit 254f49634ee16a731174d2ae34bc50bd5f45e731:
>
> Linux 7.1-rc1 (2026-04-26 14:19:00 -0700)
>
> are available in the Git repository at:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/sunxi/linux.git tags/sunxi-dt-for-7.2
>
> for you to fetch changes up to 44cf19e41c769720750dbb8752aca75c247e565f:
>
> arm64: dts: allwinner: a523: add gpadc node (2026-05-25 05:02:58 +0800)
>
>
> As mentioned in the tag, this pull request contains a change that should
> be shared between the soc and clk trees. However since I don't have any
> clk changes to send this cycle, I think it can just go through the soc
> tree without any issues.
But the clock driver change cannot be in the DTS branch. This should go
via clock tree even if it is one change. And definitely not via DTS
branch.
Best regards,
Krzysztof
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox