Commit graph

1,267,977 commits

Author SHA1 Message Date
Matthew Auld
83ee6699b5 drm/doc: include xe_drm.h
Make sure the uapi gets picked up by the normal docs build.

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Francois Dugast <francois.dugast@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Francois Dugast <francois.dugast@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:35:00 -05:00
Matthew Auld
63f9c3cd36 drm/xe/uapi: silence kernel-doc errors
./include/uapi/drm/xe_drm.h:263: warning: Function parameter or member
'gts' not described in 'drm_xe_query_gts'

./include/uapi/drm/xe_drm.h:854: WARNING: Inline emphasis start-string
without end-string.

With the idea to also include the uapi file in the pre-merge CI hooks
when building the kernel-doc, so first make sure it's clean:

https://gitlab.freedesktop.org/drm/xe/ci/-/merge_requests/16

v2: (Francois)
  - It makes more sense to just fix the kernel-doc for 'gts'

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Francois Dugast <francois.dugast@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Francois Dugast <francois.dugast@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:35:00 -05:00
Matthew Auld
a9c4a069fb drm/xe/uapi: add some kernel-doc for region query
Since we need to extend this, we should also take the time to add some
basic kernel-doc here for the existing bits. Note that this is all still
subject to change when upstreaming.

Also convert XE_MEM_REGION_CLASS_* into an enum, so we can more easily
create links to it from other parts of the uapi.

Suggested-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Filip Hazubski <filip.hazubski@intel.com>
Cc: Carl Zhang <carl.zhang@intel.com>
Cc: Effie Yu <effie.yu@intel.com>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:35:00 -05:00
Matthew Auld
1105ac15d2 drm/xe/uapi: restrict system wide accounting
Since this is considered an info leak (system wide accounting), rather
hide behind perfmon_capable().

v2:
  - Without perfmon_capable() it likely makes more sense to report as zero,
    instead of reporting as used == total size. This should give similar
    behaviour as i915 which rather tracks free instead of used.

Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: José Roberto de Souza <jose.souza@intel.com>
Cc: Filip Hazubski <filip.hazubski@intel.com>
Cc: Carl Zhang <carl.zhang@intel.com>
Cc: Effie Yu <effie.yu@intel.com>
Cc: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Gwan-gyeong Mun <gwan-gyeong.mun@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:59 -05:00
Francois Dugast
1bc56a934f drm/xe: Document topology mask query
Provide information on the types of topology masks that can be
queried and add some examples.

Signed-off-by: Francois Dugast <francois.dugast@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:59 -05:00
Francois Dugast
4f082f2c3a drm/xe: Move defines before relevant fields
Align on same rule in the whole file: defines then doc then relevant
field, with an empty line to separate fields.

v2:
  - Rebase on drm-xe-next
  - Fix ordering of defines and fields in uAPI (Lucas De Marchi)
v3: Remove useless empty lines (Lucas De Marchi)
v4: Move changelog to commit
v5: Rebase

Reported-by: Oded Gabbay <ogabbay@kernel.org>
Link: https://lists.freedesktop.org/archives/intel-xe/2023-May/004704.html
Signed-off-by: Francois Dugast <francois.dugast@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:58 -05:00
Francois Dugast
ffd6620fb7 drm/xe: Document structures for device query
This adds documentation to the various structures used to query
memory, GTs, topology, engines, and so on. It includes a functional
code snippet to query engines.

v2:
  - Rebase on drm-xe-next
  - Also document structures related to drm_xe_device_query, changed
    pseudo code to snippet (Lucas De Marchi)
v3:
  - Move changelog to commit
  - Fix warnings showed only using dim checkpath

Reported-by: Oded Gabbay <ogabbay@kernel.org>
Link: https://lists.freedesktop.org/archives/intel-xe/2023-May/004704.html
Signed-off-by: Francois Dugast <francois.dugast@intel.com>
Reviewed-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:56 -05:00
Mika Kuoppala
5db4afe1db drm/xe: Fix unreffed ptr leak on engine lookup
The engine xarray holds a ref to engine, guarded by the lock.
While we do lookup for engine, we need to take the ref inside
the lock to prevent unreffed pointer escaping and
causing potential use-after-free after.

v2: remove branch prediction hint (Thomas)

Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20230602172732.1001057-1-mika.kuoppala@linux.intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:55 -05:00
Lucas De Marchi
898f86c23c drm/xe: Skip applying copy engine fuses
Like commit 69a3738ba5 ("drm/i915: Skip applying copy engine fuses"),
do not apply copy engine fuses for platforms where MEML3_EN is not
relevant for determining the presence of the copy engines.

Acked-by: Gustavo Sousa <gustavo.sousa@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20230613180356.2906441-1-lucas.demarchi@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:53 -05:00
Matthew Auld
8489f30e0c drm/xe/bo: handle PL_TT -> PL_TT
When moving between PL_VRAM <-> PL_SYSTEM we have to have use PL_TT in
the middle as a temporary resource for the actual copy. In some GL
workloads it can be seen that once the resource has been moved to the
PL_TT we might have to bail out of the ttm_bo_validate(), before
finishing the final hop. If this happens the resource is left as
TTM_PL_FLAG_TEMPORARY, and when the ttm_bo_validate() is restarted the
current placement is always seen as incompatible, requiring us to
complete the move.  However if the BO allows PL_TT as a possible
placement we can end up attempting a PL_TT -> PL_TT move (like when
running out of VRAM) which leads to explosions in xe_bo_move(), like
triggering the XE_BUG_ON(!tile).

