Commit graph

1,447,411 commits

Author SHA1 Message Date
Gary Guo
9b89cea111 gpu: nova-core: remove imports available via prelude
These imports are already in scope by importing `kernel::prelude::*` and
does not need to be imported separately.

Signed-off-by: Gary Guo <gary@garyguo.net>
Acked-by: Danilo Krummrich <dakr@kernel.org>
Link: https://patch.msgid.link/20260123172007.136873-2-gary@garyguo.net
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
2026-01-30 02:42:42 +01:00
Andre Carvalho
b3827c91cc netconsole: selftests: Move netconsole selftests to separate target
This patch moves netconsole selftests from drivers/net to its own target
in drivers/net/netconsole.

This change helps saving some resources from CI since tests in
drivers/net automatically run against real hardware which are not used
by netconsole tests as they rely solely on netdevsim.

lib_netcons.sh is kept under drivers/net/lib since it is also used by
bonding selftests. Finally, drivers/net config remains unchanged as
netpoll_basic.py requires netconsole (and does leverage real HW testing).

Reviewed-by: Breno Leitao <leitao@debian.org>
Signed-off-by: Andre Carvalho <asantostc@gmail.com>
Link: https://patch.msgid.link/20260127-netcons-selftest-target-v2-1-f509ab65b3bc@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-01-29 17:30:48 -08:00
Jakub Kicinski
a010fe8d86 Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Cross-merge networking fixes after downstream PR (net-6.19-rc8).

No adjacent changes, conflicts:

drivers/net/ethernet/spacemit/k1_emac.c
  2c84959167 ("net: spacemit: Check for netif_carrier_ok() in emac_stats_update()")
  f66086798f ("net: spacemit: Remove broken flow control support")
https://lore.kernel.org/aXjAqZA3iEWD_DGM@sirena.org.uk

Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-01-29 17:28:54 -08:00
Jakub Kicinski
37d312bf95 MAINTAINERS: add an entry for PSP
We are missing a MAINTAINERS entry for PSP, create one.

Acked-by: Willem de Bruijn <willemb@google.com>
Link: https://patch.msgid.link/20260128210435.161061-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-01-29 17:26:27 -08:00
Jakub Kicinski
7227e984c3 bluetooth-next pull request for net-next:
core:
  - L2CAP: Add support for setting BT_PHY
  - HCI: Add LE Channel Sounding HCI Command/event structures
  - hci_conn: Set link_policy on incoming ACL connections
  - MGMT: Add idle_timeout to configurable system parameters
 
 drivers:
  - btusb: Add support for MediaTek7920 0489:e158
  - btusb: Add device ID for Realtek RTL8761BU
  - btusb: Reject autosuspend if discovery is active
  - btusb: Add new VID/PID for RTL8852CE
  - btusb: Add USB ID 0489:e112 for Realtek 8851BE
  - dt-bindings: qcom: Split to separate schema
  - btqca: Add WCN6855 firmware priority selection feature
 -----BEGIN PGP SIGNATURE-----
 
 iQJNBAABCgA3FiEE7E6oRXp8w05ovYr/9JCA4xAyCykFAml7xEwZHGx1aXoudm9u
 LmRlbnR6QGludGVsLmNvbQAKCRD0kIDjEDILKZAnEACBXUlzYey49zIwVh/nExcS
 0HD1qDl7i6RpgeDeTGbGNiHk5IiS79GJbFar7KbxdbWHozPos21kAu0tZxDsC2w+
 KahxU1n3xHucO3YlXJh05W1SM3FLcHKM6o6Ib1+oycNAbWvfPMaYcG+vM34PBncM
 qoTeb8U8f3nI6P92SSJxIr1Dnj4pzOuNifWZoPP/51jRHeZdqICdFSvrK9OsgQZi
 dVyg+NIVgJav2q8BwnU8TAN6dmES9fnMEP8RDKDXH5IyKNG5eUdUEbceVj51+IUj
 t7B7XyPmYhIR37CKidxKh09HXNSZ+IGKiIX3c9Jl0PoUKzyisiXp6tQxcp0Vo54+
 IU9kZTMrI3MsWFh42PcHy1WBmBUxoHuy0y0+dMQ6xD1vOKI2z6yt07gxd4LIRZgZ
 QTwrUExrteobnxhqWjiDrtLf4ZqRg57Vgyu4Y0klf60MaHFiKoxVOLT9OCZ0mxsA
 fgoonLSvBJtRhl7lEUO/+p1enDvywVeZD9ygPFFuDSbM1TCOL116BVk5sHWZdQjD
 K5i2zr80b4YYiMrkX+7bHbxgX/aEVeMQHFkyvSutrqQql8oCmsqB4rIx0LKPtZX+
 lbixt6dR7MeCmcRgtPEmKUbG3vnt+1+NYziuAc1PtqvSxv4vfYjUOP/yZ0dpmsGk
 RPEObC9dq1rv564g586Dvw==
 =I+rw
 -----END PGP SIGNATURE-----

Merge tag 'for-net-next-2026-01-29' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next

Luiz Augusto von Dentz says:

====================
bluetooth-next pull request for net-next:

core:
 - L2CAP: Add support for setting BT_PHY
 - HCI: Add LE Channel Sounding HCI Command/event structures
 - hci_conn: Set link_policy on incoming ACL connections
 - MGMT: Add idle_timeout to configurable system parameters

drivers:
 - btusb: Add support for MediaTek7920 0489:e158
 - btusb: Add device ID for Realtek RTL8761BU
 - btusb: Reject autosuspend if discovery is active
 - btusb: Add new VID/PID for RTL8852CE
 - btusb: Add USB ID 0489:e112 for Realtek 8851BE
 - dt-bindings: qcom: Split to separate schema
 - btqca: Add WCN6855 firmware priority selection feature