Going from TTM_PL_FLAG_TEMPORARY with PL_TT -> PL_VRAM should already
work as-is, so it looks like we only need to worry about PL_TT -> PL_TT
and it looks like we can just treat it as a dummy move, since no real
move is needed.

Reported-by: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Matthew Auld <matthew.auld@intel.com>
Cc: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:53 -05:00
Matthew Brost
7ba4c5f027 drm/xe: VM LRU bulk move
Use the TTM LRU bulk move for BOs tied to a VM. Update the bulk moves
LRU position on every exec.

v2: Bulk move for compute VMs, use WARN rather than BUG

Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:53 -05:00
Matthew Brost
73c09901b0 drm/xe: Only try to lock external BOs in VM bind
We only need to try to lock a BO if it's external as non-external BOs
share the dma-resv with the already locked VM. Trying to lock
non-external BOs caused an issue (list corruption) in an uncoming patch
which adds bulk LRU move. Since this code isn't needed, remove it.

v2: New commit message, s/mattthew/matthew/

Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:50 -05:00
Matthew Brost
911cd9b3b4 drm/xe: Ensure LR engines are not persistent
With our ref counting scheme long running (LR) engines only close
properly if not persistent, ensure that LR engines are non-persistent.

v2: spell out LR

Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:50 -05:00
Matthew Brost
8ae8a2e8dd drm/xe: Long running job update
For long running (LR) jobs with the DRM scheduler we must return NULL in
run_job which results in signaling the job's finished fence immediately.
This prevents LR jobs from creating infinite dma-fences.

Signaling job's finished fence immediately breaks flow controlling ring
with the DRM scheduler. To work around this, the ring is flow controlled
and written in the exec IOCTL. Signaling job's finished fence
immediately also breaks the TDR which is used in reset / cleanup entity
paths so write a new path for LR entities.

v2: Better commit, white space, remove rmb(), better comment next to
emit_job()
v3 (Thomas): Change LR reference counting, fix working in commit

Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:44 -05:00
Matthew Brost
3743040261 drm/xe: NULL binding implementation
Add uAPI and implementation for NULL bindings. A NULL binding is defined
as writes dropped and read zero. A single bit in the uAPI has been added
which results in a single bit in the PTEs being set.

NULL bindings are intendedd to be used to implement VK sparse bindings,
in particular residencyNonResidentStrict property.

v2: Fix BUG_ON shown in VK testing, fix check patch warning, fix
xe_pt_scan_64K, update __gen8_pte_encode to understand NULL bindings,
remove else if vma_addr

Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Suggested-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:44 -05:00
Janga Rahul Kumar
ee6ad13705 drm/Xe: Use EOPNOTSUPP instead of ENOTSUPP
ENOTSUPP is not a standard Unix error should use
EOPNOTSUPP instead.

v2: Update commit description (Aravind)

Reviewed-by: Aravind Iddamsetty <aravind.iddamsetty@intel.com>
Signed-off-by: Janga Rahul Kumar <janga.rahul.kumar@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:42 -05:00
Daniele Ceraolo Spurio
ab10e976fb drm/xe: limit GGTT size to GUC_GGTT_TOP
The GuC can't access addresses above GUC_GGTT_TOP, so any GuC-accessible
objects can't be mapped above that offset. Instead of checking each
object to see if GuC may access it or not before mapping it, we just
limit the GGTT size to GUC_GGTT_TOP. This wastes a bit of address space
(about ~18 MBs, which is in addition to what already removed at the bottom
of the GGTT), but it is a good tradeoff to keep the code simple.

The in-code comment has also been updated to explain the limitation.

Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: https://lore.kernel.org/r/20230615002521.2587250-1-daniele.ceraolospurio@intel.com/
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:42 -05:00
Matt Roper
ff063430ca drm/xe/mtl: Add some initial MTL workarounds
This adds a handful of workarounds that apply to production steppings of
MTL:
 - Wa_14018575942
 - Wa_22016670082
 - Wa_14017856879
 - Wa_18019271663

Wa_22016670082 is currently only applied to the primary GT at the
moment, but may need to be extended to the media GT in the future if a
pending update to the workaround database gets finalized.

OOB workarounds will need to be implemented separately in future patches
for Wa_14016712196, Wa_16018063123, and Wa_18013179988.

Reviewed-by: Radhakrishna Sripada <radhakrishna.sripada@intel.com>
Link: https://lore.kernel.org/r/20230608181217.2385932-1-matthew.d.roper@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:42 -05:00
Michał Winiarski
d0e2dd764a drm/xe: Fix check for platform without geometry pipeline
It's not possible for the condition checking if we're running on
platform without geometry pipeline to ever be true, since
gt->fuse_topo.g_dss_mask is an array.

It also breaks the build:
../drivers/gpu/drm/xe/xe_rtp.c:183:50: error: address of array 'gt->fuse_topo.g_dss_mask' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]

Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20230523135020.345596-2-michal@hardline.pl
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:42 -05:00
Michał Winiarski
35cbfe5619 drm/xe: Fix uninitialized variables
Using uninitialized variables leads to undefined behavior.

Moreover, it causes the compiler to complain with:
../drivers/gpu/drm/xe/xe_vm.c:3265:40: error: variable 'vma' is uninitialized when used here [-Werror,-Wuninitialized]
../drivers/gpu/drm/xe/xe_rtp.c:118:36: error: variable 'i' is uninitialized when used here [-Werror,-Wuninitialized]
../drivers/gpu/drm/xe/xe_mocs.c:449:3: error: variable 'flags' is uninitialized when used here [-Werror,-Wuninitialized]

Signed-off-by: Michał Winiarski <michal.winiarski@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20230523135020.345596-1-michal@hardline.pl
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:42 -05:00
Riana Tauro
1e80d0c3c4 drm/xe: Fix GT looping for standalone media
gt_count is only being incremented when initializing the primary GT;
since the media GT sets the ID directly, gt_count is not incremented
again, resulting in an incorrect count on MTL.  Use autoincrement while
assigning the media GTs ID to ensure gt_count is correct on MTL and
other future platforms with standalone media.

Signed-off-by: Riana Tauro <riana.tauro@intel.com>
Link: https://lore.kernel.org/r/20230613094232.3703549-1-riana.tauro@intel.com
[mattrope: Tweaked commit message to focus on gt_count importance]
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:38 -05:00
Badal Nilawar
2846d10339 drm/xe: Donot apply forcewake while reading actual frequency
RPSTAT1 is an sgunit register and thus doesn't need forcewake.
MTL_MIRROR_TARGET_WP1 is within an "always on" power domain and thus
doesn't require any forcewake to ensure the register is powered
up and usable. When GT is RC6 the actual frequency reported will be 0.

v2:
 - Add bspec index (Anshuman)
 - %s/GEN12_RPSTAT1/GT_PERF_STATUS as per bspec
v3: Update Fixes tag

Bspec: 51837, 67651
Fixes: dd08ebf6c3 ("drm/xe: Introduce a new DRM driver for Intel GPUs")
Signed-off-by: Badal Nilawar <badal.nilawar@intel.com>
Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20230609024954.987039-1-badal.nilawar@intel.com
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:14 -05:00
Lucas De Marchi
6dc3a12fb8 drm/xe/guc: Normalize error messages with %#x
One of the messages was printed without 0x prefix, so it was not clear
if it was decimal or hex: make sure to add the prefix by using %#x.
While at it, normalize the other messages in the same function to follow
the same pattern.

Reviewed-by: Gustavo Sousa <gustavo.sousa@intel.com>
Link: https://lore.kernel.org/r/20230611222447.2837573-3-lucas.demarchi@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:14 -05:00
Lucas De Marchi
90738d8665 drm/xe/guc: Fix typo s/enabled/enable/
Fix the log message when it fails to enable CT.

Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://lore.kernel.org/r/20230611222447.2837573-2-lucas.demarchi@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:14 -05:00
Lucas De Marchi
a0ea91db61 drm/xe: Rename pte/pde encoding functions
Remove the leftover TODO by renameing the functions to use xe prefix.
Since the static __gen8_pte_encode() already has a double score,
just remove the prefix.

Reviewed-by: Matthew Brost <matthew.brost@intel.com>
Link: https://lore.kernel.org/r/20230611222447.2837573-1-lucas.demarchi@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:14 -05:00
Matthew Brost
6713ee6ca1 drm/xe: Move XE_PTE_FLAG_READ_ONLY to xe_vm_types.h
XE_PTE_FLAG_READ_ONLY is specific to struct xe_vma, move it from xe_bo.h
to xe_vm_types.h to reflect that.