* tag 'for-net-next-2026-01-29' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next: (40 commits)
  Bluetooth: hci_qca: Enable HFP hardware offload for WCN6855 and WCN7850
  Bluetooth: hci_qca: Refactor HFP hardware offload capability handling
  Bluetooth: btusb: Add USB ID 7392:e611 for Edimax EW-7611UXB
  Bluetooth: L2CAP: Fix not tracking outstanding TX ident
  Bluetooth: MGMT: Fix memory leak in set_ssp_complete
  Bluetooth: hci_uart: fix null-ptr-deref in hci_uart_write_work
  Bluetooth: btusb: Remove duplicate entry for 0x13d3/0x3618
  Bluetooth: btusb: Add device ID for Realtek RTL8761BU
  Bluetooth: btintel: Remove unneeded CONFIG_PM* #ifdef's
  Bluetooth: btnxpuart: Remove unneeded CONFIG_PM ifdef
  Bluetooth: btusb: Add new VID/PID for RTL8852CE
  Bluetooth: btintel_pcie: Remove unnecessary check before kfree_skb()
  Bluetooth: btusb: Reject autosuspend if discovery is active
  Bluetooth: hci_core: Export hci_discovery_active
  Bluetooth: btusb: Use pm_ptr instead of #ifdef CONFIG_PM
  dt-bindings: bluetooth: qcom,wcn7850-bt: Deprecate old supplies
  dt-bindings: bluetooth: qcom,wcn7850-bt: Split to separate schema
  dt-bindings: bluetooth: qcom,wcn6855-bt: Deprecate old supplies
  dt-bindings: bluetooth: qcom,wcn6855-bt: Split to separate schema
  dt-bindings: bluetooth: qcom,wcn6750-bt: Deprecate old supplies
  ...
====================

Link: https://patch.msgid.link/20260129203610.963067-1-luiz.dentz@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2026-01-29 17:22:35 -08:00
Dave Airlie
016bf66866 amd-drm-fixes-6.19-2026-01-29:
amdgpu:
 - SMU 13 fixes
 - SMU 14 fixes
 - GPUVM fault filter fix
 - Powergating fix
 - HDMI debounce fix
 - Xclk fix for soc21 APUs
 - Fix COND_EXEC handling for GC 11
 - GC 10-12 KGQ init fixes
 - GC 11-12 KGQ reset fixes
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQQgO5Idg2tXNTSZAr293/aFa7yZ2AUCaXvKlQAKCRC93/aFa7yZ
 2KljAP94YzUJFMrUyeWw/8HcNkXju8bl/LtCw2UPBhn79e9H3wEA3MbVjNgqrH2Y
 OpeyB0IpVfbWxC8HFIULYeLiYSYK+gc=
 =AS9D
 -----END PGP SIGNATURE-----

Merge tag 'amd-drm-fixes-6.19-2026-01-29' of https://gitlab.freedesktop.org/agd5f/linux into drm-fixes

amd-drm-fixes-6.19-2026-01-29:

amdgpu:
- SMU 13 fixes
- SMU 14 fixes
- GPUVM fault filter fix
- Powergating fix
- HDMI debounce fix
- Xclk fix for soc21 APUs
- Fix COND_EXEC handling for GC 11
- GC 10-12 KGQ init fixes
- GC 11-12 KGQ reset fixes

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patch.msgid.link/20260129212518.22274-1-alexander.deucher@amd.com
2026-01-30 10:45:55 +10:00
Michal Suchanek
76c73cfde7
kbuild: dummy-tools: Add python3
DRM_MSM_VALIDATE_XML depends on a python feature. Add a dummy python
interpreter to make it possible to configure this option with dummy
tools.

Fixes: b587f413ca ("drm/msm/gen_header: allow skipping the validation")
Signed-off-by: Michal Suchanek <msuchanek@suse.de>
Acked-by: Rob Clark <robin.clark@oss.qualcomm.com>
Link: https://patch.msgid.link/20260121105801.1827-1-msuchanek@suse.de
[nathan: Remove empty shell comment line]
Signed-off-by: Nathan Chancellor <nathan@kernel.org>
2026-01-29 17:12:13 -07:00
Tamir Duberstein
844590b439 rust: clk: replace kernel::c_str! with C-Strings
C-String literals were added in Rust 1.77. Replace instances of
`kernel::c_str!` with C-String literals where possible.

Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Reviewed-by: Benno Lossin <lossin@kernel.org>
Acked-by: Stephen Boyd <sboyd@kernel.org>
Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Tamir Duberstein <tamird@gmail.com>
Reviewed-by: Daniel Almeida <daniel.almeida@collabora.com>
Link: https://patch.msgid.link/20251222-cstr-clk-v1-1-ef0687717aa1@gmail.com
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
2026-01-30 01:08:24 +01:00
Boqun Feng
1e37f6f949 MAINTAINERS: Update my email address to @kernel.org
I had issues using my gmail account multiple times this week, hence
switch to @kernel.org.