Reviewed-by: Francois Dugast <francois.dugast@intel.com>
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
2023-12-21 11:34:00 -05:00
Arnd Bergmann
5a256cf710 More Ux500 device tree updates for v6.8
The HREF520 reference design had the wrong analog baseband
 defined causing a boot regression.
 
 Was AB8500, but this board has AB8505.
 
 Rearrange the device trees to make it possible to define
 a different AB and slot it in.
 -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEElDRnuGcz/wPCXQWMQRCzN7AZXXMFAmV8oEwACgkQQRCzN7AZ
 XXN6xhAAt0iSyMtZhJIRVFHYr6fMUzDvQ+QeaKsXAQ1L7gcs/UN1wYTcHsFATW7j
 6CK7OQsOQsjfi6QyhpnPMVBbhv1632LBHhe6IXmIz6C/npnC9uaedxpO9jEiCfb7
 W0EXEyleCg8uqKnFxyUy0shklH3XQBodv75ZKsHqqk59QHS+H7aBkUo8fWbNra1z
 pQsujNDSg1d2kjpmHLpDOwmE7NhbFxBeTlPs/4/Q81RCdeJaKQEoj7LoNq0tBcLr
 1JXXWoSJ5yY1U20CNYI48Pa7XzxT3uDbTsRt7TMqp67FZHHEPvdQLvp/q0cO6RV6
 eg3A/T61PO2stknDmPCYvsEh3KAEDpFpye3wMJ6bcQe9SPhtAmgyu0NItopF8xxc
 bOnl8TQAzh3GWACgdLwGCZ+YkVv6E41S8YlNi8sC457U8BG1Qi4n7QKReQWfBE6J
 LlYe2dO46J0b07BrWKlQq0eCMQB57UkTiHHpYiAS3X1eP/iSyZoEn+oD5gtrGL85
 vQuNOe9R1mT5AJB+OLa3OS6zUEHms1LWoih+VIoXors/+3idsOmga1CF31QEZCA/
 XvGhZg68C9CMYd8igKO/ToWTcdlLAOfx85QBr99yW05nJG7o1Cw7TCO5J/xay/1h
 glwGQe6es0ee/l+rkFGm4wDocfGnb8iB9t3JqVANViXDAJyzVBk=
 =zGCp
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmWEaPQACgkQYKtH/8kJ
 Uie9bw//X3UgWlngeeSnOKf8kYz6LXfKKHeX7vs17XEzfAtN8sz9QxFZBK7/5iUp
 +Pt9sEZ/h+aSpabmb9LAWL+4aC2Wi43rWnMCINhiANNKyaa36+S+wD5ll2HXn24Y
 Kd5I/sQQTSrY3fOuinQmc6hFS/PjSNGjjpsWW9lqW3pMTUJjeoNwYbiZTizx+jxz
 /idRc2UxN5jn9yYmCqG/81VZTNSDtFgfPn3cfXyou1etERD7BSlynZgR3+xDFSCw
 N0rzlDltS0klnDSD9sogC3ta2ps75Vc5WjZdF15kL6KIqyPOs65Zw9Yg625A9o/O
 xt3lR/Yr/EhWnSd0eIPuQ3kH82QIo995Hpu9DDItxn4OpiKYazZDxcbxS9KSEPma
 X6LeaHU7Vh8EItSIVLA5z2n6CeoUo6CpewTyTFZ25s2h5foAHqtMrz16p9BktCSZ
 Ck5x/a+AwDv0aV6SSulg3jmaU4lcqw4RGZZGF++RvGESDS3X/vlxGeot0s88ASZA
 P7o30CyGrXFLUS9hEajO+y28Qn9KusPu9biLf5LPVNxQoG4ug59/hyg4l/TLfwCi
 fZSDKm17hOew5+raeoLh5qcnopnfbekufy57L+DFJi+0WFhpdyTIBB90iR4PL1FX
 U5NwqREm+TKoP4QGZtwLgAhDRpoaunWaP3J9IQBAzmZeBtaFI/M=
 =kzja
 -----END PGP SIGNATURE-----

Merge tag 'ux500-dts-soc-for-v6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator into soc/dt

More Ux500 device tree updates for v6.8

The HREF520 reference design had the wrong analog baseband
defined causing a boot regression.

Was AB8500, but this board has AB8505.

Rearrange the device trees to make it possible to define
a different AB and slot it in.

* tag 'ux500-dts-soc-for-v6.8' of git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-integrator:
  ARM: dts: ux500-href: Switch HREF520 to AB8505
  ARM: dts: ux500-href: Push AB8500 config out
  ARM: dts: ux500-href: Push AB8500 inclusion to the top

Link: https://lore.kernel.org/r/CACRpkdZ9wCV7oohF2KX6MFwmuSPR_i7et8O5SH=op6gyQ4mOvQ@mail.gmail.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2023-12-21 16:33:56 +00:00
Arnd Bergmann
6af50f5af2 Renesas DTS updates for v6.8 (take two)
- Add IA55 interrupt controller and Ethernet support for the RZ/G3S
     SoC and the RZ/G3S SMARC SoM,
   - Miscellaneous fixes and improvements.
 -----BEGIN PGP SIGNATURE-----
 
 iHUEABYIAB0WIQQ9qaHoIs/1I4cXmEiKwlD9ZEnxcAUCZXwwJgAKCRCKwlD9ZEnx
 cK7GAQDGZ/G0WYxNR18NSnVuNWgrbDqKiLSDzLfJFa4KdFJR7gEApgNUUO6nl6Fj
 Q05qHCKPYV7cMNSXkwlis/xgP2sfWgY=
 =+NxH
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmWEZwoACgkQYKtH/8kJ
 UifMyg/8CAgoI9SoJG6qyLGV4bUewtTrT2zp7/dJUhNoTmRCNm4uO22+VRfBYRiv
 x284SqzB6w6IJZkolm3UfeEoVxBe8yHGx++wZ4SEwgZ1vGvC4QAf/+oirpOqszIH
 ddIqNAODVx+a958XfXW3csExWZaQ9sJ5A7eHRE8NzSeFxrPrqoahwv4HW1MPPUYn
 D6u776C6jXY5jbUERiL7sUbNg43MOLB4Y4eraTLw5bpT3v8J+U70OdkaNlm7HalS
 HeNJL3UYsD8s7zhPR/Dxc/j2aOj+h0W5187yLqUWXHEdgQ3CW+zXq4ihGS98r6+u
 lELO4YCwopU20yxrUc0HhGk1Rzqpku7rd0Zi3ViELBB7g0vZ0PbCLMNV/1sBVjrO
 R1QehkfpSYOokKrNniYnN3cHDCiMO9ISBLx02IZjhv3RUPv8tTVLaqOjpA5J67w9
 B0HyBGH+MqvfhJUtJMGjDCvnwWZr/nxOapst0CzzKALFNe0tLG3udyXaiq8CwmJf
 XgFD8ZcUQspwOfE2yUMA0jOAUsZolPalGg6ea1WL/2mvum8UjQ9NdQA8R7sGTXfy
 eA8jxa+AuWQlLZI40ItrRh9RkmAMSFUK7GXHzYwZI4tNb3S+6NAm63gTTqiastP0
 pPk85A2WJEQlFYCop9/ODzZVNdpxLAyVZ11IaCuF72s6fSn1yt4=
 =IAdv
 -----END PGP SIGNATURE-----

Merge tag 'renesas-dts-for-v6.8-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel into soc/dt

Renesas DTS updates for v6.8 (take two)

  - Add IA55 interrupt controller and Ethernet support for the RZ/G3S
    SoC and the RZ/G3S SMARC SoM,
  - Miscellaneous fixes and improvements.

* tag 'renesas-dts-for-v6.8-tag2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-devel:
  arm64: dts: renesas: white-hawk-cpu: Fix missing serial console pin control
  arm64: dts: renesas: rzg3s-smarc-som: Enable the Ethernet interfaces
  arm64: dts: renesas: rzg3s-smarc-som: Use switches' names to select on-board functionalities
  arm64: dts: renesas: r9a08g045: Add Ethernet nodes
  arm64: dts: renesas: r9a08g045: Add IA55 interrupt controller node

Link: https://lore.kernel.org/r/cover.1702642342.git.geert+renesas@glider.be
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2023-12-21 16:25:46 +00:00
Heiner Kallweit
4289e434c4 leds: trigger: netdev: Add core support for hw not supporting fallback to LED sw control
If hw doesn't support sw control of the LED and we switch to a mode
not supported by hw, currently we get lots of errors because neither
brigthness_set() nor brithness_set_blocking() is set.
Deal with this by not falling back to sw control, and return
-EOPNOTSUPP to the user. Note that we still store the new mode.
This is needed in case an intermediate unsupported mode is necessary
to switch from one supported mode to another.

Add a comment explaining how a driver for such hw is supposed to behave.

Signed-off-by: Heiner Kallweit <hkallweit1@gmail.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/3fd5184c-3641-4b0b-b59a-f489ec69a6cd@gmail.com
Signed-off-by: Lee Jones <lee@kernel.org>
2023-12-21 16:25:21 +00:00
Jan Kuliga
e5bc76b0e1 dmaengine: xilinx: xdma: Ease dma_pool alignment requirements
According to the XDMA datasheet (PG195), the address of any descriptor
must be 32 byte aligned. The datasheet also states that a contiguous
block of descriptors must not cross a 4k address boundary. Therefore,
it is possible to ease the pressure put on the dma_pool allocator
just by requiring sufficient alignment and boundary values. Add proper
macro definition and change the values passed into the
dma_pool_create().

Signed-off-by: Jan Kuliga <jankul@alatek.krakow.pl>
Link: https://lore.kernel.org/r/20231218113943.9099-4-jankul@alatek.krakow.pl
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:51:54 +05:30
Jan Kuliga
7a9c7f46bd dmaengine: xilinx: xdma: Add necessary macro definitions
Complete lacking bits describing the status/control register values.
Add macros describing the status/control registers.

Signed-off-by: Jan Kuliga <jankul@alatek.krakow.pl>
Link: https://lore.kernel.org/r/20231218113943.9099-3-jankul@alatek.krakow.pl
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:51:54 +05:30
Jan Kuliga
6e23871833 dmaengine: xilinx: xdma: Get rid of unused code
Get rid of duplicated macro definitions, as these macros are defined
earlier in the file. Also, get rid of unused member
of 'struct xdma_desc'.

Signed-off-by: Jan Kuliga <jankul@alatek.krakow.pl>
Link: https://lore.kernel.org/r/20231218113943.9099-2-jankul@alatek.krakow.pl
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:51:54 +05:30
Miquel Raynal
f5c392d106 dmaengine: xilinx: xdma: Add terminate_all/synchronize callbacks
The driver is capable of starting scatter-gather transfers and needs to
wait until their end. It is also capable of starting cyclic transfers
and will only be "reset" next time the channel will be reused. In
practice most of the time we hear no audio glitch because the sound card
stops the flow on its side so the DMA transfers are just
discarded. There are however some cases (when playing a bit with a
number of frames and with a discontinuous sound file) when the sound
card seems to be slightly too slow at stopping the flow, leading to a
glitch that can be heard.

In all cases, we need to earn better control of the DMA engine and
adding proper ->device_terminate_all() and ->device_synchronize()
callbacks feels totally relevant. With these two callbacks, no glitch
can be heard anymore.

Fixes: cd8c732ce1 ("dmaengine: xilinx: xdma: Support cyclic transfers")
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Tested-by: Lizhi Hou <lizhi.hou@amd.com>
Link: https://lore.kernel.org/r/20231130111315.729430-5-miquel.raynal@bootlin.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:51:28 +05:30
Miquel Raynal
b3072be7f9 dmaengine: xilinx: xdma: Better handling of the busy variable
The driver internal scatter-gather logic is:
* set busy to true
* start transfer
<irq>
  * set busy to false
  * trigger next transfer if any
    * set busy to true
</irq>

Setting busy to false in cyclic transfers does not make any sense and is
conceptually wrong. In order to ease the integration of additional
callbacks let's move this change to the scatter-gather path.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/r/20231130111315.729430-4-miquel.raynal@bootlin.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:51:27 +05:30
Miquel Raynal
58b61fc75b dmaengine: xilinx: xdma: Clarify the logic between cyclic/sg modes
We support both modes, but they perform totally different taks in the
interrupt handler. Clarify what shall be done in each case.

Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/r/20231130111315.729430-3-miquel.raynal@bootlin.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:51:27 +05:30
Miquel Raynal
26ee018ff6 dmaengine: xilinx: xdma: Fix the count of elapsed periods in cyclic mode
Xilinx DMA engine is capable of keeping track of the number of elapsed
periods and this is an increasing 32-bit counter which is only reset
when turning off the engine. No need to add this value to our local
counter.