Signed-off-by: Boqun Feng <boqun@kernel.org>
Reviewed-by: Paul E. McKenney <paulmck@kernel.org>
Acked-by: Gary Guo <gary@garyguo.net>
Acked-by: Kunwu Chan <kunwu.chan@linux.dev>
Link: https://patch.msgid.link/20260129004520.62697-1-boqun@kernel.org
[ Sorted alphabetically in mailmap. Removed Cc tag list. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
2026-01-30 01:07:33 +01:00
Stefano Stabellini
ce8ded2e61 9p/xen: protect xen_9pfs_front_free against concurrent calls
The xenwatch thread can race with other back-end change notifications
and call xen_9pfs_front_free() twice, hitting the observed general
protection fault due to a double-free. Guard the teardown path so only
one caller can release the front-end state at a time, preventing the
crash.

This is a fix for the following double-free:

[   27.052347] Oops: general protection fault, probably for non-canonical address 0x6b6b6b6b6b6b6b6b: 0000 [#1] SMP DEBUG_PAGEALLOC NOPTI
[   27.052357] CPU: 0 UID: 0 PID: 32 Comm: xenwatch Not tainted 6.18.0-02087-g51ab33fc0a8b-dirty #60 PREEMPT(none)
[   27.052363] RIP: e030:xen_9pfs_front_free+0x1d/0x150
[   27.052368] Code: 90 90 90 90 90 90 90 90 90 90 90 90 90 41 55 41 54 55 48 89 fd 48 c7 c7 48 d0 92 85 53 e8 cb cb 05 00 48 8b 45 08 48 8b 55 00 <48> 3b 28 0f 85 f9 28 35 fe 48 3b 6a 08 0f 85 ef 28 35 fe 48 89 42
[   27.052377] RSP: e02b:ffffc9004016fdd0 EFLAGS: 00010246
[   27.052381] RAX: 6b6b6b6b6b6b6b6b RBX: ffff88800d66e400 RCX: 0000000000000000
[   27.052385] RDX: 6b6b6b6b6b6b6b6b RSI: 0000000000000000 RDI: 0000000000000000
[   27.052389] RBP: ffff88800a887040 R08: 0000000000000000 R09: 0000000000000000
[   27.052393] R10: 0000000000000000 R11: 0000000000000000 R12: ffff888009e46b68
[   27.052397] R13: 0000000000000200 R14: 0000000000000000 R15: ffff88800a887040
[   27.052404] FS:  0000000000000000(0000) GS:ffff88808ca57000(0000) knlGS:0000000000000000
[   27.052408] CS:  e030 DS: 0000 ES: 0000 CR0: 0000000080050033
[   27.052412] CR2: 00007f9714004360 CR3: 0000000004834000 CR4: 0000000000050660
[   27.052418] Call Trace:
[   27.052420]  <TASK>
[   27.052422]  xen_9pfs_front_changed+0x5d5/0x720
[   27.052426]  ? xenbus_otherend_changed+0x72/0x140
[   27.052430]  ? __pfx_xenwatch_thread+0x10/0x10
[   27.052434]  xenwatch_thread+0x94/0x1c0
[   27.052438]  ? __pfx_autoremove_wake_function+0x10/0x10
[   27.052442]  kthread+0xf8/0x240
[   27.052445]  ? __pfx_kthread+0x10/0x10
[   27.052449]  ? __pfx_kthread+0x10/0x10
[   27.052452]  ret_from_fork+0x16b/0x1a0
[   27.052456]  ? __pfx_kthread+0x10/0x10
[   27.052459]  ret_from_fork_asm+0x1a/0x30
[   27.052463]  </TASK>
[   27.052465] Modules linked in:
[   27.052471] ---[ end trace 0000000000000000 ]---

Signed-off-by: Stefano Stabellini <stefano.stabellini@amd.com>
Message-ID: <20260129230348.2390470-1-stefano.stabellini@amd.com>
Signed-off-by: Dominique Martinet <asmadeus@codewreck.org>
2026-01-29 23:48:33 +00:00
Koichiro Den
c17b9046fa selftests: pci_endpoint: Add BAR subrange mapping test case
Add BAR_SUBRANGE_TEST to the pci_endpoint kselftest suite.

The test uses the PCITEST_BAR_SUBRANGE ioctl and will skip when the
chosen BAR is disabled (-ENODATA), when the endpoint/controller does not
support subrange mapping (-EOPNOTSUPP), or when the BAR is reserved for
the test register space (-EBUSY).

Signed-off-by: Koichiro Den <den@valinux.co.jp>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://patch.msgid.link/20260124145012.2794108-9-den@valinux.co.jp
2026-01-29 17:42:37 -06:00
Koichiro Den
8cf82bb558 misc: pci_endpoint_test: Add BAR subrange mapping test case
Add a new PCITEST_BAR_SUBRANGE ioctl to exercise EPC BAR subrange
mapping end-to-end.

The test programs a simple 2-subrange layout on the endpoint (via
pci-epf-test) and verifies that:
  - the endpoint-provided per-subrange signature bytes are observed at
    the expected PCIe BAR offsets, and
  - writes to each subrange are routed to the correct backing region
    (i.e. the submap order is applied rather than accidentally working
    due to an identity mapping).

Return -EOPNOTSUPP when the endpoint does not advertise subrange
mapping, -ENODATA when the BAR is disabled, and -EBUSY when the BAR is
reserved for the test register space.

Signed-off-by: Koichiro Den <den@valinux.co.jp>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://patch.msgid.link/20260124145012.2794108-8-den@valinux.co.jp
2026-01-29 17:42:29 -06:00
Koichiro Den
6c5e610142 PCI: endpoint: pci-epf-test: Add BAR subrange mapping test support
Extend pci-epf-test so that pci_endpoint_test can exercise BAR subrange
mapping end-to-end.

Add BAR_SUBRANGE_SETUP/CLEAR commands that program (and tear down) a
simple 2-subrange layout for a selected BAR. The endpoint deliberately
permutes the physical backing regions (swap the halves) and writes a
deterministic signature byte per subrange. This allows the RC to verify
that the submap order is actually applied, not just that reads/writes
work with an identity mapping.

Advertise CAP_SUBRANGE_MAPPING only when the underlying EPC supports
dynamic_inbound_mapping and subrange_mapping. Also bump the default BAR
sizes (BAR0-4) to 128 KiB so that split subranges are large enough to
satisfy common inbound-translation alignment constraints. E.g. for DWC
EP, the default and maximum CX_ATU_MIN_REGION_SIZE is 64 kB, so 128 KiB
is sufficient for DWC-based EP platforms for 2-subrange testing.

Signed-off-by: Koichiro Den <den@valinux.co.jp>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://patch.msgid.link/20260124145012.2794108-7-den@valinux.co.jp
2026-01-29 17:42:21 -06:00
Koichiro Den
dd3ce1667a Documentation: PCI: endpoint: Clarify pci_epc_set_bar() usage
The current documentation implies that pci_epc_set_bar() is only used
before the host enumerates the endpoint.

In practice, some Endpoint Controllers support calling pci_epc_set_bar()
multiple times for the same BAR (without clearing it) in order to update
inbound address translations after the host has programmed the BAR base
address, which some Endpoint Functions such as vNTB already rely on.
Add document text for that.

Also document the expected call flow for BAR subrange mapping
(pci_epf_bar.num_submap / pci_epf_bar.submap), which may require a
second pci_epc_set_bar() call after the host has programmed the BAR base
address.

Signed-off-by: Koichiro Den <den@valinux.co.jp>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Link: https://patch.msgid.link/20260124145012.2794108-6-den@valinux.co.jp
2026-01-29 17:42:14 -06:00
Koichiro Den
cc839bef77 PCI: dwc: ep: Support BAR subrange inbound mapping via Address Match Mode iATU
Extend dw_pcie_ep_set_bar() to support inbound mappings for BAR
subranges using Address Match Mode IB iATU when pci_epf_bar.num_submap
is non-zero.

Rename the existing BAR-match helper into dw_pcie_ep_ib_atu_bar() and
introduce dw_pcie_ep_ib_atu_addr() for Address Match Mode. When
num_submap is non-zero, read the assigned BAR base address and program
one inbound iATU window per subrange. Validate the submap array before
programming:
- each subrange is aligned to pci->region_align
- subranges cover the whole BAR (no gaps and no overlaps)

Track Address Match Mode mappings and tear them down on clear_bar() and
on set_bar() error paths to avoid leaving half-programmed state or
untranslated BAR holes.

Advertise this capability by extending the common feature bit
initializer macro (DWC_EPC_COMMON_FEATURES).

This enables multiple inbound windows within a single BAR, which is
useful on platforms where usable BARs are scarce but EPFs need multiple
inbound regions.

Signed-off-by: Koichiro Den <den@valinux.co.jp>
Signed-off-by: Manivannan Sadhasivam <mani@kernel.org>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
Link: https://patch.msgid.link/20260124145012.2794108-5-den@valinux.co.jp
2026-01-29 17:42:01 -06:00
Dave Airlie
190eaa45bb Driver Changes:
- Skip address copy for sync-only execs (Lin)
 - Fix a WA (Tvrtko)
 - Derive mem_copy cap from graphics version (Nitin)
 - Fix is_bound() pci_dev lifetime (Lin)
 - xe nvm cleanup fixes (Lin)
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYKAB0WIQRskUM7w1oG5rx2IZO4FpNVCsYGvwUCaXu+YwAKCRC4FpNVCsYG
 v2UjAQDjZA/buxRS34ZqxeRXMI7DeQ1hYxjIHPpr78B2ctUSagEA4hmx6WqIqx2X
 Wu20OYSAUxuB14pdHPl/vMBQOHir/wE=
 =neEs
 -----END PGP SIGNATURE-----

Merge tag 'drm-xe-fixes-2026-01-29' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes

Driver Changes:
- Skip address copy for sync-only execs (Lin)
- Fix a WA (Tvrtko)
- Derive mem_copy cap from graphics version (Nitin)
- Fix is_bound() pci_dev lifetime (Lin)
- xe nvm cleanup fixes (Lin)

Signed-off-by: Dave Airlie <airlied@redhat.com>

From: Thomas Hellstrom <thomas.hellstrom@linux.intel.com>
Link: https://patch.msgid.link/aXu_JzBFb9YVFYW1@fedora
2026-01-30 09:35:43 +10:00
Linus Torvalds
4d31079726 Power management fix for 6.19-rc8
Add a terminating NULL entry to an of_device_id table in the
 qcom-nvmem cpufreq driver to avoid out-of-bounds access (Pei Xiao).
 -----BEGIN PGP SIGNATURE-----
 
 iQFGBAABCAAwFiEEcM8Aw/RY0dgsiRUR7l+9nS/U47UFAml7wzISHHJqd0Byand5
 c29ja2kubmV0AAoJEO5fvZ0v1OO1WqoIAIP7c9NCTqGsB8JpjQ4nF557X32SibMC
 1Lq/KlOEFIKdnqGY88B1d+ZiVIloEuEvVWeI/lSEywrNqHyAY1KTjf6BLzqtte8q
 fcxb4pxAZdkBlhHEOMTCaROn/0/pKG+LTjO5uq+M/WGo7q98ohw4I7ocs3T7sR4K
 RbhcvgPgXHHNNzLIfClTSoAty9dzyqRM65AKx+CKM3oe0IdkePJ1Gakv8IziWVBZ
 33Eb3kco5BPPhNSapd7zyc4rYlyEmLIFO1TaU9c2nyQ5Yafp+et7jhH4lxF6iwPm
 aIRcfB6XzSwpFMnA8zhbUvvoM+QyB+vnQJyaagLIf9+NM/HeQG42jRY=
 =cchS
 -----END PGP SIGNATURE-----

Merge tag 'pm-6.19-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm

Pull power management fix from Rafael Wysocki:
 "This adds a terminating NULL entry to an of_device_id table in the
  qcom-nvmem cpufreq driver to avoid out-of-bounds access (Pei Xiao)"

* tag 'pm-6.19-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
  cpufreq: qcom-nvmem: add sentinel to qcom_cpufreq_ipq806x_match_list
2026-01-29 15:20:22 -08:00
Thomas Gleixner
37f9d5026c genirq/redirect: Prevent writing MSI message on affinity change
The interrupts which are handled by the redirection infrastructure provide
a irq_set_affinity() callback, which solely determines the target CPU for
redirection via irq_work and und updates the effective affinity mask.

Contrary to regular MSI interrupts this affinity setting does not change
the underlying interrupt message as the message is only created at setup
time to deliver to the demultiplexing interrupt.

Therefore the message write in msi_domain_set_affinity() is a pointless
exercise. In principle the write is harmless, but a Tegra system exposes a
full system hang during suspend due to that write.

It's unclear why the check for the PCI device state PCI_D0 in
pci_msi_domain_write_msg(), which prevents the actual hardware access if
a device is in powered down state, fails on this particular system, but
that's a different problem which needs to be investigated by the Tegra
experts.

The irq_set_affinity() callback can advise msi_domain_set_affinity() not to
write the MSI message by returning IRQ_SET_MASK_OK_DONE instead of
IRQ_SET_MASK_OK. Do exactly that.

Just to make it clear again:

This is not a correctness issue of the redirection code as returning
IRQ_SET_MASK_OK in that context is completely correct. From the core
code point of view this is solely a optimization to avoid an redundant
hardware write.

As a byproduct it papers over the underlying problem on the Tegra platform,
which fails to put the PCIe device[s] out of PCI_D0 despite the fact that
the devices and busses have been shut down. The redirect infrastructure
just unearthed the underlying issue, which is prone to happen in quite some
other code paths which use the PCI_D0 check to prevent hardware access to
powered down devices.

This therefore has neither a 'Fixes:' nor a 'Closes:' tag associated as the
underlying problem, which is outside the scope of the interrupt code, is
still unresolved.

Reported-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Link: https://lore.kernel.org/all/4e5b349c-6599-4871-9e3b-e10352ae0ca0@nvidia.com
Link: https://patch.msgid.link/87tsw6aglz.ffs@tglx
2026-01-29 23:49:55 +01:00
Linus Walleij
1296611607 intel-pinctrl for v6.20-2
* Remove duplicate error messages when registering pin control
 * Miscellaneous changes
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEqaflIX74DDDzMJJtb7wzTHR8rCgFAml7gUIACgkQb7wzTHR8
 rCinkw//e83k7rJsLdyBuCdIfQoKDrIPUene6v/oyszj3oBAaWv2tGqEj4PWNkij
 1vtxdbK+T3QE7lLRt87+4t/RE0kmBDGYjrJ0VEmqE/UexYkOyFguhwAHV/Y18bQ9
 +25j1NWgTlfdmnkxQ+N0lTlaIUyq7yqaJ6TpMwv+7mDxDt+eBLsq5LBDAmuN6gaZ
 NPzFeOc+4wy5Gy1Y7qZMuxTJV49eL/8lBkay1BZ/yPlgaIjzU2ITE7DsFJVSMmMK
 lMJKdyDAbQ2ZfpZzPaAoeE9fv3jX6iyY0KhA4L0of9VVh5bMPHHf3gEdr4tBZxLX
 zBvF5X11ehIDFRNjKrrIxayab7b0gskMLY8ZQkve/IpKTaOjggqY0/uoNT6iGcw2
 +9wTe+vlPcnLCigI1R/dPGx4vgl6J2Rkgxelpb70w/PPMOyG9yBOH/ytGFfRoLp7
 JLu6YpH9LCCEAEOEFzrHvdsSQH4+jexAjxNc9Q0mnibp7z2SkUHrg1737bjhVGkj
 MANCEUUXXGQo0sIQeriTPDHLqU1SbVPdIAUwW9vUTKa74TmP9lNHUgaZD5pgFY7f
 /dqWQ2vbeh+vJsquLoRrv+l1kXG+eSB6qIJc41Avk5yVSkJFKu+4rXo1MTmPNGXg
 AC6Pc6o+V4lBS2t+bfWKK5oatJeU2LJIxNRLktsaNl6EKIw4PYQ=
 =0Fr+
 -----END PGP SIGNATURE-----

Merge tag 'intel-pinctrl-v6.20-2' of git://git.kernel.org/pub/scm/linux/kernel/git/pinctrl/intel into devel

intel-pinctrl for v6.20-2

* Remove duplicate error messages when registering pin control
* Miscellaneous changes

Signed-off-by: Linus Walleij <linusw@kernel.org>
2026-01-29 23:32:57 +01:00
Linus Torvalds
e9f6ac972e A single late MTD fix, which reverts a fix that turned out to be
incorrect. The observations of the committer was that the number of IDs
 to be used to probe a chip was incorrect. It happened to be a limitation
 of his controller, not a chip issue. Restore the chip description, a
 solution must be found somewhere else.
 -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCgAdFiEE9HuaYnbmDhq/XIDIJWrqGEe9VoQFAml7teQACgkQJWrqGEe9
 VoTN6AgAiubyhRJB3+wAMk72FO5rqsMOI7H3JNFzMmYY4c0va0mdqfrCI7Wi04ND
 07wXlgQVfIDOZBvGjI5WotNeB7muNVc22yJ0Y7HocHKlR6cjFVUzw9tyC3A7wPfP
 r2kigHy8reqSu3OgN9hIdjUvdYnGRuLZjZdCJDnK4x7ic6guLWfkP+8V6QUcyp2R
 47b9cGwRBw6Pvzqkrv6cGUlB532RtFdx9U8QDgkGJjofuChEaf2SBdOHB3gz6DYZ
 qa8LoiMDPeobtxbDzp7j6Nd9bC5LegElHft99sDq99k4jfXof7dC7DTgyU8P6OZ+
 yxO4Hbc07EIDojvx83Kq/6dKTp0x0g==
 =mJrK
 -----END PGP SIGNATURE-----

Merge tag 'mtd/fixes-for-6.19-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux

Pull MTD fix from Miquel Raynal:
 "A single late MTD fix, which reverts a fix that turned out to be
  incorrect.

  The observations of the committer was that the number of IDs to be
  used to probe a chip was incorrect. It happened to be a limitation of
  his controller, not a chip issue. Restore the chip description, a
  solution must be found somewhere else"

* tag 'mtd/fixes-for-6.19-rc8' of git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux:
  Revert "mtd: spinand: esmt: fix id code for F50D1G41LB"
2026-01-29 14:08:36 -08:00
Thomas Gleixner
7eaf8e32de - Always leave device running after probe in the sh TMU driver to
overcome the locking validation scheme warning when the PREEMPT_RT
   is enabled (Niklas Söderlund)
 
 - Add missing Kconfig dependency on OF for the integrator AP (Bartosz
   Golaszewski)
 
 - Fix a dead link in timer bindings for the Armada 370XP (Soham Metha)
 
 - Fix an Oops when read_current_timer is called on ARM32 platforms
   where the SP804 is not registered as the sched_clock (Stephen Eta
   Zhou)
 
 - Move GIC timer to use request_percpu_irq() instead of
   setup_percpu_irq() to allow the removal of the latter (Marc Zyngier)
 -----BEGIN PGP SIGNATURE-----
 
 iQEzBAABCAAdFiEEGn3N4YVz0WNVyHskqDIjiipP6E8FAml6QwUACgkQqDIjiipP
 6E+yYQf/WYy4X+Uja5IS4yQGv5it9B4CrFQYaT41mfFzIOEb7WxARwLR0hnkNbBX
 v4uQiSj6IPxlxE7SbIHLHJjyGuMre0FBqEhbQdZJgyKGKBq2kJK3WeRArMmQNZXh
 WbvcquamYPHWIHHcxHmvn8IdjGJpE1SyPin6OsU7V3CtQxnLODVWXuo9xj2nUaFd
 76a2CVe2rHLXalgFPicF80Gwwsb58kMoayfGrJo8U7gugwCPr/Fho4EkugFeYz9k
 90P7UL5c/eShoXHzYLPFdEtrdwPv38c1SerbMR2vXifFUgMLkcicM1+GOWZgKDeM
 sbAh71Hg9H58eerR4gOj6MIIvxdzxw==
 =JUWB
 -----END PGP SIGNATURE-----

Merge tag 'timers-v7.0' of git://git.kernel.org/pub/scm/linux/kernel/git/daniel.lezcano/linux into timers/clocksource

Pull clocksource/events updates from Daniel Lezcano:

  - Always leave device running after probe in the sh TMU driver to
    overcome the locking validation scheme warning when the PREEMPT_RT
    is enabled (Niklas Söderlund)

  - Add missing Kconfig dependency on OF for the integrator AP (Bartosz
    Golaszewski)

  - Fix a dead link in timer bindings for the Armada 370XP (Soham Metha)

  - Fix an Oops when read_current_timer is called on ARM32 platforms
    where the SP804 is not registered as the sched_clock (Stephen Eta
    Zhou)

  - Move GIC timer to use request_percpu_irq() instead of
    setup_percpu_irq() to allow the removal of the latter (Marc Zyngier)

Link: https://patch.msgid.link/75b163aa-5098-4949-a539-ae1e59e3aaca@linaro.org
2026-01-29 22:23:51 +01:00
Longfang Liu
c3cbc276c2 hisi_acc_vfio_pci: fix the queue parameter anomaly issue
When the number of QPs initialized by the device, as read via vft, is zero,
it indicates either an abnormal device configuration or an abnormal read
result.
Returning 0 directly in this case would allow the live migration operation
to complete successfully, leading to incorrect parameter configuration after
migration and preventing the service from recovering normal functionality.
Therefore, in such situations, an error should be returned to roll back the
live migration operation.

Signed-off-by: Longfang Liu <liulongfang@huawei.com>
Link: https://lore.kernel.org/r/20260122020205.2884497-5-liulongfang@huawei.com
Signed-off-by: Alex Williamson <alex@shazbot.org>
2026-01-29 14:11:00 -07:00
Longfang Liu
8c6ac1730a hisi_acc_vfio_pci: resolve duplicate migration states
In special scenarios involving duplicate migrations, after the
first migration is completed, if the original VF device is used
again and then migrated to another destination, the state indicating
data migration completion for the VF device is not reset.
This results in the second migration to the destination being skipped
without performing data migration.
After the modification, it ensures that a complete data migration
is performed after the subsequent migration.

Signed-off-by: Longfang Liu <liulongfang@huawei.com>
Link: https://lore.kernel.org/r/20260122020205.2884497-4-liulongfang@huawei.com
Signed-off-by: Alex Williamson <alex@shazbot.org>
2026-01-29 14:11:00 -07:00
Longfang Liu
8be14dd48d hisi_acc_vfio_pci: update status after RAS error
After a RAS error occurs on the accelerator device, the accelerator
device will be reset. The live migration state will be abnormal
after reset, and the original state needs to be restored during
the reset process.
Therefore, reset processing needs to be performed in a live
migration scenario.

Signed-off-by: Longfang Liu <liulongfang@huawei.com>
Link: https://lore.kernel.org/r/20260122020205.2884497-3-liulongfang@huawei.com
Signed-off-by: Alex Williamson <alex@shazbot.org>
2026-01-29 14:11:00 -07:00
Weili Qian
a22099ed79 hisi_acc_vfio_pci: fix VF reset timeout issue
If device error occurs during live migration, qemu will
reset the VF. At this time, VF reset and device reset are performed
simultaneously. The VF reset will timeout. Therefore, the QM_RESETTING
flag is used to ensure that VF reset and device reset are performed
serially.

Fixes: b0eed08590 ("hisi_acc_vfio_pci: Add support for VFIO live migration")
Signed-off-by: Weili Qian <qianweili@huawei.com>
Link: https://lore.kernel.org/r/20260122020205.2884497-2-liulongfang@huawei.com
Signed-off-by: Alex Williamson <alex@shazbot.org>
2026-01-29 14:11:00 -07:00
Manivannan Sadhasivam
9db826206f PCI/pwrctrl: Create pwrctrl device if graph port is found
The devicetree node of the PCIe Root Port/Slot could have the graph port to
link the PCIe M.2 connector node. Since the M.2 connectors are modeled as
Power Sequencing devices, they need to be controlled by the pwrctrl driver
like the Root Port/Slot supplies.

Hence, create the pwrctrl device if the graph port is found in the node.

Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@oss.qualcomm.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Link: https://patch.msgid.link/20260128-pci-m2-v7-2-9b3a5fe3d244@oss.qualcomm.com
2026-01-29 15:04:26 -06:00
Damien Le Moal
2719bd1ee1 block: introduce blk_queue_rot()
To check if a request queue is for a rotational device, a double
negation is needed with the pattern "!blk_queue_nonrot(q)". Simplify
this with the introduction of the helper blk_queue_rot() which tests
if a requests queue limit has the BLK_FEAT_ROTATIONAL feature set.
All call sites of blk_queue_nonrot() are modified to use blk_queue_rot()
and blk_queue_nonrot() definition removed.

No functional changes.

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Nitesh Shetty <nj.shetty@samsung.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-29 13:15:50 -07:00
Damien Le Moal
068f5b5ef5 block: cleanup queue limit features definition
Unwrap the definition of BLK_FEAT_ATOMIC_WRITES and
renumber this feature to be sequential with BLK_FEAT_SKIP_TAGSET_QUIESCE.

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: John Garry <john.g.garry@oracle.com>
Reviewed-by: Nitesh Shetty <nj.shetty@samsung.com>
Reviewed-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Jens Axboe <axboe@kernel.dk>
2026-01-29 13:15:50 -07:00
Viacheslav Dubeyko
14b428cfba hfsplus: fix warning issue in inode.c
This patch fixes the sparse warning issue in inode.c
by adding static to hfsplus_symlink_inode_operations
and hfsplus_special_inode_operations declarations.

Reported-by: kernel test robot <lkp@intel.com>
Closes: https://lore.kernel.org/oe-kbuild-all/202601291957.bunRsD8R-lkp@intel.com/
Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
cc: John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
cc: Yangtao Li <frank.li@vivo.com>
cc: linux-fsdevel@vger.kernel.org
Link: https://lore.kernel.org/r/20260129195442.594884-1-slava@dubeyko.com
Signed-off-by: Viacheslav Dubeyko <slava@dubeyko.com>
2026-01-29 11:59:01 -08:00
Shuicheng Lin
8a44241b0b drm/xe/nvm: Fix double-free on aux add failure
After a successful auxiliary_device_init(), aux_dev->dev.release
(xe_nvm_release_dev()) is responsible for the kfree(nvm). When
there is failure with auxiliary_device_add(), driver will call
auxiliary_device_uninit(), which call put_device(). So that the
.release callback will be triggered to free the memory associated
with the auxiliary_device.

Move the kfree(nvm) into the auxiliary_device_init() failure path
and remove the err goto path to fix below error.

"
[   13.232905] ==================================================================
[   13.232911] BUG: KASAN: double-free in xe_nvm_init+0x751/0xf10 [xe]
[   13.233112] Free of addr ffff888120635000 by task systemd-udevd/273

[   13.233120] CPU: 8 UID: 0 PID: 273 Comm: systemd-udevd Not tainted 6.19.0-rc2-lgci-xe-kernel+ #225 PREEMPT(voluntary)
...
[   13.233125] Call Trace:
[   13.233126]  <TASK>
[   13.233127]  dump_stack_lvl+0x7f/0xc0
[   13.233132]  print_report+0xce/0x610
[   13.233136]  ? kasan_complete_mode_report_info+0x5d/0x1e0
[   13.233139]  ? xe_nvm_init+0x751/0xf10 [xe]
...
"

v2: drop err goto path. (Alexander)

Fixes: 7926ba2143 ("drm/xe: defer free of NVM auxiliary container to device release callback")
Reviewed-by: Nitin Gote <nitin.r.gote@intel.com>
Reviewed-by: Brian Nguyen <brian3.nguyen@intel.com>
Cc: Alexander Usyskin <alexander.usyskin@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Suggested-by: Brian Nguyen <brian3.nguyen@intel.com>
Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Link: https://patch.msgid.link/20260120183239.2966782-7-shuicheng.lin@intel.com
(cherry picked from commit a3187c0c2b)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
2026-01-29 20:31:53 +01:00
Shuicheng Lin
2da8fbb8f1 drm/xe/nvm: Manage nvm aux cleanup with devres
Move nvm teardown to a devm-managed action registered from xe_nvm_init().
This ensures the auxiliary NVM device is deleted on probe failure and
device detach without requiring explicit calls from remove paths.

As part of this, drop xe_nvm_fini() from xe_device_remove() and from the
survivability sysfs teardown, and remove the public xe_nvm_fini() API from
the header.

This is to fix below warn message when there is probe failure after
xe_nvm_init(), then xe_device_probe() is called again:
"
[  207.318152] sysfs: cannot create duplicate filename '/devices/pci0000:00/0000:00:01.0/0000:01:00.0/0000:02:01.0/0000:03:00.0/xe.nvm.768'
[  207.318157] CPU: 5 UID: 0 PID: 10261 Comm: modprobe Tainted: G    B   W           6.19.0-rc2-lgci-xe-kernel+ #223 PREEMPT(voluntary)
[  207.318160] Tainted: [B]=BAD_PAGE, [W]=WARN
[  207.318161] Hardware name: ASUS System Product Name/PRIME Z790-P WIFI, BIOS 0812 02/24/2023
[  207.318163] Call Trace:
[  207.318163]  <TASK>
[  207.318165]  dump_stack_lvl+0xa0/0xc0
[  207.318170]  dump_stack+0x10/0x20
[  207.318171]  sysfs_warn_dup+0xd5/0x110
[  207.318175]  sysfs_create_dir_ns+0x1f6/0x280
[  207.318177]  ? __pfx_sysfs_create_dir_ns+0x10/0x10
[  207.318179]  ? lock_acquire+0x1a4/0x2e0
[  207.318182]  ? __kasan_check_read+0x11/0x20
[  207.318185]  ? do_raw_spin_unlock+0x5c/0x240
[  207.318187]  kobject_add_internal+0x28d/0x8e0
[  207.318189]  kobject_add+0x11f/0x1f0
[  207.318191]  ? __pfx_kobject_add+0x10/0x10
[  207.318193]  ? lockdep_init_map_type+0x4b/0x230
[  207.318195]  ? get_device_parent.isra.0+0x43/0x4c0
[  207.318197]  ? kobject_get+0x55/0xf0
[  207.318199]  device_add+0x2d7/0x1500
[  207.318201]  ? __pfx_device_add+0x10/0x10
[  207.318203]  ? lockdep_init_map_type+0x4b/0x230
[  207.318205]  __auxiliary_device_add+0x99/0x140
[  207.318208]  xe_nvm_init+0x7a2/0xef0 [xe]
[  207.318333]  ? xe_devcoredump_init+0x80/0x110 [xe]
[  207.318452]  ? __devm_add_action+0x82/0xc0
[  207.318454]  ? fs_reclaim_release+0xc0/0x110
[  207.318457]  xe_device_probe+0x17dd/0x2c40 [xe]
[  207.318574]  ? __pfx___drm_dev_dbg+0x10/0x10
[  207.318576]  ? add_dr+0x180/0x220
[  207.318579]  ? __pfx___drmm_mutex_release+0x10/0x10
[  207.318582]  ? __pfx_xe_device_probe+0x10/0x10 [xe]
[  207.318697]  ? xe_pm_init_early+0x33a/0x410 [xe]
[  207.318850]  xe_pci_probe+0x936/0x1250 [xe]
[  207.318999]  ? lock_acquire+0x1a4/0x2e0
[  207.319003]  ? __pfx_xe_pci_probe+0x10/0x10 [xe]
[  207.319151]  local_pci_probe+0xe6/0x1a0
[  207.319154]  pci_device_probe+0x523/0x840
[  207.319157]  ? __pfx_pci_device_probe+0x10/0x10
[  207.319159]  ? sysfs_do_create_link_sd.isra.0+0x8c/0x110
[  207.319162]  ? sysfs_create_link+0x48/0xc0
...
"

Fixes: c28bfb107d ("drm/xe/nvm: add on-die non-volatile memory device")
Reviewed-by: Alexander Usyskin <alexander.usyskin@intel.com>
Reviewed-by: Brian Nguyen <brian3.nguyen@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Cc: Riana Tauro <riana.tauro@intel.com>
Signed-off-by: Shuicheng Lin <shuicheng.lin@intel.com>
Signed-off-by: Ashutosh Dixit <ashutosh.dixit@intel.com>
Link: https://patch.msgid.link/20260120183239.2966782-6-shuicheng.lin@intel.com
(cherry picked from commit 11035eab1b)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
2026-01-29 20:25:32 +01:00
Mikhail Kshevetskiy
1d9d5f5a50 mtd: spinand: add Foresee F35SQB002G flash support
Add support of Foresee F35SQB002G spinand flash

Signed-off-by: Mikhail Kshevetskiy <mikhail.kshevetskiy@iopsys.eu>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:22:14 +01:00
Miquel Raynal
44a2f49b9b mtd: spinand: winbond: W35N octal DTR support
Extend the support for the W35N chip family by supporting the ODTR bus
interface. The chip is capable to run in this mode, which brings a
significant performance improvement.

1S-8S-8S:

   # flash_speed /dev/mtd0 -c1 -d
   eraseblock write speed is 7529 KiB/s
   eraseblock read speed is 15058 KiB/s

8D-8D-8D:

   # flash_speed /dev/mtd0 -c1 -d
   eraseblock write speed is 9481 KiB/s
   eraseblock read speed is 23272 KiB/s

This is +55% read speed and +26% write speed with the same hardware.

Tests have been conducted with a TI AM62A7 using the Cadence quad SPI
controller.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
76b7dc76dd mtd: spinand: Add octal DTR support
Create a new bus interface named ODTR for "octal DTR", which matches the
following pattern: 8D-8D-8D.

Add octal DTR support for all the existing core operations. Add a second
set of templates for this bus interface.

Give the possibility for drivers to register their read, write and
update cache variants as well as their vendor specific operations.

Check the SPI controller driver supports all the octal DTR commands that
we might need before switching to the ODTR bus interface.

Make the switch by calling ->configure_chip() with the ODTR
parameter. Fallback in case this step fails.

If someone ever attempts to suspend a chip in octal DTR mode, there are
changes that it will loose its configuration at resume. Prevent any
problem by explicitly switching back to SSDR while suspending. Note:
there is a limitation in the current approach, page I/Os are not
available as the dirmaps will be created for the ODTR bus interface if
that option is supported and not switched back to SSDR during
suspend. Switching them is possible but would be costly and would not
bring anything as right after resuming we will switch again to ODTR. In
case this capability is used for debug, developpers should mind to
destroy and recreate suitable direct mappings.

Finally, as a side effect, we increase the buffer for reading IDs to
6. No device at this point returns 6 bytes, but we support 5 bytes IDs,
which means in octal DTR mode we have no other choice than reading an
even number of bytes, hence 6.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
f636d92161 mtd: spinand: Warn if using SSDR-only vendor commands in a non SSDR mode
Both Macronix and Winbond have chip specific operations which are SSDR
only. Trying to use them in an ODTR setup will fail and doing this is a
pure software bug. Warn explicitly in this case.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
0a331a1851 mtd: spinand: Give the bus interface to the configuration helper
The chip configuration hook is the one responsible to actually switch
the switch between bus interfaces. It is natural to give it the bus
interface we expect with a new parameter. For now the only value we can
give is SSDR, but this is subject to change in the future, so add a bit
of extra logic in the implementations of this callback to make sure
both the core and the chip driver are aligned on the request.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
8e7face601 mtd: spinand: Propagate the bus interface across core helpers
For now all drivers provide SSDR variants only. When we add support for
ODTR modes, there will be a need to differentiate the type of variant we
target as well as the need to check if we support one or the other type
of operations.

Pass this parameter to lower level helpers, which for now is unused, in
order to simplify the patch introducing ODTR support.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
20387f2fe5 mtd: spinand: Add support for setting a bus interface
Create a bus interface enumeration, currently only containing the
one we support: SSDR, for single SDR, so any operation whose command is
sent over a single data line in SDR mode, ie. any operation matching
1S-XX-XX.

The main spinand_device structure gets a new parameter to store this
enumeration, for now unused. Of course it is set to SSDR during the SSDR
templates initialization to further clarify the state we are in at the
moment.

This member is subject to be used to know in which bus configuration we
and be updated by the core when we switch to faster mode(s).

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
be0b86c648 mtd: spinand: Gather all the bus interface steps in one single function
Writing the quad enable bit in one helper and doing the chip
configuration in another does not make much sense from a bus interface
setup point of view.

Instead, let's create a broader helper which is going to be in charge of
all the bus configuration steps at once. This will specifically allow to
transition to octal DDR mode, and even fallback to quad (if suppoorted)
or single mode otherwise.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
ef1ed296fb mtd: spinand: winbond: Configure the IO mode after the dummy cycles
When we will change the bus interface, the action that actually performs
the transition is the IO mode register write. This means after the IO
mode register write, we should use the new bus interface. But the
->configure_chip() hook itself is not responsible of making this change
official, it is the caller that must act according to the return value.

Reorganize this helper to first configure the dummy cycles before
possibly switching to another bus interface.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
57e1015cc9 mtd: spinand: winbond: Rename IO_MODE register macro
Suffix the macro name with *_REG to align with the rest of the driver.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
1d98c6a77b mtd: spinand: winbond: Fix style
Add a missing new line in the middle of the driver.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
da8f4891bc mtd: spinand: winbond: Register W35N vendor specific operation
Provide the Winbond W35N specific "write VCR register" operation to let
the core verify it is supported by the controller before using it.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
62dce7e0fc mtd: spinand: winbond: Register W25N vendor specific operation
Provide the Winbond W25N specific "select target" operation to let the
core verify it is supported by the controller before using it.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
87ec769097 mtd: spinand: macronix: Register vendor specific operation
Provide the Macronix specific "read ECC status register" operation so
that the core can verify if it is supported by the controller before
using it.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
fbc7538782 mtd: spinand: List vendor specific operations and make sure they are supported
It is probably safe to expect that all SPI controller drivers will ever
support all the most basic SPI NAND operations, such as write enable,
register reads, page program, block erases, etc. However, what about
vendor specific operations? So far nobody complained about it, but as we
are about to introduce octal DTR support, and as none of the SPI NAND
instruction set is defined in any standard, we must remain careful about
these extra operations.

One way to make sure we do not blindly get ourselves in strange
situations with vendor commands failing silently is to make the check
once for all, while probing the chip. However at this stage we have no
such list, so let's add the necessary infrastructure to allow:
- registering vendor operations,
- checking they are actually supported when appropriate.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
6ec7ace012 mtd: spinand: winbond: Convert W35N specific operation to SPINAND_OP()
Winbond W35N* chips require a vendor specific operation to write their
VCR register (a configuration register, typically used for tuning the
number of dummy cycles and switching to a different bus
interface). Instead of defining this op only in the function that needs
it, hiding it from the core, make it a proper define like all other
spi-mem operations, and implement the necessary spinand_fill_*_op()
helper to make the SPINAND_OP() macro work. This way we can use it from
any function without any extra handling outside of this helper when we
will convert the core to support octal DDR busses.

Reviewed-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
44c9c1b45d mtd: spinand: winbond: Convert W25N specific operation to SPINAND_OP()
Winbond W25N* chips require a vendor specific operation to select the
target. Instead of defining this op only in the function that
needs it, hiding it from the core, make it a proper define like all
other spi-mem operations, and implement the necessary
spinand_fill_*_op() helper to make the SPINAND_OP() macro work. This way
we can use it from any function without any extra handling outside of
this helper when we will convert the core to support octal DDR busses.

Reviewed-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:41 +01:00
Miquel Raynal
b347cdc89b mtd: spinand: macronix: Convert vendor specific operation to SPINAND_OP()
Macronix chips require a vendor specific operation to read the ECC
status register. Instead of defining this op only in the function that
needs it, hiding it from the core, make it a proper define like all
other spi-mem operations, and implement the necessary
spinand_fill_*_op() helper to make the SPINAND_OP() macro work. This way
we can use it from any function without any extra handling outside of
this helper when we will convert the core to support octal DDR busses.

Reviewed-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:40 +01:00
Miquel Raynal
88b0e3584a mtd: spinand: Make use of the operation templates through SPINAND_OP()
Create a SPINAND_OP() macro to which we give the name of the operation
we want. This macro retrieves the correct operation template based on
the current bus interface (currently only single SDR, will soon be
extended to octal DTR) and fills it with the usual parameters.

This macro makes the transition from calling directly the low-level
macros into using the (bus interface dependent) templates very smooth.
Use it in all places that can be trivially converted. At this stage
there is no functional change expected, until octal DTR support gets
added.

Reviewed-by: Tudor Ambarus <tudor.ambarus@linaro.org>
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
2026-01-29 20:21:40 +01:00