Fixes: cd8c732ce1 ("dmaengine: xilinx: xdma: Support cyclic transfers")
Signed-off-by: Miquel Raynal <miquel.raynal@bootlin.com>
Link: https://lore.kernel.org/r/20231130111315.729430-2-miquel.raynal@bootlin.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:51:27 +05:30
Arnd Bergmann
084d415d21 STM32 DT for v6.8, round 1
Highlights:
 ----------
 
 - MCU:
   -  Add SPI support on STM32F746.
   -  Better describe vcc_3v3 for SD and DSI on stm32f469-disco.
 
 - MPU:
   - STM32MP13:
     - Add DCMIPP (Digital Camera Memory Interface Piwel Processor)  on STM32MP135.
 
   - STMP32MP15:
     - Change "phys" affectation from board to Soc dtsi file for USB host as it is hard  linked
       to the port 0 of usbphyc.
     - Fix SCMI and No-SCMI compatible in boards.
 
   - STM32MP25:
     - Add BSEC support to read the device part number OTP and the package data register OTP.
 -----BEGIN PGP SIGNATURE-----
 
 iQJRBAABCgA7FiEEctl9+nxzUSUqdELdf5rJavIecIUFAmV8IvwdHGFsZXhhbmRy
 ZS50b3JndWVAZm9zcy5zdC5jb20ACgkQf5rJavIecIXczA/9FkqesUrCaQtNTvXu
 CAK4drh2MalVcE5puzRp1ibT1WgylMezuuKAdbOu24/Z/RkleoWZn5ytLOehT3JC
 s9d+77p/HtF5TuVWBPeyIeyDjwYxu9YWTrYzaWa4dMtW6bRHqGKfIZBVlUZgqr6V
 GfJBcVmKW1Od0KhS5gRQDh3aYa/Hgg1FK77yd+sTZhcGObkN1zUWV8FfRZXz1aGe
 Cmp06y/VAfXFEUsUUNk+gUFWHMeU/n6rcV1oJRYpqcNq7mCRxQ8PZpSWmZE7ieCH
 I8C4FJ5yBmDNESNyXaIdYVI9H7opscGooq4NWoIcZZdgUB4Y1x5XCQkgd2MUiF85
 sGm1SCPpBd5BvE+G1o0h9Le3J6etls8Pq5clt4UcS4cs8QXPLUNxvbcQv1vJ3CCe
 UNLrwJJvISD5u64caxFKoxht556+j9U/w8P1JmU/SawugPWxnJuOcGlpvOjeaG9s
 ee2q7d8TfJveUbnMFlt1lZ0Q2Vt7jYjvUY94kVUshqOJB6PlI60WIJ2Py4mN6F6e
 8lExh4HCbP4NLajYfiYWuHrxLXFICgNAVR7cbUgrC1eKWl/9Dgw6CvFfcCzWa4PP
 uG46MxakmDUXiL6MUhHpa0eVq8hQAHCjZdhVGzHR3QzBVs+UeXwSw8i3aYb3Vbx7
 fLnVmZQpYfI1E8STqvPPHRcbwYM=
 =9ILX
 -----END PGP SIGNATURE-----
gpgsig -----BEGIN PGP SIGNATURE-----
 
 iQIzBAABCgAdFiEEiK/NIGsWEZVxh/FrYKtH/8kJUicFAmWEZUEACgkQYKtH/8kJ
 Uid9lhAAxSSBBCIrTKrKqgIVKcAlnvnIqHCnCMSAWm3jQwznHRjUyWFz1tt9pbiO
 ibR4nWjip2l9MHNojqdVLKtwWR6uOTVk5PTsCa5XGe90ZUZnxfyv7jocATndrGHS
 NUxXd9Wyaa5Fg0avj5ph3QYyfN0E9CbGmgpBFjZN7NUTzN39wjeaDWtlsdsCFmMi
 /Q0TQv3aT8FanYT3WapoDBMri9GyHJRC7d+MOW0lBRYVncCa4ziIiQDM6oG6bYT7
 yHtHQp+grO8rfAAgdm8NHX1cOFF0xYE6XoN8iPETl0XLveBURo8BrIh4l13+H1au
 Jrpjtdbfa6C40xpDakrErBj5ZM+9kcMGEn9WYjDBYShjnh3+RhEt1aGrpni2iylo
 eK+OtJd/VFAybrKFeUzrOwNumLP0HHGTXCSHSCPi1XbXBlS4df+z9oO2e0bOHrSI
 iSZlGxCA1kUnJinRlXVPqyvDrfexeqz/httAbs/pzsOan5GkX+jr1oM+G1XaSjIT
 dKytUWEBL4iS7capoCgLTJjoMaIJulffRZMUhCb+abNB8AXItREQ1PEk2R0rIgUL
 n0zly2zRV8uwbAoKU51Nd3gDZ6REJNApkzsSNDR49Vrz+ZCM0cSrlpxlbQw0vH8M
 tvhnS2vkRdmjAc81T5BuPRxKPTSYVqPrB08UN9TG47Sudbmoa3E=
 =P9+p
 -----END PGP SIGNATURE-----

Merge tag 'stm32-dt-for-v6.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/atorgue/stm32 into soc/dt

STM32 DT for v6.8, round 1

Highlights:
----------

- MCU:
  -  Add SPI support on STM32F746.
  -  Better describe vcc_3v3 for SD and DSI on stm32f469-disco.

- MPU:
  - STM32MP13:
    - Add DCMIPP (Digital Camera Memory Interface Piwel Processor)  on STM32MP135.

  - STMP32MP15:
    - Change "phys" affectation from board to Soc dtsi file for USB host as it is hard  linked
      to the port 0 of usbphyc.
    - Fix SCMI and No-SCMI compatible in boards.

  - STM32MP25:
    - Add BSEC support to read the device part number OTP and the package data register OTP.

* tag 'stm32-dt-for-v6.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/atorgue/stm32:
  ARM: dts: stm32: add dcmipp support to stm32mp135
  arm64: dts: st: add bsec support to stm32mp25
  ARM: dts: stm32: Consolidate usbh_[eo]hci phy properties on stm32mp15
  ARM: dts: stm32: don't mix SCMI and non-SCMI board compatibles
  dt-bindings: arm: stm32: don't mix SCMI and non-SCMI board compatibles
  ARM: dts: stm32: minor whitespace cleanup around '='
  ARM: dts: stm32: add SPI support on STM32F746
  ARM: dts: stm32: add STM32F746 syscfg clock
  ARM: dts: stm32: use the same 3v3 for SD and DSI nodes on stm32f469-disco

Link: https://lore.kernel.org/r/9363227b-1c44-4a20-b245-efbbbf9ab1dd@foss.st.com
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
2023-12-21 16:18:08 +00:00
Rex Zhang
e271c0ba3f dmaengine: idxd: Move dma_free_coherent() out of spinlocked context
Task may be rescheduled within dma_free_coherent(). So dma_free_coherent()
can't be called between spin_lock() and spin_unlock() to avoid Call Trace:
    Call Trace:
    <TASK>
    dump_stack_lvl+0x37/0x50
    __might_resched+0x16a/0x1c0
    vunmap+0x2c/0x70
    __iommu_dma_free+0x96/0x100
    idxd_device_evl_free+0xd5/0x100 [idxd]
    device_release_driver_internal+0x197/0x200
    unbind_store+0xa1/0xb0
    kernfs_fop_write_iter+0x120/0x1c0
    vfs_write+0x2d3/0x400
    ksys_write+0x63/0xe0
    do_syscall_64+0x44/0xa0
    entry_SYSCALL_64_after_hwframe+0x6e/0xd8
Move it out of the context.

Fixes: 244da66cda ("dmaengine: idxd: setup event log configuration")
Signed-off-by: Rex Zhang <rex.zhang@intel.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Reviewed-by: Fenghua Yu <fenghua.yu@intel.com>
Link: https://lore.kernel.org/r/20231212022158.358619-2-rex.zhang@intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:47:40 +05:30
Vignesh Raghavendra
3b08b37755 dmaengine: ti: k3-udma: Add PSIL threads for AM62P and J722S
Add PSIL thread information and enable UDMA support for AM62P
and J722S SoC. J722S SoC family is a superset of AM62P, thus
common PSIL thread ID map is reused for both devices.

For those interested, more details about the SoC can be found
in the Technical Reference Manual here:
	AM62P - https://www.ti.com/lit/pdf/spruj83
	J722S -	https://www.ti.com/lit/zip/sprujb3

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
Signed-off-by: Bryan Brattlof <bb@ti.com>
Signed-off-by: Vaishnav Achath <vaishnav.a@ti.com>
Reviewed-by: Jai Luthra <j-luthra@ti.com>
Link: https://lore.kernel.org/r/20231213081318.26203-1-vaishnav.a@ti.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:45:18 +05:30
Amelie Delaunay
f5c24d9451 dmaengine: fix NULL pointer in channel unregistration function
__dma_async_device_channel_register() can fail. In case of failure,
chan->local is freed (with free_percpu()), and chan->local is nullified.
When dma_async_device_unregister() is called (because of managed API or
intentionally by DMA controller driver), channels are unconditionally
unregistered, leading to this NULL pointer:
[    1.318693] Unable to handle kernel NULL pointer dereference at virtual address 00000000000000d0
[...]
[    1.484499] Call trace:
[    1.486930]  device_del+0x40/0x394
[    1.490314]  device_unregister+0x20/0x7c
[    1.494220]  __dma_async_device_channel_unregister+0x68/0xc0

Look at dma_async_device_register() function error path, channel device
unregistration is done only if chan->local is not NULL.

Then add the same condition at the beginning of
__dma_async_device_channel_unregister() function, to avoid NULL pointer
issue whatever the API used to reach this function.

Fixes: d2fb0a0438 ("dmaengine: break out channel registration")
Signed-off-by: Amelie Delaunay <amelie.delaunay@foss.st.com>
Reviewed-by: Dave Jiang <dave.jiang@intel.com>
Link: https://lore.kernel.org/r/20231213160452.2598073-1-amelie.delaunay@foss.st.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:44:29 +05:30
Frank Li
d0e217b72f dmaengine: fsl-edma: utilize common dt-binding header file
Refactor the code to use the common dt-binding header file, fsl-edma.h.
Renaming ARGS* to FSL_EDMA*, ensuring no functional changes.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20231114154824.3617255-4-Frank.Li@nxp.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:41:06 +05:30
Frank Li
1e9b052582 dt-bindings: dma: fsl-edma: Add fsl-edma.h to prevent hardcoding in dts
Introduce a common dt-bindings header file, fsl-edma.h, shared between
the driver and dts files. This addition aims to eliminate hardcoded values
in dts files, promoting maintainability and consistency.

DTS header file not support BIT() macro yet. Directly use 2^n number.

Signed-off-by: Frank Li <Frank.Li@nxp.com>
Reviewed-by: Rob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/20231114154824.3617255-3-Frank.Li@nxp.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:41:06 +05:30
Frank Li
dc51b4442d dmaengine: fsl-edma: fix eDMAv4 channel allocation issue
The eDMAv4 channel mux has a limitation where certain requests must use
even channels, while others must use odd numbers.

Add two flags (ARGS_EVEN_CH and ARGS_ODD_CH) to reflect this limitation.
The device tree source (dts) files need to be updated accordingly.

This issue was identified by the following commit:
commit a725990557 ("arm64: dts: imx93: Fix the dmas entries order")

Reverting channel orders triggered this problem.

Fixes: 72f5801a4e ("dmaengine: fsl-edma: integrate v3 support")
Signed-off-by: Frank Li <Frank.Li@nxp.com>
Link: https://lore.kernel.org/r/20231114154824.3617255-2-Frank.Li@nxp.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:41:06 +05:30
Paul Cercueil
f60dfe0c56 dmaengine: axi-dmac: Improve cyclic DMA transfers in SG mode
For cyclic transfers, chain the last descriptor to the first one, and
disable IRQ generation if there is no callback registered with the
cyclic transfer.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20231215131313.23840-6-paul@crapouillou.net
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:39:56 +05:30
Paul Cercueil
238f68a08e dmaengine: axi-dmac: Use only EOT interrupts when doing scatter-gather
Instead of notifying userspace in the end-of-transfer (EOT) interrupt
and program the hardware in the start-of-transfer (SOT) interrupt, we
can do both things in the EOT, allowing us to mask the SOT, and halve
the number of interrupts sent by the HDL core.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20231215131313.23840-5-paul@crapouillou.net
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:39:56 +05:30
Paul Cercueil
e97dc74359 dmaengine: axi-dmac: Add support for scatter-gather transfers
Implement support for scatter-gather transfers. Build a chain of
hardware descriptors, each one corresponding to a segment of the
transfer, and linked to the next one. The hardware will transfer the
chain and only fire interrupts when the whole chain has been
transferred.

Support for scatter-gather is automatically enabled when the driver
detects that the hardware supports it, by writing then reading the
AXI_DMAC_REG_SG_ADDRESS register. If not available, the driver will fall
back to standard DMA transfers.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20231215131313.23840-4-paul@crapouillou.net
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:39:56 +05:30
Paul Cercueil
3f8fd25936 dmaengine: axi-dmac: Allocate hardware descriptors
Change where and how the DMA transfers meta-data is stored, to prepare
for the upcoming introduction of scatter-gather support.

Allocate hardware descriptors in the format that the HDL core will be
expecting them when the scatter-gather feature is enabled, and use these
fields to store the data that was previously stored in the axi_dmac_sg
structure.

Note that the 'x_len' and 'y_len' fields now contain the transfer length
minus one, since that's what the hardware will expect in these fields.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20231215131313.23840-3-paul@crapouillou.net
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:39:56 +05:30
Paul Cercueil
a2ab704538 dmaengine: axi-dmac: Small code cleanup
Use a for() loop instead of a while() loop in axi_dmac_fill_linear_sg().
This makes the code leaner and cleaner overall, and does not introduce
any functional change.

Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Link: https://lore.kernel.org/r/20231215131313.23840-2-paul@crapouillou.net
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:39:56 +05:30
Binbin Zhou
71e7d3cb6e dmaengine: ls2x-apb: New driver for the Loongson LS2X APB DMA controller
The Loongson LS2X APB DMA controller is available on Loongson-2K chips.

It is a single-channel, configurable DMA controller IP core based on the
AXI bus, whose main function is to integrate DMA functionality on a chip
dedicated to carrying data between memory and peripherals in APB bus
(e.g. nand).

Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn>
Signed-off-by: Yingkun Meng <mengyingkun@loongson.cn>
Link: https://lore.kernel.org/r/8df2a0199434fba3535831082966c2442ecf1cae.1702365725.git.zhoubinbin@loongson.cn
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:35:13 +05:30
Binbin Zhou
3b3b5339cd dt-bindings: dmaengine: Add Loongson LS2X APB DMA controller
Add Loongson LS2X APB DMA controller binding with DT schema
format using json-schema.

Reviewed-by: Conor Dooley <conor.dooley@microchip.com>
Signed-off-by: Binbin Zhou <zhoubinbin@loongson.cn>
Link: https://lore.kernel.org/r/078307641077edaf46dd986c6d31cea15545a208.1702365725.git.zhoubinbin@loongson.cn
Signed-off-by: Vinod Koul <vkoul@kernel.org>
2023-12-21 21:35:13 +05:30