Date: Thu, 18 Jul 2024 18:36:50 -0400 From: Kent Overstreet To: Linus Torvalds Cc: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] bcachefs changes for 6.11, v2 Ok, version 2: The following changes since commit 0c3836482481200ead7b416ca80c68a29cfdaabd: Linux 6.10 (2024-07-14 15:43:32 -0700) are available in the Git repository at: https://evilpiepirate.org/git/bcachefs.git tags/bcachefs-2024-07-18 for you to fetch changes up to 6f719cbe0c8b3b8a14b403b9e60fdb565fd829fe: bcachefs: Fix integer overflow on trans->nr_updates (2024-07-18 18:33:30 -0400) ---------------------------------------------------------------- bcachefs changes for 6.11-rc1 (version 2) Additional fixes on top of the original 6.11 pull request: - undefined behaviour fixes, originally noted as breaking userspace LTO builds - fix a spurious warning in fsck_err, reported by Marcin - fix an integer overflow on trans->nr_updates, also reported by Marcin; this broke during deletion of highly fragmented indirect extents - Add comments for lockdep functions ====== - Metadata version 1.8: Stripe sectors accounting, BCH_DATA_unstriped This splits out the accounting of dirty sectors and stripe sectors in alloc keys; this lets us see stripe buckets that still have unstriped data in them. This is needed for ensuring that erasure coding is working correctly, as well as completing stripe creation after a crash. - Metadata version 1.9: Disk accounting rewrite The previous disk accounting scheme relied heavily on percpu counters that were also sharded by outstanding journal buffer; it was fast but not extensible or scalable, and meant that all accounting counters were recorded in every journal entry. The new disk accounting scheme stores accounting as normal btree keys; updates are deltas until they are flushed by the btree write buffer. This means we have no practical limit on the number of counters, and a new tagged union format that's easy to extend. We now have counters for compression type/ratio, per-snapshot-id usage, per-btree-id usage, and pending rebalance work. - Self healing on read IO/checksum error data is now automatically rewritten if we get a read error and then a successful retry - Mount API conversion (thanks to Thomas Bertschinger) - Better lockdep coverage Previously, btree node locks were tracked individually by lockdep, like any other lock. But we may take _many_ btree node locks simultaneously, we easily blow through the limit of 48 locks that lockdep can track, leading to lockdep turning itself off. Tracking each btree node lock individually isn't really necessary since we have our own cycle detector for deadlock avoidance and centralized tracking of btree node locks, so we now have a single lockdep_map in btree_trans for "any btree nodes are locked". - some more small incremental work towards online check_allocations - lots more debugging improvements, fixes ---------------------------------------------------------------- Ariel Miculas (2): bcachefs: bch2_dir_emit() - fix directory reads in the fuse driver bcachefs: bch2_btree_insert() - add btree iter flags Brian Foster (2): bcachefs: fix smatch data leak warning in fs usage ioctl MAINTAINERS: remove Brian Foster as a reviewer for bcachefs Hongbo Li (5): bcachefs: implement FS_IOC_GETVERSION to support lsattr bcachefs: support get fs label bcachefs: support FS_IOC_SETFSLABEL bcachefs: support STATX_DIOALIGN for statx file bcachefs: show none if label is not set Kent Overstreet (93): bcachefs: Print allocator stuck on timeout in fallocate path bcachefs: btree ids are 64 bit bitmasks bcachefs: uninline fallocate functions bcachefs: add capacity, reserved to fs_alloc_debug_to_text() bcachefs: sysfs internal/trigger_journal_writes bcachefs: sysfs trigger_freelist_wakeup bcachefs: bch2_btree_reserve_cache_to_text() bcachefs: fix ei_update_lock lock ordering bcachefs: fix missing include bcachefs: add might_sleep() annotations for fsck_err() bcachefs: Check for bsets past bch_btree_ptr_v2.sectors_written bcachefs: btree_ptr_sectors_written() now takes bkey_s_c bcachefs: bch2_printbuf_strip_trailing_newline() bcachefs: check_key_has_inode() bcachefs: bch_alloc->stripe_sectors bcachefs: BCH_DATA_unstriped bcachefs: metadata version bucket_stripe_sectors bcachefs: KEY_TYPE_accounting bcachefs: Accumulate accounting keys in journal replay bcachefs: btree write buffer knows how to accumulate bch_accounting keys bcachefs: Disk space accounting rewrite bcachefs: Coalesce accounting keys before journal replay bcachefs: dev_usage updated by new accounting bcachefs: Kill bch2_fs_usage_initialize() bcachefs: Convert bch2_ioctl_fs_usage() to new accounting bcachefs: kill bch2_fs_usage_read() bcachefs: Kill writing old accounting to journal bcachefs: Delete journal-buf-sharded old style accounting bcachefs: Kill bch2_fs_usage_to_text() bcachefs: Kill fs_usage_online bcachefs: Kill replicas_journal_res bcachefs: Convert gc to new accounting bcachefs: Convert bch2_replicas_gc2() to new accounting bcachefs: bch2_verify_accounting_clean() bcachefs: bch_acct_compression bcachefs: Convert bch2_compression_stats_to_text() to new accounting bcachefs: bch2_fs_accounting_to_text() bcachefs: bch2_fs_usage_base_to_text() bcachefs: bch_acct_snapshot bcachefs: bch_acct_btree bcachefs: bch_acct_rebalance_work bcachefs: Eytzinger accumulation for accounting keys bcachefs: Kill bch2_mount() bcachefs: bch2_fs_get_tree() cleanup bcachefs: Don't block journal when finishing check_allocations() bcachefs: Walk leaf to root in btree_gc bcachefs: Initialize gc buckets in alloc trigger bcachefs: Delete old assertion for online fsck bcachefs: btree_types bitmask cleanups bcachefs: fsck_err() may now take a btree_trans bcachefs: Plumb more logging through stdio redirect bcachefs: twf: convert bch2_stdio_redirect_readline() to darray bcachefs: bch2_stdio_redirect_readline_timeout() bcachefs: twf: delete dead struct fields bcachefs: Unlock trans when waiting for user input in fsck bcachefs: BCH_IOCTL_QUERY_ACCOUNTING bcachefs: Fix race in bch2_accounting_mem_insert() bcachefs: Refactor disk accounting data structures bcachefs: bch2_accounting_mem_gc() bcachefs: Fix bch2_gc_accounting_done() locking bcachefs: Kill gc_pos_btree_node() bcachefs: bch2_btree_id_to_text() bcachefs: bch2_gc_pos_to_text() bcachefs: btree_node_unlock() assert bcachefs: btree_path_cached_set() bcachefs: kill key cache arg to bch2_assert_pos_locked() bcachefs: per_cpu_sum() bcachefs: Reduce the scope of gc_lock bcachefs: bch2_btree_key_cache_drop() now evicts bcachefs: split out lru_format.h bcachefs: Ensure buffered writes write as much as they can bcachefs: Fix missing BTREE_TRIGGER_bucket_invalidate flag bcachefs: Improve "unable to allocate journal write" message bcachefs: Simplify btree key cache fill path bcachefs: spelling fix bcachefs: Ratelimit checksum error messages bcachefs: bch2_extent_crc_unpacked_to_text() bcachefs: Make read_only a mount option again, but hidden bcachefs: Self healing on read IO error bcachefs: Improve startup message bcachefs: Convert clock code to u64s bcachefs: Improve copygc_wait_to_text() lockdep: lockdep_set_notrack_class() bcachefs: Add lockdep support for btree node locks bcachefs: btree node scan: fall back to comparing by journal seq bcachefs: drop packed, aligned from bkey_inode_buf bcachefs: __bch2_read(): call trans_begin() on every loop iter bcachefs: Rename BCH_WRITE_DONE -> BCH_WRITE_SUBMITTED bcachefs: Kill bch2_assert_btree_nodes_not_locked() bcachefs: Add an error message for insufficient rw journal devs bcachefs: Fix fsck warning about btree_trans not passed to fsck error bcachefs: silence silly kdoc warning bcachefs: Fix integer overflow on trans->nr_updates Pankaj Raghav (2): bcachefs: use FGP_WRITEBEGIN instead of combining individual flags bcachefs: set fgf order hint before starting a buffered write Reed Riley (1): bcachefs: support REMAP_FILE_DEDUP in bch2_remap_file_range Tavian Barnes (2): bcachefs: darray: Don't pass NULL to memcpy() bcachefs: varint: Avoid left-shift of a negative value Thomas Bertschinger (6): bcachefs: make offline fsck set read_only fs flag bcachefs: don't expose "read_only" as a mount option bcachefs: allow passing full device path for target options bcachefs: add printbuf arg to bch2_parse_mount_opts() bcachefs: Add error code to defer option parsing bcachefs: use new mount API Uros Bizjak (1): bcachefs: Use try_cmpxchg() family of functions instead of cmpxchg() Youling Tang (5): bcachefs: Fix missing spaces in journal_entry_dev_usage_to_text bcachefs: Align the display format of `btrees/inodes/keys` bcachefs: Use filemap_read() to simplify the execution flow bcachefs: track writeback errors using the generic tracking infrastructure bcachefs: Add tracepoints for bch2_sync_fs() and bch2_fsync() MAINTAINERS | 1 - fs/bcachefs/Makefile | 3 +- fs/bcachefs/acl.c | 4 +- fs/bcachefs/alloc_background.c | 189 +++++--- fs/bcachefs/alloc_background.h | 41 +- fs/bcachefs/alloc_background_format.h | 2 + fs/bcachefs/alloc_foreground.c | 20 +- fs/bcachefs/alloc_foreground.h | 1 + fs/bcachefs/backpointers.c | 22 +- fs/bcachefs/bcachefs.h | 29 +- fs/bcachefs/bcachefs_format.h | 70 +-- fs/bcachefs/bcachefs_ioctl.h | 36 +- fs/bcachefs/bkey_methods.c | 1 + fs/bcachefs/btree_cache.c | 16 +- fs/bcachefs/btree_cache.h | 2 + fs/bcachefs/btree_gc.c | 287 ++++-------- fs/bcachefs/btree_gc.h | 23 +- fs/bcachefs/btree_gc_types.h | 13 +- fs/bcachefs/btree_io.c | 45 +- fs/bcachefs/btree_io.h | 6 +- fs/bcachefs/btree_iter.c | 88 ++-- fs/bcachefs/btree_iter.h | 15 +- fs/bcachefs/btree_journal_iter.c | 23 +- fs/bcachefs/btree_journal_iter.h | 17 + fs/bcachefs/btree_key_cache.c | 344 ++++++-------- fs/bcachefs/btree_locking.c | 12 +- fs/bcachefs/btree_locking.h | 9 +- fs/bcachefs/btree_node_scan.c | 51 ++- fs/bcachefs/btree_node_scan_types.h | 1 + fs/bcachefs/btree_trans_commit.c | 171 ++++--- fs/bcachefs/btree_types.h | 21 +- fs/bcachefs/btree_update.c | 6 +- fs/bcachefs/btree_update.h | 36 +- fs/bcachefs/btree_update_interior.c | 42 +- fs/bcachefs/btree_update_interior.h | 2 + fs/bcachefs/btree_write_buffer.c | 140 +++++- fs/bcachefs/btree_write_buffer.h | 49 +- fs/bcachefs/btree_write_buffer_types.h | 2 + fs/bcachefs/buckets.c | 764 +++++++------------------------ fs/bcachefs/buckets.h | 71 +-- fs/bcachefs/buckets_types.h | 17 +- fs/bcachefs/chardev.c | 103 +++-- fs/bcachefs/checksum.c | 5 +- fs/bcachefs/clock.c | 65 ++- fs/bcachefs/clock.h | 9 +- fs/bcachefs/clock_types.h | 3 +- fs/bcachefs/darray.c | 3 +- fs/bcachefs/dirent.c | 8 + fs/bcachefs/disk_accounting.c | 790 +++++++++++++++++++++++++++++++++ fs/bcachefs/disk_accounting.h | 219 +++++++++ fs/bcachefs/disk_accounting_format.h | 162 +++++++ fs/bcachefs/disk_accounting_types.h | 19 + fs/bcachefs/disk_groups.c | 2 +- fs/bcachefs/ec.c | 117 +++-- fs/bcachefs/errcode.h | 3 +- fs/bcachefs/error.c | 56 ++- fs/bcachefs/error.h | 22 +- fs/bcachefs/extents.c | 29 +- fs/bcachefs/extents.h | 4 + fs/bcachefs/eytzinger.h | 11 + fs/bcachefs/fs-common.h | 2 + fs/bcachefs/fs-io-buffered.c | 41 +- fs/bcachefs/fs-io-direct.c | 4 +- fs/bcachefs/fs-io-pagecache.c | 37 +- fs/bcachefs/fs-io-pagecache.h | 7 +- fs/bcachefs/fs-io.c | 23 +- fs/bcachefs/fs-ioctl.c | 80 +++- fs/bcachefs/fs.c | 209 ++++++--- fs/bcachefs/fsck.c | 280 ++++++------ fs/bcachefs/inode.c | 60 ++- fs/bcachefs/inode.h | 2 +- fs/bcachefs/io_misc.c | 6 +- fs/bcachefs/io_read.c | 114 +++-- fs/bcachefs/io_write.c | 36 +- fs/bcachefs/io_write.h | 2 +- fs/bcachefs/journal.c | 17 +- fs/bcachefs/journal.h | 8 +- fs/bcachefs/journal_io.c | 27 +- fs/bcachefs/journal_reclaim.c | 11 + fs/bcachefs/lru.c | 8 +- fs/bcachefs/lru.h | 12 - fs/bcachefs/lru_format.h | 25 ++ fs/bcachefs/move.c | 2 +- fs/bcachefs/movinggc.c | 11 +- fs/bcachefs/opts.c | 120 +++-- fs/bcachefs/opts.h | 15 +- fs/bcachefs/printbuf.c | 14 + fs/bcachefs/printbuf.h | 1 + fs/bcachefs/recovery.c | 134 ++++-- fs/bcachefs/recovery_passes.c | 5 + fs/bcachefs/recovery_passes_types.h | 1 + fs/bcachefs/reflink.c | 2 +- fs/bcachefs/replicas.c | 251 ++--------- fs/bcachefs/replicas.h | 16 +- fs/bcachefs/replicas_types.h | 16 - fs/bcachefs/sb-clean.c | 62 --- fs/bcachefs/sb-downgrade.c | 113 ++++- fs/bcachefs/sb-downgrade.h | 1 + fs/bcachefs/sb-errors_format.h | 4 +- fs/bcachefs/snapshot.c | 24 +- fs/bcachefs/subvolume.c | 20 +- fs/bcachefs/super-io.c | 5 +- fs/bcachefs/super.c | 92 ++-- fs/bcachefs/sysfs.c | 126 +++--- fs/bcachefs/tests.c | 14 +- fs/bcachefs/thread_with_file.c | 87 ++-- fs/bcachefs/thread_with_file.h | 4 +- fs/bcachefs/thread_with_file_types.h | 5 +- fs/bcachefs/trace.h | 50 +++ fs/bcachefs/two_state_shared_lock.h | 11 +- fs/bcachefs/util.h | 21 +- fs/bcachefs/varint.c | 2 +- include/linux/lockdep.h | 4 + include/linux/lockdep_types.h | 1 + kernel/locking/lockdep.c | 9 +- 115 files changed, 3893 insertions(+), 2683 deletions(-) create mode 100644 fs/bcachefs/disk_accounting.c create mode 100644 fs/bcachefs/disk_accounting.h create mode 100644 fs/bcachefs/disk_accounting_format.h create mode 100644 fs/bcachefs/disk_accounting_types.h create mode 100644 fs/bcachefs/lru_format.h . Date: Fri, 19 Jul 2024 07:24:22 +0200 From: Christoph Hellwig To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, iommu@lists.linux.dev Subject: [GIT PULL] dma-mapping updates for Linux 6.11 The following changes since commit 256abd8e550ce977b728be79a74e1729438b4948: Linux 6.10-rc7 (2024-07-07 14:23:46 -0700) are available in the Git repository at: git://git.infradead.org/users/hch/dma-mapping.git tags/dma-mapping-6.11-2024-07-19 for you to fetch changes up to b69bdba5a37eb6224039e9572e0e98fc3a931fee: swiotlb: fix kernel-doc description for swiotlb_del_transient (2024-07-13 07:36:10 +0200) ---------------------------------------------------------------- dma-mapping updates for Linux 6.11 - reduce duplicate swiotlb pool lookups (Michael Kelley) - minor small fixes (Yicong Yang, Yang Li) ---------------------------------------------------------------- Michael Kelley (1): swiotlb: reduce swiotlb pool lookups Yang Li (1): swiotlb: fix kernel-doc description for swiotlb_del_transient Yicong Yang (1): dma-mapping: benchmark: Don't starve others when doing the test drivers/iommu/dma-iommu.c | 11 ++--- drivers/xen/swiotlb-xen.c | 31 ++++++++----- include/linux/scatterlist.h | 2 +- include/linux/swiotlb.h | 105 ++++++++++++++++++++++++++------------------ kernel/dma/direct.c | 10 ++--- kernel/dma/direct.h | 9 ++-- kernel/dma/map_benchmark.c | 16 +++++++ kernel/dma/swiotlb.c | 68 +++++++++++++++------------- 8 files changed, 146 insertions(+), 106 deletions(-) . Date: Fri, 19 Jul 2024 09:35:04 +0200 From: Takashi Iwai To: Linus Torvalds Cc: Mark Brown , Liam Girdwood , Linux Sound Mailing List , Linux Kernel Mailing List Subject: [GIT PULL] sound updates for 6.11-rc1 Linus, please pull sound updates for v6.11-rc1 from: git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git tags/sound-6.11-rc1 The topmost commit is 4594d26fca91fab0e1621d2ab196f3f9bab96bc8 ---------------------------------------------------------------- sound updates for 6.11-rc1 Lots of changes in this cycle, but mostly for cleanups and refactoring. Significant amount of changes are about DT schema conversions for ASoC at this time while we see other usual suspects, too. Some highlights below: Core: - Re-introduction of PCM sync ID support API - MIDI2 time-base extension in ALSA sequencer API ASoC: - Syncing of features between simple-audio-card and the two audio-graph cards - Support for specifying the order of operations for components within cards to allow quirking for unusual systems - Lots of DT schema conversions - Continued SOF/Intel updates for topology, SoundWire, IPC3/4 - New support for Asahi Kasei AK4619, Cirrus Logic CS530x, Everest Semiconductors ES8311, NXP i.MX95 and LPC32xx, Qualcomm LPASS v2.5 and WCD937x, Realtek RT1318 and RT1320 and Texas Instruments PCM5242 HD-audio: - More quirks, Intel PantherLake support, senarytech codec support - Refactoring of Cirrus codec component-binding Others: - ALSA control kselftest improvements, and fixes for input value checks in various drivers ---------------------------------------------------------------- Abdulrasaq Lawani (1): dt-bindings: sound: Convert max98088 to dtschema Aleksandr Mishin (2): ASoC: qcom: Adjust issues in case of DT error in asoc_qcom_lpass_cpu_platform_probe() ASoC: amd: Adjust error handling in case of absent codec device Amadeusz S³awiñski (13): ASoC: topology: Simplify code ASoC: topology: Do not do unnecessary dobj management ASoC: topology: Properly initialize soc_enum values ASoC: topology: Cleanup soc_tplg_dapm_widget_dbytes_create ASoC: topology: Cleanup soc_tplg_dapm_widget_dmixer_create ASoC: topology: Cleanup soc_tplg_dapm_widget_denum_create ASoC: topology: Correctly set shift_r in soc_tplg_denum_create() ASoC: topology: Align dynamic object initialization for controls ASoC: topology: Rename function creating widget kcontrol ASoC: topology: Reshuffle function placement ASoC: topology: Unify code for creating standalone and widget bytes control ASoC: topology: Unify code for creating standalone and widget mixer control ASoC: topology: Unify code for creating standalone and widget enum control Andrejs Cainikovs (3): ASoC: nau8822: move nau8822_set_dai_sysclk() ASoC: nau8822: set NAU8822_REFIMP_80K only once ASoC: nau8822: add MCLK support Andy Shevchenko (6): ASoC: codecs: Remove unused of_gpio.h ASoC: fsl: Remove unused of_gpio.h ASoC: rockchip: Remove unused of_gpio.h ASoC: codecs: Replace of_gpio.h by proper one ASoC: generic: Replace of_gpio.h by proper one ASoC: samsung: Replace of_gpio.h by proper one Animesh Agarwal (11): ASoC: dt-bindings: ak4554: Convert to dtschema ASoC: dt-bindings: linux,spdif: Convert spdif-reciever.txt to dtschema ASoC: dt-bindings: wlf,wm8782: Convert to dtschema ASoC: dt-bindings: wlf,wm8804: Convert to dtschema ASoC: dt-bindings: realtek,rt5631: Convert to dtschema ASoC: dt-bindings: realtek,rt5514: Convert to dtschema ASoC: dt-bindings: realtek,rt5659: Convert to dtschema ASoC: dt-bindings: realtek,rt5677: Convert to dtschema ASoC: dt-bindings: realtek,rt5645: Convert to dtschema ASoC: dt-bindings: cirrus,cs4270: Convert to dtschema ASoC: dt-bindings: cirrus,cs42xx8: Convert to dtschema Artur Weber (6): ASoC: dt-bindings: samsung,midas-audio: Add headset mic bias supply ASoC: dt-bindings: samsung,midas-audio: Add GPIO-based headset jack detection ASoC: samsung: midas_wm1811: Use SND_SOC_DAPM_REGULATOR_SUPPLY for bias regulators ASoC: samsung: midas_wm1811: Add headset mic bias supply support ASoC: samsung: midas_wm1811: Add GPIO-based headset jack detection ASoC: samsung: midas_wm1811: Use dev_err_probe where appropriate Bard Liao (8): ASoC: Intel: sof_sdw_cs42l42: use dai parameter ASoC: Intel: sof_sdw_rt711: use dai parameter ASoC: Intel: sof_sdw_rt5682: use dai parameter ASoC: Intel: sof_sdw_rt700: use dai parameter ASoC: Intel: sof_sdw_rt_dmic: use from dai parameter ASoC: Intel: sof_sdw_rt_sdca_jack_common: use dai parameter ASoC: Intel: sof_sdw: remove get_codec_dai_by_name ASoC: Intel: sof_sdw: select PINCTRL_CS42L43 and SPI_CS42L43 Brent Lu (8): ASoC: SOF: sof-audio: rename dai clock setting query function ASoC: SOF: sof-audio: add sof_dai_get_tdm_slots function ASoC: SOF: ipc3-topology: support tdm slot number query ASoC: SOF: ipc4-topology: support tdm slot number query ASoC: Intel: maxim-common: rewrite max_98373_hw_params function ASoC: Intel: sof_da7219: remove local max98373 ops ASoC: Intel: sof_da7219: disable max98373 speaker pins in late_probe ASoC: Intel: maxim-common: add max_98373_get_tx_mask function Chancel Liu (3): ASoC: dt-bindings: fsl_rpmsg: Add compatible string for i.MX95 ASoC: fsl_rpmsg: Add support for i.MX95 platform ASoC: fsl_xcvr: Improve suspend/resume flow in fsl_xcvr_trigger() Charles Keepax (3): ASoC: Intel: sof_sdw: Add missing controls for cs42l43/cs35l56 ASoC: Intel: soc-acpi: Add match entries for some cs42l43 laptops ASoC: Intel: sof_sdw: Add quirks for some new Dell laptops Chen Ni (2): ASoC: max98088: Check for clk_prepare_enable() error ASoC: Intel: sof_sdw: Convert comma to semicolon Christian Hewitt (2): ASoC: Add support for ti,pcm5242 to the pcm512x driver ASoC: dt-bindings: add ti,pcm5242 to pcm512x Christophe JAILLET (8): ASoC: topology: Constify an argument of snd_soc_tplg_component_load() ASoC: Intel: avs: Constify struct snd_soc_tplg_ops ASoC: qdsp6: audioreach: Constify struct snd_soc_tplg_ops ASoC: Intel: Skylake: Constify struct snd_soc_tplg_ops ASoC: SOF: topology: Constify struct snd_soc_tplg_ops const_structs.checkpatch: add snd_soc_tplg_ops ASoC: intel: Constify struct snd_soc_ops ASoC: SOF: mediatek: Constify struct mtk_adsp_ipc_ops Dan Carpenter (1): ASoC: samsung: midas_wm1811: Fix error code in probe() Dr. David Alan Gilbert (4): ASoC: codecs: lpass-rx-macro: remove unused struct 'rx_macro_reg_mask_val' ASoC: codecs: wm0010: remove unused struct 'wm0010_spi_msg' ASoC: codecs: cx2072x: remove unused struct 'cx2072x_eq_ctrl' ALSA: xen-front: remove unused struct 'alsa_sndif_hw_param' Edson Juliano Drosdeck (1): ALSA: hda/realtek: Enable headset mic on Positivo SU C1400 Elinor Montmasson (5): ASoC: fsl-asoc-card: add support for dai links with multiple codecs ASoC: fsl-asoc-card: add second dai link component for codecs ASoC: fsl-asoc-card: add compatibility to use 2 codecs in dai-links ASoC: fsl-asoc-card: merge spdif support from imx-spdif.c ASoC: dt-bindings: update fsl-asoc-card bindings after imx-spdif merge Fabio Estevam (3): ASoC: fsl: fsl_aud2htx: Switch to RUNTIME_PM_OPS() ASoC: fsl: fsl_easrc: Switch to RUNTIME_PM_OPS() ASoC: fsl: fsl_xcvr: Switch to RUNTIME_PM_OPS() Hao Ge (1): ASoc: PCM6240: Return directly after a failed devm_kzalloc() in pcmdevice_i2c_probe() Herve Codina (10): ASoC: fsl: fsl_qmc_audio: Check devm_kasprintf() returned value ASoC: fsl: fsl_qmc_audio: Fix issues detected by checkpatch ASoC: fsl: fsl_qmc_audio: Split channel buffer and PCM pointer handling ASoC: fsl: fsl_qmc_audio: Identify the QMC channel involved in completion routines ASoC: fsl: fsl_qmc_audio: Introduce qmc_audio_pcm_{read,write}_submit() ASoC: fsl: fsl_qmc_audio: Introduce qmc_dai_constraints_interleaved() soc: fsl: cpm1: qmc: Introduce functions to get a channel from a phandle list soc: fsl: cpm1: qmc: Introduce qmc_chan_count_phandles() dt-bindings: sound: fsl,qmc-audio: Add support for multiple QMC channels per DAI ASoC: fsl: fsl_qmc_audio: Add support for non-interleaved mode. Jack Yu (1): ASoC: rt1318: Add RT1318 audio amplifier driver Jaroslav Kysela (3): ALSA: pcm: reinvent the stream synchronization ID API ALSA: pcm: optimize and clarify stream synchronization ID API ALSA: pcm: Fix id copying in snd_pcm_set_sync_per_card() Javier Carrasco (9): ASoC: cs35l34: Constify struct regmap_config ASoC: cs35l35: Constify struct regmap_config ASoC: cs35l36: Constify struct regmap_config ASoC: cs53l30: Constify struct regmap_config ASoC: jz4760: Constify struct regmap_config ASoC: jz4770: Constify struct regmap_config ASoC: wsa881x: Constify struct regmap_config ASoC: wsa883x: Constify struct regmap_config ASoC: wsa884x: Constify struct regmap_config Jeff Johnson (2): ASoC: amd: add missing MODULE_DESCRIPTION() macros ASoC: fsl: imx-pcm-fiq: add missing MODULE_DESCRIPTION() macro Jerome Brunet (2): ASoC: soc-utils: allow sample rate up to 768kHz for the dummy dai ASoC: meson: tdm: add sample rate support up to 768kHz Jiaxin Yu (1): ASoC: mediatek: mt6358: Add "Dmic Mode Switch" kcontrol for switch DMIC mode. Khanh Le (1): ASoC: Add ak4619 codec support Krzysztof Kozlowski (70): ASoC: Constify channel mapping array arguments in set_channel_map() ASoC: qcom: q6apm-lpass-dais: Implement proper channel mapping ASoC: qcom: qdsp6: Set channel mapping instead of fixed defaults ASoC: qcom: x1e80100: Correct channel mapping ASoC: codecs: wcd938x: Drop unused duplicated MIC2 bias register defines ASoC: codecs: wcd938x: Unify define used for MIC2 bias register ASoC: codecs: wcd939x: Unify define used for MIC bias registers ASoC: codecs: wcd939x: Minor white-space and define cleanup ASoC: codecs: wcd939x: Unify define used for MIC bias VOUT registers ASoC: codecs: wcd938x: Drop no-op ADC2_BCS Disable Switch ASoC: soc-dai.h: Constify DAI ops auto_selectable_formats ASoC: Constify DAI ops auto_selectable_formats ASoC: Constify of_phandle_args in snd_soc_dai_driver ASoC: Constify of_phandle_args in snd_soc_dai_link_component ASoC: Constify passed data to core function ASoC: Constify DAI passed to get_channel_map ASoC: Constify return of snd_soc_dai_get_pcm_stream() ASoC: qcom: x1e80100: Add USB DisplayPort plug support ASoC: codecs: wcd-mbhc: Constify passed MBHC reg fields ASoC: codecs: wcd9335: Drop unused state container fields ASoC: codecs: wcd9335: Constify static data ASoC: codecs: wcd9335: Handle nicer probe deferral and simplify with dev_err_probe() ASoC: codecs: wcd9335: Drop unneeded error message ASoC: codecs: wcd9335: Drop unused dmic rate handling ASoC: codecs: wcd934x: Drop unused interp path enum ASoC: codecs: wcd934x: Constify static data ASoC: codecs: wcd934x: Drop unused mic bias voltage fields ASoC: codecs: wcd934x: Handle nicer probe deferral and simplify with dev_err_probe() ASoC: codecs: wcd937x: Constify static data ASoC: codecs: wcd937x: Constify wcd937x_sdw_ch_info ASoC: codecs: wcd937x: Drop unused enums, defines and types ASoC: codecs: wcd937x: Drop unused state container fields ASoC: codecs: wcd937x: Drop unused chipid member ASoC: codecs: wcd938x: Constify static data ASoC: codecs: wcd938x: Constify wcd938x_sdw_ch_info ASoC: codecs: wcd938x: Drop unused RX/TX direction enum ASoC: codecs: wcd938x: Drop unused num_ports field ASoC: codecs: wcd939x: Constify static data ASoC: codecs: wcd939x: Constify wcd939x_sdw_ch_info ASoC: codecs: wcd939x: Drop unused RX/TX direction enum ASoC: codecs: wcd939x: Drop unused num_ports field ASoC: codecs: lpass-rx-macro: add missing handling of v2.1 codec ASoC: codecs: lpass-wsa-macro: Drop unused define ASoC: codecs: lpass-wsa-macro: Prepare to accommodate new codec versions ASoC: codecs: lpass-wsa-macro: Correct support for newer v2.5 version ASoC: codecs: lpass-macro: Gracefully handle unknown version ASoC: codecs: lpass-macro: Use enum for handling codec version ASoC: codecs: lpass-wsa-macro: add missing select of common code ASoC: codecs: lpass-rx-macro: Fix using NULL pointer in probe() dev_err ASoC: codecs: lpass-wsa-macro: Fix using NULL pointer in probe() dev_err ASoC: codecs: lpass-rx-macro: Simplify PDS cleanup with devm ASoC: codecs: lpass-rx-macro: Simplify with cleanup.h ASoC: codecs: lpass-rx-macro: Keep static regmap_config as const ASoC: dapm: Use unsigned for number of widgets in snd_soc_dapm_new_controls() ASoC: codecs: lpass-rx-macro: Use unsigned for number of widgets ASoC: codecs: lpass-wsa-macro: Simplify with cleanup.h ASoC: codecs: wcd939x: Fix typec mux and switch leak during device removal ASoC: codecs: audio-iio-aux: Simplify audio_iio_aux_add_dapms() with cleanup.h ASoC: codecs: audio-iio-aux: Simplify audio_iio_aux_probe() with cleanup.h ASoC: codecs: wcd9335: Simplify with cleanup.h ASoC: codecs: wcd934x: Simplify with cleanup.h ASoC: simple-card-utils: Simplify with cleanup.h ASoC: audio-graph-card: Use cleanup.h instead of devm_kfree() ASoC: audio-graph-card2: Use cleanup.h instead of devm_kfree() ASoC: simple-card: Use cleanup.h instead of devm_kfree() ASoC: ops: Simplify with cleanup.h ASoC: dapm: Simplify dapm_cnew_widget() with cleanup.h ASoC: dapm: Simplify snd_soc_dai_link_event_pre_pmu() with cleanup.h ASoC: codecs: aw88395: Simplify with cleanup.h ASoC: qcom: topology: Simplify with cleanup.h Kuninori Morimoto (22): ASoC: simple-card-utils: remove both playback/capture_only check ASoC: audio-graph-card2: add ep_to_port() / port_to_ports() ASoC: audio-graph-card2: remove ports node name check ASoC: audio-graph-card2: expand dai_link property part ASoC: audio-graph-card2: merge graph_parse_mclk_fs() into graph_link_init() ASoC: audio-graph-card: add ep_to_port() / port_to_ports() ASoC: audio-graph-card: remove ports node name check ASoC: audio-graph-card: enable playback/capture_only property ASoC: audio-graph-card: merge graph_parse_mclk_fs() into graph_link_init() ASoC: simple-audio-card: enable playback/capture_only property ASoC: simple-audio-card: merge simple_parse_mclk_fs() into simple_link_init() ASoC: audio-graph-card2: add support for aux devices ASoC: dt-bindings: audio-graph-card2: add support for aux devices ASoC: dt-bindings: ak4619: Add initial DT binding ASoC: dt-bindings: add missing vender prefix on filename ASoC: audio-graph-port: add link-trigger-order ASoC: simple-card-utils: add link-trigger-order support ASoC: simple-audio-card: add link-trigger-order support ASoC: audio-graph-card: add link-trigger-order support ASoC: audio-graph-card2: add link-trigger-order support ASoC: simple-audio-mux: enable to select MUX names ASoC: dt-bindings: simple-audio-mux: add state-labels property Linus Walleij (1): ASoC: tas5086: Convert to GPIO descriptors Lukas Bulwahn (1): MAINTAINERS: adjust file entries after adding vendor prefix in sound dtbs Manikantan R (1): ASoC: dt-bindings: wsa883x: Document port mapping property Mark Brown (3): kselftest/alsa: Fix validation of writes to volatile controls kselftest/alsa: Use card name rather than number in test names kselftest/alsa: Log the PCM ID in pcm-test Matteo Martelli (2): ASoC: es8311: dt-bindings: add everest es8311 codec ASoC: codecs: es8311: add everest es8311 codec support Maxim Kochetkov (2): ASoC: dt-bindings: nau8824: Add master clock handling ASoC: codecs: nau8824: Add master clock handling Mithil Bavishi (1): ASoC: dt-bindings: omap-mcpdm: Convert to DT schema Mohammad Rafi Shaik (3): ASoC: codecs: wcd937x-sdw: Fix Unbalanced pm_runtime_enable ASoC: codecs: wcd937x: Remove the string compare in MIC BIAS widget settings ASoC: codecs: wcd937x: Remove separate handling for vdd-buck supply Mohan Kumar (2): ASoC: simple-card-utils: Split simple_fixup_sample_fmt func ASoC: tegra: I2S client convert formats handling Nathan Chancellor (2): ASoC: fsl: lpc3xxx-i2s: Avoid using ret uninitialized in lpc32xx_i2s_probe() ASoC: fsl: lpc3xxx-i2s: Include bitfield.h for FIELD_PREP Neil Armstrong (5): ASoC: dt-bindings: convert amlogic,g12a-tohdmitx to dt-schema ASoC: dt-bindings: convert tas571x.txt to dt-schema ASoC: dt-bindings: convert everest,es7241.txt to dt-schema ASoC: dt-bindings: convert everest,es7134.txt to dt-schema ASoC: dt-bindings: amlogic,gx-sound-card: drop minItems for audio-widgets Paul Handrigan (4): ASoC: dt-bindings: cirrus,cs530x: Add initial DT binding ASoC: cs530x: Support for cs530x ADCs ASoC: cs530x: Calculate proper bclk rate using TDM ASoC: cs530x: Remove bclk from private structure Peter Ujfalusi (4): ASoC: SOF: ipc4-topology: Add support for NHLT with 16-bit only DMIC blob ASoC: SOF: Intel: pci-tgl: Align ADL-N sof_dev_desc struct name to convention ASoC: SOF: ipc4-topology: Use correct queue_id for requesting input pin format ASoC: SOF: ipc4-topology: Use single token list for the copiers Pierre-Louis Bossart (9): ASoC: SOF: Intel: hda: print PCI class info only once ACPI: utils: introduce acpi_get_local_u64_address() soundwire: slave: simplify code with acpi_get_local_u64_address() ALSA: hda: intel-sdw-acpi: use acpi_get_local_u64_address() PCI: Add INTEL_HDA_PTL to pci_ids.h ALSA: hda: hda-intel: add PantherLake support ALSA: hda: intel-dsp-config: Add PTL support ASoC: Intel: sof_sdw: fix jack detection on ADL-N variant RVP ASoC: Intel: sof_sdw: add quirk for Dell SKU 0B8C Piotr Wojtaszczyk (2): ASoC: dt-bindings: lpc32xx: Add lpc32xx i2s DT binding ASoC: fsl: Add i2s and pcm drivers for LPC32xx CPUs Prasad Kumpatla (7): ASoC: dt-bindings: document wcd937x Audio Codec ASoC: codecs: wcd937x-sdw: add SoundWire driver ASoC: codecs: wcd937x: add wcd937x codec driver ASoC: codecs: wcd937x: add basic controls ASoC: codecs: wcd937x: add playback dapm widgets ASoC: codecs: wcd937x: add capture dapm widgets ASoC: codecs: wcd937x: add audio routing and Kconfig Rayyan Ansari (2): ASoC: dt-bindings: qcom,msm8916-wcd-digital-codec: convert to dtschema ASoC: dt-bindings: qcom,apq8096-sndcard: use dtschema Ricard Wanderlof (3): ASoC: dt-bindings: tlv320adc3xxx: Fix incorrect GPIO description ASoC: dt-bindings: tlv320adc3xxx: Add MICBIAS-as-GPO properties ASoC: tlv320adc3xxx: Add support for using MICBIAS pins as GPO Richard Fitzgerald (10): ASoC: cs35l56: Revert support for dual-ownership of ASP registers ASoC: cs35l56: Remove support for A1 silicon ASoC: cs35l56: Remove redundant clearing of clk_stop_mode1 firmware: cs_dsp: Don't allow writes to read-only controls ASoC: cs35l56: Use header defines for Speaker Volume control definition ASoC: cs35l56: Limit Speaker Volume to +12dB maximum firmware: cs_dsp: Don't allocate temporary buffer for info text firmware: cs_dsp: Make wmfw and bin filename arguments const char * firmware: cs_dsp: Clarify wmfw format version log message firmware: cs_dsp: Rename fw_ver to wmfw_ver Rob Herring (Arm) (2): ASoC: PCM6240: Use of_property_read_reg() ASoC: tas2781: Use of_property_read_reg() Seunghun Han (1): ALSA: hda/realtek: Fix the speaker output on Samsung Galaxy Book Pro 360 Shenghao Ding (9): ASoc: tas2781: Enable RCA-based playback without DSP firmware download ASoc: tas2781: Add name_prefix as the prefix name of firmwares and kcontrol to support corresponding TAS2563/TAS2781s ASoc: tas2781: Add name_prefix as the prefix name of DSP firmwares and calibrated data files ASoc: tas2781: Set "Speaker Force Firmware Load" as the common kcontrol for both tas27871 and tas2563 ASoc: pcm6240: Remove unnecessary name-prefix for all the controls ASoc: TAS2781: replace beXX_to_cpup with get_unaligned_beXX for potentially broken alignment ASoc: TAS2781: rename the tas2781_reset as tasdevice_reset ASoC: tas2781: Add new Kontrol to set tas2563 digital Volume ALSA: hda/tas2781: Add new quirk for Lenovo Hera2 Laptop Shengjiu Wang (10): ASoC: dt-bindings: fsl,mqs: Add i.MX95 platform support ASoC: fsl_mqs: Add i.MX95 platform support ASoC: dt-bindings: fsl,xcvr: Add compatible string for i.MX95 ASoC: fsl_xcvr: Add support for i.MX95 platform ASoC: fsl_sai: Add separate DAI for transmitter and receiver ASoC: fsl_audmix: Split playback and capture stream to different DAI ASoC: imx-audmix: Split capture device for audmix ASoC: dt-bindings: fsl,xcvr: Adjust the number of interrupts ASoC: ak4458: remove "reset-gpios" property handler ALSA: pcm_dmaengine: Don't synchronize DMA channel when DMA is paused Shuming Fan (4): ASoC: rt1320: Add RT1320 SDCA vendor-specific driver ASoC: rt711-sdca: add GE selected mode control ASoC: rt712-sdca: change the definition name of SDCA channel number ASoC: rt712-sdca: add the function for version B Simon Trimmer (7): ASoC: cs35l56: Attempt to read from cirrus,speaker-id device property first ALSA: hda: hda_component: Introduce component parent structure ALSA: hda: hda_component: Change codecs to use component parent structure ALSA: hda: hda_component: Move codec field into the parent ALSA: hda: hda_component: Protect shared data with a mutex ALSA: hda: cs35l56: Perform firmware download in the background ASoC: cs35l56: Accept values greater than 0 as IRQ numbers Srinivas Kandagatla (9): ASoC: codecs: lpass-macro: add helpers to get codec version ASoC: codec: lpass-rx-macro: prepare driver to accomdate new codec versions ASoC: codec: lpass-rx-macro: add support for 2.5 codec version ASoC: qcom: q6dsp: parse Display port tokens ASoC: qcom: common: add Display port Jack function ASoC: qcom: sc8280xp: add Display port Jack ASoC: codecs: wsa883x: parse port-mapping information ASoC: dt-bindings: wsa8840: Document port mapping property ASoC: codecs: wsa884x: parse port-mapping information Stefan Binding (1): ALSA: hda: cs35l41: Fix missing Speaker ID GPIO description in _DSD Takashi Iwai (15): ALSA: vmaster: Return error for invalid input values ALSA: hda: Return -EINVAL for invalid volume/switch inputs ALSA: control: Apply sanity check of input values for user elements ALSA: chmap: Mark Channel Map controls as volatile ALSA: hda: Add input value sanity checks to HDMI channel map controls ALSA: control: Allow NULL passed to snd_ctl_remove() ALSA: sb: Drop NULL check for snd_ctl_remove() ALSA: hda: Drop NULL check for snd_ctl_remove() ALSA: spi: Drop NULL check for snd_ctl_remove() ALSA: pcm_dmaengine: Unify two close functions ALSA: pcm: Fix missing export of snd_pcm_set_sync_per-card() ALSA: seq: Add tempo base unit for MIDI2 Set Tempo messages ALSA: usb: Fix UBSAN warning in parse_audio_unit() ALSA: usb: Use BIT() for bit values ALSA: seq: ump: Skip useless ports for static blocks Tony Luck (1): ASoC: Intel: avs: es8336: Switch to new Intel CPU model defines Uwe Kleine-König (2): ASoC: codecs: Drop explicit initialization of struct i2c_device_id::driver_data to 0 ALSA: ppc: keywest: Drop explicit initialization of struct i2c_device_id::driver_data to 0 Vijendar Mukunda (5): ASoC: amd: acp: remove acp_i2s_probe function ASoC: amd: acp: remove unused variables from acp_resource structure ASoC: amd: acp: modify conditional check for programming i2s mclk ASoC: amd: acp: move i2s clock generation sequence ASoC: amd: acp: add pcm constraints for buffer size and period size Xiaxi Shen (1): ASoC: dt-bindings: ak4104: convert to dt schema Yang Li (1): ASoC: Remove unneeded semicolon Zhang Yi (3): ASoC: codecs: ES8326: Slove headphone detection issue ASoC: codecs: ES8326: Minimize the pop noise ASoC: codecs: ES8326: regcache_sync error issue Zhu Jun (1): selftests/alsa:Fix printf format string in pcm-test.c bo liu (1): ALSA: hda/senarytech: add senarytech codec support --- Documentation/devicetree/bindings/sound/ak4104.txt | 25 - Documentation/devicetree/bindings/sound/ak4554.txt | 11 - .../bindings/sound/amlogic,g12a-tohdmitx.txt | 58 - .../bindings/sound/amlogic,g12a-tohdmitx.yaml | 54 + .../bindings/sound/amlogic,gx-sound-card.yaml | 1 - .../bindings/sound/asahi-kasei,ak4104.yaml | 49 + .../sound/{ak4375.yaml => asahi-kasei,ak4375.yaml} | 2 +- .../bindings/sound/asahi-kasei,ak4554.yaml | 27 + .../sound/{ak4613.yaml => asahi-kasei,ak4613.yaml} | 2 +- .../bindings/sound/asahi-kasei,ak4619.yaml | 62 + .../sound/{ak4642.yaml => asahi-kasei,ak4642.yaml} | 2 +- .../bindings/sound/audio-graph-card2.yaml | 5 + .../bindings/sound/audio-graph-port.yaml | 9 + .../devicetree/bindings/sound/cirrus,cs4270.yaml | 59 + .../devicetree/bindings/sound/cirrus,cs42xx8.yaml | 81 + .../devicetree/bindings/sound/cirrus,cs530x.yaml | 85 + Documentation/devicetree/bindings/sound/cs4270.txt | 21 - .../devicetree/bindings/sound/cs42xx8.txt | 34 - .../devicetree/bindings/sound/everest,es7134.txt | 15 - .../devicetree/bindings/sound/everest,es71x4.yaml | 62 + .../devicetree/bindings/sound/everest,es7241.txt | 28 - .../devicetree/bindings/sound/everest,es7241.yaml | 67 + .../devicetree/bindings/sound/everest,es8316.yaml | 7 +- .../bindings/sound/fsl,imx-audio-spdif.yaml | 66 - .../devicetree/bindings/sound/fsl,mqs.yaml | 2 + .../devicetree/bindings/sound/fsl,qmc-audio.yaml | 41 +- .../devicetree/bindings/sound/fsl,rpmsg.yaml | 1 + .../sound/{sgtl5000.yaml => fsl,sgtl5000.yaml} | 2 +- .../devicetree/bindings/sound/fsl,xcvr.yaml | 43 +- .../devicetree/bindings/sound/fsl-asoc-card.yaml | 53 +- .../{linux,spdif-dit.yaml => linux,spdif.yaml} | 8 +- .../devicetree/bindings/sound/maxim,max98088.txt | 23 - .../devicetree/bindings/sound/maxim,max98088.yaml | 47 + .../sound/{zl38060.yaml => mscc,zl38060.yaml} | 2 +- .../devicetree/bindings/sound/nuvoton,nau8824.yaml | 8 + .../devicetree/bindings/sound/nxp,lpc3220-i2s.yaml | 73 + .../devicetree/bindings/sound/omap-mcpdm.txt | 30 - .../devicetree/bindings/sound/pcm512x.txt | 2 +- .../devicetree/bindings/sound/qcom,apq8096.txt | 128 - .../sound/qcom,msm8916-wcd-digital-codec.yaml | 55 + .../bindings/sound/qcom,msm8916-wcd-digital.txt | 20 - .../devicetree/bindings/sound/qcom,sm8250.yaml | 1 + .../bindings/sound/qcom,wcd937x-sdw.yaml | 91 + .../devicetree/bindings/sound/qcom,wcd937x.yaml | 82 + .../devicetree/bindings/sound/qcom,wsa883x.yaml | 8 + .../devicetree/bindings/sound/qcom,wsa8840.yaml | 8 + .../sound/{rt1019.yaml => realtek,rt1019.yaml} | 2 +- .../devicetree/bindings/sound/realtek,rt5514.yaml | 70 + .../devicetree/bindings/sound/realtek,rt5631.yaml | 67 + .../devicetree/bindings/sound/realtek,rt5645.yaml | 131 + .../devicetree/bindings/sound/realtek,rt5659.yaml | 129 + .../devicetree/bindings/sound/realtek,rt5677.yaml | 135 + Documentation/devicetree/bindings/sound/rt5514.txt | 37 - Documentation/devicetree/bindings/sound/rt5631.txt | 48 - Documentation/devicetree/bindings/sound/rt5645.txt | 82 - Documentation/devicetree/bindings/sound/rt5659.txt | 89 - Documentation/devicetree/bindings/sound/rt5677.txt | 78 - .../bindings/sound/samsung,midas-audio.yaml | 33 + .../bindings/sound/simple-audio-mux.yaml | 6 + .../devicetree/bindings/sound/spdif-receiver.txt | 10 - .../devicetree/bindings/sound/tas571x.txt | 49 - .../devicetree/bindings/sound/ti,omap4-mcpdm.yaml | 73 + .../sound/{tas2562.yaml => ti,tas2562.yaml} | 2 +- .../sound/{tas2770.yaml => ti,tas2770.yaml} | 2 +- .../sound/{tas27xx.yaml => ti,tas27xx.yaml} | 2 +- .../devicetree/bindings/sound/ti,tas57xx.yaml | 133 + .../sound/{tas5805m.yaml => ti,tas5805m.yaml} | 2 +- .../bindings/sound/ti,tlv320adc3xxx.yaml | 32 +- .../{tlv320adcx140.yaml => ti,tlv320adcx140.yaml} | 2 +- .../sound/{wm8750.yaml => wlf,wm8750.yaml} | 2 +- .../devicetree/bindings/sound/wlf,wm8782.yaml | 47 + .../devicetree/bindings/sound/wlf,wm8804.yaml | 58 + Documentation/devicetree/bindings/sound/wm8782.txt | 24 - Documentation/devicetree/bindings/sound/wm8804.txt | 25 - MAINTAINERS | 26 +- arch/arm/configs/imx_v6_v7_defconfig | 1 - arch/arm64/configs/defconfig | 1 - drivers/acpi/utils.c | 16 +- drivers/firmware/cirrus/cs_dsp.c | 71 +- drivers/soc/fsl/qe/qmc.c | 32 +- drivers/soundwire/slave.c | 13 +- include/dt-bindings/sound/audio-graph.h | 26 + include/linux/acpi.h | 1 + include/linux/firmware/cirrus/cs_dsp.h | 10 +- include/linux/firmware/mediatek/mtk-adsp-ipc.h | 2 +- include/linux/pci_ids.h | 1 + include/soc/fsl/qe/qmc.h | 27 +- include/sound/cs35l41.h | 4 +- include/sound/cs35l56.h | 13 +- include/sound/pcm.h | 16 +- include/sound/rt1318.h | 16 + include/sound/simple_card_utils.h | 8 +- include/sound/soc-dai.h | 36 +- include/sound/soc-dapm.h | 2 +- include/sound/soc-topology.h | 2 +- include/sound/soc.h | 19 +- include/sound/sof.h | 1 + include/sound/tas2781-dsp.h | 11 +- include/sound/tas2781-tlv.h | 262 +- include/sound/tas2781.h | 10 +- include/uapi/sound/asequencer.h | 7 +- include/uapi/sound/asound.h | 9 +- scripts/const_structs.checkpatch | 1 + sound/core/control.c | 9 +- sound/core/pcm_dmaengine.c | 40 +- sound/core/pcm_lib.c | 52 +- sound/core/pcm_native.c | 6 + sound/core/seq/seq_clientmgr.c | 4 + sound/core/seq/seq_queue.c | 6 +- sound/core/seq/seq_timer.c | 21 +- sound/core/seq/seq_timer.h | 4 +- sound/core/seq/seq_ump_client.c | 16 + sound/core/vmaster.c | 8 + sound/hda/hdac_device.c | 1 + sound/hda/hdmi_chmap.c | 18 + sound/hda/intel-dsp-config.c | 9 + sound/hda/intel-sdw-acpi.c | 6 +- sound/isa/sb/emu8000.c | 6 +- sound/isa/sb/sb16_csp.c | 12 +- sound/pci/emu10k1/p16v.c | 17 +- sound/pci/hda/Kconfig | 11 + sound/pci/hda/Makefile | 2 + sound/pci/hda/cs35l41_hda.c | 129 +- sound/pci/hda/cs35l41_hda.h | 1 + sound/pci/hda/cs35l41_hda_property.c | 15 + sound/pci/hda/cs35l56_hda.c | 115 +- sound/pci/hda/cs35l56_hda.h | 3 + sound/pci/hda/hda_codec.c | 23 +- sound/pci/hda/hda_component.c | 75 +- sound/pci/hda/hda_component.h | 48 +- sound/pci/hda/hda_cs_dsp_ctl.c | 2 +- sound/pci/hda/hda_intel.c | 2 + sound/pci/hda/patch_realtek.c | 20 +- sound/pci/hda/patch_senarytech.c | 244 ++ sound/pci/hda/tas2781_hda_i2c.c | 48 +- sound/ppc/keywest.c | 4 +- sound/soc/amd/acp-es8336.c | 4 +- sound/soc/amd/acp/acp-i2s.c | 19 +- sound/soc/amd/acp/acp-legacy-common.c | 1 + sound/soc/amd/acp/acp-pci.c | 1 + sound/soc/amd/acp/acp-pdm.c | 1 + sound/soc/amd/acp/acp-platform.c | 14 + sound/soc/amd/acp/acp-rembrandt.c | 7 +- sound/soc/amd/acp/acp-renoir.c | 2 - sound/soc/amd/acp/acp63.c | 7 +- sound/soc/amd/acp/acp70.c | 2 - sound/soc/amd/acp/amd.h | 3 +- sound/soc/amd/ps/ps-mach.c | 1 + sound/soc/amd/renoir/acp3x-rn.c | 1 + sound/soc/amd/yc/acp6x-mach.c | 1 + sound/soc/codecs/Kconfig | 56 + sound/soc/codecs/Makefile | 19 + sound/soc/codecs/adau7118.c | 6 +- sound/soc/codecs/ak4118.c | 1 - sound/soc/codecs/ak4458.c | 12 +- sound/soc/codecs/ak4613.c | 2 +- sound/soc/codecs/ak4619.c | 912 ++++++ sound/soc/codecs/audio-iio-aux.c | 83 +- sound/soc/codecs/aw87390.c | 2 +- sound/soc/codecs/aw88261.c | 2 +- sound/soc/codecs/aw88395/aw88395.c | 4 +- sound/soc/codecs/aw88395/aw88395_lib.c | 51 +- sound/soc/codecs/aw88399.c | 4 +- sound/soc/codecs/cs35l34.c | 2 +- sound/soc/codecs/cs35l35.c | 2 +- sound/soc/codecs/cs35l36.c | 2 +- sound/soc/codecs/cs35l41-lib.c | 4 +- sound/soc/codecs/cs35l41.c | 3 +- sound/soc/codecs/cs35l56-sdw.c | 75 - sound/soc/codecs/cs35l56-shared.c | 133 +- sound/soc/codecs/cs35l56.c | 211 +- sound/soc/codecs/cs35l56.h | 2 - sound/soc/codecs/cs530x-i2c.c | 72 + sound/soc/codecs/cs530x.c | 971 +++++++ sound/soc/codecs/cs530x.h | 223 ++ sound/soc/codecs/cs53l30.c | 3 +- sound/soc/codecs/cx2072x.c | 5 - sound/soc/codecs/da7213.c | 2 +- sound/soc/codecs/es8311.c | 973 +++++++ sound/soc/codecs/es8311.h | 162 ++ sound/soc/codecs/es8326.c | 58 +- sound/soc/codecs/framer-codec.c | 2 +- sound/soc/codecs/hdmi-codec.c | 2 +- sound/soc/codecs/idt821034.c | 2 +- sound/soc/codecs/jz4760.c | 2 +- sound/soc/codecs/jz4770.c | 2 +- sound/soc/codecs/lpass-macro-common.c | 23 + sound/soc/codecs/lpass-macro-common.h | 41 + sound/soc/codecs/lpass-rx-macro.c | 623 ++-- sound/soc/codecs/lpass-tx-macro.c | 2 +- sound/soc/codecs/lpass-va-macro.c | 31 +- sound/soc/codecs/lpass-wsa-macro.c | 644 ++++- sound/soc/codecs/max98088.c | 10 +- sound/soc/codecs/max98390.c | 1 - sound/soc/codecs/max98504.c | 6 +- sound/soc/codecs/mt6358.c | 38 +- sound/soc/codecs/nau8822.c | 76 +- sound/soc/codecs/nau8822.h | 1 + sound/soc/codecs/nau8824.c | 21 +- sound/soc/codecs/nau8824.h | 1 + sound/soc/codecs/pcm3168a.c | 3 +- sound/soc/codecs/pcm512x-i2c.c | 2 + sound/soc/codecs/pcm512x-spi.c | 2 + sound/soc/codecs/pcm6240.c | 67 +- sound/soc/codecs/peb2466.c | 2 +- sound/soc/codecs/rk817_codec.c | 1 - sound/soc/codecs/rt1318.c | 1354 +++++++++ sound/soc/codecs/rt1318.h | 342 +++ sound/soc/codecs/rt1320-sdw.c | 2260 +++++++++++++++ sound/soc/codecs/rt1320-sdw.h | 94 + sound/soc/codecs/rt711-sdca.c | 72 + sound/soc/codecs/rt711-sdca.h | 1 + sound/soc/codecs/rt712-sdca-sdw.c | 36 +- sound/soc/codecs/rt712-sdca-sdw.h | 95 +- sound/soc/codecs/rt712-sdca.c | 665 ++++- sound/soc/codecs/rt712-sdca.h | 48 +- sound/soc/codecs/simple-mux.c | 55 +- sound/soc/codecs/tas2552.c | 1 - sound/soc/codecs/tas2764.c | 1 - sound/soc/codecs/tas2770.c | 1 - sound/soc/codecs/tas2780.c | 1 - sound/soc/codecs/tas2781-comlib.c | 21 +- sound/soc/codecs/tas2781-fmwlib.c | 89 +- sound/soc/codecs/tas2781-i2c.c | 233 +- sound/soc/codecs/tas5086.c | 27 +- sound/soc/codecs/tlv320adc3xxx.c | 106 +- sound/soc/codecs/tlv320adcx140.c | 1 - sound/soc/codecs/tlv320aic31xx.c | 1 - sound/soc/codecs/ts3a227e.c | 1 - sound/soc/codecs/wcd-mbhc-v2.c | 4 +- sound/soc/codecs/wcd-mbhc-v2.h | 4 +- sound/soc/codecs/wcd9335.c | 128 +- sound/soc/codecs/wcd934x.c | 72 +- sound/soc/codecs/wcd937x-sdw.c | 1137 ++++++++ sound/soc/codecs/wcd937x.c | 2971 ++++++++++++++++++++ sound/soc/codecs/wcd937x.h | 624 ++++ sound/soc/codecs/wcd938x-sdw.c | 4 +- sound/soc/codecs/wcd938x.c | 36 +- sound/soc/codecs/wcd938x.h | 10 +- sound/soc/codecs/wcd939x-sdw.c | 4 +- sound/soc/codecs/wcd939x.c | 176 +- sound/soc/codecs/wcd939x.h | 18 +- sound/soc/codecs/wm0010.c | 8 - sound/soc/codecs/wm_adsp.c | 2 +- sound/soc/codecs/wsa881x.c | 2 +- sound/soc/codecs/wsa883x.c | 11 +- sound/soc/codecs/wsa884x.c | 10 +- sound/soc/fsl/Kconfig | 18 +- sound/soc/fsl/Makefile | 4 +- sound/soc/fsl/fsl-asoc-card.c | 383 ++- sound/soc/fsl/fsl_aud2htx.c | 11 +- sound/soc/fsl/fsl_audmix.c | 16 +- sound/soc/fsl/fsl_easrc.c | 10 +- sound/soc/fsl/fsl_mqs.c | 46 +- sound/soc/fsl/fsl_qmc_audio.c | 591 ++-- sound/soc/fsl/fsl_rpmsg.c | 9 + sound/soc/fsl/fsl_sai.c | 141 +- sound/soc/fsl/fsl_sai.h | 4 +- sound/soc/fsl/fsl_xcvr.c | 179 +- sound/soc/fsl/fsl_xcvr.h | 91 + sound/soc/fsl/imx-audmix.c | 79 +- sound/soc/fsl/imx-es8328.c | 1 - sound/soc/fsl/imx-pcm-fiq.c | 1 + sound/soc/fsl/imx-rpmsg.c | 2 - sound/soc/fsl/imx-spdif.c | 103 - sound/soc/fsl/lpc3xxx-i2s.c | 375 +++ sound/soc/fsl/lpc3xxx-i2s.h | 80 + sound/soc/fsl/lpc3xxx-pcm.c | 72 + sound/soc/generic/audio-graph-card.c | 113 +- .../soc/generic/audio-graph-card2-custom-sample.c | 3 +- sound/soc/generic/audio-graph-card2.c | 189 +- sound/soc/generic/simple-card-utils.c | 133 +- sound/soc/generic/simple-card.c | 71 +- sound/soc/generic/test-component.c | 2 +- sound/soc/intel/avs/boards/es8336.c | 8 +- sound/soc/intel/avs/pcm.c | 4 +- sound/soc/intel/avs/topology.c | 2 +- sound/soc/intel/boards/Kconfig | 2 + sound/soc/intel/boards/bdw-rt5650.c | 2 +- sound/soc/intel/boards/ehl_rt5660.c | 2 +- sound/soc/intel/boards/kbl_da7219_max98357a.c | 4 +- sound/soc/intel/boards/kbl_da7219_max98927.c | 6 +- sound/soc/intel/boards/kbl_rt5660.c | 2 +- sound/soc/intel/boards/kbl_rt5663_max98927.c | 8 +- .../soc/intel/boards/kbl_rt5663_rt5514_max98927.c | 6 +- sound/soc/intel/boards/sof_board_helpers.h | 2 - sound/soc/intel/boards/sof_da7219.c | 57 +- sound/soc/intel/boards/sof_es8336.c | 2 +- sound/soc/intel/boards/sof_maxim_common.c | 114 +- sound/soc/intel/boards/sof_nau8825.c | 2 +- sound/soc/intel/boards/sof_realtek_common.c | 2 +- sound/soc/intel/boards/sof_rt5682.c | 2 +- sound/soc/intel/boards/sof_sdw.c | 64 +- sound/soc/intel/boards/sof_sdw_common.h | 6 +- sound/soc/intel/boards/sof_sdw_cs42l42.c | 11 +- sound/soc/intel/boards/sof_sdw_rt5682.c | 11 +- sound/soc/intel/boards/sof_sdw_rt700.c | 11 +- sound/soc/intel/boards/sof_sdw_rt711.c | 11 +- sound/soc/intel/boards/sof_sdw_rt_amp.c | 2 +- sound/soc/intel/boards/sof_sdw_rt_dmic.c | 14 +- .../soc/intel/boards/sof_sdw_rt_sdca_jack_common.c | 11 +- sound/soc/intel/boards/sof_wm8804.c | 2 +- sound/soc/intel/common/soc-acpi-intel-arl-match.c | 50 + sound/soc/intel/common/soc-acpi-intel-rpl-match.c | 50 + sound/soc/intel/skylake/skl-topology.c | 2 +- sound/soc/meson/axg-fifo.c | 2 +- sound/soc/meson/axg-frddr.c | 4 +- sound/soc/meson/axg-tdm.h | 2 +- sound/soc/meson/axg-toddr.c | 4 +- sound/soc/qcom/common.c | 35 + sound/soc/qcom/common.h | 3 + sound/soc/qcom/lpass-cpu.c | 4 + sound/soc/qcom/qdsp6/audioreach.c | 30 +- sound/soc/qcom/qdsp6/audioreach.h | 2 +- sound/soc/qcom/qdsp6/q6afe-dai.c | 16 +- sound/soc/qcom/qdsp6/q6apm-dai.c | 3 + sound/soc/qcom/qdsp6/q6apm-lpass-dais.c | 21 +- sound/soc/qcom/qdsp6/topology.c | 38 +- sound/soc/qcom/sc8280xp.c | 15 + sound/soc/qcom/x1e80100.c | 38 + sound/soc/rockchip/rockchip_i2s.c | 1 - sound/soc/rockchip/rockchip_spdif.c | 1 - sound/soc/samsung/Kconfig | 2 +- sound/soc/samsung/aries_wm8994.c | 2 +- sound/soc/samsung/midas_wm1811.c | 350 ++- sound/soc/sh/fsi.c | 2 +- sound/soc/sh/rcar/core.c | 2 +- sound/soc/soc-core.c | 4 +- sound/soc/soc-dai.c | 18 +- sound/soc/soc-dapm.c | 49 +- sound/soc/soc-ops.c | 26 +- sound/soc/soc-pcm.c | 26 +- sound/soc/soc-topology.c | 618 ++-- sound/soc/soc-utils.c | 19 +- sound/soc/sof/intel/hda.c | 4 +- sound/soc/sof/intel/pci-tgl.c | 4 +- sound/soc/sof/ipc3-topology.c | 14 +- sound/soc/sof/ipc4-topology.c | 71 +- sound/soc/sof/mediatek/mt8186/mt8186.c | 2 +- sound/soc/sof/mediatek/mt8195/mt8195.c | 2 +- sound/soc/sof/sof-audio.c | 20 +- sound/soc/sof/sof-audio.h | 9 +- sound/soc/sof/topology.c | 4 +- sound/soc/tegra/tegra210_i2s.c | 71 +- sound/soc/tegra/tegra210_i2s.h | 2 + sound/spi/at73c213.c | 8 +- sound/usb/format.c | 17 +- sound/usb/mixer.c | 45 +- sound/usb/mixer_quirks.c | 20 +- sound/xen/xen_snd_front_alsa.c | 5 - tools/testing/selftests/alsa/mixer-test.c | 143 +- tools/testing/selftests/alsa/pcm-test.c | 70 +- 352 files changed, 21518 insertions(+), 4532 deletions(-) delete mode 100644 Documentation/devicetree/bindings/sound/ak4104.txt delete mode 100644 Documentation/devicetree/bindings/sound/ak4554.txt delete mode 100644 Documentation/devicetree/bindings/sound/amlogic,g12a-tohdmitx.txt create mode 100644 Documentation/devicetree/bindings/sound/amlogic,g12a-tohdmitx.yaml create mode 100644 Documentation/devicetree/bindings/sound/asahi-kasei,ak4104.yaml rename Documentation/devicetree/bindings/sound/{ak4375.yaml => asahi-kasei,ak4375.yaml} (94%) create mode 100644 Documentation/devicetree/bindings/sound/asahi-kasei,ak4554.yaml rename Documentation/devicetree/bindings/sound/{ak4613.yaml => asahi-kasei,ak4613.yaml} (94%) create mode 100644 Documentation/devicetree/bindings/sound/asahi-kasei,ak4619.yaml rename Documentation/devicetree/bindings/sound/{ak4642.yaml => asahi-kasei,ak4642.yaml} (94%) create mode 100644 Documentation/devicetree/bindings/sound/cirrus,cs4270.yaml create mode 100644 Documentation/devicetree/bindings/sound/cirrus,cs42xx8.yaml create mode 100644 Documentation/devicetree/bindings/sound/cirrus,cs530x.yaml delete mode 100644 Documentation/devicetree/bindings/sound/cs4270.txt delete mode 100644 Documentation/devicetree/bindings/sound/cs42xx8.txt delete mode 100644 Documentation/devicetree/bindings/sound/everest,es7134.txt create mode 100644 Documentation/devicetree/bindings/sound/everest,es71x4.yaml delete mode 100644 Documentation/devicetree/bindings/sound/everest,es7241.txt create mode 100644 Documentation/devicetree/bindings/sound/everest,es7241.yaml delete mode 100644 Documentation/devicetree/bindings/sound/fsl,imx-audio-spdif.yaml rename Documentation/devicetree/bindings/sound/{sgtl5000.yaml => fsl,sgtl5000.yaml} (97%) rename Documentation/devicetree/bindings/sound/{linux,spdif-dit.yaml => linux,spdif.yaml} (75%) delete mode 100644 Documentation/devicetree/bindings/sound/maxim,max98088.txt create mode 100644 Documentation/devicetree/bindings/sound/maxim,max98088.yaml rename Documentation/devicetree/bindings/sound/{zl38060.yaml => mscc,zl38060.yaml} (96%) create mode 100644 Documentation/devicetree/bindings/sound/nxp,lpc3220-i2s.yaml delete mode 100644 Documentation/devicetree/bindings/sound/omap-mcpdm.txt delete mode 100644 Documentation/devicetree/bindings/sound/qcom,apq8096.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-digital-codec.yaml delete mode 100644 Documentation/devicetree/bindings/sound/qcom,msm8916-wcd-digital.txt create mode 100644 Documentation/devicetree/bindings/sound/qcom,wcd937x-sdw.yaml create mode 100644 Documentation/devicetree/bindings/sound/qcom,wcd937x.yaml rename Documentation/devicetree/bindings/sound/{rt1019.yaml => realtek,rt1019.yaml} (90%) create mode 100644 Documentation/devicetree/bindings/sound/realtek,rt5514.yaml create mode 100644 Documentation/devicetree/bindings/sound/realtek,rt5631.yaml create mode 100644 Documentation/devicetree/bindings/sound/realtek,rt5645.yaml create mode 100644 Documentation/devicetree/bindings/sound/realtek,rt5659.yaml create mode 100644 Documentation/devicetree/bindings/sound/realtek,rt5677.yaml delete mode 100644 Documentation/devicetree/bindings/sound/rt5514.txt delete mode 100644 Documentation/devicetree/bindings/sound/rt5631.txt delete mode 100644 Documentation/devicetree/bindings/sound/rt5645.txt delete mode 100644 Documentation/devicetree/bindings/sound/rt5659.txt delete mode 100644 Documentation/devicetree/bindings/sound/rt5677.txt delete mode 100644 Documentation/devicetree/bindings/sound/spdif-receiver.txt delete mode 100644 Documentation/devicetree/bindings/sound/tas571x.txt create mode 100644 Documentation/devicetree/bindings/sound/ti,omap4-mcpdm.yaml rename Documentation/devicetree/bindings/sound/{tas2562.yaml => ti,tas2562.yaml} (97%) rename Documentation/devicetree/bindings/sound/{tas2770.yaml => ti,tas2770.yaml} (97%) rename Documentation/devicetree/bindings/sound/{tas27xx.yaml => ti,tas27xx.yaml} (97%) create mode 100644 Documentation/devicetree/bindings/sound/ti,tas57xx.yaml rename Documentation/devicetree/bindings/sound/{tas5805m.yaml => ti,tas5805m.yaml} (95%) rename Documentation/devicetree/bindings/sound/{tlv320adcx140.yaml => ti,tlv320adcx140.yaml} (99%) rename Documentation/devicetree/bindings/sound/{wm8750.yaml => wlf,wm8750.yaml} (92%) create mode 100644 Documentation/devicetree/bindings/sound/wlf,wm8782.yaml create mode 100644 Documentation/devicetree/bindings/sound/wlf,wm8804.yaml delete mode 100644 Documentation/devicetree/bindings/sound/wm8782.txt delete mode 100644 Documentation/devicetree/bindings/sound/wm8804.txt create mode 100644 include/dt-bindings/sound/audio-graph.h create mode 100644 include/sound/rt1318.h create mode 100644 sound/pci/hda/patch_senarytech.c create mode 100644 sound/soc/codecs/ak4619.c create mode 100644 sound/soc/codecs/cs530x-i2c.c create mode 100644 sound/soc/codecs/cs530x.c create mode 100644 sound/soc/codecs/cs530x.h create mode 100644 sound/soc/codecs/es8311.c create mode 100644 sound/soc/codecs/es8311.h create mode 100644 sound/soc/codecs/rt1318.c create mode 100644 sound/soc/codecs/rt1318.h create mode 100644 sound/soc/codecs/rt1320-sdw.c create mode 100644 sound/soc/codecs/rt1320-sdw.h create mode 100644 sound/soc/codecs/wcd937x-sdw.c create mode 100644 sound/soc/codecs/wcd937x.c create mode 100644 sound/soc/codecs/wcd937x.h delete mode 100644 sound/soc/fsl/imx-spdif.c create mode 100644 sound/soc/fsl/lpc3xxx-i2s.c create mode 100644 sound/soc/fsl/lpc3xxx-i2s.h create mode 100644 sound/soc/fsl/lpc3xxx-pcm.c . Date: Fri, 19 Jul 2024 11:36:11 +0200 From: Bartosz Golaszewski To: Linus Torvalds Cc: linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org, Bartosz Golaszewski Subject: [GIT PULL] power sequencing fixes for v6.11-rc1 From: Bartosz Golaszewski Linus, Please pull the following set of fixes for power sequencing. There's one fix for an invalid pointer dereference in error path reported by smatch and two patches that address the noisy config choices you reported earlier this week. Bartosz The following changes since commit e763c9ec71dd462337d0b671ec5014b737c5342e: Merge tag 'pwrseq-updates-for-v6.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux (2024-07-15 17:34:31 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/brgl/linux.git tags/pwrseq-fixes-for-v6.11-rc1 for you to fetch changes up to 1a8c67a8b21e26843d5641c55f48130b3e323ce8: arm64: qcom: don't select HAVE_PWRCTL when PCI=n (2024-07-19 09:49:24 +0200) ---------------------------------------------------------------- power sequencing fixes for v6.11-rc1 - fix an invalid pointer dereference in error path in pwrseq core - reduce the Kconfig noise from PCI pwrctl choices ---------------------------------------------------------------- Arnd Bergmann (1): arm64: qcom: don't select HAVE_PWRCTL when PCI=n Bartosz Golaszewski (2): power: sequencing: fix an invalid pointer dereference in error path Kconfig: reduce the amount of power sequencing noise arch/arm64/Kconfig.platforms | 1 + drivers/net/wireless/ath/ath11k/Kconfig | 1 + drivers/net/wireless/ath/ath12k/Kconfig | 1 + drivers/pci/pwrctl/Kconfig | 11 +++-------- drivers/power/sequencing/core.c | 3 ++- 5 files changed, 8 insertions(+), 9 deletions(-) . Date: Fri, 19 Jul 2024 19:22:38 +0900 From: Masami Hiramatsu (Google) To: Linus Torvalds Cc: "Masami Hiramatsu (Google)" , Andrii Nakryiko , Jeff Johnson , Jiri Olsa , Steven Rostedt , Stephen Rothwell , linux-kernel@vger.kernel.org Subject: [GIT PULL] probes: Fix for v6.11 pre-rc1 Hi Linus, Probes fixes for v6.11 pre-rc1: - uprobe: Add sys_uretprobe entry to scripts/syscall.tbl. Please pull the latest probes-fixes-v6.11-pre-rc tree, which can be found at: git://git.kernel.org/pub/scm/linux/kernel/git/trace/linux-trace.git probes-fixes-v6.11-pre-rc Tag SHA1: 4f9c2075da85cb89b4c36fc11250b803d979f345 Head SHA1: 5c28424e9a348f95e3c634fe2ed6da8af29cc870 Masami Hiramatsu (Google) (1): syscalls: Fix to add sys_uretprobe to syscall.tbl ---- scripts/syscall.tbl | 1 + 1 file changed, 1 insertion(+) --------------------------- commit 5c28424e9a348f95e3c634fe2ed6da8af29cc870 Author: Masami Hiramatsu (Google) Date: Fri Jul 19 14:35:51 2024 +0900 syscalls: Fix to add sys_uretprobe to syscall.tbl Add sys_uretprobe entry to scripts/syscall.tbl as same as arch/x86/entry/syscalls/syscall_64.tbl. Reported-by: Stephen Rothwell Closes: https://lore.kernel.org/all/20240719102824.1e086a40@canb.auug.org.au/ Fixes: 63ded110979b ("uprobe: Change uretprobe syscall scope and number") Signed-off-by: Masami Hiramatsu (Google) diff --git a/scripts/syscall.tbl b/scripts/syscall.tbl index 797e20ea99a2..591d85e8ca7e 100644 --- a/scripts/syscall.tbl +++ b/scripts/syscall.tbl @@ -402,3 +402,4 @@ 460 common lsm_set_self_attr sys_lsm_set_self_attr 461 common lsm_list_modules sys_lsm_list_modules 462 common mseal sys_mseal +467 common uretprobe sys_uretprobe -- Masami Hiramatsu (Google) . Date: Fri, 19 Jul 2024 12:21:38 +0100 From: Will Deacon To: torvalds@linux-foundation.org Cc: joro@8bytes.org, linux-kernel@vger.kernel.org, iommu@lists.linux.dev Subject: [GIT PULL] IOMMU Updates for Linux v6.11 Hi Linus, Please pull these IOMMU updates for v6.11. I've been looking after the IOMMU tree in Joerg's absence [1] for the past few weeks and I was expecting him back at the start of this week to send the pull. However, I've not heard from him at all and figured that I may as well send this now rather than wait until the second week of the merge window. A few minor fixes have started showing up too, so I may end up sending you a follow-up next week anyway. A summary of all the changes is included in the tag. Cheers, Will [1] https://lore.kernel.org/r/Zn6xFZanlWhN5kw3@8bytes.org --->8 The following changes since commit 83a7eefedc9b56fe7bfeff13b6c7356688ffa670: Linux 6.10-rc3 (2024-06-09 14:19:43 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/iommu/linux.git tags/iommu-updates-v6.11 for you to fetch changes up to 8b6c32e831ef4496b51a68ddc5be9bb9e8d2337d: Merge branch 'iommu/iommufd/paging-domain-alloc' into iommu/next (2024-07-12 16:57:47 +0100) ---------------------------------------------------------------- IOMMU Updates for Linux v6.11 - Core: * Support for the "ats-supported" device-tree property. * Removal of the 'ops' field from 'struct iommu_fwspec'. * Introduction of iommu_paging_domain_alloc() and partial conversion of existing users. * Introduce 'struct iommu_attach_handle' and provide corresponding IOMMU interfaces which will be used by the IOMMUFD subsystem. * Remove stale documentation. * Add missing MODULE_DESCRIPTION() macro. * Misc cleanups. - Allwinner Sun50i: * Ensure bypass mode is disabled on H616 SoCs. * Ensure page-tables are allocated below 4GiB for the 32-bit page-table walker. * Add new device-tree compatible strings. - AMD Vi: * Use try_cmpxchg64() instead of cmpxchg64() when updating pte. - Arm SMMUv2: * Print much more useful information on context faults. * Fix Qualcomm TBU probing when CONFIG_ARM_SMMU_QCOM_DEBUG=n. * Add new Qualcomm device-tree bindings. - Arm SMMUv3: * Support for hardware update of access/dirty bits and reporting via IOMMUFD. * More driver rework from Jason, this time updating the PASID/SVA support to prepare for full IOMMUFD support. * Add missing MODULE_DESCRIPTION() macro. * Minor fixes and cleanups. - NVIDIA Tegra: * Fix for benign fwspec initialisation issue exposed by rework on the core branch. - Intel VT-d: * Use try_cmpxchg64() instead of cmpxchg64() when updating pte. * Use READ_ONCE() to read volatile descriptor status. * Remove support for handling Execute-Requested requests. * Avoid calling iommu_domain_alloc(). * Minor fixes and refactoring. - Qualcomm MSM: * Updates to the device-tree bindings. ---------------------------------------------------------------- Akhil P Oommen (1): dt-bindings: arm-smmu: Add X1E80100 GPU SMMU Andre Przywara (3): iommu: sun50i: allocate page tables from below 4 GiB dt-bindings: iommu: add new compatible strings iommu: sun50i: Add H616 compatible string Andy Shevchenko (1): iommu/arm-smmu-v3: Use *-y instead of *-objs in Makefile Bjorn Andersson (1): dt-bindings: arm-smmu: Fix Qualcomm SC8180X binding David Heidelberg (1): dt-bindings: iommu: Convert msm,iommu-v0 to yaml Georgi Djakov (1): iommu/arm-smmu-qcom: Register the TBU driver in qcom_smmu_impl_init Jacob Pan (1): iommu/vt-d: Handle volatile descriptor status read Jason Gunthorpe (16): iommu/arm-smmu-v3: Convert to domain_alloc_sva() iommu/arm-smmu-v3: Start building a generic PASID layer iommu/arm-smmu-v3: Make smmu_domain->devices into an allocated list iommu/arm-smmu-v3: Make changing domains be hitless for ATS iommu/arm-smmu-v3: Add ssid to struct arm_smmu_master_domain iommu/arm-smmu-v3: Do not use master->sva_enable to restrict attaches iommu/arm-smmu-v3: Thread SSID through the arm_smmu_attach_*() interface iommu/arm-smmu-v3: Make SVA allocate a normal arm_smmu_domain iommu/arm-smmu-v3: Keep track of arm_smmu_master_domain for SVA iommu/arm-smmu-v3: Put the SVA mmu notifier in the smmu_domain iommu/arm-smmu-v3: Allow IDENTITY/BLOCKED to be set while PASID is used iommu/arm-smmu-v3: Test the STE S1DSS functionality iommu/arm-smmu-v3: Allow a PASID to be set when RID is IDENTITY/BLOCKED iommu/arm-smmu-v3: Allow setting a S1 domain to a PASID iommu/arm-smmu-v3: Do not zero the strtab twice iommu/arm-smmu-v3: Shrink the strtab l1_desc array Jean-Philippe Brucker (4): iommu/arm-smmu-v3: Add feature detection for HTTU dt-bindings: PCI: generic: Add ats-supported property iommu/of: Support ats-supported device-tree property arm64: dts: fvp: Enable PCIe ATS for Base RevC FVP Jeff Johnson (2): iommu/iova: Add missing MODULE_DESCRIPTION() macro iommu/arm-smmu-v3: add missing MODULE_DESCRIPTION() macro Jernej Skrabec (1): iommu: sun50i: clear bypass register Joao Martins (1): iommu/arm-smmu-v3: Add support for dirty tracking in domain alloc Jon Pan-Doh (1): iommu/vt-d: Fix identity map bounds in si_domain_init() Kunkun Jiang (1): iommu/arm-smmu-v3: Enable HTTU for stage1 with io-pgtable mapping Lu Baolu (21): iommu: Make iommu_sva_domain_alloc() static iommu/vt-d: Remove comment for def_domain_type iommu/vt-d: Remove control over Execute-Requested requests iommu/vt-d: Downgrade warning for pre-enabled IR iommu/vt-d: Add helper to allocate paging domain iommu/vt-d: Add helper to flush caches for context change iommu/vt-d: Refactor PCI PRI enabling/disabling callbacks iommu: Introduce domain attachment handle iommu: Remove sva handle list iommu: Add attach handle to struct iopf_group iommu: Extend domain attach group with handle support iommu: Add iommu_paging_domain_alloc() interface iommufd: Use iommu_paging_domain_alloc() vfio/type1: Use iommu_paging_domain_alloc() vhost-vdpa: Use iommu_paging_domain_alloc() drm/msm: Use iommu_paging_domain_alloc() wifi: ath10k: Use iommu_paging_domain_alloc() wifi: ath11k: Use iommu_paging_domain_alloc() RDMA/usnic: Use iommu_paging_domain_alloc() iommu/vt-d: Limit max address mask to MAX_AGAW_PFN_WIDTH iommu/vt-d: Fix aligned pages in calculate_psi_aligned_address() Mark-PK Tsai (1): docs: iommu: Remove outdated Documentation/userspace-api/iommu.rst Mostafa Saleh (1): iommu/arm-smmu-v3: Avoid uninitialized asid in case of error Neil Armstrong (1): dt-bindings: iommu: qcom,iommu: Add MSM8953 GPU IOMMU to SMMUv2 compatibles Rob Clark (3): iommu/arm-smmu: Add CB prefix to register bitfields iommu/arm-smmu-qcom-debug: Do not print for handled faults iommu/arm-smmu: Pretty-print context fault related regs Robin Murphy (6): iommu/dma: Prune redundant pgprot arguments iommu/mediatek-v1: Clean up redundant fwspec checks iommu: Resolve fwspec ops automatically ACPI: Retire acpi_iommu_fwspec_ops() OF: Simplify of_iommu_configure() iommu: Remove iommu_fwspec ops Shameer Kolothum (3): iommu/arm-smmu-v3: Add support for domain_alloc_user fn iommu/io-pgtable-arm: Add read_and_clear_dirty() support iommu: Move IOMMU_DIRTY_NO_CLEAR define Uros Bizjak (3): iommu/amd: Use try_cmpxchg64() in v2_alloc_pte() iommu/vt-d: Use try_cmpxchg64() in intel_pasid_get_entry() iommufd: Use atomic_long_try_cmpxchg() in incr_user_locked_vm() Will Deacon (14): Merge branch 'for-joerg/arm-smmu/bindings' into for-joerg/arm-smmu/next Merge branch 'for-joerg/arm-smmu/updates' into for-joerg/arm-smmu/next iommu/tegra-smmu: Pass correct fwnode to iommu_fwspec_init() Merge branch 'iommu/allwinner/sun50i' into iommu/next Merge branch 'iommu/amd/amd-vi' into iommu/next Merge branch 'iommu/arm/smmu' into iommu/next Merge branch 'iommu/intel/vt-d' into iommu/next Merge branch 'iommu/nvidia/tegra' into iommu/next Merge branch 'iommu/qualcomm/msm' into iommu/next Merge branch 'iommu/core' into iommu/next Merge branch 'iommu/fwspec-ops-removal' into iommu/next Merge branch 'iommu/pci/ats' into iommu/next Merge branch 'iommu/iommufd/attach-handles' into iommu/next Merge branch 'iommu/iommufd/paging-domain-alloc' into iommu/next Zhenhua Huang (1): iommu/arm-smmu-qcom: record reason for deferring probe .../bindings/iommu/allwinner,sun50i-h6-iommu.yaml | 7 +- .../devicetree/bindings/iommu/arm,smmu.yaml | 6 +- .../devicetree/bindings/iommu/msm,iommu-v0.txt | 64 -- .../bindings/iommu/qcom,apq8064-iommu.yaml | 78 +++ .../devicetree/bindings/iommu/qcom,iommu.yaml | 1 + .../devicetree/bindings/pci/host-generic-pci.yaml | 6 + Documentation/userspace-api/index.rst | 1 - Documentation/userspace-api/iommu.rst | 209 ------ MAINTAINERS | 1 - arch/arm64/boot/dts/arm/fvp-base-revc.dts | 1 + drivers/acpi/arm64/iort.c | 19 +- drivers/acpi/scan.c | 36 +- drivers/acpi/viot.c | 11 +- drivers/dma/idxd/init.c | 2 +- drivers/gpu/drm/msm/msm_iommu.c | 7 +- drivers/infiniband/hw/usnic/usnic_uiom.c | 6 +- drivers/iommu/Kconfig | 1 + drivers/iommu/amd/io_pgtable_v2.c | 2 +- drivers/iommu/arm/arm-smmu-v3/Makefile | 5 +- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-sva.c | 431 +++--------- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3-test.c | 117 +++- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.c | 759 ++++++++++++++++----- drivers/iommu/arm/arm-smmu-v3/arm-smmu-v3.h | 63 +- drivers/iommu/arm/arm-smmu/arm-smmu-nvidia.c | 2 +- drivers/iommu/arm/arm-smmu/arm-smmu-qcom-debug.c | 83 +-- drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 42 +- drivers/iommu/arm/arm-smmu/arm-smmu-qcom.h | 2 + drivers/iommu/arm/arm-smmu/arm-smmu.c | 77 ++- drivers/iommu/arm/arm-smmu/arm-smmu.h | 67 +- drivers/iommu/arm/arm-smmu/qcom_iommu.c | 4 +- drivers/iommu/dma-iommu.c | 16 +- drivers/iommu/intel/cache.c | 3 +- drivers/iommu/intel/dmar.c | 2 +- drivers/iommu/intel/iommu.c | 196 ++++-- drivers/iommu/intel/iommu.h | 19 +- drivers/iommu/intel/irq_remapping.c | 4 +- drivers/iommu/intel/pasid.c | 116 +++- drivers/iommu/intel/pasid.h | 10 - drivers/iommu/io-pgfault.c | 61 +- drivers/iommu/io-pgtable-arm.c | 119 +++- drivers/iommu/iommu-priv.h | 18 + drivers/iommu/iommu-sva.c | 48 +- drivers/iommu/iommu.c | 225 ++++-- drivers/iommu/iommufd/hw_pagetable.c | 10 +- drivers/iommu/iommufd/pages.c | 7 +- drivers/iommu/iova.c | 1 + drivers/iommu/mtk_iommu_v1.c | 12 +- drivers/iommu/of_iommu.c | 59 +- drivers/iommu/sun50i-iommu.c | 15 +- drivers/iommu/tegra-smmu.c | 2 +- drivers/net/wireless/ath/ath10k/snoc.c | 6 +- drivers/net/wireless/ath/ath11k/ahb.c | 6 +- drivers/of/device.c | 30 +- drivers/vfio/vfio_iommu_type1.c | 7 +- drivers/vhost/vdpa.c | 14 +- include/acpi/acpi_bus.h | 3 +- include/linux/io-pgtable.h | 3 + include/linux/iommu.h | 72 +- 58 files changed, 1860 insertions(+), 1334 deletions(-) delete mode 100644 Documentation/devicetree/bindings/iommu/msm,iommu-v0.txt create mode 100644 Documentation/devicetree/bindings/iommu/qcom,apq8064-iommu.yaml delete mode 100644 Documentation/userspace-api/iommu.rst . Date: Fri, 19 Jul 2024 14:25:27 +0200 From: Greg KH To: Linus Torvalds Cc: Jiri Slaby , Stephen Rothwell , Andrew Morton , linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org Subject: [GIT PULL] TTY / Serial driver changes for 6.11-rc1 The following changes since commit 22a40d14b572deb80c0648557f4bd502d7e83826: Linux 6.10-rc6 (2024-06-30 14:40:44 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git tags/tty-6.11-rc1 for you to fetch changes up to 17199dfccd4b7f7e0c059ef43bef6e0078423476: Documentation: kernel-parameters: Add DEVNAME:0.0 format for serial ports (2024-07-04 15:41:44 +0200) ---------------------------------------------------------------- TTY/Serial updates for 6.11-rc1 Here is a small set of tty and serial driver updates for 6.11-rc1. Not much happened this cycle, unlike the previous kernel release which had lots of "excitement" in this part of the kernel. Included in here are the following changes: - dt binding updates for new platforms - 8250 driver updates - various small serial driver fixes and updates - printk/console naming and matching attempt #2 (was reverted for 6.10-final, should be good to go this time around, acked by the relevant maintainers). All of these have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman ---------------------------------------------------------------- Andy Shevchenko (3): serial: 8250: Extract RSA bits serial: 8250: Extract platform driver serial: 8250_platform: Explicitly show we initialise ISA ports only once Greg Kroah-Hartman (2): Merge tag 'v6.10-rc4' into tty-next Merge 6.10-rc6 into tty-next Hal Feng (3): dt-bindings: serial: snps-dw-apb-uart: Add one more reset signal for StarFive JH7110 SoC serial: 8250_dw: Use reset array API to get resets riscv: dts: starfive: jh7110: Add the core reset and jh7110 compatible for uarts Hans de Goede (1): vt: keyboard: Use led_set_brightness() in LED trigger activate() callback Hui Wang (2): dt-bindings: serial: sc16is7xx: add reset-gpios serial: sc16is7xx: hardware reset chip if reset-gpios is defined in DT Jeff Johnson (1): tty: add missing MODULE_DESCRIPTION() macros Kanak Shilledar (1): dt-bindings: serial: vt8500-uart: convert to json-schema Lad Prabhakar (5): dt-bindings: serial: renesas,scif: Move ref for serial.yaml at the end dt-bindings: serial: renesas,scif: Validate 'interrupts' and 'interrupt-names' dt-bindings: serial: renesas,scif: Make 'interrupt-names' property as required dt-bindings: serial: Add documentation for Renesas RZ/V2H(P) (R9A09G057) SCIF support serial: sh-sci: Add support for RZ/V2H(P) SoC RafaÅ‚ MiÅ‚ecki (1): dt-bindings: serial: mediatek,uart: add MT7988 Rasmus Villemoes (1): serial: imx: stop casting struct uart_port to struct imx_port Shresth Prasad (1): tty: sunsu: Simplify device_node cleanup by using __free Tony Lindgren (3): printk: Add match_devname_and_update_preferred_console() serial: core: Add serial_base_match_and_update_preferred_console() Documentation: kernel-parameters: Add DEVNAME:0.0 format for serial ports Documentation/admin-guide/kernel-parameters.txt | 19 + .../devicetree/bindings/serial/mediatek,uart.yaml | 1 + .../devicetree/bindings/serial/nxp,sc16is7xx.yaml | 5 + .../devicetree/bindings/serial/renesas,scif.yaml | 136 ++++-- .../bindings/serial/snps-dw-apb-uart.yaml | 18 +- .../bindings/serial/via,vt8500-uart.yaml | 46 +++ .../devicetree/bindings/serial/vt8500-uart.txt | 27 -- arch/riscv/boot/dts/starfive/jh7110.dtsi | 30 +- drivers/tty/amiserial.c | 1 + drivers/tty/goldfish.c | 1 + drivers/tty/n_gsm.c | 1 + drivers/tty/n_hdlc.c | 1 + drivers/tty/serial/8250/8250.h | 29 +- drivers/tty/serial/8250/8250_core.c | 460 +-------------------- drivers/tty/serial/8250/8250_dw.c | 2 +- drivers/tty/serial/8250/8250_parisc.c | 1 + drivers/tty/serial/8250/8250_pcilib.c | 1 + drivers/tty/serial/8250/8250_platform.c | 337 +++++++++++++++ drivers/tty/serial/8250/8250_port.c | 1 + drivers/tty/serial/8250/8250_pxa.c | 1 + drivers/tty/serial/8250/8250_rsa.c | 133 ++++++ drivers/tty/serial/8250/Makefile | 6 +- drivers/tty/serial/8250/serial_cs.c | 1 + drivers/tty/serial/esp32_acm.c | 1 + drivers/tty/serial/esp32_uart.c | 1 + drivers/tty/serial/imx.c | 41 +- drivers/tty/serial/owl-uart.c | 1 + drivers/tty/serial/sc16is7xx.c | 31 +- drivers/tty/serial/serial_base.h | 16 + drivers/tty/serial/serial_base_bus.c | 37 ++ drivers/tty/serial/serial_core.c | 4 + drivers/tty/serial/serial_mctrl_gpio.c | 1 + drivers/tty/serial/sh-sci.c | 55 ++- drivers/tty/serial/sunsu.c | 37 +- drivers/tty/synclink_gt.c | 1 + drivers/tty/ttynull.c | 1 + drivers/tty/vt/keyboard.c | 4 +- include/linux/printk.h | 4 + include/linux/serial_sci.h | 1 + kernel/printk/console_cmdline.h | 1 + kernel/printk/printk.c | 103 ++++- 41 files changed, 1000 insertions(+), 598 deletions(-) create mode 100644 Documentation/devicetree/bindings/serial/via,vt8500-uart.yaml delete mode 100644 Documentation/devicetree/bindings/serial/vt8500-uart.txt create mode 100644 drivers/tty/serial/8250/8250_platform.c create mode 100644 drivers/tty/serial/8250/8250_rsa.c . Date: Fri, 19 Jul 2024 14:25:52 +0200 From: Greg KH To: Linus Torvalds Cc: Andrew Morton , linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org Subject: [GIT PULL] USB/Thunderbolt driver updates for 6.11-rc1 The following changes since commit 22a40d14b572deb80c0648557f4bd502d7e83826: Linux 6.10-rc6 (2024-06-30 14:40:44 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git tags/usb-6.11-rc1 for you to fetch changes up to b727493011123db329e2901e3abf81a8d146b6fe: kselftest: devices: Add test to detect device error logs (2024-07-12 10:59:06 +0200) ---------------------------------------------------------------- USB/Thunderbolt updates for 6.11-rc1 Here is the big set of USB and Thunderbolt changes for 6.11-rc1. Nothing earth-shattering in here, just constant forward progress in adding support for new hardware and better debugging functionalities for thunderbolt devices and the subsystem. Included in here are: - thunderbolt debugging update and driver additions - xhci driver updates - typec driver updates - kselftest device driver changes (acked by the relevant maintainers, depended on other changes in this tree.) - cdns3 driver updates - gadget driver updates - MODULE_DESCRIPTION() additions - dwc3 driver updates and fixes All of these have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman ---------------------------------------------------------------- Aapo Vienamo (1): thunderbolt: debugfs: Use FIELD_GET() Abhishek Pandit-Subedi (2): usb: typec: ucsi: Fix null pointer dereference in trace usb: typec: Update sysfs when setting ops Anand Moon (2): dt-bindings: usb: Add the binding example for the Genesys Logic GL3523 hub arm64: dts: amlogic: Used onboard usb hub reset on odroid n2 Bastien Curutchet (4): phy: ti: phy-da8xx-usb: Add runtime PM support Revert "usb: musb: da8xx: Set phy in OTG mode by default" usb: musb: da8xx: Remove try_idle implementation from host-only mode usb: musb: da8xx: Implement BABBLE recovery Bjorn Andersson (2): dt-bindings: platform: Add Lenovo Yoga C630 EC dt-bindings: usb: qcom,dwc3: Add SC8180X compatibles Conor Dooley (2): dt-bindings: musb: mpfs: add ULPI external vbus support usb: musb: mpfs: detect UPLI external vbus control requirement from DT Daehwan Jung (3): usb: dwc3: Support quirk for writing high-low order xhci: Add a quirk for writing ERST in high-low order usb: host: xhci-plat: Add support for XHCI_WRITE_64_HI_LO Diogo Ivo (3): usb: typec: ucsi: Add new notification bits usb: typec: ucsi: Add new capability bits usb: typec: ucsi: Enable UCSI v2.0 notifications Dmitry Baryshkov (10): platform: arm64: add Lenovo Yoga C630 WOS EC driver platform/arm64: build drivers even on non-ARM64 platforms usb: typec: ucsi: add Lenovo Yoga C630 glue driver usb: typec: ucsi: move ucsi_acknowledge() from ucsi_read_error() usb: typec: ucsi: simplify command sending API usb: typec: ucsi: split read operation usb: typec: ucsi: rework command execution functions usb: typec: ucsi: inline ucsi_read_message_in usb: typec: ucsi: extract common code for command handling usb: typec: ucsi: reorder operations in ucsi_run_command() Dr. David Alan Gilbert (1): usb: host: oxu210hp: remove unused struct 'ehci_dbg_port' Fabio Estevam (2): usb: chipidea: ci_hdrc_imx: Switch to RUNTIME/SYSTEM_SLEEP_PM_OPS() usb: chipidea: ci_hdrc_tegra: Switch to RUNTIME_PM_OPS() Francesco Dolcini (2): dt-bindings: usb: gpio-sbu-mux: Make 'enable-gpios' optional usb: typec: mux: gpio-sbu: Make enable gpio optional Frank Li (2): dt-bindings: usb: cdns,usb3: use common usb-drd yaml dt-bindings: usb: Convert fsl-usb to yaml Greg Kroah-Hartman (4): Merge tag 'v6.10-rc4' into usb-next Merge tag 'thunderbolt-for-v6.11-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/westeri/thunderbolt into usb-next Merge tag 'platform-drivers-x86-ib-lenovo-c630-v6.11-2' of https://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86 into usb-next Merge 6.10-rc6 into usb-next Hauke Mehrtens (1): usb: dwc2: add support for other Lantiq SoCs Hector Martin (1): xhci: Remove dead code in xhci_move_dequeue_past_td() Heikki Krogerus (2): usb: typec: ucsi: Changing the driver data type to void usb: typec: ucsi: psy: Add support for the charge type property Jameson Thies (3): usb: typec: ucsi: Delay alternate mode discovery usb: typec: ucsi: Always set number of alternate modes usb: typec: ucsi: Only set number of plug altmodes after registration Javier Carrasco (3): usb: typec: tipd: drop second firmware name read usb: typec: tipd: add error log to provide firmware name and size usb: typec: tipd: use min() to set tps6598x firmware packet size Jeff Johnson (6): usb: gadget: add missing MODULE_DESCRIPTION() macros usb: misc: add missing MODULE_DESCRIPTION() macros usb: host: add missing MODULE_DESCRIPTION() macros usb: phy: add missing MODULE_DESCRIPTION() macros usb: common: add missing MODULE_DESCRIPTION() macros usb: add missing MODULE_DESCRIPTION() macros John Keeping (1): usb: gadget: f_uac2: fix non-newline-terminated function name Kees Cook (1): usb: gadget: Use u16 types for 16-bit fields Kerem Karabay (2): USB: core: add 'shutdown' callback to usb_driver USB: uas: Implement the new shutdown callback Ma Ke (1): usb: gadget: aspeed_udc: validate endpoint index for ast udc Marco Felsch (1): usb: typec: tcpci: add support to set connector orientation Mark Pearson (1): usb: typec: ucsi: don't retrieve PDOs if not supported Mathias Nyman (4): xhci: show usb device name in xhci urb tracing xhci: Set correct transferred length for cancelled isoc transfers xhci: rework xhci internal endpoint halt state detection. xhci: sort out TRB Endpoint ID bitfield macros Matthias Kaehlcke (1): usb: misc: onboard_usb_dev: Add match function Mika Westerberg (7): thunderbolt: Mention Thunderbolt/USB4 debugging tools in Kconfig thunderbolt: Move usb4_port_margining_caps() declaration into correct place thunderbolt: Make usb4_port_sb_read/write() available outside of usb4.c thunderbolt: Add sideband register access to debugfs thunderbolt: Split out margining from USB4 port thunderbolt: Make margining functions accept target and retimer index thunderbolt: Add receiver lane margining support for retimers Neil Armstrong (5): usb: typec-mux: ptn36502: unregister typec switch on probe error and remove usb: typec-mux: nb7vpq904m: unregister typec switch on probe error and remove usb: typec-mux: ptn36502: broadcast typec state to next mux usb: typec-mux: nb7vpq904m: broadcast typec state to next mux dt-bindings: usb: dwc2: switch to unevaluatedProperties Niklas Neronin (14): usb: xhci: remove 'num_trbs' from struct 'xhci_td' usb: xhci: remove unused 'xhci' argument usb: xhci: remove unused argument from xhci_handle_cmd_config_ep() usb: xhci: remove unused argument from handle_port_status() usb: xhci: move link chain bit quirk checks into one helper function. usb: xhci: move all segment re-numbering to xhci_link_rings() usb: xhci: move untargeted transfer event handling to a separate function usb: xhci: improve error message for targetless transfer event usb: xhci: remove obsolete sanity check debug messages usb: xhci: ensure skipped isoc TDs are returned when isoc ring is stopped usb: xhci: remove false xhci_giveback_urb_in_irq() header comment usb: xhci: remove infinite loop prevention usb: xhci: move process TD code out of the while loop usb: xhci: add 'goto' for halted endpoint check in handle_tx_event() Norihiko Hama (1): usb-storage: Optimize scan delay more precisely Nícolas F. R. A. Prado (5): kselftest: devices: Allow specifying boards directory through parameter kselftest: devices: Add of-fullname-regex property kselftest: devices: Move discoverable devices test to subdirectory kselftest: Move ksft helper module to common directory kselftest: devices: Add test to detect device error logs Parth Pancholi (1): dt-bindings: usb: gpio-sbu-mux: Add an entry for TMUXHS4212 Peng Hongchi (1): usb: dwc2: gadget: Don't write invalid mapped sg entries into dma_desc with iommu enabled Pooja Katiyar (2): usb: typec: ucsi: UCSI2.0 Get Error Status data structure changes usb: typec: ucsi: UCSI2.0 Get Error Status changes R Sundar (1): usb: typec: nb7vpq904m: Remove unneeded indentation Radhey Shyam Pandey (1): usb: dwc3: enable CCI support for AMD-xilinx DWC3 controller Reka Norman (1): xhci: Apply XHCI_RESET_TO_DEFAULT quirk to TGL Roger Quadros (2): usb: cdns3: Add quirk flag to enable suspend residency usb: cdns3-ti: Add workaround for Errata i2409 Sebastian Reichel (2): usb: typec: tcpm: avoid resets for missing source capability messages usb: typec: tcpm: print error on hard reset Shantanu Goel (1): usb: uas: set host status byte on data completion error Simon Holesch (1): usbip: Don't submit special requests twice Takashi Iwai (1): usb: gadget: midi2: Fix incorrect default MIDI2 protocol setup Thinh Nguyen (1): usb: dwc3: core: Check all ports when set phy suspend Uday M Bhat (1): xhci: dbc: Allow users to modify DbC poll interval via sysfs Uwe Kleine-König (2): usb: misc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 usb: typec: Drop explicit initialization of struct i2c_device_id::driver_data to 0 Wolfram Sang (1): usb: typec: tcpm: use 'time_left' variable with wait_for_completion_timeout() .../ABI/testing/sysfs-bus-pci-drivers-xhci_hcd | 10 + Documentation/admin-guide/kernel-parameters.txt | 3 + .../bindings/platform/lenovo,yoga-c630-ec.yaml | 83 +++ .../devicetree/bindings/usb/cdns,usb3.yaml | 15 +- Documentation/devicetree/bindings/usb/dwc2.yaml | 2 +- .../devicetree/bindings/usb/fsl,usb2.yaml | 95 +++ Documentation/devicetree/bindings/usb/fsl-usb.txt | 81 --- .../devicetree/bindings/usb/genesys,gl850g.yaml | 60 +- .../devicetree/bindings/usb/gpio-sbu-mux.yaml | 8 +- .../bindings/usb/microchip,mpfs-musb.yaml | 7 + .../devicetree/bindings/usb/qcom,dwc3.yaml | 29 + .../boot/dts/amlogic/meson-g12b-odroid-n2.dtsi | 36 +- drivers/phy/ti/phy-da8xx-usb.c | 49 ++ drivers/platform/Makefile | 2 +- drivers/platform/arm64/Kconfig | 14 + drivers/platform/arm64/Makefile | 1 + drivers/platform/arm64/lenovo-yoga-c630.c | 291 +++++++++ drivers/thunderbolt/Kconfig | 17 +- drivers/thunderbolt/debugfs.c | 648 +++++++++++++++------ drivers/thunderbolt/retimer.c | 53 +- drivers/thunderbolt/sb_regs.h | 18 +- drivers/thunderbolt/tb.h | 45 +- drivers/thunderbolt/usb4.c | 187 +++--- drivers/usb/cdns3/cdns3-ti.c | 15 +- drivers/usb/cdns3/core.h | 1 + drivers/usb/cdns3/drd.c | 10 +- drivers/usb/cdns3/drd.h | 3 + drivers/usb/chipidea/ci_hdrc_imx.c | 19 +- drivers/usb/chipidea/ci_hdrc_msm.c | 1 + drivers/usb/chipidea/ci_hdrc_tegra.c | 9 +- drivers/usb/class/usbtmc.c | 1 + drivers/usb/common/common.c | 1 + drivers/usb/common/usb-otg-fsm.c | 1 + drivers/usb/core/driver.c | 14 + drivers/usb/core/usb.c | 1 + drivers/usb/dwc2/gadget.c | 4 +- drivers/usb/dwc2/params.c | 30 +- drivers/usb/dwc3/core.c | 66 ++- drivers/usb/dwc3/core.h | 8 + drivers/usb/dwc3/dwc3-xilinx.c | 29 + drivers/usb/dwc3/host.c | 4 +- drivers/usb/gadget/composite.c | 1 + drivers/usb/gadget/function/f_acm.c | 1 + drivers/usb/gadget/function/f_ecm.c | 1 + drivers/usb/gadget/function/f_eem.c | 1 + drivers/usb/gadget/function/f_fs.c | 1 + drivers/usb/gadget/function/f_hid.c | 1 + drivers/usb/gadget/function/f_loopback.c | 1 + drivers/usb/gadget/function/f_mass_storage.c | 1 + drivers/usb/gadget/function/f_midi.c | 1 + drivers/usb/gadget/function/f_midi2.c | 20 +- drivers/usb/gadget/function/f_ncm.c | 1 + drivers/usb/gadget/function/f_obex.c | 1 + drivers/usb/gadget/function/f_phonet.c | 1 + drivers/usb/gadget/function/f_printer.c | 1 + drivers/usb/gadget/function/f_rndis.c | 1 + drivers/usb/gadget/function/f_serial.c | 1 + drivers/usb/gadget/function/f_sourcesink.c | 1 + drivers/usb/gadget/function/f_subset.c | 1 + drivers/usb/gadget/function/f_tcm.c | 1 + drivers/usb/gadget/function/f_uac1.c | 1 + drivers/usb/gadget/function/f_uac1_legacy.c | 1 + drivers/usb/gadget/function/f_uac2.c | 6 +- drivers/usb/gadget/function/f_uvc.c | 1 + drivers/usb/gadget/function/storage_common.c | 1 + drivers/usb/gadget/function/u_ether.c | 1 + drivers/usb/gadget/function/u_serial.c | 1 + drivers/usb/gadget/legacy/dbgp.c | 1 + drivers/usb/gadget/legacy/gmidi.c | 1 + drivers/usb/gadget/legacy/zero.c | 1 + drivers/usb/gadget/udc/aspeed_udc.c | 2 + drivers/usb/host/ohci-exynos.c | 1 + drivers/usb/host/oxu210hp-hcd.c | 25 - drivers/usb/host/xhci-dbgcap.c | 38 ++ drivers/usb/host/xhci-dbgcap.h | 2 +- drivers/usb/host/xhci-mem.c | 40 +- drivers/usb/host/xhci-pci-renesas.c | 1 + drivers/usb/host/xhci-pci.c | 4 +- drivers/usb/host/xhci-plat.c | 3 + drivers/usb/host/xhci-ring.c | 306 ++++------ drivers/usb/host/xhci-trace.h | 5 +- drivers/usb/host/xhci.h | 45 +- drivers/usb/misc/ezusb.c | 1 + drivers/usb/misc/isight_firmware.c | 1 + drivers/usb/misc/onboard_usb_dev.c | 11 +- drivers/usb/misc/usb251xb.c | 18 +- drivers/usb/misc/usb3503.c | 2 +- drivers/usb/misc/usb4604.c | 2 +- drivers/usb/misc/yurex.c | 1 + drivers/usb/mon/mon_main.c | 1 + drivers/usb/musb/da8xx.c | 20 +- drivers/usb/musb/mpfs.c | 2 + drivers/usb/phy/phy-am335x-control.c | 1 + drivers/usb/phy/phy-am335x.c | 1 + drivers/usb/storage/uas.c | 7 +- drivers/usb/storage/usb.c | 101 +++- drivers/usb/typec/altmodes/displayport.c | 2 +- drivers/usb/typec/anx7411.c | 2 +- drivers/usb/typec/class.c | 18 +- drivers/usb/typec/mux/gpio-sbu-mux.c | 6 +- drivers/usb/typec/mux/nb7vpq904m.c | 95 +-- drivers/usb/typec/mux/ptn36502.c | 33 +- drivers/usb/typec/tcpm/fusb302.c | 4 +- drivers/usb/typec/tcpm/tcpci.c | 46 +- drivers/usb/typec/tcpm/tcpci_maxim_core.c | 2 +- drivers/usb/typec/tcpm/tcpm.c | 37 +- drivers/usb/typec/tipd/core.c | 33 +- drivers/usb/typec/ucsi/Kconfig | 9 + drivers/usb/typec/ucsi/Makefile | 1 + drivers/usb/typec/ucsi/displayport.c | 2 +- drivers/usb/typec/ucsi/psy.c | 32 + drivers/usb/typec/ucsi/ucsi.c | 290 +++++---- drivers/usb/typec/ucsi/ucsi.h | 72 ++- drivers/usb/typec/ucsi/ucsi_acpi.c | 145 +++-- drivers/usb/typec/ucsi/ucsi_ccg.c | 105 ++-- drivers/usb/typec/ucsi/ucsi_glink.c | 74 +-- drivers/usb/typec/ucsi/ucsi_stm32g0.c | 83 +-- drivers/usb/typec/ucsi/ucsi_yoga_c630.c | 164 ++++++ drivers/usb/usbip/stub_rx.c | 77 ++- include/linux/platform_data/lenovo-yoga-c630.h | 44 ++ include/linux/usb.h | 3 + include/linux/usb/gadget.h | 10 +- include/linux/usb/tcpci.h | 8 + include/linux/usb/typec.h | 3 + tools/testing/selftests/Makefile | 4 +- tools/testing/selftests/devices/Makefile | 4 - .../testing/selftests/devices/error_logs/Makefile | 3 + .../devices/error_logs/test_device_error_logs.py | 85 +++ tools/testing/selftests/devices/probe/Makefile | 4 + .../{ => probe}/boards/Dell Inc.,XPS 13 9300.yaml | 0 .../{ => probe}/boards/google,spherion.yaml | 4 + .../{ => probe}/test_discoverable_devices.py | 44 +- .../selftests/{devices => kselftest}/ksft.py | 0 133 files changed, 3001 insertions(+), 1212 deletions(-) create mode 100644 Documentation/devicetree/bindings/platform/lenovo,yoga-c630-ec.yaml create mode 100644 Documentation/devicetree/bindings/usb/fsl,usb2.yaml delete mode 100644 Documentation/devicetree/bindings/usb/fsl-usb.txt create mode 100644 drivers/platform/arm64/lenovo-yoga-c630.c create mode 100644 drivers/usb/typec/ucsi/ucsi_yoga_c630.c create mode 100644 include/linux/platform_data/lenovo-yoga-c630.h delete mode 100644 tools/testing/selftests/devices/Makefile create mode 100644 tools/testing/selftests/devices/error_logs/Makefile create mode 100755 tools/testing/selftests/devices/error_logs/test_device_error_logs.py create mode 100644 tools/testing/selftests/devices/probe/Makefile rename tools/testing/selftests/devices/{ => probe}/boards/Dell Inc.,XPS 13 9300.yaml (100%) rename tools/testing/selftests/devices/{ => probe}/boards/google,spherion.yaml (86%) rename tools/testing/selftests/devices/{ => probe}/test_discoverable_devices.py (86%) rename tools/testing/selftests/{devices => kselftest}/ksft.py (100%) . Date: Fri, 19 Jul 2024 14:26:07 +0200 From: Greg KH To: Linus Torvalds , Andrew Morton , Stephen Rothwell Cc: linux-kernel@vger.kernel.org, linux-staging@lists.linux.dev Subject: [GIT PULL] Staging driver changes for 6.11-rc1 The following changes since commit 22a40d14b572deb80c0648557f4bd502d7e83826: Linux 6.10-rc6 (2024-06-30 14:40:44 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging.git tags/staging-6.11-rc1 for you to fetch changes up to 104e004739ef03890a1e175b3c2672d50c6d1a6a: staging: rtl8723bs: Remove constant result function CheckNegative() (2024-07-10 14:52:34 +0200) ---------------------------------------------------------------- Staging driver updates for 6.11-rc1 This is the "big" staging driver update for 6.11-rc1. Not really all that much happened this release cycle, just lots of tiny cleanups, overall about 3000 lines removed, so the cleanups were worth it. Included in here are: - loads of rtl8723bs driver cleanups - lots of rtl8192e driver cleanups - vc04_services reworks and cleanups as that codebase gets slowly evolved into something that will make it into the "real" part of the kernel hopefully soon. - other tiny staging driver cleanups All of these have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman ---------------------------------------------------------------- Ashok Kumar (1): staging: vme_user: Add blank line after struct decl Chen shuo (1): staging: rtl8192e: remove the r8192E_dev.c's unnecessary brace Dr. David Alan Gilbert (2): staging: r8712u: remove unused struct 'zero_bulkout_context' staging: greybus: audio: remove unused struct gb_mixer_control Greg Kroah-Hartman (2): Merge tag 'v6.10-rc4' into staging-next Merge 6.10-rc6 into staging-next Jeff Johnson (3): staging: greybus: add missing MODULE_DESCRIPTION() macros staging: fbtft: add missing MODULE_DESCRIPTION() macro staging: rtl8192e: add missing MODULE_DESCRIPTION() macros Marc Dietrich (1): staging: nvec: make i2c controller register writes robust Michael Straube (2): staging: rtl8192e: reduce indentation level staging: rtl8192e: remove unnecessary line breaks Nam Cao (1): staging: rtl8712: remove unnecessary alignment of pxmitpriv->pxmitbuf Philipp Hortmann (29): staging: rtl8723bs: Remove unused structs starting with profile_info staging: rtl8723bs: Remove switch(type) as type is constant staging: rtl8723bs: Remove unused declarations start with sd_hal_bus_init staging: rtl8723bs: Remove empty file sdio_osintf.h staging: rtl8723bs: Remove unused macros in wifi.h staging: rtl8723bs: Remove unused macros in sta_info.h staging: rtl8723bs: Remove unused macros in rtw_xmit.h staging: rtl8723bs: Remove unused macros in rtw_security.h staging: rtl8723bs: Remove unused macros in rtw_recv.h staging: rtl8723bs: Remove unused macros in rtw_pwrctrl.h staging: rtl8723bs: Remove unused macros in rtw_mp.h staging: rtl8723bs: Remove unused macros in rtw_mlme.h staging: rtl8723bs: Remove unused macros in rtw_io.h staging: rtl8723bs: Remove unused macro in ioctl_cfg80211.c staging: rtl8723bs: Remove unused variable pwdev_priv staging: rtl8723bs: Remove unused macros in hal_com_h2c.h staging: rtl8723bs: Remove unused macros in rtw_ht.h staging: rtl8723bs: Remove unused macros in hal_com_reg.h staging: rtl8723bs: Remove unused macros in hal_phy_reg_8723b.h staging: rtl8723bs: Move last macro from hal_phy_reg_8723b.h staging: rtl8723bs: Delete file hal_phy_reg_8723b.h staging: rtl8723bs: Remove unused macros in Hal8192CPhyReg.h staging: rtl8723bs: Remove unused macros in Hal8723BReg.h staging: rtl8723bs: Remove unused macros in HalPwrSeqCmd.h staging: rtl8723bs: Remove unused macros in rtw_mlme.h staging: rtl8723bs: Remove unused macros in rtw_efuse.h staging: rtl8723bs: Remove unused macros in hal_pwr_seq.h staging: rtl8723bs: Remove unused macros in rtw_mlme_ext.h staging: rtl8723bs: Remove constant result function CheckNegative() Roshan Khatri (7): staging: rtl8712: Fix spelling mistake in rtl871x_event.h staging: rtl8712: Fix spelling mistake in rtl8712_xmit.c staging: rtl8192e: Fix spelling mistakes in rtllib_softmac.c staging: rtl8712: Fix spelling mistake in rtl871x_mlme.c staging: rtl8712: Fix spelling mistake in rtl871x_io.h staging: rtl8723bs: hal: Fix spelling mistakes in rtl8723b_cmd.c staging: rtl8723bs: hal: Fix spelling mistakes in odm.h Stefan Wahren (10): staging: vchiq_arm: Unify return code variable staging: vchiq_arm: Drop obsolete comment staging: vchiq_core: Drop non-functional struct members staging: vchiq_arm: Drop unnecessary declarations staging: vchiq_arm: Get the rid off struct vchiq_2835_state staging: vchiq_arm: Drop vchiq_arm_init_state staging: vchiq_arm: Reduce indentation of service_callback staging: vchiq_core: Add hex prefix to debugfs output staging: vchiq_arm: Don't cast scatter-gather elements staging: vc04_services: Update testing instructions Teddy Engel (7): staging: vt6656: Remove line from TODO staging: rtl8192e: Remove unused constants staging: rtl8192e: Remove unused struct phy_ofdm_rx_status_rxsc staging: rtl8192e: Capitalize constant RegC38_TH staging: rtl8192e: Remove unused macro dm_tx_bb_gain_idx_to_amplify staging: rtl8192e: Remove unnecessary pre-declaration of struct net_device staging: rtl8192e: Fix conflicting types error with net_device. Tom Mounet (1): staging: nvec: Use x instead of x != NULL to improve readability. Tree Davies (55): Staging: rtl8192e: Rename variable IsPassiveChannel Staging: rtl8192e: Rename variable CountryIeBuf Staging: rtl8192e: Rename variable CountryIeLen Staging: rtl8192e: Rename variable bWithAironetIE Staging: rtl8192e: Rename variable bContainHTC Staging: rtl8192e: Rename variable MBssid Staging: rtl8192e: Rename variable MBssidMask Staging: rtl8192e: Rename variable elementID Staging: rtl8192e: Rename variable rtllib_rx_Monitor Staging: rtl8192e: Rename variable rtllib_rx_InfraAdhoc Staging: rtl8192e: Rename variable IsLegacyDataFrame Staging: rtl8192e: Rename variable RxReorderIndicatePacket Staging: rtl8192e: Rename variable RfdArray Staging: rtl8192e: Rename variable Decrypted Staging: rtl8192e: Rename variable AddReorderEntry Staging: rtl8192e: Rename variable pList Staging: rtl8192e: Rename variable nPadding_Length Staging: rtl8192e: Rename variable LLCOffset Staging: rtl8192e: Remove variable ChkLength Staging: rtl8192e: Rename variable WinEnd Staging: rtl8192e: Rename variable WinSize Staging: rtl8192e: Rename variable IsDataFrame Staging: rtl8192e: Rename variable bMatchWinStart Staging: rtl8192e: Rename variable bMBssidValid Staging: rtl8192e: Rename variable bWithCcxVerNum Staging: rtl8192e: Rename variable Frame_QoSTID Staging: rtl8192e: Rename variable CcxRmState Staging: rtl8192e: Rename variable IsQoSDataFrame Staging: rtl8192e: Rename variable RfdCnt Staging: rtl8192e: Rename variable prxbIndicateArray Staging: rtl8192e: Rename variable bPktInBuf Staging: rtl8192e: Rename variable bHwSec Staging: rtl8192e: Rename variable bIsMulticast Staging: rtl8192e: Rename variable HTCurrentOperaRate Staging: rtl8192e: Rename variable HTOpMode Staging: rtl8192e: Rename variable bRTSEnable Staging: rtl8192e: Rename variable bRTSBW Staging: rtl8192e: Rename variable bCTSEnable Staging: rtl8192e: Rename variable bRTSUseShortGI Staging: rtl8192e: Rename variable bforced_tx20Mhz Staging: rtl8192e: Rename variable bPacketBW Staging: rtl8192e: Rename variable bBroadcast Staging: rtl8192e: Rename variable CntAfterLink Staging: rtl8192e: Rename variable bUseShortGI Staging: rtl8192e: Rename function TsStartAddBaProcess() Staging: rtl8192e: Fix alignment to match open parenthesis Staging: rtl8192e: Rename function rtllib_query_BandwidthMode Staging: rtl8192e: Rename function rtllib_query_ShortPreambleMode Staging: rtl8192e: Rename function rtllib_query_HTCapShortGI Staging: rtl8192e: Rename variable bUseShortPreamble Staging: rtl8192e: Rename variable bRTSSTBC Staging: rtl8192e: Remove parameter bIsAmsdu from rtllib_classify() Staging: rtl8192e: Remove variable IsAmsdu from rtllib_xmit_inter() Staging: rtl8192e: Fix alignment to match open parenthesis in rtllib_tx.c Staging: rtl8192e: Fix alignment to match open parenthesis in rtllib_rx.c Umang Jain (2): staging: vchiq_core: Bubble up wait_event_interruptible() return value staging: vc04_services: vchiq_core: Stop kthreads on vchiq module unload Wolfram Sang (1): staging: vc04_services: use 'time_left' variable with wait_for_completion_timeout() Yang Li (1): staging: vc04_services: Fix kernel-doc param for vchiq_register_chrdev drivers/staging/fbtft/fbtft-core.c | 1 + drivers/staging/greybus/audio_manager.c | 1 + drivers/staging/greybus/audio_topology.c | 6 - drivers/staging/greybus/bootrom.c | 1 + drivers/staging/greybus/camera.c | 1 + drivers/staging/greybus/gbphy.c | 1 + drivers/staging/greybus/gpio.c | 1 + drivers/staging/greybus/hid.c | 1 + drivers/staging/greybus/i2c.c | 1 + drivers/staging/greybus/light.c | 1 + drivers/staging/greybus/log.c | 1 + drivers/staging/greybus/loopback.c | 1 + drivers/staging/greybus/power_supply.c | 1 + drivers/staging/greybus/pwm.c | 1 + drivers/staging/greybus/raw.c | 1 + drivers/staging/greybus/sdio.c | 1 + drivers/staging/greybus/spi.c | 1 + drivers/staging/greybus/spilib.c | 1 + drivers/staging/greybus/uart.c | 1 + drivers/staging/greybus/usb.c | 1 + drivers/staging/greybus/vibrator.c | 1 + drivers/staging/nvec/nvec.c | 45 +- drivers/staging/rtl8192e/rtl8192e/r8190P_def.h | 9 - drivers/staging/rtl8192e/rtl8192e/r8192E_dev.c | 21 +- drivers/staging/rtl8192e/rtl8192e/rtl_cam.h | 1 + drivers/staging/rtl8192e/rtl8192e/rtl_core.c | 6 +- drivers/staging/rtl8192e/rtl8192e/rtl_dm.c | 176 ++-- drivers/staging/rtl8192e/rtl8192e/rtl_dm.h | 6 +- drivers/staging/rtl8192e/rtl8192e/rtl_pci.h | 1 + drivers/staging/rtl8192e/rtl8192e/rtl_wx.c | 2 +- drivers/staging/rtl8192e/rtl819x_HTProc.c | 4 +- drivers/staging/rtl8192e/rtl819x_TSProc.c | 10 +- drivers/staging/rtl8192e/rtllib.h | 64 +- drivers/staging/rtl8192e/rtllib_crypt_ccmp.c | 5 +- drivers/staging/rtl8192e/rtllib_crypt_tkip.c | 11 +- drivers/staging/rtl8192e/rtllib_crypt_wep.c | 5 +- drivers/staging/rtl8192e/rtllib_module.c | 1 + drivers/staging/rtl8192e/rtllib_rx.c | 228 +++--- drivers/staging/rtl8192e/rtllib_softmac.c | 8 +- drivers/staging/rtl8192e/rtllib_tx.c | 135 ++-- drivers/staging/rtl8712/rtl8712_xmit.c | 2 +- drivers/staging/rtl8712/rtl871x_event.h | 2 +- drivers/staging/rtl8712/rtl871x_io.h | 2 +- drivers/staging/rtl8712/rtl871x_mlme.c | 2 +- drivers/staging/rtl8712/rtl871x_xmit.c | 13 +- drivers/staging/rtl8712/rtl871x_xmit.h | 1 - drivers/staging/rtl8712/usb_ops_linux.c | 7 - drivers/staging/rtl8723bs/hal/Hal8723BReg.h | 373 --------- drivers/staging/rtl8723bs/hal/HalHWImg8723B_BB.c | 17 +- drivers/staging/rtl8723bs/hal/HalHWImg8723B_MAC.c | 12 +- drivers/staging/rtl8723bs/hal/HalHWImg8723B_RF.c | 12 +- drivers/staging/rtl8723bs/hal/odm.h | 4 +- drivers/staging/rtl8723bs/hal/rtl8723b_cmd.c | 4 +- drivers/staging/rtl8723bs/include/Hal8192CPhyReg.h | 882 +-------------------- drivers/staging/rtl8723bs/include/HalPwrSeqCmd.h | 11 - drivers/staging/rtl8723bs/include/drv_types.h | 1 - drivers/staging/rtl8723bs/include/hal_com_h2c.h | 76 -- drivers/staging/rtl8723bs/include/hal_com_reg.h | 792 ------------------ .../staging/rtl8723bs/include/hal_phy_reg_8723b.h | 69 -- drivers/staging/rtl8723bs/include/hal_pwr_seq.h | 7 - drivers/staging/rtl8723bs/include/rtl8723b_hal.h | 2 +- drivers/staging/rtl8723bs/include/rtw_efuse.h | 13 - drivers/staging/rtl8723bs/include/rtw_ht.h | 22 - drivers/staging/rtl8723bs/include/rtw_io.h | 57 -- drivers/staging/rtl8723bs/include/rtw_mlme.h | 182 ----- drivers/staging/rtl8723bs/include/rtw_mlme_ext.h | 37 - drivers/staging/rtl8723bs/include/rtw_mp.h | 29 - drivers/staging/rtl8723bs/include/rtw_pwrctrl.h | 38 - drivers/staging/rtl8723bs/include/rtw_recv.h | 16 - drivers/staging/rtl8723bs/include/rtw_security.h | 5 - drivers/staging/rtl8723bs/include/rtw_xmit.h | 10 - drivers/staging/rtl8723bs/include/sdio_hal.h | 4 - drivers/staging/rtl8723bs/include/sdio_osintf.h | 16 - drivers/staging/rtl8723bs/include/sta_info.h | 44 - drivers/staging/rtl8723bs/include/wifi.h | 299 ------- drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c | 17 - .../vc04_services/bcm2835-camera/bcm2835-camera.c | 8 +- drivers/staging/vc04_services/interface/TESTING | 45 +- drivers/staging/vc04_services/interface/TODO | 7 - .../vc04_services/interface/vchiq_arm/vchiq_arm.c | 268 +++---- .../vc04_services/interface/vchiq_arm/vchiq_arm.h | 3 - .../vc04_services/interface/vchiq_arm/vchiq_core.c | 47 +- .../vc04_services/interface/vchiq_arm/vchiq_core.h | 6 - .../vc04_services/interface/vchiq_arm/vchiq_dev.c | 2 +- .../staging/vc04_services/vchiq-mmal/mmal-vchiq.c | 8 +- drivers/staging/vme_user/vme_user.c | 1 + drivers/staging/vt6656/TODO | 1 - 87 files changed, 617 insertions(+), 3623 deletions(-) delete mode 100644 drivers/staging/rtl8723bs/include/hal_phy_reg_8723b.h delete mode 100644 drivers/staging/rtl8723bs/include/sdio_osintf.h . Date: Fri, 19 Jul 2024 14:26:27 +0200 From: Greg KH To: Linus Torvalds Cc: Andrew Morton , Arnd Bergmann , linux-kernel@vger.kernel.org Subject: [GIT PULL] Char/Misc driver changes for 6.11-rc1 The following changes since commit 22a40d14b572deb80c0648557f4bd502d7e83826: Linux 6.10-rc6 (2024-06-30 14:40:44 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git tags/char-misc-6.11-rc1 for you to fetch changes up to 5418e6dfc905b3ccc1e01bdad97d948697b20100: misc: Kconfig: exclude mrvl-cn10k-dpi compilation for 32-bit systems (2024-07-18 09:02:37 +0200) ---------------------------------------------------------------- Char/Misc and other driver changes for 6.11-rc1 Here is the "big" set of char/misc and other driver subsystem changes for 6.11-rc1. Nothing major in here, just loads of new drivers and updates. Included in here are: - IIO api updates and new drivers added - wait_interruptable_timeout() api cleanups for some drivers - MODULE_DESCRIPTION() additions for loads of drivers - parport out-of-bounds fix - interconnect driver updates and additions - mhi driver updates and additions - w1 driver fixes - binder speedups and fixes - eeprom driver updates - coresight driver updates - counter driver update - new misc driver additions - other minor api updates All of these, EXCEPT for the final Kconfig build fix for 32bit systems, have been in linux-next for a while with no reported issues. The Kconfig fixup went in 29 hours ago, so might have missed the latest linux-next, but was acked by everyone involved. Signed-off-by: Greg Kroah-Hartman ---------------------------------------------------------------- Aidan MacDonald (1): iio: adc: axp20x_adc: Add support for AXP192 Alexander Usyskin (1): mei: bus-fixup: set timeout for MKHI send operations Alisa-Dariana Roman (8): iio: adc: ad7192: Use standard attribute dt-bindings: iio: adc: ad7192: Add aincom supply iio: adc: ad7192: Add aincom supply dt-bindings: iio: adc: Add single-channel property dt-bindings: iio: adc: ad7192: Add AD7194 support iio: adc: ad7192: Add AD7194 support iio: adc: ad7192: Clean up dev MAINTAINERS: Update AD7192 driver maintainer Amit Vadhavana (1): slimbus: Fix struct and documentation alignment in stream.c Andy Shevchenko (10): misc: eeprom_93xx46: Make use of device properties eeprom: digsy_mtc: Fix 93xx46 driver probe failure eeprom: digsy_mtc: Convert to use GPIO descriptors misc: eeprom_93xx46: Hide legacy platform data in the driver misc: eeprom_93xx46: Remove ->prepare() and ->finish() customisation misc: eeprom_93xx46: Use spi_message_init_with_transfers() misc: eeprom_93xx46: Convert to use kstrtox() misc: eeprom_93xx46: Replace explicit castings with proper specifiers misc: eeprom_93xx46: Use string_choices API instead of ternary operator misc: eeprom_93xx46: Convert to DEVICE_ATTR_WO() Angelo Dureghello (6): dt-bindings: iio: dac: fix ad3552r gain parameter names dt-bindings: iio: dac: add ad35xxr single output variants iio: dac: ad3552r: add model data structure iio: dac: ad3552r: add support for ad3541r and ad3551r iio: dac: ad3552r: change AD3552R_NUM_CH define name iio: dac: ad3552r: uniform structure names AngeloGioacchino Del Regno (5): dt-bindings: interconnect: Add MediaTek EMI Interconnect bindings interconnect: mediatek: Add MediaTek MT8183/8195 EMI Interconnect driver dt-bindings: iio: adc: Add MediaTek MT6359 PMIC AUXADC math.h: Add unsigned 8 bits fractional numbers type iio: adc: Add support for MediaTek MT6357/8/9 Auxiliary ADC Antoni Pokusinski (1): iio: humidity: si7020: add heater support Antoniu Miclaus (3): iio: frequency: adrf6780: rm clk provider include dt-bindings: iio: adf4350: add clk provider prop iio: frequency: adf4350: add clk provider Armin Wolf (2): eeprom: ee1004: Use devres for bus data cleanup eeprom: ee1004: Add nvmem support Arthur Becker (2): iio: light: driver for Vishay VEML6040 dt-bindings: iio: light: add VEML6040 RGBW-LS Barnabás Czémán (3): iio: light: stk3310: relax failure to match id iio: light: stk3310: make chip id check expandable iio: light: stk3310: support more stk3311 variants Bruna Bispo (1): iio: chemical: ams-iaq-core: clean up codestyle warning Carlos Llamas (2): binder: use bitmap for faster descriptor lookup binder: fix hang of unregistered readers Chenyuan Yang (1): iio: Fix the sorting functionality in iio_gts_build_avail_time_table Christophe JAILLET (4): iio: temperature: max30208: Remove an unused field in struct max30208_data iio: multiplexer: Remove an unused field in struct mux iio: tmag5273: Remove some unused field in struct tmag5273_data iio: light: gp2ap020a00f: Remove some unused field in struct gp2ap020a00f_data Danila Tikhonov (2): iio: imu: bmi160: add support for bmi120 dt-bindings: iio: imu: bmi160: add bmi120 David Lechner (32): iio: adc: sort Makefile iio: adc: ad7944: remove unused parameter dt-bindings: iio: adc: Add binding for AD7380 ADCs iio: adc: ad7380: new driver for AD7380 ADCs dt-bindings: iio: adc: ad7380: add pseudo-differential parts iio: adc: ad7380: add support for pseudo-differential parts iio: introduce struct iio_scan_type iio: buffer: use struct iio_scan_type to simplify code iio: add support for multiple scan types per channel iio: adc: ad7380: use spi_optimize_message() iio: adc: ad7266: use devm_regulator_get_enable_read_voltage iio: adc: ad7292: use devm_regulator_get_enable_read_voltage iio: adc: ad7793: use devm_regulator_get_enable_read_voltage iio: adc: ad7944: use devm_regulator_get_enable_read_voltage Documentation: devres: add missing SPI helpers spi: add devm_spi_optimize_message() helper spi: add EXPORT_SYMBOL_GPL(devm_spi_optimize_message) iio: adc: aspeed_adc: use devm_regulator_get_enable_read_voltage() iio: adc: hx711: use devm_regulator_get_enable_read_voltage() iio: adc: hx711: remove hx711_remove() iio: adc: hx711: use dev_err_probe() iio: adc: ltc2309: use devm_regulator_get_enable_read_voltage() iio: adc: max1363: use devm_regulator_get_enable_read_voltage() iio: adc: ti-adc108s102: use devm_regulator_get_enable_read_voltage() iio: adc: ti-ads8688: use devm_regulator_get_enable_read_voltage() iio: adc: ti-ads8688: drop ads8688_remove() iio: dac: ad3552r: use devm_regulator_get_enable_read_voltage() iio: adc: ad7192: use devm_regulator_get_enable_read_voltage iio: adc: ad7944: use devm_spi_optimize_message() counter: ti-eqep: implement over/underflow events counter: ti-eqep: remove unused struct member counter: ti-eqep: remove counter_priv() wrapper Denis Benato (1): iio: imu: bmi323: Use iio read_acpi_mount_matrix() helper Dimitri Fedrau (1): iio: temperature: mcp9600: add threshold events support Dmitry Baryshkov (1): MAINTAINERS: CC dri-devel list on Qualcomm FastRPC patches Dr. David Alan Gilbert (9): iio: accel: bmi088: remove unused struct 'bmi088_scale_info' iio: adc: pac1934: remove unused struct 'samp_rate_mapping' iio: light: rohm-bu27034: remove unused struct 'bu27034_result' staging: iio: adt7316: remove unused struct 'adt7316_limit_regs' fpga: altera-fpga2sdram: remove unused struct 'prop_map' mcb: remove unused struct 'mcb_parse_priv' parport: Remove 'drivers' list parport: Remove attach function pointer parport: Remove parport_driver.devmodel Dumitru Ceclan (9): dt-bindings: iio: adc: Add common-mode-channel property dt-bindings: adc: ad7173: add support for ad411x iio: adc: ad_sigma_delta: add disable_one callback iio: adc: ad7173: refactor channel configuration parsing iio: adc: ad7173: refactor ain and vref selection iio: adc: ad7173: add support for special inputs iio: adc: ad7173: refactor device info structs iio: adc: ad7173: document sampling frequency behaviour iio: adc: ad7173: Add support for AD411x devices Dylan Van Assche (2): misc: fastrpc: support complete DMA pool access to the DSP misc: fastrpc: use coherent pool for untranslated Compute Banks Ekansh Gupta (1): misc: fastrpc: Add missing dev_err newlines Erick Archer (1): iio: event: use sizeof(*pointer) instead of sizeof(type) Georgi Djakov (4): Merge branch 'icc-mtk' into icc-next Merge branch 'icc-fixes' into icc-next Merge branch 'icc-msm8953' into icc-next Merge branch 'icc-rpmh-qos' into icc-next Gerhard Engleder (2): misc: keba: Add basic KEBA CP500 system FPGA support misc: keba: Fix missing AUXILIARY_BUS dependency Greg Kroah-Hartman (12): Merge tag 'iio-for-6.11a' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/jic23/iio into char-misc-testing Merge tag 'v6.10-rc4' into char-misc-next Merge tag 'peci-next-6.11-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/iwi/linux into char-misc-next Merge 6.10-rc6 into char-misc-next Merge tag 'fpga-for-6.11-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/fpga/linux-fpga into char-misc-next Merge tag 'w1-drv-6.11' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/krzk/linux-w1 into char-misc-next Merge tag 'counter-updates-for-6.11' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/wbg/counter into char-misc-next Merge tag 'coresight-next-v6.11' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/coresight/linux into char-misc-next Merge tag 'iio-for-6.11b' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/jic23/iio into char-misc-next Merge tag 'mhi-for-v6.11' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/mani/mhi into char-misc-next Merge tag 'icc-6.11-rc1' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git/djakov/icc into char-misc-next misc: delete Makefile.rej Guenter Roeck (2): eeprom: ee1004: Call i2c_new_scanned_device to instantiate thermal sensor eeprom: ee1004: Instantiate jc42 devices for DIMMS implementing Rev.1 SPD Guillaume Stols (2): dt-bindings: iio: adc: adi,ad7606: add missing datasheet link dt-bindings: iio: adc: adi,ad7606: comment and sort the compatible names Gustavo Silva (6): dt-bindings: vendor-prefixes: add ScioSense dt-bindings: iio: chemical: add ENS160 sensor iio: chemical: add driver for ENS160 sensor iio: chemical: ens160: add triggered buffer support iio: chemical: ens160: add power management support MAINTAINERS: Add ScioSense ENS160 Gustavo Ueti Fukunaga (1): iio: adc: ti-adc161s626: make use of iio_device_claim_direct_scoped() Heiko Stuebner (3): nvmem: rockchip-otp: set add_legacy_fixed_of_cells config option nvmem: rockchip-otp: Set type to OTP nvmem: rockchip-efuse: set type to OTP Iwona Winiarska (1): peci: aspeed: Clear clock_divider value before setting it James Clark (1): coresight: Fix ref leak when of_coresight_parse_endpoint() fails Jean-Baptiste Maneyrol (3): iio: imu: inv_icm42600: add register caching in the regmap iio: document inv_icm42600 driver private sysfs attributes iio: imu: inv_icm42600: add support of accel low-power mode Jeff Johnson (26): uio: add missing MODULE_DESCRIPTION() macros parport: add missing MODULE_DESCRIPTION() dyndbg: add missing MODULE_DESCRIPTION() macro lib/math: add missing MODULE_DESCRIPTION() macros ppdev: add missing MODULE_DESCRIPTION() macro tlclk: add missing MODULE_DESCRIPTION() macro char: add missing MODULE_DESCRIPTION() macros misc: open-dice: add missing MODULE_DESCRIPTION() macro siox: bus-gpio: add missing MODULE_DESCRIPTION() interconnect: imx: add missing MODULE_DESCRIPTION() macros interconnect: qcom: add missing MODULE_DESCRIPTION() macros iio: add missing MODULE_DESCRIPTION() macros counter: ftm-quaddec: add missing MODULE_DESCRIPTION() macro dtlk: add missing MODULE_DESCRIPTION() macro dsp56k: add missing MODULE_DESCRIPTION() macro intel_th: msu-sink: add missing MODULE_DESCRIPTION() greybus: add missing MODULE_DESCRIPTION() macros dca: add missing MODULE_DESCRIPTION() macro platform/goldfish: goldfish_pipe: add missing MODULE_DESCRIPTION() macro bsr: add missing MODULE_DESCRIPTION() macro nvmem: add missing MODULE_DESCRIPTION() macros misc: fastrpc: add missing MODULE_DESCRIPTION() macro samples: configfs: add missing MODULE_DESCRIPTION() macro spmi: add missing MODULE_DESCRIPTION() macros agp: uninorth: add missing MODULE_DESCRIPTION() macro virtio: add missing MODULE_DESCRIPTION() macro Jiapeng Chong (1): interconnect: mediatek: remove unneeded semicolon Jonathan Cameron (4): iio: adc: ltc2309: Fix endian type passed to be16_to_cpu() Merge tag 'dmaengine_topic_dma_vec' into togreg Merge tag 'spi-devm-optimize' into togreg iio: adc: ad7173: Fix uninitialized symbol is_current_chan Jorge Harrisonn (1): iio: adc: ad7606: using claim_direct_scoped for code simplification Josua Mayer (1): dt-bindings: iio: adc: ti,ads1015: add compatible for tla2021 João Paulo Gonçalves (2): dt-bindings: iio: adc: add ti,ads1119 iio: adc: ti-ads1119: Add driver Judith Mendez (3): dt-bindings: counter: Add new ti,am62-eqep compatible counter/ti-eqep: Add new ti-am62-eqep compatible counter: ti-eqep: Allow eQEP driver to be built for K3 devices Julien Stephan (5): iio: adc: ad7380: prepare for parts with more channels dt-bindings: iio: adc: ad7380: add support for ad738x-4 4 channels variants iio: adc: ad7380: add support for ad738x-4 4 channels variants iio: adc: ad7380: add oversampling support driver: iio: add missing checks on iio_info's callback access Kaustabh Chakraborty (3): iio: accel: st_accel: add support for LIS2DS12 dt-bindings: iio: st-sensors: add LIS2DS12 accelerometer iio: st_sensors: relax WhoAmI check in st_sensors_verify_id() Konrad Dybcio (1): interconnect: qcom: qcm2290: Fix mas_snoc_bimc RPM master ID Krzysztof Kozlowski (8): iio: accel: adxl313: simplify with spi_get_device_match_data() iio: accel: adxl355: simplify with spi_get_device_match_data() iio: adc: max11205: simplify with spi_get_device_match_data() iio: adc: ti-ads131e08: simplify with spi_get_device_match_data() iio: adc: ti-tsc2046: simplify with spi_get_device_match_data() iio: addac: ad74413r: simplify with spi_get_device_match_data() iio: dac: max5522: simplify with spi_get_device_match_data() iio: adc: mcp3564: drop redundant open-coded spi_get_device_match_data() Kuninori Morimoto (1): hwtracing: use for_each_endpoint_of_node() Lei Liu (1): binder_alloc: Replace kcalloc with kvcalloc to mitigate OOM issues Manivannan Sadhasivam (2): bus: mhi: ep: Do not allocate memory for MHI objects from DMA zone bus: mhi: host: pci_generic: Use unique 'mhi_pci_dev_info' for product families Marco Pagani (1): Revert "fpga: disable KUnit test suites when module support is enabled" Marek Vasut (4): nvmem: Replace spaces with tab in documentation nvmem: Document type attribute nvmem: Use sysfs_emit() for type attribute nvmem: core: Implement force_ro sysfs attribute MarileneGarcia (1): nvmem: meson-efuse: Replacing the use of of_node_put to __free Matti Vaittinen (1): iio: test: gts: test available times and gains sorting Neil Armstrong (2): dt-bindings: iio: adc: amlogic,meson-saradc: add optional power-domains dt-bindings: nvmem: amlogic,meson-gx-efuse: add optional power-domains Nuno Sa (19): iio: adc: ad9467: use DMA safe buffer for spi iio: adc: ad9467: change struct members padding iio: adc: adi-axi-adc: don't allow concurrent enable/disable calls iio: adc: adi-axi-adc: make sure DRP is locked on enable iio: adc: adi-axi-adc: add platform dependencies iio: dac: adi-axi-dac: add platform dependencies iio: imu: adis_buffer: split trigger handling iio: imu: adis: move to the cleanup magic iio: imu: adis: add cleanup based lock helpers iio: gyro: adis16260: make use of the new lock helpers iio: gyro: adis16260: make use of the new lock helpers iio: imu: adis16400: make use of the new lock helpers iio: imu: adis16480: make use of the new lock helpers iio: imu: adis16475: make use of the new lock helpers iio: imu: adis: remove legacy lock helpers dev_printk: add new dev_err_probe() helpers iio: temperature: ltc2983: convert to dev_err_probe() iio: backend: make use of dev_err_cast_probe() iio: common: scmi_iio: convert to dev_err_probe() Odelu Kukatla (4): dt-bindings: interconnect: add clock property to enable QOS on SC7280 interconnect: qcom: icc-rpmh: Add QoS configuration support interconnect: qcom: sc7280: enable QoS configuration interconnect: qcom: Fix DT backwards compatibility for QoS Olivier Moysan (1): dt-bindings: iio: stm32: dfsdm: fix dtbs warnings on dfsdm audio port Paul Cercueil (7): dmaengine: Add API function dmaengine_prep_peripheral_dma_vec() dmaengine: dma-axi-dmac: Implement device_prep_peripheral_dma_vec Documentation: dmaengine: Document new dma_vec API iio: core: Add new DMABUF interface infrastructure iio: buffer-dma: Enable support for DMABUFs iio: buffer-dmaengine: Support new DMABUF based userspace API Documentation: iio: Document high-speed DMABUF based API RafaÅ‚ MiÅ‚ecki (2): dt-bindings: nvmem: mediatek: efuse: add support for MT7981 dt-bindings: nvmem: mediatek: efuse: add support for MT7988 Ramona Gradinariu (15): dt-bindings: iio: imu: Add ADIS16501 compatibles drivers: iio: imu: Add support for ADIS16501 iio: imu: adis_buffer: Add buffer setup API with buffer attributes iio: imu: adis16475: Create push single sample API drivers: iio: imu: adis16475: generic computation for sample rate iio: imu: adis_trigger: Allow level interrupts for FIFO readings iio: imu: adis16475: Re-define ADIS16475_DATA dt-bindings: iio: imu: Add ADIS1657X family devices compatibles drivers: iio: imu: Add support for adis1657x family iio: adis16480: make the burst_max_speed configurable iio: imu: adis16480.c: Add delta angle and delta velocity channels dt-bindings: iio: imu: Add ADIS16545/47 compatibles iio: adis16480: add support for adis16545/7 families docs: iio: add documentation for interfacing tools docs: iio: add documentation for adis16480 driver Ricardo B. Marliere (1): coresight: constify the struct device_type usage Sanjuán García, Jorge (1): mcb: mcb-pci: detect IO mapped devices before requesting resources Sean Anderson (3): iio: Add iio_read_channel_label to inkern API hwmon: iio: Add labels from IIO channels iio: xilinx-ams: Add labels Sebastian Ene (2): dt-bindings: vcpu_stall_detector: Add a PPI interrupt to the virtual device misc: Register a PPI for the vcpu stall detection virtual device Slark Xiao (3): bus: mhi: host: Add support for Foxconn SDX72 modems bus: mhi: host: Allow controller drivers to specify name for the MHI controller net: wwan: mhi: make default data link id configurable Subhajit Ghosh (1): MAINTAINERS: Add AVAGO APDS9306 Thomas Weißschuh (3): nvmem: core: add single sysfs group nvmem: core: remove global nvmem_cells_group nvmem: core: drop unnecessary range checks in sysfs callbacks Thorsten Blum (3): w1: Add missing newline and fix typos in w1_bus_master comment w1: Drop allocation error message misc: fastrpc: Use memdup_user() Tony Luck (1): peci, hwmon: Switch to new Intel CPU model defines Trevor Gamblin (43): iio: adc: adi-axi-adc: improve probe() error messaging iio: accel: fxls8962af-core: Make use of regmap_set_bits(), regmap_clear_bits() iio: accel: kxsd9: Make use of regmap_clear_bits() iio: accel: msa311: make use of regmap_clear_bits() iio: adc: ad4130: make use of regmap_clear_bits() iio: adc: axp20x_adc: make use of regmap_set_bits() iio: adc: axp288_adc: make use of regmap_set_bits() iio: adc: bcm_iproc_adc: make use of regmap_clear_bits() iio: adc: cpcap-adc: make use of regmap_clear_bits(), regmap_set_bits() iio: adc: fsl-imx25-gcq: make use of regmap_clear_bits(), regmap_set_bits() iio: adc: ina2xx-adc: make use of regmap_clear_bits() iio: adc: intel_mrfld_adc: make use of regmap_clear_bits() iio: adc: meson_saradc: make use of regmap_clear_bits(), regmap_set_bits() iio: adc: mp2629_adc: make use of regmap_clear_bits(), regmap_set_bits() iio: adc: berlin2-adc: make use of regmap_clear_bits(), regmap_set_bits() iio: adc: qcom-spmi-rradc: make use of regmap_clear_bits(), regmap_set_bits() iio: adc: rn5t618-adc: make use of regmap_set_bits() iio: adc: sc27xx_adc: make use of regmap_clear_bits(), regmap_set_bits() iio: adc: stm32-dfsdm-adc: make use of regmap_clear_bits(), regmap_set_bits() iio: dac: ltc2688: make use of regmap_set_bits() iio: dac: stm32-dac-core: make use of regmap_set_bits() iio: gyro: bmg160_core: make use of regmap_clear_bits() iio: gyro: mpu3050-core: make use of regmap_clear_bits(), regmap_set_bits() iio: health: afe4403: make use of regmap_clear_bits(), regmap_set_bits() iio: health: afe4404: make use of regmap_clear_bits(), regmap_set_bits() iio: health: max30100: make use of regmap_set_bits() iio: health: max30102: make use of regmap_set_bits() iio: imu: inv_icm42600: make use of regmap_clear_bits(), regmap_set_bits() iio: light: adux1020: make use of regmap_clear_bits(), regmap_set_bits() iio: light: iqs621-als: make use of regmap_clear_bits() iio: light: isl29018: make use of regmap_clear_bits() iio: light: st_uvis25_core: make use of regmap_clear_bits() iio: light: veml6030: make use of regmap_clear_bits() iio: magnetometer: ak8974: make use of regmap_set_bits() iio: magnetometer: mmc35240: make use of regmap_set_bits() iio: pressure: bmp280-core: make use of regmap_clear_bits() iio: proximity: sx9324: make use of regmap_set_bits() iio: proximity: sx9360: make use of regmap_set_bits() iio: proximity: sx9500: make use of regmap_clear_bits(), regmap_set_bits() iio: proximity: sx_common: make use of regmap_clear_bits(), regmap_set_bits() iio: temperature: mlx90632: make use of regmap_clear_bits() iio: trigger: stm32-timer-trigger: make use of regmap_clear_bits(), regmap_set_bits() iio: dac: adi-axi-dac: improve probe() error messaging Uwe Kleine-König (4): iio: Drop explicit initialization of struct i2c_device_id::driver_data to 0 eeprom: Drop explicit initialization of struct i2c_device_id::driver_data to 0 staging: iio: Drop explicit initialization of struct i2c_device_id::driver_data to 0 misc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 Val Packett (1): iio: accel: mma7660: add mount-matrix support Vamsi Attunuru (3): misc: mrvl-cn10k-dpi: add Octeon CN10K DPI administrative driver misc: Kconfig: add a new dependency for MARVELL_CN10K_DPI misc: Kconfig: exclude mrvl-cn10k-dpi compilation for 32-bit systems Vasileios Amoiridis (10): iio: pressure: bmp280: Improve indentation and line wrapping iio: pressure: bmp280: Use BME prefix for BME280 specifics iio: pressure: bmp280: Add identifier names in function definitions iio: pressure: bmp280: Add more intuitive name for bmp180_measure() iio: pressure: bmp280: Remove dead error checks iio: pressure: bmp280: Remove, add and update error messages iio: pressure: bmp280: Make error checks consistent iio: pressure: bmp280: Use unsigned data types for raw sensor data iio: pressure: bmp280: Refactorize reading functions iio: pressure: bmp280: Introduce new cleanup routines Vladimir Lypak (2): dt-bindings: interconnect: qcom: Add Qualcomm MSM8953 NoC interconnect: qcom: Add MSM8953 driver Wolfram Sang (4): misc: apds990x: use 'time_left' variable with wait_event_interruptible_timeout() misc: bh1770glc: use 'time_left' variable with wait_event_interruptible_timeout() misc: tifm: use 'time_left' variable with wait_for_completion_timeout() misc: ti-st: st_kim: use 'time_left' variable with wait_for_completion_interruptible_timeout() Yang Li (1): coresight: tmc: Remove duplicated include in coresight-tmc-core.c tuhaowen (1): dev/parport: fix the array out-of-bounds risk Documentation/ABI/stable/sysfs-bus-nvmem | 30 +- Documentation/ABI/stable/sysfs-driver-misc-cp500 | 25 + .../ABI/testing/sysfs-bus-iio-inv_icm42600 | 18 + .../devicetree/bindings/counter/ti-eqep.yaml | 27 +- Documentation/devicetree/bindings/iio/adc/adc.yaml | 30 + .../devicetree/bindings/iio/adc/adi,ad7173.yaml | 194 ++- .../devicetree/bindings/iio/adc/adi,ad7192.yaml | 95 ++ .../devicetree/bindings/iio/adc/adi,ad7380.yaml | 148 +++ .../devicetree/bindings/iio/adc/adi,ad7606.yaml | 5 +- .../bindings/iio/adc/amlogic,meson-saradc.yaml | 3 + .../bindings/iio/adc/mediatek,mt6359-auxadc.yaml | 33 + .../bindings/iio/adc/st,stm32-dfsdm-adc.yaml | 4 + .../devicetree/bindings/iio/adc/ti,ads1015.yaml | 1 + .../devicetree/bindings/iio/adc/ti,ads1119.yaml | 155 +++ .../bindings/iio/chemical/sciosense,ens160.yaml | 70 ++ .../devicetree/bindings/iio/dac/adi,ad3552r.yaml | 43 +- .../bindings/iio/frequency/adi,adf4350.yaml | 6 + .../devicetree/bindings/iio/imu/adi,adis16475.yaml | 31 + .../devicetree/bindings/iio/imu/adi,adis16480.yaml | 6 + .../devicetree/bindings/iio/imu/bosch,bmi160.yaml | 6 +- .../bindings/iio/light/vishay,veml6075.yaml | 9 +- .../devicetree/bindings/iio/st,st-sensors.yaml | 1 + .../bindings/interconnect/mediatek,mt8183-emi.yaml | 51 + .../bindings/interconnect/qcom,msm8953.yaml | 101 ++ .../bindings/interconnect/qcom,sc7280-rpmh.yaml | 53 + .../bindings/misc/qemu,vcpu-stall-detector.yaml | 6 + .../bindings/nvmem/amlogic,meson-gxbb-efuse.yaml | 3 + .../devicetree/bindings/nvmem/mediatek,efuse.yaml | 2 + .../devicetree/bindings/vendor-prefixes.yaml | 2 + Documentation/driver-api/dmaengine/client.rst | 9 + Documentation/driver-api/dmaengine/provider.rst | 10 + Documentation/driver-api/driver-model/devres.rst | 3 + Documentation/iio/adis16475.rst | 23 +- Documentation/iio/adis16480.rst | 443 +++++++ Documentation/iio/iio_dmabuf_api.rst | 54 + Documentation/iio/iio_tools.rst | 27 + Documentation/iio/index.rst | 3 + Documentation/misc-devices/index.rst | 1 + Documentation/misc-devices/mrvl_cn10k_dpi.rst | 52 + Documentation/userspace-api/ioctl/ioctl-number.rst | 1 + MAINTAINERS | 42 +- drivers/android/binder.c | 116 +- drivers/android/binder_alloc.c | 10 +- drivers/android/binder_internal.h | 5 +- drivers/android/dbitmap.h | 176 +++ drivers/ata/pata_parport/pata_parport.c | 1 - drivers/auxdisplay/ks0108.c | 1 - drivers/auxdisplay/panel.c | 1 - drivers/bus/mhi/ep/main.c | 14 +- drivers/bus/mhi/host/pci_generic.c | 128 +- drivers/char/agp/uninorth-agp.c | 1 + drivers/char/bsr.c | 1 + drivers/char/dsp56k.c | 1 + drivers/char/dtlk.c | 1 + drivers/char/lp.c | 2 +- drivers/char/nvram.c | 1 + drivers/char/ppdev.c | 2 +- drivers/char/tlclk.c | 1 + drivers/char/ttyprintk.c | 1 + drivers/counter/Kconfig | 2 +- drivers/counter/ftm-quaddec.c | 1 + drivers/counter/ti-eqep.c | 131 +- drivers/dca/dca-core.c | 1 + drivers/dma/dma-axi-dmac.c | 40 + drivers/fpga/altera-fpga2sdram.c | 6 - drivers/fpga/tests/Kconfig | 4 +- drivers/greybus/core.c | 1 + drivers/greybus/es2.c | 1 + drivers/hwmon/iio_hwmon.c | 45 +- drivers/hwmon/peci/cputemp.c | 8 +- drivers/hwtracing/coresight/coresight-platform.c | 8 +- drivers/hwtracing/coresight/coresight-priv.h | 2 +- drivers/hwtracing/coresight/coresight-sysfs.c | 2 +- drivers/hwtracing/coresight/coresight-tmc-core.c | 1 - drivers/hwtracing/intel_th/msu-sink.c | 1 + drivers/i2c/busses/i2c-parport.c | 1 - drivers/iio/Kconfig | 1 + drivers/iio/accel/adxl313_spi.c | 8 +- drivers/iio/accel/adxl355_spi.c | 10 +- drivers/iio/accel/adxl367_i2c.c | 4 +- drivers/iio/accel/adxl372_i2c.c | 2 +- drivers/iio/accel/bma400_i2c.c | 2 +- drivers/iio/accel/bmi088-accel-core.c | 5 - drivers/iio/accel/da311.c | 2 +- drivers/iio/accel/dmard06.c | 6 +- drivers/iio/accel/dmard09.c | 4 +- drivers/iio/accel/dmard10.c | 2 +- drivers/iio/accel/fxls8962af-core.c | 18 +- drivers/iio/accel/kxsd9-i2c.c | 4 +- drivers/iio/accel/kxsd9.c | 5 +- drivers/iio/accel/mc3230.c | 2 +- drivers/iio/accel/mma7455_i2c.c | 4 +- drivers/iio/accel/mma7660.c | 52 +- drivers/iio/accel/mma9551.c | 2 +- drivers/iio/accel/mma9553.c | 4 +- drivers/iio/accel/msa311.c | 8 +- drivers/iio/accel/mxc4005.c | 6 +- drivers/iio/accel/mxc6255.c | 4 +- drivers/iio/accel/st_accel.h | 1 + drivers/iio/accel/st_accel_core.c | 81 ++ drivers/iio/accel/st_accel_i2c.c | 5 + drivers/iio/accel/st_accel_spi.c | 5 + drivers/iio/accel/stk8312.c | 4 +- drivers/iio/accel/stk8ba50.c | 2 +- drivers/iio/adc/Kconfig | 52 +- drivers/iio/adc/Makefile | 27 +- drivers/iio/adc/ad4130.c | 4 +- drivers/iio/adc/ad7124.c | 14 +- drivers/iio/adc/ad7173.c | 676 +++++++--- drivers/iio/adc/ad7192.c | 361 ++++-- drivers/iio/adc/ad7266.c | 33 +- drivers/iio/adc/ad7291.c | 2 +- drivers/iio/adc/ad7292.c | 36 +- drivers/iio/adc/ad7380.c | 833 ++++++++++++ drivers/iio/adc/ad7606.c | 19 +- drivers/iio/adc/ad7793.c | 24 +- drivers/iio/adc/ad7944.c | 88 +- drivers/iio/adc/ad9467.c | 103 +- drivers/iio/adc/ad_sigma_delta.c | 1 + drivers/iio/adc/adi-axi-adc.c | 27 +- drivers/iio/adc/aspeed_adc.c | 30 +- drivers/iio/adc/axp20x_adc.c | 284 ++++- drivers/iio/adc/axp288_adc.c | 4 +- drivers/iio/adc/bcm_iproc_adc.c | 8 +- drivers/iio/adc/berlin2-adc.c | 24 +- drivers/iio/adc/cpcap-adc.c | 46 +- drivers/iio/adc/fsl-imx25-gcq.c | 16 +- drivers/iio/adc/hx711.c | 78 +- drivers/iio/adc/ina2xx-adc.c | 3 +- drivers/iio/adc/ingenic-adc.c | 1 + drivers/iio/adc/intel_mrfld_adc.c | 4 +- drivers/iio/adc/ltc2309.c | 45 +- drivers/iio/adc/ltc2485.c | 2 +- drivers/iio/adc/max11205.c | 5 +- drivers/iio/adc/max1363.c | 28 +- drivers/iio/adc/mcp3564.c | 6 - drivers/iio/adc/meson_saradc.c | 101 +- drivers/iio/adc/mp2629_adc.c | 19 +- drivers/iio/adc/mt6359-auxadc.c | 606 +++++++++ drivers/iio/adc/nau7802.c | 2 +- drivers/iio/adc/pac1934.c | 5 - drivers/iio/adc/qcom-spmi-rradc.c | 50 +- drivers/iio/adc/rn5t618-adc.c | 5 +- drivers/iio/adc/sc27xx_adc.c | 41 +- drivers/iio/adc/stm32-dfsdm-adc.c | 29 +- drivers/iio/adc/ti-adc108s102.c | 28 +- drivers/iio/adc/ti-adc161s626.c | 18 +- drivers/iio/adc/ti-ads1119.c | 825 ++++++++++++ drivers/iio/adc/ti-ads131e08.c | 4 +- drivers/iio/adc/ti-ads7924.c | 2 +- drivers/iio/adc/ti-ads8688.c | 59 +- drivers/iio/adc/ti-tsc2046.c | 7 +- drivers/iio/adc/xilinx-ams.c | 108 +- drivers/iio/addac/ad74413r.c | 13 +- drivers/iio/buffer/industrialio-buffer-dma.c | 178 ++- drivers/iio/buffer/industrialio-buffer-dmaengine.c | 64 +- drivers/iio/buffer/kfifo_buf.c | 1 + drivers/iio/chemical/Kconfig | 20 + drivers/iio/chemical/Makefile | 3 + drivers/iio/chemical/ams-iaq-core.c | 4 +- drivers/iio/chemical/bme680_i2c.c | 4 +- drivers/iio/chemical/ccs811.c | 2 +- drivers/iio/chemical/ens160.h | 10 + drivers/iio/chemical/ens160_core.c | 367 ++++++ drivers/iio/chemical/ens160_i2c.c | 62 + drivers/iio/chemical/ens160_spi.c | 61 + drivers/iio/common/scmi_sensors/scmi_iio.c | 45 +- drivers/iio/common/st_sensors/st_sensors_core.c | 3 +- drivers/iio/dac/Kconfig | 1 + drivers/iio/dac/ad3552r.c | 168 ++- drivers/iio/dac/adi-axi-dac.c | 9 +- drivers/iio/dac/ltc2688.c | 5 +- drivers/iio/dac/max5522.c | 11 +- drivers/iio/dac/mcp4728.c | 2 +- drivers/iio/dac/stm32-dac-core.c | 5 +- drivers/iio/frequency/adf4350.c | 124 +- drivers/iio/frequency/adrf6780.c | 1 - drivers/iio/gyro/adis16136.c | 26 +- drivers/iio/gyro/adis16260.c | 19 +- drivers/iio/gyro/bmg160_core.c | 4 +- drivers/iio/gyro/bmg160_i2c.c | 6 +- drivers/iio/gyro/fxas21002c_i2c.c | 2 +- drivers/iio/gyro/itg3200_core.c | 2 +- drivers/iio/gyro/mpu3050-core.c | 35 +- drivers/iio/health/afe4403.c | 9 +- drivers/iio/health/afe4404.c | 11 +- drivers/iio/health/max30100.c | 7 +- drivers/iio/health/max30102.c | 5 +- drivers/iio/humidity/am2315.c | 2 +- drivers/iio/humidity/hdc100x.c | 12 +- drivers/iio/humidity/si7005.c | 4 +- drivers/iio/humidity/si7020.c | 141 ++- drivers/iio/iio_core.h | 4 + drivers/iio/imu/Kconfig | 4 +- drivers/iio/imu/adis.c | 11 +- drivers/iio/imu/adis16400.c | 72 +- drivers/iio/imu/adis16475.c | 823 ++++++++++-- drivers/iio/imu/adis16480.c | 458 +++++-- drivers/iio/imu/adis_buffer.c | 73 +- drivers/iio/imu/adis_trigger.c | 37 +- drivers/iio/imu/bmi160/bmi160_core.c | 26 +- drivers/iio/imu/bmi160/bmi160_i2c.c | 5 +- drivers/iio/imu/bmi160/bmi160_spi.c | 3 + drivers/iio/imu/bmi323/bmi323_core.c | 8 +- drivers/iio/imu/bno055/bno055_i2c.c | 2 +- drivers/iio/imu/fxos8700_i2c.c | 2 +- drivers/iio/imu/inv_icm42600/inv_icm42600.h | 4 + drivers/iio/imu/inv_icm42600/inv_icm42600_accel.c | 124 +- drivers/iio/imu/inv_icm42600/inv_icm42600_buffer.c | 14 +- drivers/iio/imu/inv_icm42600/inv_icm42600_core.c | 80 +- drivers/iio/imu/inv_icm42600/inv_icm42600_i2c.c | 4 +- drivers/iio/imu/inv_icm42600/inv_icm42600_spi.c | 4 +- drivers/iio/imu/kmx61.c | 2 +- drivers/iio/industrialio-backend.c | 8 +- drivers/iio/industrialio-buffer.c | 588 ++++++++- drivers/iio/industrialio-core.c | 32 +- drivers/iio/industrialio-event.c | 13 +- drivers/iio/industrialio-gts-helper.c | 7 +- drivers/iio/inkern.c | 38 +- drivers/iio/light/Kconfig | 11 + drivers/iio/light/Makefile | 1 + drivers/iio/light/adjd_s311.c | 2 +- drivers/iio/light/adux1020.c | 15 +- drivers/iio/light/al3320a.c | 2 +- drivers/iio/light/apds9300.c | 2 +- drivers/iio/light/apds9960.c | 2 +- drivers/iio/light/bh1780.c | 4 +- drivers/iio/light/cm3232.c | 2 +- drivers/iio/light/cm3323.c | 2 +- drivers/iio/light/cm36651.c | 2 +- drivers/iio/light/gp2ap002.c | 4 +- drivers/iio/light/gp2ap020a00f.c | 3 +- drivers/iio/light/iqs621-als.c | 4 +- drivers/iio/light/isl29018.c | 6 +- drivers/iio/light/isl29028.c | 4 +- drivers/iio/light/isl29125.c | 2 +- drivers/iio/light/jsa1212.c | 2 +- drivers/iio/light/lv0104cs.c | 2 +- drivers/iio/light/max44000.c | 2 +- drivers/iio/light/max44009.c | 2 +- drivers/iio/light/noa1305.c | 2 +- drivers/iio/light/opt3001.c | 2 +- drivers/iio/light/pa12203001.c | 2 +- drivers/iio/light/rohm-bu27034.c | 6 - drivers/iio/light/rpr0521.c | 2 +- drivers/iio/light/si1133.c | 2 +- drivers/iio/light/st_uvis25_core.c | 4 +- drivers/iio/light/stk3310.c | 37 +- drivers/iio/light/tcs3414.c | 2 +- drivers/iio/light/tcs3472.c | 2 +- drivers/iio/light/tsl4531.c | 2 +- drivers/iio/light/us5182d.c | 2 +- drivers/iio/light/vcnl4035.c | 2 +- drivers/iio/light/veml6030.c | 6 +- drivers/iio/light/veml6040.c | 281 +++++ drivers/iio/light/veml6070.c | 2 +- drivers/iio/light/vl6180.c | 2 +- drivers/iio/light/zopt2201.c | 2 +- drivers/iio/magnetometer/af8133j.c | 2 +- drivers/iio/magnetometer/ak8974.c | 18 +- drivers/iio/magnetometer/bmc150_magn_i2c.c | 6 +- drivers/iio/magnetometer/mag3110.c | 2 +- drivers/iio/magnetometer/mmc35240.c | 10 +- drivers/iio/magnetometer/tmag5273.c | 2 - drivers/iio/multiplexer/iio-mux.c | 1 - drivers/iio/potentiostat/lmp91000.c | 4 +- drivers/iio/pressure/bmp280-core.c | 839 +++++++------ drivers/iio/pressure/bmp280-regmap.c | 8 +- drivers/iio/pressure/bmp280-spi.c | 4 +- drivers/iio/pressure/bmp280.h | 65 +- drivers/iio/pressure/dps310.c | 2 +- drivers/iio/pressure/hp03.c | 4 +- drivers/iio/pressure/icp10100.c | 2 +- drivers/iio/pressure/mpl115_i2c.c | 2 +- drivers/iio/pressure/mpl3115.c | 2 +- drivers/iio/pressure/t5403.c | 2 +- drivers/iio/pressure/zpa2326_i2c.c | 4 +- drivers/iio/proximity/isl29501.c | 2 +- drivers/iio/proximity/pulsedlight-lidar-lite-v2.c | 6 +- drivers/iio/proximity/rfd77402.c | 2 +- drivers/iio/proximity/sx9324.c | 5 +- drivers/iio/proximity/sx9360.c | 5 +- drivers/iio/proximity/sx9500.c | 16 +- drivers/iio/proximity/sx_common.c | 9 +- drivers/iio/proximity/vl53l0x-i2c.c | 2 +- drivers/iio/temperature/ltc2983.c | 260 ++-- drivers/iio/temperature/max30208.c | 1 - drivers/iio/temperature/mcp9600.c | 363 +++++- drivers/iio/temperature/mlx90632.c | 6 +- drivers/iio/temperature/tmp006.c | 2 +- drivers/iio/temperature/tmp007.c | 2 +- drivers/iio/temperature/tsys01.c | 2 +- drivers/iio/temperature/tsys02d.c | 2 +- drivers/iio/test/iio-test-gts.c | 8 +- drivers/iio/trigger/stm32-timer-trigger.c | 34 +- drivers/input/joystick/db9.c | 1 - drivers/input/joystick/gamecon.c | 1 - drivers/input/joystick/turbografx.c | 1 - drivers/input/joystick/walkera0701.c | 1 - drivers/input/serio/parkbd.c | 1 - drivers/interconnect/Kconfig | 1 + drivers/interconnect/Makefile | 1 + drivers/interconnect/imx/imx.c | 1 + drivers/interconnect/imx/imx8mm.c | 1 + drivers/interconnect/imx/imx8mn.c | 1 + drivers/interconnect/imx/imx8mp.c | 1 + drivers/interconnect/imx/imx8mq.c | 1 + drivers/interconnect/mediatek/Kconfig | 29 + drivers/interconnect/mediatek/Makefile | 5 + drivers/interconnect/mediatek/icc-emi.c | 153 +++ drivers/interconnect/mediatek/icc-emi.h | 40 + drivers/interconnect/mediatek/mt8183.c | 143 +++ drivers/interconnect/mediatek/mt8195.c | 339 +++++ drivers/interconnect/qcom/Kconfig | 9 + drivers/interconnect/qcom/Makefile | 2 + drivers/interconnect/qcom/icc-common.c | 1 + drivers/interconnect/qcom/icc-rpmh.c | 94 ++ drivers/interconnect/qcom/icc-rpmh.h | 36 + drivers/interconnect/qcom/msm8953.c | 1321 ++++++++++++++++++++ drivers/interconnect/qcom/qcm2290.c | 2 +- drivers/interconnect/qcom/sc7280.c | 276 ++++ drivers/mcb/mcb-parse.c | 5 - drivers/mcb/mcb-pci.c | 16 +- drivers/misc/Kconfig | 16 + drivers/misc/Makefile | 2 + drivers/misc/apds9802als.c | 2 +- drivers/misc/apds990x.c | 12 +- drivers/misc/bh1770glc.c | 14 +- drivers/misc/ds1682.c | 2 +- drivers/misc/eeprom/Kconfig | 2 + drivers/misc/eeprom/digsy_mtc_eeprom.c | 46 +- drivers/misc/eeprom/ee1004.c | 131 +- drivers/misc/eeprom/eeprom_93xx46.c | 178 ++- drivers/misc/eeprom/idt_89hpesx.c | 96 +- drivers/misc/eeprom/max6875.c | 2 +- drivers/misc/fastrpc.c | 46 +- drivers/misc/hmc6352.c | 2 +- drivers/misc/ics932s401.c | 2 +- drivers/misc/isl29003.c | 2 +- drivers/misc/isl29020.c | 2 +- drivers/misc/keba/Kconfig | 13 + drivers/misc/keba/Makefile | 3 + drivers/misc/keba/cp500.c | 458 +++++++ drivers/misc/mei/bus-fixup.c | 8 +- drivers/misc/mrvl_cn10k_dpi.c | 676 ++++++++++ drivers/misc/open-dice.c | 1 + drivers/misc/ti-st/st_kim.c | 8 +- drivers/misc/tifm_7xx1.c | 6 +- drivers/misc/tsl2550.c | 2 +- drivers/misc/vcpu_stall_detector.c | 31 +- drivers/net/hamradio/baycom_epp.c | 1 - drivers/net/hamradio/baycom_par.c | 1 - drivers/net/plip/plip.c | 1 - drivers/net/wwan/mhi_wwan_mbim.c | 18 +- drivers/nvmem/apple-efuses.c | 1 + drivers/nvmem/brcm_nvram.c | 1 + drivers/nvmem/core.c | 90 +- drivers/nvmem/meson-efuse.c | 5 +- drivers/nvmem/rockchip-efuse.c | 1 + drivers/nvmem/rockchip-otp.c | 2 + drivers/nvmem/u-boot-env.c | 1 + drivers/parport/daisy.c | 1 - drivers/parport/procfs.c | 24 +- drivers/parport/share.c | 10 +- drivers/peci/controller/peci-aspeed.c | 1 + drivers/peci/core.c | 5 +- drivers/peci/cpu.c | 21 +- drivers/peci/device.c | 3 +- drivers/peci/internal.h | 6 +- drivers/platform/goldfish/goldfish_pipe.c | 1 + drivers/pps/clients/pps_parport.c | 1 - drivers/pps/generators/pps_gen_parport.c | 1 - drivers/scsi/imm.c | 1 - drivers/scsi/ppa.c | 1 - drivers/siox/siox-bus-gpio.c | 1 + drivers/slimbus/stream.c | 8 +- drivers/spi/spi-butterfly.c | 1 - drivers/spi/spi-lm70llp.c | 1 - drivers/spi/spi.c | 28 + drivers/spmi/hisi-spmi-controller.c | 1 + drivers/spmi/spmi-pmic-arb.c | 1 + drivers/staging/iio/addac/adt7316-i2c.c | 12 +- drivers/staging/iio/addac/adt7316.c | 9 - drivers/staging/iio/impedance-analyzer/ad5933.c | 4 +- drivers/uio/uio.c | 1 + drivers/uio/uio_aec.c | 1 + drivers/uio/uio_cif.c | 1 + drivers/uio/uio_mf624.c | 3 +- drivers/uio/uio_netx.c | 1 + drivers/virtio/virtio_dma_buf.c | 1 + drivers/w1/w1.c | 2 +- drivers/w1/w1_int.c | 6 +- .../dt-bindings/iio/adc/mediatek,mt6357-auxadc.h | 21 + .../dt-bindings/iio/adc/mediatek,mt6358-auxadc.h | 22 + .../dt-bindings/iio/adc/mediatek,mt6359-auxadc.h | 22 + include/dt-bindings/interconnect/mediatek,mt8183.h | 23 + include/dt-bindings/interconnect/mediatek,mt8195.h | 44 + include/dt-bindings/interconnect/qcom,msm8953.h | 93 ++ include/linux/dev_printk.h | 8 + include/linux/dmaengine.h | 33 + include/linux/eeprom_93xx46.h | 32 - include/linux/iio/adc/ad_sigma_delta.h | 14 + include/linux/iio/buffer-dma.h | 31 + include/linux/iio/buffer_impl.h | 33 + include/linux/iio/consumer.h | 10 + include/linux/iio/iio.h | 94 +- include/linux/iio/imu/adis.h | 87 +- include/linux/math.h | 2 + include/linux/mhi.h | 2 + include/linux/misc/keba.h | 25 + include/linux/parport.h | 6 - include/linux/peci-cpu.h | 24 + include/linux/peci.h | 6 +- include/linux/spi/spi.h | 2 + include/linux/w1.h | 7 +- include/uapi/linux/iio/buffer.h | 22 + include/uapi/misc/mrvl_cn10k_dpi.h | 39 + lib/math/prime_numbers.c | 1 + lib/math/rational-test.c | 1 + lib/test_dynamic_debug.c | 1 + samples/configfs/configfs_sample.c | 1 + sound/drivers/mts64.c | 1 - sound/drivers/portman2x4.c | 1 - 423 files changed, 15716 insertions(+), 3144 deletions(-) create mode 100644 Documentation/ABI/stable/sysfs-driver-misc-cp500 create mode 100644 Documentation/ABI/testing/sysfs-bus-iio-inv_icm42600 create mode 100644 Documentation/devicetree/bindings/iio/adc/adi,ad7380.yaml create mode 100644 Documentation/devicetree/bindings/iio/adc/mediatek,mt6359-auxadc.yaml create mode 100644 Documentation/devicetree/bindings/iio/adc/ti,ads1119.yaml create mode 100644 Documentation/devicetree/bindings/iio/chemical/sciosense,ens160.yaml create mode 100644 Documentation/devicetree/bindings/interconnect/mediatek,mt8183-emi.yaml create mode 100644 Documentation/devicetree/bindings/interconnect/qcom,msm8953.yaml create mode 100644 Documentation/iio/adis16480.rst create mode 100644 Documentation/iio/iio_dmabuf_api.rst create mode 100644 Documentation/iio/iio_tools.rst create mode 100644 Documentation/misc-devices/mrvl_cn10k_dpi.rst create mode 100644 drivers/android/dbitmap.h create mode 100644 drivers/iio/adc/ad7380.c create mode 100644 drivers/iio/adc/mt6359-auxadc.c create mode 100644 drivers/iio/adc/ti-ads1119.c create mode 100644 drivers/iio/chemical/ens160.h create mode 100644 drivers/iio/chemical/ens160_core.c create mode 100644 drivers/iio/chemical/ens160_i2c.c create mode 100644 drivers/iio/chemical/ens160_spi.c create mode 100644 drivers/iio/light/veml6040.c create mode 100644 drivers/interconnect/mediatek/Kconfig create mode 100644 drivers/interconnect/mediatek/Makefile create mode 100644 drivers/interconnect/mediatek/icc-emi.c create mode 100644 drivers/interconnect/mediatek/icc-emi.h create mode 100644 drivers/interconnect/mediatek/mt8183.c create mode 100644 drivers/interconnect/mediatek/mt8195.c create mode 100644 drivers/interconnect/qcom/msm8953.c create mode 100644 drivers/misc/keba/Kconfig create mode 100644 drivers/misc/keba/Makefile create mode 100644 drivers/misc/keba/cp500.c create mode 100644 drivers/misc/mrvl_cn10k_dpi.c create mode 100644 include/dt-bindings/iio/adc/mediatek,mt6357-auxadc.h create mode 100644 include/dt-bindings/iio/adc/mediatek,mt6358-auxadc.h create mode 100644 include/dt-bindings/iio/adc/mediatek,mt6359-auxadc.h create mode 100644 include/dt-bindings/interconnect/mediatek,mt8183.h create mode 100644 include/dt-bindings/interconnect/mediatek,mt8195.h create mode 100644 include/dt-bindings/interconnect/qcom,msm8953.h delete mode 100644 include/linux/eeprom_93xx46.h create mode 100644 include/linux/misc/keba.h create mode 100644 include/uapi/misc/mrvl_cn10k_dpi.h . Date: Fri, 19 Jul 2024 22:58:06 +1000 From: Michael Ellerman To: Linus Torvalds Cc: anjalik@linux.ibm.com, asavkov@redhat.com, bhelgaas@google.com, christophe.leroy@csgroup.eu, coelacanthushex@gmail.com, esben@geanix.com, gautam@linux.ibm.com, gbatra@linux.ibm.com, haren@linux.ibm.com, hbathini@linux.ibm.com, krishnak@linux.ibm.com, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, nathanl@linux.ibm.com, naveen@kernel.org, nbowler@draconx.ca, nilay@linux.ibm.com, quic_jjohnson@quicinc.com, robh@kernel.org, sbhat@linux.ibm.com, sourabhjain@linux.ibm.com, u.kleine-koenig@baylibre.com Subject: [GIT PULL] Please pull powerpc/linux.git powerpc-6.11-1 tag -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Hi Linus, Please pull a few powerpc updates for 6.11. No conflicts with your tree that I know of. There's one minor conflict with the mm tree which should be obvious enough, if not the correct resolution is in linux-next [1]. cheers [1]: https://lore.kernel.org/all/20240703094857.3f489d4f@canb.auug.org.au/ The following changes since commit c3f38fa61af77b49866b006939479069cd451173: Linux 6.10-rc2 (2024-06-02 15:44:56 -0700) are available in the git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git tags/po= werpc-6.11-1 for you to fetch changes up to 9ff0251b2eb54d17fbe4f6aff50f6edfd837adb6: Merge branch 'topic/ppc-kvm' into next (2024-07-18 14:32:46 +1000) - ------------------------------------------------------------------ powerpc updates for 6.11 - Remove support for 40x CPUs & platforms. - Add support to the 64-bit BPF JIT for cpu v4 instructions. - Fix PCI hotplug driver crash on powernv. - Fix doorbell emulation for KVM on PAPR guests (nestedv2). - Fix KVM nested guest handling of some less used SPRs. - Online NUMA nodes with no CPU/memory if they have a PCI device attached. - Reduce memory overhead of enabling kfence on 64-bit Radix MMU kernels. - Reimplement the iommu table_group_ops for pseries for VFIO SPAPR TCE. Thanks to: Anjali K, Artem Savkov, Athira Rajeev, Breno Leitao, Brian King, Celeste Liu, Christophe Leroy, Esben Haabendal, Gaurav Batra, Gautam Mengha= ni, Haren Myneni, Hari Bathini, Jeff Johnson, Krishna Kumar, Krzysztof Kozlowsk= i, Nathan Lynch, Nicholas Piggin, Nick Bowler, Nilay Shroff, Rob Herring (Arm), Shawn Anastasio, Shivaprasad G Bhat, Sourabh Jain, Srikar Dronamraju, Timot= hy Pearson, Uwe Kleine-K=C3=B6nig, Vaibhav Jain. - ------------------------------------------------------------------ Anjali K (1): powerpc/perf: Set cpumode flags using sample address Artem Savkov (5): powerpc64/bpf: jit support for 32bit offset jmp instruction powerpc64/bpf: jit support for unconditional byte swap powerpc64/bpf: jit support for sign extended load powerpc64/bpf: jit support for sign extended mov powerpc64/bpf: jit support for signed division and modulo Celeste Liu (1): powerpc/configs: drop RT_GROUP_SCHED=3Dy from ppc6xx_defconfig Christophe Leroy (6): powerpc/40x: Remove 40x platforms. powerpc/boot: Remove all 40x platforms from boot powerpc: Remove core support for 40x powerpc/platforms: Move files from 4xx to 44x powerpc: Remove 40x leftovers Documentation/powerpc: Mention 40x is removed Esben Haabendal (1): powerpc/configs: Update defconfig with now user-visible CONFIG_FSL_IFC Gaurav Batra (1): powerpc/pseries/iommu: Split Dynamic DMA Window to be used in Hybrid = mode Gautam Menghani (4): powerpc/pseries: Remove unused cede related functions KVM: PPC: Book3S HV nestedv2: Add support for reading VPA counters fo= r pseries guests KVM: PPC: Book3S HV nestedv2: Add DPDES support in helper library for= Guest state buffer KVM: PPC: Book3S HV nestedv2: Fix doorbell emulation Haren Myneni (1): powerpc/pseries/vas: Use usleep_range() to support HCALL delay Hari Bathini (1): powerpc/64s/radix/kfence: map __kfence_pool at page granularity Jeff Johnson (3): KVM: PPC: add missing MODULE_DESCRIPTION() macros macintosh/mac_hid: add MODULE_DESCRIPTION() powerpc: add missing MODULE_DESCRIPTION() macros Krishna Kumar (2): pci/hotplug/pnv_php: Fix hotplug driver crash on Powernv powerpc/pci: Hotplug driver bridge support Michael Ellerman (8): powerpc: Remove 40x from Kconfig and defconfig powerpc/4xx: Remove CONFIG_BOOKE_OR_40x powerpc: Replace CONFIG_4xx with CONFIG_44x selftests/sigaltstack: Fix ppc64 GCC build powerpc: Drop clang workaround for builtin constant checks powerpc/xmon: Fix disassembly CPU feature checks powerpc: Check only single values are passed to CPU/MMU feature checks Merge branch 'topic/ppc-kvm' into next Nathan Lynch (3): powerpc/mm/drmem: Silence drmem_init() early return powerpc/rtas: Prevent Spectre v1 gadget construction in sys_rtas() powerpc/prom: Add CPU info to hardware description string later Nick Bowler (1): macintosh/therm_windtunnel: fix module unload. Nilay Shroff (1): powerpc/numa: Online a node if PHB is attached. Rob Herring (Arm) (1): powerpc/kexec: Use of_property_read_reg() Shivaprasad G Bhat (15): KVM: PPC: Book3S HV: Fix the set_one_reg for MMCR3 KVM: PPC: Book3S HV: Fix the get_one_reg of SDAR KVM: PPC: Book3S HV: Add one-reg interface for DEXCR register KVM: PPC: Book3S HV nestedv2: Keep nested guest DEXCR in sync KVM: PPC: Book3S HV: Add one-reg interface for HASHKEYR register KVM: PPC: Book3S HV nestedv2: Keep nested guest HASHKEYR in sync KVM: PPC: Book3S HV: Add one-reg interface for HASHPKEYR register KVM: PPC: Book3S HV nestedv2: Keep nested guest HASHPKEYR in sync powerpc/iommu: Move pSeries specific functions to pseries/iommu.c powerpc/pseries/iommu: Fix the VFIO_IOMMU_SPAPR_TCE_GET_INFO ioctl ou= tput powerpc/pseries/iommu: Use the iommu table[0] for IOV VF's DDW vfio/spapr: Always clear TCEs before unsetting the window powerpc/iommu: Move dev_has_iommu_table() to iommu.c powerpc/iommu: Reimplement the iommu_table_group_ops for pSeries powerpc/pseries/iommu: Define spapr_tce_table_group_ops only with CON= FIG_IOMMU_API Sourabh Jain (2): powerpc/kexec_file: fix extra size calculation for kexec FDT powerpc/kexec_file: fix cpus node update to FDT Uwe Kleine-K=C3=B6nig (1): macintosh: Drop explicit initialization of struct i2c_device_id::driv= er_data to 0 Documentation/arch/powerpc/cpu_families.rst | 18 - Documentation/arch/powerpc/elf_hwcaps.rst | 1 + Documentation/arch/powerpc/kvm-nested.rst | 4 +- Documentation/virt/kvm/api.rst | 3 + MAINTAINERS | 1 - arch/powerpc/Kconfig | 17 +- arch/powerpc/Kconfig.debug | 13 - arch/powerpc/Makefile | 5 - arch/powerpc/boot/4xx.c | 266 ------- arch/powerpc/boot/4xx.h | 4 - arch/powerpc/boot/Makefile | 11 - arch/powerpc/boot/cuboot-acadia.c | 171 ----- arch/powerpc/boot/cuboot-hotfoot.c | 139 ---- arch/powerpc/boot/cuboot-kilauea.c | 46 -- arch/powerpc/boot/dcr.h | 11 - arch/powerpc/boot/dts/acadia.dts | 224 ------ arch/powerpc/boot/dts/haleakala.dts | 281 ------- arch/powerpc/boot/dts/hotfoot.dts | 296 -------- arch/powerpc/boot/dts/kilauea.dts | 407 --------= -- arch/powerpc/boot/dts/klondike.dts | 212 ------ arch/powerpc/boot/dts/makalu.dts | 353 --------- arch/powerpc/boot/dts/obs600.dts | 314 -------- arch/powerpc/boot/ppcboot-hotfoot.h | 119 --- arch/powerpc/boot/ppcboot.h | 2 +- arch/powerpc/boot/wrapper | 22 +- arch/powerpc/configs/40x.config | 2 - arch/powerpc/configs/40x/acadia_defconfig | 61 -- arch/powerpc/configs/40x/kilauea_defconfig | 69 -- arch/powerpc/configs/40x/klondike_defconfig | 43 -- arch/powerpc/configs/40x/makalu_defconfig | 59 -- arch/powerpc/configs/40x/obs600_defconfig | 69 -- arch/powerpc/configs/40x/walnut_defconfig | 55 -- arch/powerpc/configs/85xx-hw.config | 2 + arch/powerpc/configs/ppc40x_defconfig | 74 -- arch/powerpc/configs/ppc6xx_defconfig | 1 - arch/powerpc/include/asm/cacheflush.h | 2 +- arch/powerpc/include/asm/cpu_has_feature.h | 3 +- arch/powerpc/include/asm/cputable.h | 7 - arch/powerpc/include/asm/guest-state-buffer.h | 3 +- arch/powerpc/include/asm/hw_irq.h | 8 +- arch/powerpc/include/asm/iommu.h | 16 +- arch/powerpc/include/asm/irq.h | 2 +- arch/powerpc/include/asm/kexec.h | 6 +- arch/powerpc/include/asm/kfence.h | 11 +- arch/powerpc/include/asm/kup.h | 2 +- arch/powerpc/include/asm/kvm_book3s.h | 1 + arch/powerpc/include/asm/kvm_book3s_64.h | 5 + arch/powerpc/include/asm/kvm_host.h | 3 + arch/powerpc/include/asm/lppaca.h | 11 +- arch/powerpc/include/asm/mmu.h | 10 +- arch/powerpc/include/asm/nohash/32/mmu-40x.h | 68 -- arch/powerpc/include/asm/nohash/32/pgtable.h | 4 +- arch/powerpc/include/asm/nohash/32/pte-40x.h | 73 -- arch/powerpc/include/asm/nohash/mmu.h | 5 +- arch/powerpc/include/asm/perf_event_server.h | 3 +- arch/powerpc/include/asm/plpar_wrappers.h | 28 - arch/powerpc/include/asm/ppc-opcode.h | 2 + arch/powerpc/include/asm/ppc_asm.h | 2 +- arch/powerpc/include/asm/processor.h | 2 +- arch/powerpc/include/asm/ptrace.h | 2 +- arch/powerpc/include/asm/reg.h | 27 +- arch/powerpc/include/asm/reg_booke.h | 113 +-- arch/powerpc/include/asm/time.h | 7 +- arch/powerpc/include/asm/udbg.h | 1 - arch/powerpc/include/uapi/asm/kvm.h | 3 + arch/powerpc/kernel/Makefile | 1 - arch/powerpc/kernel/asm-offsets.c | 2 +- arch/powerpc/kernel/cpu_specs.h | 4 - arch/powerpc/kernel/cpu_specs_40x.h | 280 ------- arch/powerpc/kernel/eeh.c | 16 - arch/powerpc/kernel/entry_32.S | 48 +- arch/powerpc/kernel/epapr_hcalls.S | 2 +- arch/powerpc/kernel/head_32.h | 12 +- arch/powerpc/kernel/head_40x.S | 721 --------= ---------- arch/powerpc/kernel/head_booke.h | 3 +- arch/powerpc/kernel/iommu.c | 170 +---- arch/powerpc/kernel/irq.c | 2 +- arch/powerpc/kernel/kgdb.c | 4 +- arch/powerpc/kernel/misc_32.S | 40 - arch/powerpc/kernel/pci-hotplug.c | 35 +- arch/powerpc/kernel/process.c | 4 +- arch/powerpc/kernel/prom.c | 12 +- arch/powerpc/kernel/rtas.c | 4 + arch/powerpc/kernel/rtas_flash.c | 1 + arch/powerpc/kernel/setup.h | 2 +- arch/powerpc/kernel/setup_32.c | 2 +- arch/powerpc/kernel/time.c | 2 +- arch/powerpc/kernel/traps.c | 2 +- arch/powerpc/kernel/udbg.c | 3 - arch/powerpc/kernel/udbg_16550.c | 23 - arch/powerpc/kexec/core_64.c | 53 +- arch/powerpc/kexec/elf_64.c | 12 +- arch/powerpc/kexec/file_load_64.c | 90 +-- arch/powerpc/kvm/book3s_hv.c | 103 ++- arch/powerpc/kvm/book3s_hv.h | 3 + arch/powerpc/kvm/book3s_hv_nestedv2.c | 25 + arch/powerpc/kvm/book3s_pr.c | 1 + arch/powerpc/kvm/test-guest-state-buffer.c | 3 +- arch/powerpc/kvm/trace_hv.h | 29 + arch/powerpc/mm/book3s64/radix_pgtable.c | 84 ++- arch/powerpc/mm/drmem.c | 4 +- arch/powerpc/mm/fault.c | 4 +- arch/powerpc/mm/init-common.c | 3 + arch/powerpc/mm/mmu_context.c | 2 +- arch/powerpc/mm/mmu_decl.h | 8 +- arch/powerpc/mm/nohash/40x.c | 161 ---- arch/powerpc/mm/nohash/Makefile | 1 - arch/powerpc/mm/nohash/kup.c | 2 - arch/powerpc/mm/nohash/mmu_context.c | 5 +- arch/powerpc/mm/nohash/tlb_low.S | 27 +- arch/powerpc/mm/numa.c | 14 +- arch/powerpc/mm/ptdump/Makefile | 2 +- arch/powerpc/net/bpf_jit_comp64.c | 118 ++- arch/powerpc/perf/core-book3s.c | 45 +- arch/powerpc/perf/power10-pmu.c | 3 +- arch/powerpc/platforms/40x/Kconfig | 78 -- arch/powerpc/platforms/40x/Makefile | 2 - arch/powerpc/platforms/40x/ppc40x_simple.c | 74 -- arch/powerpc/platforms/44x/Makefile | 6 +- arch/powerpc/platforms/{4xx =3D> 44x}/cpm.c | 0 arch/powerpc/platforms/{4xx =3D> 44x}/gpio.c | 0 arch/powerpc/platforms/{4xx =3D> 44x}/hsta_msi.c | 0 arch/powerpc/platforms/44x/machine_check.c | 15 + arch/powerpc/platforms/{4xx =3D> 44x}/pci.c | 100 --- arch/powerpc/platforms/{4xx =3D> 44x}/pci.h | 0 arch/powerpc/platforms/{4xx =3D> 44x}/soc.c | 0 arch/powerpc/platforms/{4xx =3D> 44x}/uic.c | 0 arch/powerpc/platforms/4xx/Makefile | 7 - arch/powerpc/platforms/4xx/machine_check.c | 23 - arch/powerpc/platforms/85xx/t1042rdb_diu.c | 1 + arch/powerpc/platforms/Kconfig | 1 - arch/powerpc/platforms/Kconfig.cputype | 28 +- arch/powerpc/platforms/Makefile | 2 - arch/powerpc/platforms/cell/cbe_powerbutton.c | 1 + arch/powerpc/platforms/cell/cbe_thermal.c | 1 + arch/powerpc/platforms/cell/cpufreq_spudemand.c | 1 + arch/powerpc/platforms/cell/spufs/inode.c | 1 + arch/powerpc/platforms/chrp/nvram.c | 1 + arch/powerpc/platforms/powernv/pci-ioda.c | 6 +- arch/powerpc/platforms/pseries/iommu.c | 781 ++++++++= ++++++++++-- arch/powerpc/platforms/pseries/papr_scm.c | 1 + arch/powerpc/platforms/pseries/pci_dlpar.c | 14 + arch/powerpc/platforms/pseries/vas.c | 22 +- arch/powerpc/sysdev/Kconfig | 4 +- arch/powerpc/sysdev/rtc_cmos_setup.c | 1 + arch/powerpc/xmon/ppc-dis.c | 33 +- drivers/macintosh/ams/ams-i2c.c | 2 +- drivers/macintosh/mac_hid.c | 1 + drivers/macintosh/therm_windtunnel.c | 2 +- drivers/macintosh/windfarm_ad7417_sensor.c | 2 +- drivers/macintosh/windfarm_fcu_controls.c | 2 +- drivers/macintosh/windfarm_lm87_sensor.c | 2 +- drivers/macintosh/windfarm_max6690_sensor.c | 2 +- drivers/macintosh/windfarm_smu_sat.c | 2 +- drivers/pci/hotplug/pnv_php.c | 3 +- drivers/vfio/vfio_iommu_spapr_tce.c | 13 +- scripts/head-object-list.txt | 1 - tools/testing/selftests/sigaltstack/current_stack_pointer.h | 2 +- 158 files changed, 1464 insertions(+), 5776 deletions(-) delete mode 100644 arch/powerpc/boot/cuboot-acadia.c delete mode 100644 arch/powerpc/boot/cuboot-hotfoot.c delete mode 100644 arch/powerpc/boot/cuboot-kilauea.c delete mode 100644 arch/powerpc/boot/dts/acadia.dts delete mode 100644 arch/powerpc/boot/dts/haleakala.dts delete mode 100644 arch/powerpc/boot/dts/hotfoot.dts delete mode 100644 arch/powerpc/boot/dts/kilauea.dts delete mode 100644 arch/powerpc/boot/dts/klondike.dts delete mode 100644 arch/powerpc/boot/dts/makalu.dts delete mode 100644 arch/powerpc/boot/dts/obs600.dts delete mode 100644 arch/powerpc/boot/ppcboot-hotfoot.h delete mode 100644 arch/powerpc/configs/40x.config delete mode 100644 arch/powerpc/configs/40x/acadia_defconfig delete mode 100644 arch/powerpc/configs/40x/kilauea_defconfig delete mode 100644 arch/powerpc/configs/40x/klondike_defconfig delete mode 100644 arch/powerpc/configs/40x/makalu_defconfig delete mode 100644 arch/powerpc/configs/40x/obs600_defconfig delete mode 100644 arch/powerpc/configs/40x/walnut_defconfig delete mode 100644 arch/powerpc/configs/ppc40x_defconfig delete mode 100644 arch/powerpc/include/asm/nohash/32/mmu-40x.h delete mode 100644 arch/powerpc/include/asm/nohash/32/pte-40x.h delete mode 100644 arch/powerpc/kernel/cpu_specs_40x.h delete mode 100644 arch/powerpc/kernel/head_40x.S delete mode 100644 arch/powerpc/mm/nohash/40x.c delete mode 100644 arch/powerpc/platforms/40x/Kconfig delete mode 100644 arch/powerpc/platforms/40x/Makefile delete mode 100644 arch/powerpc/platforms/40x/ppc40x_simple.c rename arch/powerpc/platforms/{4xx =3D> 44x}/cpm.c (100%) rename arch/powerpc/platforms/{4xx =3D> 44x}/gpio.c (100%) rename arch/powerpc/platforms/{4xx =3D> 44x}/hsta_msi.c (100%) rename arch/powerpc/platforms/{4xx =3D> 44x}/pci.c (95%) rename arch/powerpc/platforms/{4xx =3D> 44x}/pci.h (100%) rename arch/powerpc/platforms/{4xx =3D> 44x}/soc.c (100%) rename arch/powerpc/platforms/{4xx =3D> 44x}/uic.c (100%) delete mode 100644 arch/powerpc/platforms/4xx/Makefile delete mode 100644 arch/powerpc/platforms/4xx/machine_check.c -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEJFGtCPCthwEv2Y/bUevqPMjhpYAFAmaaYQ0ACgkQUevqPMjh pYDIOBAAk+9+CijSRd5plF6moCRgmMGR6qxz/dEHc9390Qj4vtGrkDeRqhSMuV0/ h00hQ08trMGVbL5ZPZ6UXrQnwAMAK+/K/wsNiGDPjrmrKUrylsb6pieTzJHQG6kC G8xHf7HTS/CaJQxwb0cXhzXl502l+cBk1r9lYe9xUpogJ7xL8LYl+1ghv3tVCd5I 4cKOrw2fCjugXzFzC1awyxlF7sE3D9b+nnKbUM3iCyTLrW7DuPKnQs3fTRkcszhX AL2Dl3h+49qARJcJkUUvFdUIFhkD+V1wEf8pPghrFz7ikndEMymHw/TEZN0DjqHM /omTIUS8hn9GdYJPOXtGaYjNXdkt/dJs68W1Jx/TKHJ1UctYWyzc1EpyiiH+HlVq 561YiMoc5w3/OW+eWj4Gv19i/uEAvegv7at5Dl1NGvQDKYCedOjUme2fc43psH3D GBt89w52WNHfDDLhMf4gI05TW0dDhN63CTZsdF0VsYclHK38mjH+S1WemFyqv6yb q+xSL2XSgnQ2D95s+iP258Da8XcajQzpSif/52mYRk1AadG0zSB/PiALZ5qlMg4z y088Kz1nxXqhwzOD5DHc+jzuiRoqBOp9EhKFk3WhQbhjK5cvEYzz9IHvNlHRaO85 1zIttW7C6W4AgH0EANDRCrRCKSJbtFpgzIGPKdPkTJFbalOTccg=3D =3DjOsa -----END PGP SIGNATURE----- . Date: Fri, 19 Jul 2024 15:25:18 +0200 From: Johan Hovold To: Bjorn Andersson , Konrad Dybcio Cc: Rob Herring , Krzysztof Kozlowski , Conor Dooley , linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Johan Hovold Subject: [PATCH 0/4] arm64: dts: qcom: sc8280xp: disable PCIe perst pull downs I noticed that these issues had been reproduced in x1e80100-crd. Ideally these should go into 6.11 as well. Johan Johan Hovold (4): arm64: dts: qcom: sc8280xp-crd: disable PCIe perst pull downs arm64: dts: qcom: sc8280xp-crd: clean up PCIe2a pinctrl node arm64: dts: qcom: sc8280xp-x13s: disable PCIe perst pull downs arm64: dts: qcom: sc8280xp-x13s: clean up PCIe2a pinctrl node arch/arm64/boot/dts/qcom/sc8280xp-crd.dts | 16 ++++++++-------- .../dts/qcom/sc8280xp-lenovo-thinkpad-x13s.dts | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) -- 2.44.2 . Date: Fri, 19 Jul 2024 17:13:18 +0200 From: Wolfram Sang To: Linus Torvalds Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Rosin , Bartosz Golaszewski , Andi Shyti Subject: [PULL REQUEST] i2c-for-6.11-rc1-try2 --4o8M8B6Lp1KpRl4A Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Linus, Here is my updated pull request with the summaries of the included merges. There will be a trivial merge conflict because 6.10 gained bd9f5348089b ("i2c: mark HostNotify target address as used") after rc7. The .driver_data field simply needs to go. Please pull. Wolfram The following changes since commit 256abd8e550ce977b728be79a74e1729438b4948: Linux 6.10-rc7 (2024-07-07 14:23:46 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git tags/i2c-for-= 6.11-rc1-try2 for you to fetch changes up to 5d89b5bdbce3937c86f05ffe19455c3068fd94f7: i2c: document new callbacks in i2c_algorithm (2024-07-13 11:11:58 +0200) ---------------------------------------------------------------- The I2C core gains documentation updates for the testunit, a cleanup regarding unneeded 'driver_data' and more sanity checks in the char device. For the host drivers, this release includes significant updates, with the primary change being the renaming from "master/slave" to "controller/target" to adhere to I2C v7 and SMBus 3.2 standards. New Support: - Added support for Intel Arrow Lake-H. - Added I2C support in the Arioha SoC by linking the Mediatek I2C controller. Cleanups: - Added the MODULE_DESCRIPTION() macro, resolving a modpost warning in the ALi 1563 Southbridge driver. - Constified the regmap_config declaration in the i2c-designware driver. - Improved the coding style in the Renesas R-Car driver by removing unnecessary semicolons after brackets. General improvements: - In the OMAP device, replaced NOIRQ_SYSTEM_SLEEP_PM_OPS with RUNTIME_PM_OPS to enable waking up the controller during suspend() before suspend_noirq() kicks in. - Improved logging in the Xilinx driver. - Added a warning (WARN()) in the Renesas R-Car driver for spurious interrupts. DTS Changes: - Removed address-cell and size-cell from the Atmel at91sam, nVidia Tegra 20, and Samsung S3c2410 devices. - Fixed Texas Instruments OMAP4 I2C controller to comply with the i2c-controller.yaml schema. - Improved indentation in DTS examples for several I2C devices. - Converted the NXP LPC1788 binding to the dt-schema. - Added documentation for the compatible string thead,th1520-i2c. - Added the "power-domains" property for the Meson I2C driver. AT24 EEPROM driver changes: - add support for two new Microchip models - document even more new models in DT bindings (those use fallback compatibles so no code changes) ---------------------------------------------------------------- Andrei Simion (1): dt-bindings: eeprom: at24: Add Microchip 24AA025E48/24AA025E64 Claudiu Beznea (1): eeprom: at24: Add support for Microchip 24AA025E48/24AA025E64 EEPROMs Frieder Schrempf (2): dt-bindings: eeprom: at24: Move compatible for Belling BL24C16A to pr= oper place dt-bindings: eeprom: at24: Add compatible for ONSemi N24S64B George Stark (1): dt-bindings: i2c: amlogic,meson6-i2c: add optional power-domains Jarkko Nikula (1): i2c: i801: Add support for Intel Arrow Lake-H Javier Carrasco (1): i2c: designware: Constify read-only struct regmap_config Jean Delvare (1): i2c: dev: Check for I2C_FUNC_I2C before calling i2c_transfer Jeff Johnson (1): i2c: add missing MODULE_DESCRIPTION() macros Kanak Shilledar (1): dt-bindings: i2c: nxp,lpc1788-i2c: convert to dt schema Krzysztof Kozlowski (5): dt-bindings: i2c: atmel,at91sam: drop unneeded address/size-cells dt-bindings: i2c: nvidia,tegra20: drop unneeded address/size-cells dt-bindings: i2c: samsung,s3c2410: drop unneeded address/size-cells dt-bindings: i2c: ti,omap4: reference i2c-controller.yaml schema dt-bindings: i2c: adjust indentation in DTS example to coding style Lorenzo Bianconi (1): i2c: mt7621: Add Airoha EN7581 i2c support Marc Ferland (1): i2c: xiic: improve error message when transfer fails to start Nicolas Ferre (1): dt-bindings: i2c: at91: Add sama7d65 compatible string Thomas Bonnefille (1): dt-bindings: i2c: dw: Document compatible thead,th1520-i2c Thomas Richard (2): i2c: omap: switch to NOIRQ_SYSTEM_SLEEP_PM_OPS() and RUNTIME_PM_OPS() i2c: omap: wakeup the controller during suspend() callback Uwe Kleine-K=C3=B6nig (1): i2c: Drop explicit initialization of struct i2c_device_id::driver_dat= a to 0 Wolfram Sang (67): Documentation: i2c: testunit: use proper reST Merge tag 'at24-updates-for-v6.11-rc1' of git://git.kernel.org/pub/sc= m/linux/kernel/git/brgl/linux into i2c/for-mergewindow i2c: add debug message for detected HostNotify alerts i2c: rcar: WARN about spurious irqs i2c: rcar: minor changes to adhere to coding style i2c: reword i2c_algorithm according to newest specification i2c: ali15x3: reword according to newest specification i2c: altera: reword according to newest specification i2c: au1550: reword according to newest specification i2c: bcm-kona: reword according to newest specification i2c: bcm2835: reword according to newest specification i2c: brcmstb: reword according to newest specification i2c: cht-wc: reword according to newest specification i2c: cp2615: reword according to newest specification i2c: cros-ec-tunnel: reword according to newest specification i2c: davinci: reword according to newest specification i2c: digicolor: reword according to newest specification i2c: diolan-u2c: reword according to newest specification i2c: dln2: reword according to newest specification i2c: fsi: reword according to newest specification i2c: gpio: reword according to newest specification i2c: highlander: reword according to newest specification i2c: hisi: reword according to newest specification i2c: hix5hd2: reword according to newest specification i2c: i801: reword according to newest specification i2c: ibm_iic: reword according to newest specification i2c: iop3xx: reword according to newest specification i2c: isch: reword according to newest specification i2c: jz4780: reword according to newest specification i2c: kempld: reword according to newest specification i2c: ljca: reword according to newest specification i2c: lpc2k: reword according to newest specification i2c: ls2x: reword according to newest specification i2c: mlxcpld: reword according to newest specification i2c: mpc: reword according to newest specification i2c: mt7621: reword according to newest specification i2c: mv64xxx: reword according to newest specification i2c: ocores: reword according to newest specification i2c: octeon: reword according to newest specification i2c: opal: reword according to newest specification i2c: owl: reword according to newest specification i2c: pasemi: reword according to newest specification i2c: piix4: reword according to newest specification i2c: powermac: reword according to newest specification i2c: pxa-pci: reword according to newest specification i2c: riic: reword according to newest specification i2c: rk3x: reword according to newest specification i2c: robotfuzz-osif: reword according to newest specification i2c: rzv2m: reword according to newest specification i2c: sis5595: reword according to newest specification i2c: sprd: reword according to newest specification i2c: stm32f4: reword according to newest specification i2c: sun6i-p2wi: reword according to newest specification i2c: taos-evm: reword according to newest specification i2c: tegra-bpmp: reword according to newest specification i2c: thunderx-pcidrv: reword according to newest specification i2c: tiny-usb: reword according to newest specification i2c: uniphier-f: reword according to newest specification i2c: uniphier: reword according to newest specification i2c: viperboard: reword according to newest specification i2c: viai2c: reword according to newest specification i2c: nvidia-gpu: reword according to newest specification i2c: virtio: reword according to newest specification i2c: cpm: reword according to newest specification i2c: st: reword according to newest specification Merge tag 'i2c-host-6.11' of git://git.kernel.org/pub/scm/linux/kerne= l/git/andi.shyti/linux into i2c/for-mergewindow i2c: document new callbacks in i2c_algorithm with much appreciated quality assurance from ---------------------------------------------------------------- Alain Volmat (1): (Rev.) i2c: st: reword according to newest specification Andi Shyti (62): (Rev.) i2c: st: reword according to newest specification (Rev.) i2c: cpm: reword according to newest specification (Rev.) i2c: virtio: reword according to newest specification (Rev.) i2c: nvidia-gpu: reword according to newest specification (Rev.) i2c: viai2c: reword according to newest specification (Rev.) i2c: viperboard: reword according to newest specification (Rev.) i2c: uniphier: reword according to newest specification (Rev.) i2c: uniphier-f: reword according to newest specification (Rev.) i2c: tiny-usb: reword according to newest specification (Rev.) i2c: thunderx-pcidrv: reword according to newest specification (Rev.) i2c: tegra-bpmp: reword according to newest specification (Rev.) i2c: taos-evm: reword according to newest specification (Rev.) i2c: sun6i-p2wi: reword according to newest specification (Rev.) i2c: stm32f4: reword according to newest specification (Rev.) i2c: sprd: reword according to newest specification (Rev.) i2c: sis5595: reword according to newest specification (Rev.) i2c: rzv2m: reword according to newest specification (Rev.) i2c: robotfuzz-osif: reword according to newest specification (Rev.) i2c: rk3x: reword according to newest specification (Rev.) i2c: riic: reword according to newest specification (Rev.) i2c: pxa-pci: reword according to newest specification (Rev.) i2c: powermac: reword according to newest specification (Rev.) i2c: piix4: reword according to newest specification (Rev.) i2c: pasemi: reword according to newest specification (Rev.) i2c: owl: reword according to newest specification (Rev.) i2c: opal: reword according to newest specification (Rev.) i2c: octeon: reword according to newest specification (Rev.) i2c: ocores: reword according to newest specification (Rev.) i2c: mv64xxx: reword according to newest specification (Rev.) i2c: mt7621: reword according to newest specification (Rev.) i2c: mpc: reword according to newest specification (Rev.) i2c: mlxcpld: reword according to newest specification (Rev.) i2c: ls2x: reword according to newest specification (Rev.) i2c: lpc2k: reword according to newest specification (Rev.) i2c: ljca: reword according to newest specification (Rev.) i2c: kempld: reword according to newest specification (Rev.) i2c: jz4780: reword according to newest specification (Rev.) i2c: isch: reword according to newest specification (Rev.) i2c: iop3xx: reword according to newest specification (Rev.) i2c: ibm_iic: reword according to newest specification (Rev.) i2c: i801: reword according to newest specification (Rev.) i2c: hix5hd2: reword according to newest specification (Rev.) i2c: hisi: reword according to newest specification (Rev.) i2c: highlander: reword according to newest specification (Rev.) i2c: gpio: reword according to newest specification (Rev.) i2c: fsi: reword according to newest specification (Rev.) i2c: dln2: reword according to newest specification (Rev.) i2c: diolan-u2c: reword according to newest specification (Rev.) i2c: digicolor: reword according to newest specification (Rev.) i2c: davinci: reword according to newest specification (Rev.) i2c: cros-ec-tunnel: reword according to newest specification (Rev.) i2c: cht-wc: reword according to newest specification (Rev.) i2c: brcmstb: reword according to newest specification (Rev.) i2c: bcm2835: reword according to newest specification (Rev.) i2c: bcm-kona: reword according to newest specification (Rev.) i2c: au1550: reword according to newest specification (Rev.) i2c: altera: reword according to newest specification (Rev.) i2c: ali15x3: reword according to newest specification (Rev.) i2c: reword i2c_algorithm according to newest specification (Rev.) i2c: add debug message for detected HostNotify alerts (Rev.) i2c: omap: wakeup the controller during suspend() callback (Rev.) i2c: dev: Check for I2C_FUNC_I2C before calling i2c_transfer AngeloGioacchino Del Regno (2): (Rev.) i2c: mt7621: reword according to newest specification (Rev.) i2c: mt7621: Add Airoha EN7581 i2c support Baolin Wang (1): (Rev.) i2c: sprd: reword according to newest specification Chris Packham (1): (Rev.) i2c: mpc: reword according to newest specification Conor Dooley (6): (Rev.) dt-bindings: i2c: adjust indentation in DTS example to coding = style (Rev.) dt-bindings: i2c: ti,omap4: reference i2c-controller.yaml sche= ma (Rev.) dt-bindings: i2c: samsung,s3c2410: drop unneeded address/size-= cells (Rev.) dt-bindings: i2c: nvidia,tegra20: drop unneeded address/size-c= ells (Rev.) dt-bindings: i2c: atmel,at91sam: drop unneeded address/size-ce= lls (Rev.) dt-bindings: eeprom: at24: Add Microchip 24AA025E48/24AA025E64 Eddie James (1): (Rev.) i2c: fsi: reword according to newest specification Florian Fainelli (3): (Rev.) i2c: brcmstb: reword according to newest specification (Rev.) i2c: bcm2835: reword according to newest specification (Rev.) i2c: bcm-kona: reword according to newest specification Hans de Goede (1): (Rev.) i2c: cht-wc: reword according to newest specification Heiko Stuebner (1): (Rev.) i2c: rk3x: reword according to newest specification Jarkko Nikula (1): (Rev.) dt-bindings: i2c: dw: Document compatible thead,th1520-i2c Krzysztof Kozlowski (1): (Rev.) dt-bindings: i2c: nxp,lpc1788-i2c: convert to dt schema Neil Armstrong (1): (Rev.) dt-bindings: i2c: amlogic,meson6-i2c: add optional power-domai= ns Ray Liu (1): (Test) i2c: mt7621: Add Airoha EN7581 i2c support Rob Herring (Arm) (1): (Rev.) dt-bindings: i2c: amlogic,meson6-i2c: add optional power-domai= ns Stefan Roese (1): (Rev.) i2c: mt7621: reword according to newest specification Tony Lindgren (1): (Rev.) i2c: omap: wakeup the controller during suspend() callback Documentation/devicetree/bindings/eeprom/at24.yaml | 18 ++- .../bindings/i2c/amlogic,meson6-i2c.yaml | 3 + .../devicetree/bindings/i2c/atmel,at91sam-i2c.yaml | 10 +- .../devicetree/bindings/i2c/brcm,brcmstb-i2c.yaml | 28 ++--- .../devicetree/bindings/i2c/i2c-demux-pinctrl.yaml | 112 +++++++++--------- .../devicetree/bindings/i2c/i2c-lpc2k.txt | 33 ------ .../bindings/i2c/nvidia,tegra20-i2c.yaml | 6 - .../devicetree/bindings/i2c/nxp,lpc1788-i2c.yaml | 54 +++++++++ .../devicetree/bindings/i2c/renesas,iic-emev2.yaml | 14 +-- .../devicetree/bindings/i2c/renesas,rcar-i2c.yaml | 20 ++-- .../devicetree/bindings/i2c/renesas,riic.yaml | 34 +++--- .../bindings/i2c/renesas,rmobile-iic.yaml | 24 ++-- .../bindings/i2c/samsung,s3c2410-i2c.yaml | 6 - .../bindings/i2c/snps,designware-i2c.yaml | 4 + .../devicetree/bindings/i2c/st,stm32-i2c.yaml | 66 +++++------ .../devicetree/bindings/i2c/ti,omap4-i2c.yaml | 64 +++++------ Documentation/i2c/busses/i2c-i801.rst | 1 + Documentation/i2c/slave-testunit-backend.rst | 127 ++++++++++++++---= ---- MAINTAINERS | 2 +- drivers/i2c/busses/Kconfig | 3 +- drivers/i2c/busses/i2c-ali1563.c | 1 + drivers/i2c/busses/i2c-ali15x3.c | 2 +- drivers/i2c/busses/i2c-altera.c | 4 +- drivers/i2c/busses/i2c-au1550.c | 15 ++- drivers/i2c/busses/i2c-bcm-kona.c | 13 +-- drivers/i2c/busses/i2c-bcm2835.c | 10 +- drivers/i2c/busses/i2c-brcmstb.c | 11 +- drivers/i2c/busses/i2c-ccgx-ucsi.c | 1 + drivers/i2c/busses/i2c-cht-wc.c | 8 +- drivers/i2c/busses/i2c-cp2615.c | 10 +- drivers/i2c/busses/i2c-cpm.c | 4 +- drivers/i2c/busses/i2c-cros-ec-tunnel.c | 4 +- drivers/i2c/busses/i2c-davinci.c | 17 ++- drivers/i2c/busses/i2c-designware-platdrv.c | 2 +- drivers/i2c/busses/i2c-digicolor.c | 6 +- drivers/i2c/busses/i2c-diolan-u2c.c | 2 +- drivers/i2c/busses/i2c-dln2.c | 4 +- drivers/i2c/busses/i2c-fsi.c | 56 ++++----- drivers/i2c/busses/i2c-gpio.c | 8 +- drivers/i2c/busses/i2c-highlander.c | 2 +- drivers/i2c/busses/i2c-hisi.c | 8 +- drivers/i2c/busses/i2c-hix5hd2.c | 6 +- drivers/i2c/busses/i2c-i801.c | 15 ++- drivers/i2c/busses/i2c-ibm_iic.c | 27 ++--- drivers/i2c/busses/i2c-iop3xx.c | 15 +-- drivers/i2c/busses/i2c-isch.c | 2 +- drivers/i2c/busses/i2c-jz4780.c | 4 +- drivers/i2c/busses/i2c-kempld.c | 4 +- drivers/i2c/busses/i2c-ljca.c | 20 ++-- drivers/i2c/busses/i2c-lpc2k.c | 10 +- drivers/i2c/busses/i2c-ls2x.c | 11 +- drivers/i2c/busses/i2c-mlxcpld.c | 14 +-- drivers/i2c/busses/i2c-mpc.c | 4 +- drivers/i2c/busses/i2c-mt7621.c | 26 ++--- drivers/i2c/busses/i2c-mv64xxx.c | 12 +- drivers/i2c/busses/i2c-nvidia-gpu.c | 7 +- drivers/i2c/busses/i2c-ocores.c | 8 +- drivers/i2c/busses/i2c-octeon-core.c | 6 +- drivers/i2c/busses/i2c-octeon-core.h | 4 +- drivers/i2c/busses/i2c-octeon-platdrv.c | 2 +- drivers/i2c/busses/i2c-omap.c | 36 ++++-- drivers/i2c/busses/i2c-opal.c | 10 +- drivers/i2c/busses/i2c-owl.c | 12 +- drivers/i2c/busses/i2c-pasemi-core.c | 6 +- drivers/i2c/busses/i2c-piix4.c | 2 +- drivers/i2c/busses/i2c-powermac.c | 14 +-- drivers/i2c/busses/i2c-pxa-pci.c | 2 +- drivers/i2c/busses/i2c-pxa.c | 1 + drivers/i2c/busses/i2c-qup.c | 1 + drivers/i2c/busses/i2c-rcar.c | 13 +-- drivers/i2c/busses/i2c-riic.c | 8 +- drivers/i2c/busses/i2c-rk3x.c | 20 ++-- drivers/i2c/busses/i2c-robotfuzz-osif.c | 4 +- drivers/i2c/busses/i2c-rzv2m.c | 12 +- drivers/i2c/busses/i2c-sis5595.c | 2 +- drivers/i2c/busses/i2c-sprd.c | 16 +-- drivers/i2c/busses/i2c-st.c | 8 +- drivers/i2c/busses/i2c-stm32f4.c | 8 +- drivers/i2c/busses/i2c-sun6i-p2wi.c | 20 ++-- drivers/i2c/busses/i2c-taos-evm.c | 2 +- drivers/i2c/busses/i2c-tegra-bpmp.c | 4 +- drivers/i2c/busses/i2c-thunderx-pcidrv.c | 2 +- drivers/i2c/busses/i2c-tiny-usb.c | 6 +- drivers/i2c/busses/i2c-uniphier-f.c | 26 ++--- drivers/i2c/busses/i2c-uniphier.c | 15 ++- drivers/i2c/busses/i2c-viai2c-common.c | 2 +- drivers/i2c/busses/i2c-viai2c-wmt.c | 8 +- drivers/i2c/busses/i2c-viai2c-zhaoxin.c | 12 +- drivers/i2c/busses/i2c-viperboard.c | 10 +- drivers/i2c/busses/i2c-virtio.c | 2 +- drivers/i2c/busses/i2c-xiic.c | 9 +- drivers/i2c/i2c-core-base.c | 6 +- drivers/i2c/i2c-dev.c | 12 ++ drivers/i2c/i2c-slave-testunit.c | 2 +- drivers/i2c/i2c-smbus.c | 2 +- drivers/i2c/muxes/i2c-mux-pca9541.c | 2 +- drivers/misc/eeprom/at24.c | 8 ++ include/linux/i2c.h | 44 +++++-- 98 files changed, 744 insertions(+), 639 deletions(-) delete mode 100644 Documentation/devicetree/bindings/i2c/i2c-lpc2k.txt create mode 100644 Documentation/devicetree/bindings/i2c/nxp,lpc1788-i2c.y= aml --4o8M8B6Lp1KpRl4A Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEOZGx6rniZ1Gk92RdFA3kzBSgKbYFAmaago4ACgkQFA3kzBSg KbYJQRAApr9lzEDL2uVfTb9mXzA0ZxGfgi0PmN3S7kC0IB5DCrN9x5N1akkmKG/j 47d4rl+nzl8aenOGMqYS6iXqJ/og9eD+vTlG8uhcAfH/jEM/dI76R/a2NAUaf3tI kZRBXepui1hPONQ+hvZdxT0JT137+QuK+7wWwS8beTJMXBzedeEFSewt4fv/Y9IQ ESaJ/7a+YvKR6YNZJFbGgRDBOcF1t+tpFtnkvOHe22SSYeiei6eJpiJK2l92xslZ K0LZUbqySngVHD/1k7QIZoe/Csx0uOcLQygKJcs6YYSFucGghqH9XAioTCNi1X2z YZx9+Z1oknVJCMtEFtOptbr6Cwzdx0wUQah6mmFmHrGXQJcz4X++8PvrW4seVdpU RioBpTfpIW8hJoj5CQAYGuKNrjdDyCMUxfMuGEtBAc0Shw7ScJU+bowSZ1rbOpgj 0A55/YgFav+T3+DpZSh9HFiXTVB7I2MwmglVVzdb9PMTTF25k/7oYcE+rR70Gey5 4RfD0NzMY551m9SvClm+MqPe69PNm/bKrRHOjMDAGRhO+Xmnbg0eGetHz1A4HGel 352CzRCrwByY9TNm5FoPSxGF00mV2HMPfVLIkgajRGwZpdazh7I9Gk9FhaXNWsmp qaqKbzaEQuUFU8KJZUg/nCgLuN/fcTE8YY49PAQtFFqvbyf3oPs= =Mz0n -----END PGP SIGNATURE----- --4o8M8B6Lp1KpRl4A-- . Date: Fri, 19 Jul 2024 11:19:47 -0500 From: Ira Weiny To: Linus Torvalds Subject: [GIT PULL] NVDIMM and DAX for 6.11 Hi Linus, please pull from: git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm.git tags/libnvdimm-for-6.11 ... to get the 6.11 updates for the libnvdimm tree. The bulk of the changes are to clean up W=1 warnings with one small update with the use of sizeof(). These have been linux-next without issue since 6/18. Thank you, Ira --- The following changes since commit c3f38fa61af77b49866b006939479069cd451173: Linux 6.10-rc2 (2024-06-02 15:44:56 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/nvdimm/nvdimm.git tags/libnvdimm-for-6.11 for you to fetch changes up to b0d478e34dbfccb7ce430e20cbe77d4d10593fa3: testing: nvdimm: Add MODULE_DESCRIPTION() macros (2024-06-17 18:43:08 -0500) ---------------------------------------------------------------- 6.11 updates for libnvdimm One small cleanup to use sizeof(*pointer) A series of patches to add MODULE_DESCRIPTIONS() to eliminate make W=1 warnings. ---------------------------------------------------------------- Erick Archer (1): nvdimm/btt: use sizeof(*pointer) instead of sizeof(type) Ira Weiny (1): testing: nvdimm: Add MODULE_DESCRIPTION() macros Jeff Johnson (4): ACPI: NFIT: add missing MODULE_DESCRIPTION() macro nvdimm: add missing MODULE_DESCRIPTION() macros dax: add missing MODULE_DESCRIPTION() macros testing: nvdimm: iomap: add MODULE_DESCRIPTION() drivers/acpi/nfit/core.c | 1 + drivers/dax/cxl.c | 1 + drivers/dax/device.c | 1 + drivers/dax/hmem/hmem.c | 1 + drivers/dax/kmem.c | 1 + drivers/dax/pmem.c | 1 + drivers/dax/super.c | 1 + drivers/nvdimm/btt.c | 5 +++-- drivers/nvdimm/core.c | 1 + drivers/nvdimm/e820.c | 1 + drivers/nvdimm/nd_virtio.c | 1 + drivers/nvdimm/of_pmem.c | 1 + drivers/nvdimm/pmem.c | 1 + tools/testing/nvdimm/test/iomap.c | 1 + tools/testing/nvdimm/test/ndtest.c | 1 + tools/testing/nvdimm/test/nfit.c | 1 + 16 files changed, 18 insertions(+), 2 deletions(-) . Date: Fri, 19 Jul 2024 10:17:41 -0700 From: Dmitry Torokhov To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org Subject: [git pull] Input updates for v6.11-rc0 Hi Linus, Please pull from: git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input.git tags/input-for-v6.11-rc0 to receive updates for the input subsystem. You will get: - streamlined logic in input core for handling normal input handlers vs input filters - updates to input drivers to allocate memory with sizeof(*pointer) instead of sizeof(type) - change to ads7846 touchscreen driver to use hsync GPIO instead of requiring platform data with special method (which is not compatible with boards using device tree) - update to adc-joystick driver to handle inverted axes - cleanups in various drivers switching them to use the new "guard" and "__free()" facilities - changes to several drivers (adxl34x, atmel_mxt_ts, ati-remote2, omap-keypad, yealink) to stop creating driver-specific device attributes manually and use driver core facilities for this - update to Cypress PS/2 protocol driver to properly handle errors from the PS/2 transport as well as other cleanups - update to edt-ft5x06 driver to support ft5426 variant - update to ektf2127 driver to support ektf2232 variant - update to exc3000 driver to support EXC81W32 variant - update to imagis driver to support IST3038 variant - other assorted driver cleanups. Changelog: --------- Andreas Kemnade (5): dt-bindings: touchscreen: convert elan,ektf2127 to json-schema dt-bindings: touchscreen: elan,ektf2127: Add EKTF2232 Input: ektf2127 - add ektf2232 support dt-bindings: input: touchscreen: edt-ft5x06: Add ft5426 Input: edt-ft5x06 - add ft5426 Andrei Lalaev (1): Input: qt1050 - handle CHIP_ID reading error Andrew Davis (1): dt-bindings: input: ti,nspire-keypad: convert to YAML format Chris Morgan (1): Input: adc-joystick - handle inverted axes Dmitry Torokhov (36): linux/interrupt.h: allow "guard" notation to disable and reenable IRQ Input: cap11xx - stop using chip ID when configuring it Input: adxl34x - use device core to create driver-specific device attributes Input: adxl34x - use input_set_capability() Input: adxl34x - switch to using managed resources Input: adxl34x - switch to using "guard" notation Input: ims-pcu - use driver core to instantiate device attributes Input: ims-pcu - switch to using cleanup functions Input: adc-joystick - move axes data into the main structure Input: wacom_w8001 - use "guard" notation when acquiring mutex Input: goodix_berlin - use __free() cleanup in SPI transport Input: rohm_bu21023 - factor out settings update code Input: rohm_bu21023 - switch to using sysfs_emit() Input: rohm_bu21023 - switch to using cleanup functions Input: ili210x - use kvmalloc() to allocate buffer for firmware update Input: ili210x - switch to using cleanup functions in firmware code Input: ili210x - use guard notation when disabling and reenabling IRQ Input: elan_i2c - do not leave interrupt disabled on suspend failure Input: cypress_ps2 - clean up setting reporting rate Input: cypress_ps2 - fix error handling when sending command fails Input: cypress_ps2 - report timeouts when reading command status Input: cypress_ps2 - propagate errors from lower layers Input: cypress_ps2 - use u8 when dealing with byte data Input: evdev - remove ->event() method Input: make sure input handlers define only one processing method Input: make events() method return number of events processed Input: simplify event handling logic Input: rearrange input_alloc_device() to prepare for preallocating of vals Input: preallocate memory to hold event values Input: do not check number of events in input_pass_values() Input: twl4030-pwrbutton - fix kernel-doc warning Input: atmel_mxt_ts - use driver core to instantiate device attributes Input: omap-keypad - use driver core to instantiate device attributes Input: ati-remote2 - use driver core to instantiate device attributes Input: yealink - use driver core to instantiate device attributes Input: yealink - simplify locking in sysfs attribute handling Erick Archer (8): Input: keyboard - use sizeof(*pointer) instead of sizeof(type) Input: misc - use sizeof(*pointer) instead of sizeof(type) Input: mouse - use sizeof(*pointer) instead of sizeof(type) Input: tablet - use sizeof(*pointer) instead of sizeof(type) Input: serio - use sizeof(*pointer) instead of sizeof(type) Input: gameport - use sizeof(*pointer) instead of sizeof(type) Input: touchscreen - use sizeof(*pointer) instead of sizeof(type) Input: joystick - use sizeof(*pointer) instead of sizeof(type) Felix Kaechele (5): dt-bindings: input: touchscreen: himax,hx83112b: add HX83100A Input: himax_hx83112b - use more descriptive register defines Input: himax_hx83112b - implement MCU register reading Input: himax_hx83112b - add himax_chip struct for multi-chip support Input: himax_hx83112b - add support for HX83100A Jason Gerecke (2): Input: wacom_w8001 - simplify device name generation Input: wacom_w8001 - correct device name generation Javier Carrasco (4): Input: ims-pcu - annotate struct ims_pcu_flash_fmt with __counted_by Input: ims-pcu - drop repeated "input" in error message Input: qt1050 - constify struct regmap_config Input: fsl-imx25-tcq - constify struct regmap_config Jeff Johnson (1): Input: add missing MODULE_DESCRIPTION() macros Linus Walleij (2): dt-bindings: ads7846: Add hsync-gpios Input: ads7846 - handle HSYNC GPIO Philipp Zabel (2): dt-bindings: input: touchscreen: exc3000: add EXC81W32 Input: exc3000 - add EXC81W32 support Raymond Hackley (3): Input: imagis - clarify the usage of protocol_b dt-bindings: input/touchscreen: imagis: Document ist3038 Input: imagis - add supports for Imagis IST3038 Diffstat: -------- .../devicetree/bindings/input/ti,nspire-keypad.txt | 60 ------ .../bindings/input/ti,nspire-keypad.yaml | 74 +++++++ .../bindings/input/touchscreen/ads7846.txt | 1 + .../bindings/input/touchscreen/edt-ft5x06.yaml | 1 + .../bindings/input/touchscreen/eeti,exc3000.yaml | 12 +- .../bindings/input/touchscreen/ektf2127.txt | 25 --- .../bindings/input/touchscreen/elan,ektf2127.yaml | 58 ++++++ .../bindings/input/touchscreen/himax,hx83112b.yaml | 1 + .../input/touchscreen/imagis,ist3038c.yaml | 1 + drivers/input/evdev.c | 16 +- drivers/input/gameport/emu10k1-gp.c | 2 +- drivers/input/gameport/fm801-gp.c | 2 +- drivers/input/gameport/gameport.c | 2 +- drivers/input/gameport/ns558.c | 4 +- drivers/input/input.c | 230 ++++++++++++++------- drivers/input/joystick/a3d.c | 2 +- drivers/input/joystick/adc-joystick.c | 130 +++++++----- drivers/input/joystick/adi.c | 2 +- drivers/input/joystick/analog.c | 3 +- drivers/input/joystick/as5011.c | 2 +- drivers/input/joystick/cobra.c | 2 +- drivers/input/joystick/db9.c | 2 +- drivers/input/joystick/gamecon.c | 2 +- drivers/input/joystick/gf2k.c | 2 +- drivers/input/joystick/grip.c | 3 +- drivers/input/joystick/grip_mp.c | 3 +- drivers/input/joystick/guillemot.c | 2 +- drivers/input/joystick/interact.c | 2 +- drivers/input/joystick/magellan.c | 2 +- drivers/input/joystick/maplecontrol.c | 2 +- drivers/input/joystick/n64joy.c | 2 +- drivers/input/joystick/sidewinder.c | 2 +- drivers/input/joystick/spaceball.c | 2 +- drivers/input/joystick/spaceorb.c | 2 +- drivers/input/joystick/stinger.c | 2 +- drivers/input/joystick/tmdc.c | 3 +- drivers/input/joystick/turbografx.c | 2 +- drivers/input/joystick/twidjoy.c | 2 +- drivers/input/joystick/warrior.c | 2 +- drivers/input/joystick/xpad.c | 4 +- drivers/input/joystick/zhenhua.c | 2 +- drivers/input/keyboard/atkbd.c | 2 +- drivers/input/keyboard/cap11xx.c | 125 ++++++----- drivers/input/keyboard/lkkbd.c | 2 +- drivers/input/keyboard/locomokbd.c | 2 +- drivers/input/keyboard/maple_keyb.c | 2 +- drivers/input/keyboard/newtonkbd.c | 2 +- drivers/input/keyboard/omap-keypad.c | 21 +- drivers/input/keyboard/qt1050.c | 9 +- drivers/input/keyboard/stowaway.c | 2 +- drivers/input/keyboard/sunkbd.c | 2 +- drivers/input/keyboard/xtkbd.c | 2 +- drivers/input/matrix-keymap.c | 1 + drivers/input/misc/88pm80x_onkey.c | 2 +- drivers/input/misc/adxl34x-i2c.c | 9 +- drivers/input/misc/adxl34x-spi.c | 9 +- drivers/input/misc/adxl34x.c | 159 +++++--------- drivers/input/misc/adxl34x.h | 2 +- drivers/input/misc/ati_remote2.c | 50 ++--- drivers/input/misc/cma3000_d0x.c | 2 +- drivers/input/misc/ims-pcu.c | 197 +++++++++--------- drivers/input/misc/max8997_haptic.c | 2 +- drivers/input/misc/pcap_keys.c | 2 +- drivers/input/misc/powermate.c | 2 +- drivers/input/misc/sgi_btns.c | 1 + drivers/input/misc/soc_button_array.c | 1 + drivers/input/misc/twl4030-pwrbutton.c | 4 +- drivers/input/misc/uinput.c | 2 +- drivers/input/misc/yealink.c | 85 +++----- drivers/input/mouse/alps.c | 2 +- drivers/input/mouse/appletouch.c | 2 +- drivers/input/mouse/bcm5974.c | 2 +- drivers/input/mouse/cypress_ps2.c | 184 ++++++++--------- drivers/input/mouse/cypress_ps2.h | 6 - drivers/input/mouse/elan_i2c_core.c | 2 + drivers/input/mouse/focaltech.c | 3 +- drivers/input/mouse/hgpk.c | 2 +- drivers/input/mouse/lifebook.c | 2 +- drivers/input/mouse/maplemouse.c | 2 +- drivers/input/mouse/psmouse-base.c | 2 +- drivers/input/mouse/sentelic.c | 2 +- drivers/input/mouse/sermouse.c | 2 +- drivers/input/mouse/synaptics.c | 4 +- drivers/input/mouse/synaptics_i2c.c | 2 +- drivers/input/mouse/vsxxxaa.c | 2 +- drivers/input/serio/altera_ps2.c | 2 +- drivers/input/serio/ambakmi.c | 4 +- drivers/input/serio/apbps2.c | 2 +- drivers/input/serio/arc_ps2.c | 2 +- drivers/input/serio/ct82c710.c | 2 +- drivers/input/serio/gscps2.c | 4 +- drivers/input/serio/hyperv-keyboard.c | 4 +- drivers/input/serio/i8042.c | 4 +- drivers/input/serio/maceps2.c | 2 +- drivers/input/serio/olpc_apsp.c | 4 +- drivers/input/serio/parkbd.c | 2 +- drivers/input/serio/pcips2.c | 4 +- drivers/input/serio/ps2-gpio.c | 4 +- drivers/input/serio/ps2mult.c | 2 +- drivers/input/serio/q40kbd.c | 4 +- drivers/input/serio/rpckbd.c | 2 +- drivers/input/serio/sa1111ps2.c | 4 +- drivers/input/serio/serio.c | 2 +- drivers/input/serio/serio_raw.c | 4 +- drivers/input/serio/serport.c | 4 +- drivers/input/serio/sun4i-ps2.c | 4 +- drivers/input/serio/userio.c | 4 +- drivers/input/serio/xilinx_ps2.c | 4 +- drivers/input/tablet/acecad.c | 2 +- drivers/input/tablet/aiptek.c | 2 +- drivers/input/tablet/hanwang.c | 2 +- drivers/input/tablet/kbtab.c | 2 +- drivers/input/tablet/wacom_serial4.c | 2 +- drivers/input/tests/input_test.c | 1 + drivers/input/touchscreen/ads7846.c | 35 +++- drivers/input/touchscreen/atmel_mxt_ts.c | 16 +- drivers/input/touchscreen/cyttsp_i2c_common.c | 1 + drivers/input/touchscreen/da9052_tsi.c | 2 +- drivers/input/touchscreen/dynapro.c | 2 +- drivers/input/touchscreen/edt-ft5x06.c | 1 + drivers/input/touchscreen/egalax_ts_serial.c | 2 +- drivers/input/touchscreen/ektf2127.c | 36 +++- drivers/input/touchscreen/elo.c | 2 +- drivers/input/touchscreen/exc3000.c | 7 + drivers/input/touchscreen/fsl-imx25-tcq.c | 2 +- drivers/input/touchscreen/fujitsu_ts.c | 2 +- drivers/input/touchscreen/goodix_berlin_spi.c | 24 ++- drivers/input/touchscreen/gunze.c | 2 +- drivers/input/touchscreen/hampshire.c | 2 +- drivers/input/touchscreen/himax_hx83112b.c | 135 +++++++++--- drivers/input/touchscreen/ili210x.c | 127 ++++++------ drivers/input/touchscreen/imagis.c | 33 ++- drivers/input/touchscreen/inexio.c | 2 +- drivers/input/touchscreen/mtouch.c | 2 +- drivers/input/touchscreen/penmount.c | 2 +- drivers/input/touchscreen/rohm_bu21023.c | 95 ++++----- drivers/input/touchscreen/sur40.c | 2 +- drivers/input/touchscreen/touchit213.c | 2 +- drivers/input/touchscreen/touchright.c | 2 +- drivers/input/touchscreen/touchwin.c | 2 +- drivers/input/touchscreen/tsc40.c | 2 +- drivers/input/touchscreen/usbtouchscreen.c | 15 +- drivers/input/touchscreen/wacom_w8001.c | 37 ++-- drivers/input/vivaldi-fmap.c | 1 + include/linux/input.h | 7 +- include/linux/interrupt.h | 4 + 146 files changed, 1236 insertions(+), 1052 deletions(-) delete mode 100644 Documentation/devicetree/bindings/input/ti,nspire-keypad.txt create mode 100644 Documentation/devicetree/bindings/input/ti,nspire-keypad.yaml delete mode 100644 Documentation/devicetree/bindings/input/touchscreen/ektf2127.txt create mode 100644 Documentation/devicetree/bindings/input/touchscreen/elan,ektf2127.yaml Thanks. -- Dmitry . Date: Fri, 19 Jul 2024 21:08:25 +0200 From: David Sterba To: torvalds@linux-foundation.org Cc: David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] Btrfs build fix for 6.11 Hi, please pull a fix for build breakage on 32bit platforms. I misjudged the severity of the fix, it first looked like a functional fix that could wait but failing subset of builds should not (-Werror=overflow). I'm not aware of any reports from linux-next build coverage before merge window. Thanks. ---------------------------------------------------------------- The following changes since commit 8e7860543a94784d744c7ce34b78a2e11beefa5c: btrfs: fix extent map use-after-free when adding pages to compressed bio (2024-07-11 16:32:22 +0200) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux.git tags/for-6.11-tag for you to fetch changes up to c3ece6b7ffb4a7c00e8d53cbf4026a32b6127914: btrfs: change BTRFS_MOUNT_* flags to 64bit type (2024-07-19 17:20:23 +0200) ---------------------------------------------------------------- Qu Wenruo (1): btrfs: change BTRFS_MOUNT_* flags to 64bit type fs/btrfs/fs.h | 66 ++++++++++++++++++++++++++++---------------------------- fs/btrfs/super.c | 11 +++++----- fs/btrfs/super.h | 3 ++- fs/btrfs/zoned.c | 3 ++- fs/btrfs/zoned.h | 5 +++-- 5 files changed, 46 insertions(+), 42 deletions(-) . Date: Sat, 20 Jul 2024 10:29:16 +0200 From: Andi Shyti To: Wolfram Sang Cc: linux-i2c , lkml , Andi Shyti Subject: [GIT PULL] i2c-host for v6.11 - part 2 Hi Wolfram, here comes the second part of the merge window pull request. I waited for Linus to take the first part so that I could send this pull request on top of the mainline. Until now I was on top of your i2c/for-mergewindow branch. Thanks and have a great weekend, Andi The following changes since commit 8e5c0abfa02d85b9cd2419567ad2d73ed8fe4b74: Merge tag 'input-for-v6.11-rc0' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input (2024-07-19 16:51:39 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/andi.shyti/linux.git tags/i2c-host-6.11-part-2 for you to fetch changes up to 930e5186862b115953fb560be357f4e0bf496f94: i2c: piix4: Register SPDs (2024-07-20 03:07:56 +0200) ---------------------------------------------------------------- Added descriptions in the DTS for the Qualcomm SM8650 and SM8550 Camera Control Interface (CCI). Added support for the "settle-time-us" property, which allows the gpio-mux device to switch from one bus to another with a configurable delay. The time can be set in the DTS. The latest change also includes file sorting. Fixed slot numbering in the SMBus framework to prevent failures when more than 8 slots are occupied. It now enforces a a maximum of 8 slots to be used. This ensures that the Intel PIIX4 device can register the SPDs correctly without failure, even if other slots are populated but not used. ---------------------------------------------------------------- Bastien Curutchet (3): dt-bindings: i2c: mux-gpio: Add 'settle-time-us' property i2c: mux: gpio: Re-order #include to match alphabetic order i2c: mux: gpio: Add support for the 'settle-time-us' property Thomas Weißschuh (2): i2c: smbus: remove i801 assumptions from SPD probing i2c: piix4: Register SPDs Vladimir Zapolskiy (2): dt-bindings: i2c: qcom-cci: Document sm8550 compatible dt-bindings: i2c: qcom-cci: Document sm8650 compatible Documentation/devicetree/bindings/i2c/i2c-mux-gpio.yaml | 3 +++ Documentation/devicetree/bindings/i2c/qcom,i2c-cci.yaml | 20 ++++++++++++++++++++ drivers/i2c/busses/Kconfig | 1 + drivers/i2c/busses/i2c-piix4.c | 9 +++++++++ drivers/i2c/i2c-smbus.c | 15 ++++----------- drivers/i2c/muxes/i2c-mux-gpio.c | 14 ++++++++++---- include/linux/platform_data/i2c-mux-gpio.h | 2 ++ 7 files changed, 49 insertions(+), 15 deletions(-) . Date: Sat, 20 Jul 2024 17:47:30 +0900 From: Takashi Sakamoto To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org, linux1394-devel@lists.sourceforge.net Subject: [GIT PULL] firewire updates for v6.11 Hi Linus, Please pull FireWire subsystem updates for v6.11. The following changes since commit 6ba59ff4227927d3a8530fc2973b80e94b54d58f: Linux 6.10-rc4 (2024-06-16 13:40:16 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394.git tags/firewire-updates-6.11 for you to fetch changes up to 06dcc4c9baa9e92896f00d02ffa760c0988b4371: firewire: core: move copy_port_status() helper function to TP_fast_assign() block (2024-07-12 14:34:12 +0900) ---------------------------------------------------------------- firewire updates for v6.11 There are many line changes for FireWire subsystem, while there is no functional change for practical use. The most of changes are for code refactoring, some KUnit tests to added helper functions, and new tracepoints events for both the core functions and 1394 OHCI driver. The tracepoints events now cover the verbose logging enabled by debug parameter of firewire-ohci kernel module. The parameter would be removed in any future timing, thus it is now deprecated. ---------------------------------------------------------------- Colin Ian King (1): firewire: core: Fix spelling mistakes in tracepoint messages Takashi Sakamoto (31): firewire: core: add enumerator of self ID sequences and its KUnit test firewire: core: add helper function to handle port status from self ID sequence and its KUnit test firewire: core: minor code refactoring for topology builder firewire: ohci: minor code refactoring for self ID logging firewire: core: use helper functions for self ID sequence firewire: ohci: use helper functions for self ID sequence firewire: core: add common inline functions to serialize/deserialize self ID packet firewire: core: use helper inline functions to deserialize self ID packet firewire: ohci: use helper inline functions to serialize/deserialize self ID packet firewire: core: arrangement header inclusion for tracepoints events firewire: core: add tracepoints event for self_id_sequence firewire: core: add tests for serialization/deserialization of phy config packet firewire: core: use inline helper functions to serialize phy config packet firewire: core: record card index in tracepoints event for self ID sequence firewire: core: undefine macros after use in tracepoints events firewire: core: add tracepoints events for allocation/deallocation of isochronous context firewire: core: add tracepoints events for setting channels of multichannel context firewire: core: add tracepoints events for starting/stopping of isochronous context firewire: core: add tracepoints events for flushing of isochronous context firewire: core: add tracepoints events for flushing completions of isochronous context firewire: core: add tracepoints events for queueing packets of isochronous context firewire: core: add tracepoints events for completions of packets in isochronous context firewire: ohci: add support for Linux kernel tracepoints firewire: ohci: add tracepoints event for hardIRQ event firewire: ohci: use common macro to interpret be32 data in le32 buffer firewire: ohci: use static function to handle endian issue on PowerPC platform firewire: ohci: add static inline functions to deserialize for Self-ID DMA operation firewire: ohci: use inline functions to operate data of self-ID DMA firewire: ohci: add tracepoints event for data of Self-ID DMA Revert "firewire: ohci: use common macro to interpret be32 data in le32 buffer" firewire: core: move copy_port_status() helper function to TP_fast_assign() block drivers/firewire/.kunitconfig | 2 + drivers/firewire/Kconfig | 31 +++++++++++ drivers/firewire/Makefile | 2 + drivers/firewire/core-iso.c | 32 +++++++++++ drivers/firewire/core-topology.c | 219 +++++++++++++++++++++++++++++---------------------------------------------- drivers/firewire/core-trace.c | 11 ++++ drivers/firewire/core-transaction.c | 24 ++++----- drivers/firewire/ohci-serdes-test.c | 56 ++++++++++++++++++++ drivers/firewire/ohci.c | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++------------------------- drivers/firewire/ohci.h | 43 ++++++++++++++- drivers/firewire/packet-header-definitions.h | 2 + drivers/firewire/packet-serdes-test.c | 334 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ drivers/firewire/phy-packet-definitions.h | 302 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ drivers/firewire/self-id-sequence-helper-test.c | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++++ include/trace/events/firewire.h | 541 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- include/trace/events/firewire_ohci.h | 101 +++++++++++++++++++++++++++++++++++ 16 files changed, 1867 insertions(+), 222 deletions(-) create mode 100644 drivers/firewire/ohci-serdes-test.c create mode 100644 drivers/firewire/phy-packet-definitions.h create mode 100644 drivers/firewire/self-id-sequence-helper-test.c create mode 100644 include/trace/events/firewire_ohci.h Regards Takashi Sakamoto . Date: Sat, 20 Jul 2024 11:08:34 +0200 From: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= To: Linus Torvalds Cc: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= , =?UTF-8?q?G=C3=BCnther=20Noack?= , Ivanov Mikhail , Tahera Fahimi , linux-kernel@vger.kernel.org, linux-security-module@vger.kernel.org Subject: [GIT PULL] Landlock fix for v6.11 Hi Linus, This PR simplifies code and improves documentation. Please pull these changes for v6.11-rc1. This commit merged cleanly with your master branch. The kernel code has been tested in the latest linux-next releases. Regards, Mickaël -- The following changes since commit 256abd8e550ce977b728be79a74e1729438b4948: Linux 6.10-rc7 (2024-07-07 14:23:46 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/mic/linux.git tags/landlock-6.11-rc1 for you to fetch changes up to f4b89d8ce5a835afa51404977ee7e3889c2b9722: landlock: Various documentation improvements (2024-07-18 08:27:47 +0200) ---------------------------------------------------------------- Landlock updates for v6.11-rc1 ---------------------------------------------------------------- Günther Noack (3): landlock: Use bit-fields for storing handled layer access masks landlock: Clarify documentation for struct landlock_ruleset_attr landlock: Various documentation improvements Documentation/userspace-api/landlock.rst | 2 +- include/uapi/linux/landlock.h | 66 ++++++++++++++++++-------------- security/landlock/limits.h | 2 - security/landlock/ruleset.c | 4 -- security/landlock/ruleset.h | 24 +++++------- security/landlock/syscalls.c | 17 ++++---- 6 files changed, 56 insertions(+), 59 deletions(-) . Date: Sat, 20 Jul 2024 11:18:03 +0200 From: Thomas Bogendoerfer To: torvalds@linux-foundation.org Cc: linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] MIPS changes for v6.11 The following changes since commit 0d5679a0aae2d8cda72169452c32e5cb88a7ab33: mips: fix compat_sys_lseek syscall (2024-06-21 10:16:34 +0200) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git/ tags/mips_6.11 for you to fetch changes up to bb2d63500b5c8fd1ea425caffe2d44c931fefc6b: MIPS: config: Add ip30_defconfig (2024-07-15 18:17:34 +0200) ---------------------------------------------------------------- - added support for Realtek RTL9302C - added support for Mobileye EyeQ6H - added support for Mobileye EyeQ OLB system controller - improved r4k clocksource - added mode for emulating ieee754 NAN2008 - rework for BMIPS CBR address handling - fixes for Loongson 2K1000 - defconfig updates - cleanups and fixes ---------------------------------------------------------------- Andy Shevchenko (1): MIPS: Alchemy: Switch to use kmemdup_array() Celeste Liu (1): mips: defconfig: drop RT_GROUP_SCHED=y from generic/db1xxx/eyeq5 Chris Packham (8): mips: dts: realtek: use "serial" instead of "uart" in node name mips: dts: realtek: add device_type property to cpu node dt-bindings: vendor-prefixes: Add Cameo Communications dt-bindings: mips: realtek: Add rtl930x-soc compatible dt-bindings: interrupt-controller: realtek,rtl-intc: Add rtl9300-intc mips: select REALTEK_OTTO_TIMER for Realtek platforms mips: generic: add fdt fixup for Realtek reference board mips: dts: realtek: Add RTL9302C board Christian Marangi (3): mips: bmips: rework and cache CBR addr handling dt-bindings: mips: brcm: Document brcm,bmips-cbr-reg property mips: bmips: setup: make CBR address configurable Daniel González Cabanelas (1): mips: bmips: enable RAC on BMIPS4350 Dmitry Torokhov (1): MIPS: Alchemy: switch to use software nodes for GPIOs Dominique Martinet (1): MIPS: Octeron: remove source file executable bit Genjian Zhang (2): MIPS: sgi-ip22: Add prototypes for several functions to header MIPS: ip22-gio: Make ip22_gio_set_64bit() and ip22_gio_init() static Gregory CLEMENT (3): dt-bindings: mips: Add bindings for a new Mobileye SoC EyeQ6H MIPS: mobileye: Add EyeQ6H device tree MIPS: mobileye: Add EyeQ6H support Hauke Mehrtens (1): MIPS: lantiq: improve USB initialization Jeff Johnson (1): crypto: mips/poly1305 - add missing MODULE_DESCRIPTION() macro Jiaxun Yang (29): MIPS: asm/pm.h: Use platform agnostic macros MIPS: select CPU_PM with SUSPEND MIPS: Loongson64: Implement PM suspend for LEFI firmware MIPS: kvm: Declare prototype for kvm_init_loongson_ipi MIPS: Loongson64: Include bootinfo.h in dma.c MIPS: Loongson64: DTS: Fix msi node for ls7a MIPS: Loongson64: DTS: Fix PCIe port nodes for ls7a MIPS: ip30: ip30-console: Add missing include MIPS: Loongson64: Remove memory node for builtin-dtb MIPS: dts: loongson: Fix liointc IRQ polarity MIPS: dts: loongson: Fix ls2k1000-rtc interrupt MIPS: dts: loongson: Fix GMAC phy node MIPS: dts: loongson: Add ISA node MIPS: Loongson64: Test register availability before use platform: mips: cpu_hwmon: Disable driver on unsupported hardware MIPS: Loongson64: reset: Prioritise firmware service MIPS: Loongson64: sleeper: Pass ra and sp as arguments MIPS: Loongson64: env: Hook up Loongsson-2K MIPS: csrc-r4k: Refine rating computation MIPS: csrc-r4k: Apply verification clocksource flags MIPS: csrc-r4k: Select HAVE_UNSTABLE_SCHED_CLOCK if SMP && 64BIT MIPS: csrc-r4k: Don't register as sched_clock if unfit MIPS: sync-r4k: Rework based on x86 tsc_sync MIPS: Implement ieee754 NAN2008 emulation mode MIPS: Fix fallback march for SB1 MIPS: config: Enable MSA and virtualization for MIPS64R6 MIPS: config: generic: Add board-litex MIPS: config: lemote2f: Regenerate defconfig MIPS: config: Add ip30_defconfig Maxime Ripard (1): mips: configs: ci20: Enable DRM_DW_HDMI Paul Burton (2): MIPS: CPS: Add a couple of multi-cluster utility functions MIPS: GIC: Generate redirect block accessors Thomas Bogendoerfer (1): Merge branch 'mips-fixes' into mips-next Théo Lebrun (3): dt-bindings: soc: mobileye: add EyeQ OLB system controller MIPS: mobileye: eyeq5: add OLB system-controller node MAINTAINERS: Mobileye: add OLB drivers and dt-bindings Documentation/admin-guide/kernel-parameters.txt | 4 +- .../interrupt-controller/realtek,rtl-intc.yaml | 20 +- .../devicetree/bindings/mips/brcm/soc.yaml | 24 ++ .../devicetree/bindings/mips/mobileye.yaml | 5 + .../devicetree/bindings/mips/realtek-rtl.yaml | 4 + .../bindings/soc/mobileye/mobileye,eyeq5-olb.yaml | 374 +++++++++++++++++++++ .../devicetree/bindings/vendor-prefixes.yaml | 2 + MAINTAINERS | 5 + arch/mips/Kbuild.platforms | 2 +- arch/mips/Kconfig | 11 +- arch/mips/Makefile | 2 +- arch/mips/alchemy/common/platform.c | 8 +- arch/mips/alchemy/devboards/db1000.c | 80 ++--- arch/mips/bcm47xx/prom.c | 3 + arch/mips/bcm47xx/setup.c | 8 + arch/mips/bcm63xx/prom.c | 3 + arch/mips/bcm63xx/setup.c | 8 + arch/mips/bmips/dma.c | 2 +- arch/mips/bmips/setup.c | 35 +- arch/mips/boot/dts/Makefile | 2 +- arch/mips/boot/dts/loongson/loongson64-2k1000.dtsi | 102 +++--- .../boot/dts/loongson/loongson64g_4core_ls7a.dts | 1 + arch/mips/boot/dts/mobileye/Makefile | 1 + .../{eyeq5-fixed-clocks.dtsi => eyeq5-clocks.dtsi} | 54 +-- arch/mips/boot/dts/mobileye/eyeq5-pins.dtsi | 125 +++++++ arch/mips/boot/dts/mobileye/eyeq5.dtsi | 22 +- arch/mips/boot/dts/mobileye/eyeq6h-epm6.dts | 22 ++ .../boot/dts/mobileye/eyeq6h-fixed-clocks.dtsi | 52 +++ arch/mips/boot/dts/mobileye/eyeq6h-pins.dtsi | 88 +++++ arch/mips/boot/dts/mobileye/eyeq6h.dtsi | 98 ++++++ arch/mips/boot/dts/realtek/Makefile | 1 + .../dts/realtek/cameo-rtl9302c-2x-rtl8224-2xge.dts | 73 ++++ arch/mips/boot/dts/realtek/rtl838x.dtsi | 1 + arch/mips/boot/dts/realtek/rtl83xx.dtsi | 4 +- arch/mips/boot/dts/realtek/rtl930x.dtsi | 79 +++++ arch/mips/configs/ci20_defconfig | 1 + arch/mips/configs/db1xxx_defconfig | 1 - arch/mips/configs/eyeq5_defconfig | 2 +- arch/mips/configs/eyeq6_defconfig | 111 ++++++ arch/mips/configs/generic/64r6.config | 2 + arch/mips/configs/generic/board-litex.config | 8 + arch/mips/configs/generic_defconfig | 1 - arch/mips/configs/ip30_defconfig | 183 ++++++++++ arch/mips/configs/lemote2f_defconfig | 54 ++- arch/mips/crypto/poly1305-glue.c | 1 + arch/mips/generic/Makefile | 1 + arch/mips/generic/board-realtek.c | 79 +++++ arch/mips/include/asm/bmips.h | 1 + arch/mips/include/asm/fpu.h | 15 + arch/mips/include/asm/mach-loongson64/boot_param.h | 2 + arch/mips/include/asm/mips-cps.h | 39 +++ arch/mips/include/asm/mips-gic.h | 50 ++- arch/mips/include/asm/pm.h | 22 +- arch/mips/include/asm/r4k-timer.h | 5 - arch/mips/include/asm/sgi/ip22.h | 3 + arch/mips/kernel/csrc-r4k.c | 24 +- arch/mips/kernel/elf.c | 4 + arch/mips/kernel/fpu-probe.c | 9 +- arch/mips/kernel/mips-cm.c | 37 ++ arch/mips/kernel/smp-bmips.c | 22 +- arch/mips/kernel/smp.c | 2 - arch/mips/kernel/sync-r4k.c | 281 +++++++++++----- arch/mips/kvm/interrupt.h | 4 + arch/mips/kvm/loongson_ipi.c | 2 + arch/mips/kvm/mips.c | 2 - arch/mips/lantiq/xway/sysctrl.c | 20 ++ arch/mips/loongson64/Makefile | 2 +- arch/mips/loongson64/dma.c | 1 + arch/mips/loongson64/env.c | 8 + arch/mips/loongson64/pm.c | 88 +---- arch/mips/loongson64/reset.c | 38 +-- arch/mips/loongson64/sleeper.S | 21 ++ arch/mips/loongson64/smp.c | 23 +- arch/mips/mobileye/Kconfig | 26 ++ arch/mips/mobileye/Platform | 1 + arch/mips/pci/pcie-octeon.c | 0 arch/mips/sgi-ip22/ip22-gio.c | 4 +- arch/mips/sgi-ip22/ip22-int.c | 2 - arch/mips/sgi-ip22/ip22-setup.c | 2 - arch/mips/sgi-ip30/ip30-console.c | 1 + drivers/platform/mips/cpu_hwmon.c | 3 + 81 files changed, 2141 insertions(+), 392 deletions(-) create mode 100644 Documentation/devicetree/bindings/soc/mobileye/mobileye,eyeq5-olb.yaml rename arch/mips/boot/dts/mobileye/{eyeq5-fixed-clocks.dtsi => eyeq5-clocks.dtsi} (88%) create mode 100644 arch/mips/boot/dts/mobileye/eyeq5-pins.dtsi create mode 100644 arch/mips/boot/dts/mobileye/eyeq6h-epm6.dts create mode 100644 arch/mips/boot/dts/mobileye/eyeq6h-fixed-clocks.dtsi create mode 100644 arch/mips/boot/dts/mobileye/eyeq6h-pins.dtsi create mode 100644 arch/mips/boot/dts/mobileye/eyeq6h.dtsi create mode 100644 arch/mips/boot/dts/realtek/cameo-rtl9302c-2x-rtl8224-2xge.dts create mode 100644 arch/mips/boot/dts/realtek/rtl930x.dtsi create mode 100644 arch/mips/configs/eyeq6_defconfig create mode 100644 arch/mips/configs/generic/board-litex.config create mode 100644 arch/mips/configs/ip30_defconfig create mode 100644 arch/mips/generic/board-realtek.c create mode 100644 arch/mips/loongson64/sleeper.S create mode 100644 arch/mips/mobileye/Kconfig mode change 100755 => 100644 arch/mips/pci/pcie-octeon.c -- Crap can work. Given enough thrust pigs will fly, but it's not necessarily a good idea. [ RFC1925, 2.3 ] . Date: Sat, 20 Jul 2024 14:38:26 +0200 From: Miquel Raynal To: Linus Torvalds Cc: linux-mtd@lists.infradead.org, Richard Weinberger , Tudor Ambarus , Vignesh Raghavendra , Frieder Schrempf , Michael Walle , Pratyush Yadav , linux-kernel@vger.kernel.org Subject: [GIT PULL] mtd: Changes for 6.11 Hello Linus, This is the MTD PR for 6.11. Thanks, Miqu=C3=A8l The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/mtd/linux.git tags/mtd/for-= 6.11 for you to fetch changes up to 78a0b13f5744bd270d0c2391973605d9960a402a: Merge tag 'nand/for-6.11' into mtd/next (2024-07-20 14:24:38 +0200) ---------------------------------------------------------------- MTD changes: - Nothing stands out for this merge window, mostly minor fixes, such as module descriptions, the use of debug macros and Makefile improvements. Raw NAND changes; - The Freescale MXC driver has been converted to the newer ->exec_op() interface. The meson driver now supports handling the boot ROM area with very specific ECC needs. Support for the iMX8QXP has been added to the GPMI driver. The lpx32xx driver now can get the DMA channels using DT entries. The Qcom binding has been improved to be more future proof by Rob. And then there is the usual load of misc and minor changes. SPI-NAND changes: - The Macronix vendor driver has been improved to support an extended ID to avoid conflicting with older devices after an ID reuse issue. SPI NOR changes: - Drop support for Xilinx S3AN flashes. These flashes are for the very old Xilinx Spartan 3 FPGAs and they need some awkward code in the core to support. Drop support for these flashes, along with the special handling we needed for them in the core like non-power-of-2 page size handling and the .setup() callback. - Fix regression for old w25q128 flashes without SFDP tables. Commit 83e824a4a595 ("mtd: spi-nor: Correct flags for Winbond w25q128") dropped support for such devices under the assumption that they aren't being used anymore. Users have now surfaced [0] so fix the regression by supporting both kind of devices. - Core cleanups including removal of SPI_NOR_NO_FR flag and simplification of spi_nor_get_flash_info(). [0] https://lore.kernel.org/r/CALxbwRo_-9CaJmt7r7ELgu+vOcgk=3DxZcGHobnKf=3D= oT2=3Du4d4aA@mail.gmail.com/ ---------------------------------------------------------------- Andy Shevchenko (2): mtd: cfi: Get rid of redundant 'else' mtd: physmap: Use *-y instead of *-objs in Makefile Arnd Bergmann (1): mtd: make mtd_test.c a separate module Arseniy Krasnov (3): dt-bindings: mtd: amlogic,meson-nand: support fields for boot ROM code mtd: rawnand: meson: refactor use of 'meson_nfc_cmd_access()' mtd: rawnand: meson: read/write access for boot ROM pages Cheng Ming Lin (2): mtd: spinand: macronix: Add support for reading Device ID 2 mtd: spinand: macronix: Add support for serial NAND flash Cs=C3=B3k=C3=A1s, Bence (1): mtd: cmdlinepart: Replace `dbg()` macro with `pr_debug()` Dr. David Alan Gilbert (1): mtd: rawnand: cadence: remove unused struct 'ecc_info' Frank Li (2): dt-bindings: mtd: gpmi-nand: Add 'fsl,imx8qxp-gpmi-nand' compatible s= tring mtd: rawnand: gpmi: add 'support_edo_timing' in gpmi_devdata Han Xu (1): mtd: rawnand: gpmi: add iMX8QXP support. Jeff Johnson (1): mtd: add missing MODULE_DESCRIPTION() macros Michael Walle (6): mtd: spi-nor: Remove support for Xilinx S3AN flashes mtd: spi-nor: get rid of non-power-of-2 page size handling mtd: spi-nor: remove .setup() callback mtd: spi-nor: get rid of SPI_NOR_NO_FR mtd: spi-nor: simplify spi_nor_get_flash_info() mtd: spi-nor: winbond: fix w25q128 regression Miquel Raynal (2): Merge tag 'spi-nor/for-6.11' into mtd/next Merge tag 'nand/for-6.11' into mtd/next Piotr Wojtaszczyk (2): mtd: rawnand: lpx32xx: Request DMA channels using DT entries mtd: rawnand: lpx32xx: Fix dma_request_chan() error checks Rob Herring (Arm) (1): dt-bindings: mtd: qcom,nandc: Define properties at top-level Sascha Hauer (3): mtd: rawnand: mxc: separate page read from ecc calc mtd: rawnand: mxc: implement exec_op mtd: rawnand: mxc: support software ECC Wolfram Sang (2): mtd: rawnand: mxc: use 'time_left' variable with wait_for_completion_= timeout() mtd: rawnand: intel: use 'time_left' variable with wait_for_completio= n_timeout() Documentation/devicetree/bindings/mtd/amlogic,meson-nand.yaml | 18 +++ Documentation/devicetree/bindings/mtd/gpmi-nand.yaml | 22 +++ Documentation/devicetree/bindings/mtd/qcom,nandc.yaml | 38 ++--- drivers/mtd/chips/cfi_cmdset_0020.c | 1 + drivers/mtd/chips/cfi_util.c | 1 + drivers/mtd/maps/Makefile | 11 +- drivers/mtd/maps/map_funcs.c | 1 + drivers/mtd/nand/raw/cadence-nand-controller.c | 5 - drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.c | 20 ++- drivers/mtd/nand/raw/gpmi-nand/gpmi-nand.h | 6 +- drivers/mtd/nand/raw/intel-nand-controller.c | 6 +- drivers/mtd/nand/raw/lpc32xx_mlc.c | 26 ++-- drivers/mtd/nand/raw/lpc32xx_slc.c | 26 ++-- drivers/mtd/nand/raw/meson_nand.c | 86 ++++++= +---- drivers/mtd/nand/raw/mxc_nand.c | 708 ++++++= +++++++++++++++++++++++++++++++++++++--------------------------------------= ------- drivers/mtd/nand/spi/macronix.c | 64 ++++++= -- drivers/mtd/parsers/brcm_u-boot.c | 1 + drivers/mtd/parsers/cmdlinepart.c | 18 +-- drivers/mtd/parsers/tplink_safeloader.c | 1 + drivers/mtd/spi-nor/Makefile | 1 - drivers/mtd/spi-nor/core.c | 206 ++++++= ++++---------------- drivers/mtd/spi-nor/core.h | 12 -- drivers/mtd/spi-nor/everspin.c | 19 ++- drivers/mtd/spi-nor/winbond.c | 2 + drivers/mtd/spi-nor/xilinx.c | 169 ------= --------------- drivers/mtd/tests/Makefile | 34 ++--- drivers/mtd/tests/mtd_test.c | 9 ++ include/linux/mtd/cfi.h | 32 ++-- 28 files changed, 724 insertions(+), 819 deletions(-) delete mode 100644 drivers/mtd/spi-nor/xilinx.c . Date: Sat, 20 Jul 2024 06:35:08 -0700 (PDT) From: Palmer Dabbelt To: Linus Torvalds Subject: [GIT PULL] RISC-V Patches for the 6.11 Merge Window, Part 1 The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/riscv/linux.git tags/riscv-for-linus-6.11-mw1 for you to fetch changes up to 93b63f68d00a0483b450b446e2ea5386a1b94213: riscv: lib: relax assembly constraints in hweight (2024-07-15 08:46:46 -0700) ---------------------------------------------------------------- RISC-V Patches for the 6.11 Merge Window, Part 1 * Support for various new ISA extensions: * The Zve32[xf] and Zve64[xfd] sub-extensios of the vector extension. * Zimop and Zcmop for may-be-operations. * The Zca, Zcf, Zcd and Zcb sub-extensions of the C extension. * Zawrs, * riscv,cpu-intc is now dtschema. * A handful of performance improvements and cleanups to text patching. * Support for memory hot{,un}plug * The highest user-allocatable virtual address is now visible in hwprobe. ---------------------------------------------------------------- Sorry this is a bit late, but I got caught up in a handful of build issues from other trees that cropped up during the merge window. Looks like that's mostly settling down, as usual I've got the fixed stacked up locally until things get sorted out. Aside from that everything looks clean on my end. I have one merge conflict: some of the in-flight text patching optimizations/cleanups ended up conflicting with the instruction tearing bugs we found during the last release cycle. As a result the fences are now inside the patching functions, which while slow should at least be correct. Here's my resolution of the actual diff, we could delete the functions but with more incoming I figured it was best to avoid sticking extra diff in the merge: diff --cc arch/riscv/kernel/patch.c index ab03732d06c4,5b3f6406e8c4..000000000000 --- a/arch/riscv/kernel/patch.c +++ b/arch/riscv/kernel/patch.c @@@ -200,12 -186,13 +202,7 @@@ NOKPROBE_SYMBOL(patch_insn_set) int patch_text_set_nosync(void *addr, u8 c, size_t len) { - u32 *tp = addr; -- int ret; -- - ret = patch_insn_set(tp, c, len); - ret = patch_insn_set(addr, c, len); - if (!ret) - flush_icache_range((uintptr_t)addr, (uintptr_t)addr + len); -- -- return ret; ++ return patch_insn_set(addr, c, len); } NOKPROBE_SYMBOL(patch_text_set_nosync); @@@ -232,12 -222,13 +232,7 @@@ NOKPROBE_SYMBOL(patch_insn_write) int patch_text_nosync(void *addr, const void *insns, size_t len) { - u32 *tp = addr; -- int ret; -- - ret = patch_insn_write(tp, insns, len); - ret = patch_insn_write(addr, insns, len); - if (!ret) - flush_icache_range((uintptr_t)addr, (uintptr_t)addr + len); -- -- return ret; ++ return patch_insn_write(addr, insns, len); } NOKPROBE_SYMBOL(patch_text_nosync); ---------------------------------------------------------------- Alexandre Ghiti (2): riscv: Implement pte_accessible() riscv: Improve sbi_ecall() code generation by reordering arguments Andrew Jones (5): riscv: Provide a definition for 'pause' dt-bindings: riscv: Add Zawrs ISA extension description riscv: hwprobe: export Zawrs ISA extension KVM: riscv: Support guest wrs.nto KVM: riscv: selftests: Add Zawrs extension to get-reg-list test Andy Chiu (8): riscv: vector: add a comment when calling riscv_setup_vsize() riscv: smp: fail booting up smp if inconsistent vlen is detected riscv: cpufeature: call match_isa_ext() for single-letter extensions dt-bindings: riscv: add Zve32[xf] Zve64[xfd] ISA extension description riscv: cpufeature: add zve32[xf] and zve64[xfd] isa detection riscv: hwprobe: add zve Vector subextensions into hwprobe interface riscv: vector: adjust minimum Vector requirement to ZVE32X selftest: run vector prctl test for ZVE32X Björn Töpel (11): riscv: mm: Properly forward vmemmap_populate() altmap parameter riscv: mm: Pre-allocate vmemmap/direct map/kasan PGD entries riscv: mm: Change attribute from __init to __meminit for page functions riscv: mm: Refactor create_linear_mapping_range() for memory hot add riscv: mm: Add pfn_to_kaddr() implementation riscv: mm: Add memory hotplugging support riscv: mm: Take memory hotplug read-lock during kernel page table dump riscv: Enable memory hotplugging for RISC-V virtio-mem: Enable virtio-mem for RISC-V riscv: mm: Add support for ZONE_DEVICE riscv: Enable DAX VMEMMAP optimization Christoph Müllner (1): riscv: Add Zawrs support for spinlocks Clément Léger (17): dt-bindings: riscv: add Zimop ISA extension description riscv: add ISA extension parsing for Zimop riscv: hwprobe: export Zimop ISA extension RISC-V: KVM: Allow Zimop extension for Guest/VM KVM: riscv: selftests: Add Zimop extension to get-reg-list test dt-bindings: riscv: add Zca, Zcf, Zcd and Zcb ISA extension description riscv: add ISA extensions validation callback riscv: add ISA parsing for Zca, Zcf, Zcd and Zcb riscv: hwprobe: export Zca, Zcf, Zcd and Zcb ISA extensions RISC-V: KVM: Allow Zca, Zcf, Zcd and Zcb extensions for Guest/VM KVM: riscv: selftests: Add some Zc* extensions to get-reg-list test dt-bindings: riscv: add Zcmop ISA extension description riscv: add ISA extension parsing for Zcmop riscv: hwprobe: export Zcmop ISA extension RISC-V: KVM: Allow Zcmop extension for Guest/VM KVM: riscv: selftests: Add Zcmop extension to get-reg-list test riscv: hwprobe: export highest virtual userspace address Haibo Xu (1): riscv: dmi: Add SMBIOS/DMI support Kanak Shilledar (2): dt-bindings: interrupt-controller: riscv,cpu-intc: convert to dtschema dt-bindings: riscv: cpus: add ref to interrupt-controller Palmer Dabbelt (6): Merge patch series "Support Zve32[xf] and Zve64[xfd] Vector subextensions" Merge patch series "dt-bindings: interrupt-controller: riscv,cpu-intc" Merge patch series "riscv: Various text patching improvements" Merge patch series "Add support for a few Zc* extensions, Zcmop and Zimop" Merge patch series "riscv: Memory Hot(Un)Plug support" Merge patch series "riscv: Apply Zawrs when available" Qingfang Deng (1): riscv: lib: relax assembly constraints in hweight Samuel Holland (8): riscv: jump_label: Batch icache maintenance riscv: jump_label: Simplify assembly syntax riscv: kprobes: Use patch_text_nosync() for insn slots riscv: Simplify text patching loops riscv: Pass patch_text() the length in bytes riscv: Use offset_in_page() in text patching functions riscv: Remove extra variable in patch_text_nosync() riscv: Add tracepoints for SBI calls and returns Xiao Wang (1): riscv: Optimize crc32 with Zbc extension yang.zhang (1): riscv: set trap vector earlier Documentation/arch/riscv/hwprobe.rst | 50 +++ .../interrupt-controller/riscv,cpu-intc.txt | 52 --- .../interrupt-controller/riscv,cpu-intc.yaml | 73 +++++ Documentation/devicetree/bindings/riscv/cpus.yaml | 21 +- .../devicetree/bindings/riscv/extensions.yaml | 132 ++++++++ arch/riscv/Kconfig | 59 +++- arch/riscv/Makefile | 3 - arch/riscv/include/asm/arch_hweight.h | 8 +- arch/riscv/include/asm/barrier.h | 45 ++- arch/riscv/include/asm/cmpxchg.h | 58 ++++ arch/riscv/include/asm/cpufeature.h | 1 + arch/riscv/include/asm/dmi.h | 24 ++ arch/riscv/include/asm/hwcap.h | 12 + arch/riscv/include/asm/hwprobe.h | 2 +- arch/riscv/include/asm/insn-def.h | 4 + arch/riscv/include/asm/jump_label.h | 4 +- arch/riscv/include/asm/kasan.h | 4 +- arch/riscv/include/asm/kvm_host.h | 1 + arch/riscv/include/asm/mmu.h | 4 +- arch/riscv/include/asm/page.h | 5 + arch/riscv/include/asm/patch.h | 2 +- arch/riscv/include/asm/pgtable-64.h | 20 ++ arch/riscv/include/asm/pgtable-bits.h | 1 + arch/riscv/include/asm/pgtable.h | 32 +- arch/riscv/include/asm/processor.h | 6 + arch/riscv/include/asm/sbi.h | 10 +- arch/riscv/include/asm/trace.h | 54 ++++ arch/riscv/include/asm/vdso/processor.h | 8 +- arch/riscv/include/asm/vector.h | 10 +- arch/riscv/include/uapi/asm/hwprobe.h | 13 + arch/riscv/include/uapi/asm/kvm.h | 7 + arch/riscv/kernel/cpufeature.c | 328 +++++++++++++------ arch/riscv/kernel/head.S | 22 +- arch/riscv/kernel/jump_label.c | 16 +- arch/riscv/kernel/patch.c | 69 ++-- arch/riscv/kernel/probes/kprobes.c | 19 +- arch/riscv/kernel/sbi.c | 17 +- arch/riscv/kernel/smpboot.c | 14 +- arch/riscv/kernel/sys_hwprobe.c | 22 +- arch/riscv/kernel/vector.c | 5 +- arch/riscv/kvm/vcpu.c | 1 + arch/riscv/kvm/vcpu_insn.c | 15 + arch/riscv/kvm/vcpu_onereg.c | 14 + arch/riscv/lib/Makefile | 1 + arch/riscv/lib/crc32.c | 294 +++++++++++++++++ arch/riscv/lib/uaccess.S | 2 +- arch/riscv/mm/init.c | 347 ++++++++++++++++++--- arch/riscv/mm/ptdump.c | 3 + arch/riscv/net/bpf_jit_comp64.c | 7 +- drivers/firmware/efi/riscv-runtime.c | 13 + drivers/virtio/Kconfig | 2 +- include/linux/crc32.h | 3 + tools/testing/selftests/kvm/riscv/get-reg-list.c | 28 ++ .../testing/selftests/riscv/vector/vstate_prctl.c | 6 +- 54 files changed, 1644 insertions(+), 329 deletions(-) delete mode 100644 Documentation/devicetree/bindings/interrupt-controller/riscv,cpu-intc.txt create mode 100644 Documentation/devicetree/bindings/interrupt-controller/riscv,cpu-intc.yaml create mode 100644 arch/riscv/include/asm/dmi.h create mode 100644 arch/riscv/include/asm/trace.h create mode 100644 arch/riscv/lib/crc32.c . Date: Sun, 21 Jul 2024 00:17:40 +0200 From: Linus Walleij To: Linus Torvalds Cc: "open list:GPIO SUBSYSTEM" , linux-kernel Subject: [GIT PULL] pin control changes for v6.11 Hi Linus, this is the bulk of pin control changes for the v6.11 kernel cycle. Some new drivers is the main part, the rest is cleanups and nonurgent fixes. New drivers listed in the signed tag. Nothing much special about this, no core changes this time. Please pull it in! Yours, Linus Walleij The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0= : Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-pinctrl.git tags/pinctrl-v6.11-1 for you to fetch changes up to 11eaac6e8e72001c28d2043eb160736187b7977d: Merge tag 'renesas-pinctrl-for-v6.11-tag3' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into devel (2024-07-05 12:08:48 +0200) ---------------------------------------------------------------- Pin control bulk changes for the v6.11 kernel series: Core changes: None. New drivers: - Renesas RZ/V2H(P) SoC - NXP Freescale i.MX91 SoC - Nuvoton MA35D1 SoC - Qualcomm PMC8380, SM4250, SM4250 LPI Enhancements: - A slew of scoped-based simplifications of of_node_put(). ---------------------------------------------------------------- Alexey Klimov (1): pinctrl: qcom: lpass-lpi: increase MAX_NR_GPIO to 32 Andrew Jeffery (3): dt-bindings: pinctrl: aspeed: Use block syntax for function and group= s dt-bindings: pinctrl: aspeed,ast2500-pinctrl: Describe SGPM dt-bindings: pinctrl: aspeed,ast2600-pinctrl: Describe I3C, USB Andy Shevchenko (11): pinctrl: berlin: Make use of struct pinfunction pinctrl: equilibrium: Make use of struct pinfunction pinctrl: ingenic: Provide a helper macro INGENIC_PIN_FUNCTION() pinctrl: mediatek: moore: Provide a helper macro PINCTRL_PIN_FUNCTION= () pinctrl: pinmux: Add a convenient define PINCTRL_FUNCTION_DESC() pinctrl: pinmux: Embed struct pinfunction into struct function_desc pinctrl: imx: Convert to use func member pinctrl: ingenic: Convert to use func member pinctrl: keembay: Convert to use func member pinctrl: mediatek: moore: Convert to use func member pinctrl: pinmux: Remove unused members from struct function_desc Chen Ni (1): pinctrl: mlxbf3: Fix return value check for devm_platform_ioremap_res= ource Claudiu Beznea (1): pinctrl: renesas: rzg2l: Use spin_{lock,unlock}_irq{save,restore} Dan Carpenter (1): pinctrl: nuvoton: ma35d1: Fix an IS_ERR() vs NULL check Dmitry Yashin (1): pinctrl: rockchip: update rk3308 iomux routes Geert Uytterhoeven (13): pinctrl: renesas: rzn1: Use for_each_child_of_node_scoped() pinctrl: renesas: r8a779g0: Fix CANFD5 suffix pinctrl: renesas: r8a779g0: Fix FXR_TXEN[AB] suffixes pinctrl: renesas: r8a779g0: Fix (H)SCIF1 suffixes pinctrl: renesas: r8a779g0: Fix (H)SCIF3 suffixes pinctrl: renesas: r8a779g0: Fix IRQ suffixes pinctrl: renesas: r8a779g0: FIX PWM suffixes pinctrl: renesas: r8a779g0: Fix TCLK suffixes pinctrl: renesas: r8a779g0: Fix TPU suffixes pinctrl: renesas: r8a779h0: Add AVB MII pins and groups pinctrl: renesas: r8a779g0: Remove unneeded separators pinctrl: renesas: r8a779g0: Add INTC-EX pins, groups, and function pinctrl: renesas: r8a779h0: Remove unneeded separators Inochi Amaoto (1): dt-bindings: pinctrl: pinctrl-single: fix schmitt related properties Jacky Huang (3): dt-bindings: reset: Add syscon to nuvoton ma35d1 system-management no= de dt-bindings: pinctrl: Document nuvoton ma35d1 pin control pinctrl: nuvoton: Add ma35d1 pinctrl and GPIO driver Jeff Johnson (1): pinctrl: add missing MODULE_DESCRIPTION() macros Konrad Dybcio (2): dt-bindings: pinctrl: qcom,pmic-gpio: Document PMC8380 pinctrl: qcom: spmi: Add PMC8380 Lad Prabhakar (19): dt-bindings: pinctrl: renesas,rzg2l-pinctrl: Remove the check from the object pinctrl: renesas: rzg2l: Allow more bits for pin configuration pinctrl: renesas: rzg2l: Drop struct rzg2l_variable_pin_cfg pinctrl: renesas: rzg2l: Enable variable configuration for all pinctrl: renesas: rzg2l: Validate power registers for SD and ETH pinctrl: renesas: rzg2l: Add function pointer for PFC register lockin= g pinctrl: renesas: rzg2l: Add function pointer for PMC register write pinctrl: renesas: rzg2l: Add function pointers for OEN register acces= s pinctrl: renesas: rzg2l: Add support to configure slew-rate pinctrl: renesas: rzg2l: Add support for pull-up/down pinctrl: renesas: rzg2l: Pass pincontrol device to pinconf_generic_parse_dt_config() pinctrl: renesas: rzg2l: Add support for custom parameters pinctrl: renesas: rzg2l: Acquire lock in rzg2l_pinctrl_pm_setup_pfc() dt-bindings: pinctrl: renesas: Document RZ/V2H(P) SoC pinctrl: renesas: rzg2l: Add support for RZ/V2H SoC pinctrl: renesas: rzg2l: Update PIN_CFG_MASK() macro to be 32-bit wid= e pinctrl: renesas: rzg2l: Adjust bit masks for PIN_CFG_VARIABLE to use BIT(62) pinctrl: renesas: rzg2l: Move RZG2L_SINGLE_PIN definition to top of the file pinctrl: renesas: rzg2l: Reorganize variable configuration macro Linus Walleij (4): Merge tag 'renesas-pinctrl-for-v6.11-tag1' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into devel pinctrl: freescale: Select missing features Merge tag 'renesas-pinctrl-for-v6.11-tag2-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into devel Merge tag 'renesas-pinctrl-for-v6.11-tag3' of git://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers into devel L=C3=A9o DUBOIN (2): pinctrl: core: take into account the pins array in pinctrl_pins_show(= ) pinctrl: core: reset gpio_device in loop in pinctrl_pins_show() Micha=C5=82 Miros=C5=82aw (1): pinctrl: renesas: sh73a0: Use rdev_get_drvdata() Nathan Chancellor (1): pinctrl: keembay: Fix func conversion in keembay_build_functions() Nirmala Devi Mal Nadar (1): pinctrl: pinctrl-tps6594: make tps65224_muxval_remap and tps6594_muxval_remap as static to fix sparse warning Nishanth Menon (1): dt-bindings: pinctrl: pinctrl-single: Fix pinctrl-single,gpio-range description Patrick Rudolph (5): pinctrl: cy8c95x0: Use single I2C lock pinctrl: cy8c95x0: Use regmap ranges pinctrl: cy8c95x0: Use REGCACHE_MAPLE pinctrl: cy8c95x0: Use cleanup.h pinctrl: cy8c95x0: Update cache modification Paul Barker (3): pinctrl: renesas: rzg2l: Clarify OEN read/write support pinctrl: renesas: rzg2l: Clean up and refactor OEN read/write functio= ns pinctrl: renesas: rzg2l: Support output enable on RZ/G2L Peng Fan (24): pinctrl: renesas: Use scope based of_node_put() cleanups dt-bindings: pinctrl: imx: Support i.MX91 IOMUXC pinctrl: imx: Add pinctrl driver support for i.MX91 pinctrl: stm32: Use scope based of_node_put() cleanups pinctrl: st: Use scope based of_node_put() cleanups dt-bindings: firmware: arm,scmi: Add properties for i.MX95 Pinctrl OEM extensions pinctrl: scmi: add blocklist pinctrl: imx: support SCMI pinctrl protocol for i.MX95 pinctrl: tegra: Use scope based of_node_put() cleanups pinctrl: starfive: Use scope based of_node_put() cleanups pinctrl: sprd: Use scope based of_node_put() cleanups pinctrl: spear: Use scope based of_node_put() cleanups pinctrl: rockchip: Use scope based of_node_put() cleanups pinctrl: at91: Use scope based of_node_put() cleanups pinctrl: s32cc: Use scope based of_node_put() cleanups pinctrl: nomadik: Use scope based of_node_put() cleanups pinctrl: mediatek: Use scope based of_node_put() cleanups pinctrl: bcm: bcm63xx: Use scope based of_node_put() cleanups pinctrl: pinconf-generic: Use scope based of_node_put() cleanups pinctrl: freescale: mxs: Fix refcount of child pinctrl: k210: Use scope based of_node_put() cleanups pinctrl: ti: iodelay: Use scope based of_node_put() cleanups pinctrl: equilibrium: Use scope based of_node_put() cleanups pinctrl: freescale: Use scope based of_node_put() cleanups Potin Lai (2): dt-bindings: pinctrl: aspeed,ast2600-pinctrl: add NCSI groups pinctrl: aspeed-g6: Add NCSI pin group config Richard Acayan (1): pinctrl: qcom: sdm670: add pdc wakeirq map Sean Anderson (2): dt-bindings: pinctrl: xilinx: Add support for function with pins pinctrl: zynqmp: Support muxing individual pins Srinivas Kandagatla (2): dt-bindings: pinctrl: qcom: Add SM4250 pinctrl pinctrl: qcom: Introduce SM4250 LPI pinctrl driver Stefan Wahren (1): pinctrl: bcm2835: Use string_choices API instead of ternary operator Swati Agarwal (1): pinctrl: pinctrl-zynqmp: Use pin numbers stored in pin descriptor Tomer Maimon (1): dt-bindings: pinctrl: npcm8xx: add missing pin group and mux function Weihao Li (1): pinctrl: ralink: mt76x8: fix pinmux function Yang Yingliang (3): pinctrl: core: fix possible memory leak when pinctrl_enable() fails pinctrl: single: fix possible memory leak when pinctrl_enable() fails pinctrl: ti: ti-iodelay: fix possible memory leak when pinctrl_enable() fails .../devicetree/bindings/firmware/arm,scmi.yaml | 4 +- .../bindings/firmware/nxp,imx95-scmi-pinctrl.yaml | 53 + .../bindings/pinctrl/aspeed,ast2400-pinctrl.yaml | 169 +- .../bindings/pinctrl/aspeed,ast2500-pinctrl.yaml | 188 +- .../bindings/pinctrl/aspeed,ast2600-pinctrl.yaml | 514 +++++- ...sl,imx93-pinctrl.yaml =3D> fsl,imx9-pinctrl.yaml} | 8 +- .../bindings/pinctrl/nuvoton,ma35d1-pinctrl.yaml | 178 ++ .../bindings/pinctrl/nuvoton,npcm845-pinctrl.yaml | 22 +- .../bindings/pinctrl/pinctrl-single.yaml | 17 +- .../bindings/pinctrl/qcom,pmic-gpio.yaml | 2 + .../pinctrl/qcom,sm4250-lpass-lpi-pinctrl.yaml | 118 ++ .../bindings/pinctrl/renesas,rzg2l-pinctrl.yaml | 52 +- .../bindings/pinctrl/xlnx,zynqmp-pinctrl.yaml | 349 ++-- .../bindings/reset/nuvoton,ma35d1-reset.yaml | 3 +- drivers/pinctrl/aspeed/pinctrl-aspeed-g6.c | 10 +- drivers/pinctrl/bcm/pinctrl-bcm2835.c | 5 +- drivers/pinctrl/bcm/pinctrl-bcm4908.c | 1 + drivers/pinctrl/bcm/pinctrl-bcm63xx.c | 4 +- drivers/pinctrl/berlin/berlin.c | 21 +- drivers/pinctrl/berlin/berlin.h | 6 - drivers/pinctrl/core.c | 30 +- drivers/pinctrl/core.h | 2 +- drivers/pinctrl/freescale/Kconfig | 18 + drivers/pinctrl/freescale/Makefile | 2 + drivers/pinctrl/freescale/pinctrl-imx-scmi.c | 357 ++++ drivers/pinctrl/freescale/pinctrl-imx.c | 39 +- drivers/pinctrl/freescale/pinctrl-imx1-core.c | 16 +- drivers/pinctrl/freescale/pinctrl-imx91.c | 271 +++ drivers/pinctrl/freescale/pinctrl-mxs.c | 18 +- drivers/pinctrl/mediatek/pinctrl-moore.c | 10 +- drivers/pinctrl/mediatek/pinctrl-moore.h | 6 + drivers/pinctrl/mediatek/pinctrl-mt7622.c | 32 +- drivers/pinctrl/mediatek/pinctrl-mt7623.c | 42 +- drivers/pinctrl/mediatek/pinctrl-mt7629.c | 20 +- drivers/pinctrl/mediatek/pinctrl-mt76x8.c | 88 +- drivers/pinctrl/mediatek/pinctrl-mt7981.c | 34 +- drivers/pinctrl/mediatek/pinctrl-mt7986.c | 24 +- drivers/pinctrl/mediatek/pinctrl-mtk-common.c | 4 +- drivers/pinctrl/mediatek/pinctrl-paris.c | 4 +- drivers/pinctrl/meson/pinctrl-meson-a1.c | 1 + drivers/pinctrl/meson/pinctrl-meson-axg-pmx.c | 1 + drivers/pinctrl/meson/pinctrl-meson-axg.c | 1 + drivers/pinctrl/meson/pinctrl-meson-g12a.c | 1 + drivers/pinctrl/meson/pinctrl-meson-gxbb.c | 1 + drivers/pinctrl/meson/pinctrl-meson-gxl.c | 1 + drivers/pinctrl/meson/pinctrl-meson-s4.c | 1 + drivers/pinctrl/meson/pinctrl-meson.c | 1 + drivers/pinctrl/meson/pinctrl-meson8-pmx.c | 1 + drivers/pinctrl/nomadik/pinctrl-abx500.c | 4 +- drivers/pinctrl/nomadik/pinctrl-nomadik.c | 4 +- drivers/pinctrl/nuvoton/Kconfig | 19 + drivers/pinctrl/nuvoton/Makefile | 2 + drivers/pinctrl/nuvoton/pinctrl-ma35.c | 1187 +++++++++++++ drivers/pinctrl/nuvoton/pinctrl-ma35.h | 52 + drivers/pinctrl/nuvoton/pinctrl-ma35d1.c | 1799 ++++++++++++++++= ++++ drivers/pinctrl/nxp/pinctrl-s32cc.c | 31 +- drivers/pinctrl/pinconf-generic.c | 7 +- drivers/pinctrl/pinctrl-at91-pio4.c | 7 +- drivers/pinctrl/pinctrl-at91.c | 14 +- drivers/pinctrl/pinctrl-cy8c95x0.c | 212 +-- drivers/pinctrl/pinctrl-equilibrium.c | 45 +- drivers/pinctrl/pinctrl-equilibrium.h | 12 - drivers/pinctrl/pinctrl-ingenic.c | 707 ++++---- drivers/pinctrl/pinctrl-k210.c | 7 +- drivers/pinctrl/pinctrl-keembay.c | 24 +- drivers/pinctrl/pinctrl-mcp23s08.c | 1 + drivers/pinctrl/pinctrl-mcp23s08_i2c.c | 1 + drivers/pinctrl/pinctrl-mcp23s08_spi.c | 1 + drivers/pinctrl/pinctrl-mlxbf3.c | 12 +- drivers/pinctrl/pinctrl-rockchip.c | 28 +- drivers/pinctrl/pinctrl-scmi.c | 9 + drivers/pinctrl/pinctrl-single.c | 7 +- drivers/pinctrl/pinctrl-st.c | 37 +- drivers/pinctrl/pinctrl-tb10x.c | 1 + drivers/pinctrl/pinctrl-tps6594.c | 4 +- drivers/pinctrl/pinctrl-zynqmp.c | 85 +- drivers/pinctrl/pinmux.c | 19 +- drivers/pinctrl/pinmux.h | 19 +- drivers/pinctrl/qcom/Kconfig | 9 + drivers/pinctrl/qcom/Makefile | 1 + drivers/pinctrl/qcom/pinctrl-lpass-lpi.c | 2 +- drivers/pinctrl/qcom/pinctrl-sdm670.c | 19 + drivers/pinctrl/qcom/pinctrl-sm4250-lpass-lpi.c | 236 +++ drivers/pinctrl/qcom/pinctrl-spmi-gpio.c | 1 + drivers/pinctrl/renesas/pfc-r8a779g0.c | 830 +++++---- drivers/pinctrl/renesas/pfc-r8a779h0.c | 82 +- drivers/pinctrl/renesas/pfc-sh73a0.c | 4 +- drivers/pinctrl/renesas/pinctrl-rza1.c | 14 +- drivers/pinctrl/renesas/pinctrl-rzg2l.c | 913 +++++++--- drivers/pinctrl/renesas/pinctrl-rzn1.c | 26 +- drivers/pinctrl/renesas/pinctrl-rzv2m.c | 7 +- drivers/pinctrl/renesas/pinctrl.c | 7 +- drivers/pinctrl/spear/pinctrl-spear.c | 13 +- drivers/pinctrl/sprd/pinctrl-sprd.c | 14 +- drivers/pinctrl/starfive/pinctrl-starfive-jh7100.c | 27 +- drivers/pinctrl/starfive/pinctrl-starfive-jh7110.c | 18 +- drivers/pinctrl/stm32/pinctrl-stm32.c | 4 +- drivers/pinctrl/tegra/pinctrl-tegra-xusb.c | 7 +- drivers/pinctrl/tegra/pinctrl-tegra.c | 4 +- drivers/pinctrl/ti/pinctrl-ti-iodelay.c | 42 +- 100 files changed, 7428 insertions(+), 1959 deletions(-) create mode 100644 Documentation/devicetree/bindings/firmware/nxp,imx95-scmi-pinctrl.yaml rename Documentation/devicetree/bindings/pinctrl/{fsl,imx93-pinctrl.yaml =3D> fsl,imx9-pinctrl.yaml} (93%) create mode 100644 Documentation/devicetree/bindings/pinctrl/nuvoton,ma35d1-pinctrl.yaml create mode 100644 Documentation/devicetree/bindings/pinctrl/qcom,sm4250-lpass-lpi-pinctrl.yam= l create mode 100644 drivers/pinctrl/freescale/pinctrl-imx-scmi.c create mode 100644 drivers/pinctrl/freescale/pinctrl-imx91.c create mode 100644 drivers/pinctrl/nuvoton/pinctrl-ma35.c create mode 100644 drivers/pinctrl/nuvoton/pinctrl-ma35.h create mode 100644 drivers/pinctrl/nuvoton/pinctrl-ma35d1.c create mode 100644 drivers/pinctrl/qcom/pinctrl-sm4250-lpass-lpi.c . Date: Sun, 21 Jul 2024 14:48:37 -0500 From: Steve French To: Linus Torvalds Cc: LKML , David Howells , CIFS Subject: [GIT PULL] smb3 client fixes Please pull the following changes since commit 0c3836482481200ead7b416ca80c68a29cfdaabd: Linux 6.10 (2024-07-14 15:43:32 -0700) are available in the Git repository at: git://git.samba.org/sfrench/cifs-2.6.git tags/6.11-rc-part1-smb3-client-fixes for you to fetch changes up to a07d38afd15281c42613943a9a715c3ba07c21e6: cifs: Fix missing fscache invalidation (2024-07-20 13:55:29 -0500) ---------------------------------------------------------------- six smb3 client fixes, most for stable including important netfs related fixes - various netfs related fixes for cifs addressing some regressions in 6.10 (e.g. generic/708 and some multichannel crediting related issues) - fix for a noisy log message on copy_file_range - add trace point for read/write credits ---------------------------------------------------------------- David Howells (5): cifs: Fix server re-repick on subrequest retry cifs: Fix missing error code set cifs: Fix setting of zero_point after DIO write cifs: Add a tracepoint to track credits involved in R/W requests cifs: Fix missing fscache invalidation Steve French (1): cifs: fix noisy message on copy_file_range fs/smb/client/cifsfs.c | 2 +- fs/smb/client/cifsglob.h | 17 +++++++++------- fs/smb/client/file.c | 53 ++++++++++++++++++++++++++++++++++++++++++++----- fs/smb/client/smb1ops.c | 2 +- fs/smb/client/smb2ops.c | 42 ++++++++++++++++++++++++++++++++++----- fs/smb/client/smb2pdu.c | 43 +++++++++++++++++++++++++++++++++------- fs/smb/client/trace.h | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++- fs/smb/client/transport.c | 8 ++++---- 8 files changed, 191 insertions(+), 31 deletions(-) -- Thanks, Steve . Date: Sun, 21 Jul 2024 14:54:15 -0700 From: Andrew Morton To: Linus Torvalds Cc: linux-mm@kvack.org, mm-commits@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] MM updates for 6.11-rc1 Linus, please pull this cycle's MM updates, thanks. Conflicts which I saw during a test merge, along with their linux-next resolutions are: arch/powerpc/mm/nohash/Makefile, vs powerpc tree: https://lkml.kernel.org/r/20240703094857.3f489d4f@canb.auug.org.au fs/nfs/write.c, fs/nfs/nfstrace.h, vs fs-next tree: https://lkml.kernel.org/r/20240715105836.6d6e6e50@canb.auug.org.au include/linux/hid_bpf.h, vs hid tree: https://lkml.kernel.org/r/20240709112544.190ffda4@canb.auug.org.au Upcoming conflicts include: include/linux/interrupt.h, vs input tree: https://lkml.kernel.org/r/20240612103235.5ef64950@canb.auug.org.au include/linux/cacheinfo.h, vs tip tree: https://lkml.kernel.org/r/20240612112746.3130d68b@canb.auug.org.au drivers/fsi/fsi-occ.c, vs driver-core tree: https://lkml.kernel.org/r/20240612123640.68ae0310@canb.auug.org.au This one is a bit vague, but might help: arch/s390/include/asm/kmsan.h, arch/s390/include/asm/lowcore.h, vs s390 tree: https://lkml.kernel.org/r/20240627150405.27663-1-iii@linux.ibm.com mm/rmap.c, vs random tree: https://lkml.kernel.org/r/20240702164041.60a19dfb@canb.auug.org.au https://lkml.kernel.org/r/20240709174053.051a46a4@canb.auug.org.au tools/testing/selftests/mm/Makefile, vs random tree: https://lkml.kernel.org/r/20240709174340.5c03c2b9@canb.auug.org.au fs/bcachefs/clock.c, vs bcachefs tree: https://lkml.kernel.org/r/20240712105711.6dc900a2@canb.auug.org.au The following changes since commit 1e3d28fe03cdac1f58402e4da1e1e59fb70d145f: MAINTAINERS: mailmap: update Lorenzo Stoakes's email address (2024-07-06 = 11:39:51 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm tags/mm-stable-2024= -07-21-14-50 for you to fetch changes up to 30d77b7eef019fa4422980806e8b7cdc8674493e: mm/mglru: fix ineffective protection calculation (2024-07-17 21:08:55 -07= 00) ---------------------------------------------------------------- - 875fa64577da ("mm/hugetlb_vmemmap: fix race with speculative PFN walkers") is known to cause a performance regression (https://lore.kernel.org/all/3acefad9-96e5-4681-8014-827d6be71c7a@linux.i= bm.com/T/#mfa809800a7862fb5bdf834c6f71a3a5113eb83ff). Yu has a fix which I'll send along later via the hotfixes branch. - In the series "mm: Avoid possible overflows in dirty throttling" Jan Kara addresses a couple of issues in the writeback throttling code. These fixes are also targetted at -stable kernels. - Ryusuke Konishi's series "nilfs2: fix potential issues related to reserved inodes" does that. This should actually be in the mm-nonmm-stable tree, along with the many other nilfs2 patches. My bad. - More folio conversions from Kefeng Wang in the series "mm: convert to folio_alloc_mpol()" - Kemeng Shi has sent some cleanups to the writeback code in the series "Add helper functions to remove repeated code and improve readability of cgroup writeback" - Kairui Song has made the swap code a little smaller and a little faster in the series "mm/swap: clean up and optimize swap cache index". - In the series "mm/memory: cleanly support zeropage in vm_insert_page*(), vm_map_pages*() and vmf_insert_mixed()" David Hildenbrand has reworked the rather sketchy handling of the use of the zeropage in MAP_SHARED mappings. I don't see any runtime effects here - more a cleanup/understandability/maintainablity thing. - Dev Jain has improved selftests/mm/va_high_addr_switch.c's handling of higher addresses, for aarch64. The (poorly named) series is "Restructure va_high_addr_switch". - The core TLB handling code gets some cleanups and possible slight optimizations in Bang Li's series "Add update_mmu_tlb_range() to simplify code". - Jane Chu has improved the handling of our fake-an-unrecoverable-memory-error testing feature MADV_HWPOISON in the series "Enhance soft hwpoison handling and injection". - Jeff Johnson has sent a billion patches everywhere to add MODULE_DESCRIPTION() to everything. Some landed in this pull. - In the series "mm: cleanup MIGRATE_SYNC_NO_COPY mode", Kefeng Wang has simplified migration's use of hardware-offload memory copying. - Yosry Ahmed performs more folio API conversions in his series "mm: zswap: trivial folio conversions". - In the series "large folios swap-in: handle refault cases first", Chuanhua Han inches us forward in the handling of large pages in the swap code. This is a cleanup and optimization, working toward the end objective of full support of large folio swapin/out. - In the series "mm,swap: cleanup VMA based swap readahead window calculation", Huang Ying has contributed some cleanups and a possible fixlet to his VMA based swap readahead code. - In the series "add mTHP support for anonymous shmem" Baolin Wang has taught anonymous shmem mappings to use multisize THP. By default this is a no-op - users must opt in vis sysfs controls. Dramatic improvements in pagefault latency are realized. - David Hildenbrand has some cleanups to our remaining use of page_mapcount() in the series "fs/proc: move page_mapcount() to fs/proc/internal.h". - David also has some highmem accounting cleanups in the series "mm/highmem: don't track highmem pages manually". - Build-time fixes and cleanups from John Hubbard in the series "cleanups, fixes, and progress towards avoiding "make headers"". - Cleanups and consolidation of the core pagemap handling from Barry Song in the series "mm: introduce pmd|pte_needs_soft_dirty_wp helpers and utilize them". - Lance Yang's series "Reclaim lazyfree THP without splitting" has reduced the latency of the reclaim of pmd-mapped THPs under fairly common circumstances. A 10x speedup is seen in a microbenchmark. It does this by punting to aother CPU but I guess that's a win unless all CPUs are pegged. - hugetlb_cgroup cleanups from Xiu Jianfeng in the series "mm/hugetlb_cgroup: rework on cftypes". - Miaohe Lin's series "Some cleanups for memory-failure" does just that thing. - Is anyone reading this stuff? If so, email me! - Someone other than SeongJae has developed a DAMON feature in Honggyu Kim's series "DAMON based tiered memory management for CXL memory". This adds DAMON features which may be used to help determine the efficiency of our placement of CXL/PCIe attached DRAM. - DAMON user API centralization and simplificatio work in SeongJae Park's series "mm/damon: introduce DAMON parameters online commit function". - In the series "mm: page_type, zsmalloc and page_mapcount_reset()" David Hildenbrand does some maintenance work on zsmalloc - partially modernizing its use of pageframe fields. - Kefeng Wang provides more folio conversions in the series "mm: remove page_maybe_dma_pinned() and page_mkclean()". - More cleanup from David Hildenbrand, this time in the series "mm/memory_hotplug: use PageOffline() instead of PageReserved() for !ZONE_DEVICE". It "enlightens memory hotplug more about PageOffline() pages" and permits the removal of some virtio-mem hacks. - Barry Song's series "mm: clarify folio_add_new_anon_rmap() and __folio_add_anon_rmap()" is a cleanup to the anon folio handling in preparation for mTHP (multisize THP) swapin. - Kefeng Wang's series "mm: improve clear and copy user folio" implements more folio conversions, this time in the area of large folio userspace copying. - The series "Docs/mm/damon/maintaier-profile: document a mailing tool and community meetup series" tells people how to get better involved with other DAMON developers. From SeongJae Park. - A large series ("kmsan: Enable on s390") from Ilya Leoshkevich does that. - David Hildenbrand sends along more cleanups, this time against the migration code. The series is "mm/migrate: move NUMA hinting fault folio isolation + checks under PTL". - Jan Kara has found quite a lot of strangenesses and minor errors in the readahead code. He addresses this in the series "mm: Fix various readahead quirks". - SeongJae Park's series "selftests/damon: test DAMOS tried regions and {min,max}_nr_regions" adds features and addresses errors in DAMON's self testing code. - Gavin Shan has found a userspace-triggerable WARN in the pagecache code. The series "mm/filemap: Limit page cache size to that supported by xarray" addresses this. The series is marked cc:stable. - Chengming Zhou's series "mm/ksm: cmp_and_merge_page() optimizations and cleanup" cleans up and slightly optimizes KSM. - Roman Gushchin has separated the memcg-v1 and memcg-v2 code - lots of code motion. The series (which also makes the memcg-v1 code Kconfigurable) are "mm: memcg: separate legacy cgroup v1 code and put under config option" and "mm: memcg: put cgroup v1-specific memcg data under CONFIG_MEMCG_V1" - Dan Schatzberg's series "Add swappiness argument to memory.reclaim" adds an additional feature to this cgroup-v2 control file. - The series "Userspace controls soft-offline pages" from Jiaqi Yan permits userspace to stop the kernel's automatic treatment of excessive correctable memory errors. In order to permit userspace to monitor and handle this situation. - Kefeng Wang's series "mm: migrate: support poison recover from migrate folio" teaches the kernel to appropriately handle migration from poisoned source folios rather than simply panicing. - SeongJae Park's series "Docs/damon: minor fixups and improvements" does those things. - In the series "mm/zsmalloc: change back to per-size_class lock" Chengming Zhou improves zsmalloc's scalability and memory utilization. - Vivek Kasireddy's series "mm/gup: Introduce memfd_pin_folios() for pinning memfd folios" makes the GUP code use FOLL_PIN rather than bare refcount increments. So these paes can first be moved aside if they reside in the movable zone or a CMA block. - Andrii Nakryiko has added a binary ioctl()-based API to /proc/pid/maps for much faster reading of vma information. The series is "query VMAs from /proc//maps". - In the series "mm: introduce per-order mTHP split counters" Lance Yang improves the kernel's presentation of developer information related to multisize THP splitting. - Michael Ellerman has developed the series "Reimplement huge pages without hugepd on powerpc (8xx, e500, book3s/64)". This permits userspace to use all available huge page sizes. - In the series "revert unconditional slab and page allocator fault injection calls" Vlastimil Babka removes a performance-affecting and not very useful feature from slab fault injection. ---------------------------------------------------------------- Anastasia Belova (1): mm/memory_hotplug: prevent accessing by index=3D-1 Andrew Morton (3): mm/huge_memory.c: fix used-uninitialized Merge branch 'mm-hotfixes-stable' into mm-stable to pick up "mm: fix = crashes from deferred split racing folio migration", needed by "mm: migrate= : split folio_migrate_mapping()". mm/hugetlb.c: undo errant change Andrii Nakryiko (6): fs/procfs: extract logic for getting VMA name constituents fs/procfs: implement efficient VMA querying API for /proc//maps fs/procfs: add build ID fetching to PROCMAP_QUERY API docs/procfs: call out ioctl()-based PROCMAP_QUERY command existence tools: sync uapi/linux/fs.h header into tools subdir selftests/proc: add PROCMAP_QUERY ioctl tests Aristeu Rozanski (1): hugetlb: force allocating surplus hugepages on mempolicy allowed nodes Arnd Bergmann (1): udmabuf: add CONFIG_MMU dependency Audra Mitchell (2): mm: update uffd-stress to handle EINVAL for unset config features mm: turn off test_uffdio_wp if CONFIG_PTE_MARKER_UFFD_WP is not confi= gured. Bang Li (5): mm: add update_mmu_tlb_range() mm: implement update_mmu_tlb() using update_mmu_tlb_range() mm: use update_mmu_tlb_range() to simplify code mm/shmem: fix input and output inconsistencies mm: thp: support "THPeligible" semantics for mTHP with anonymous shmem Baolin Wang (7): mm: memory: extend finish_fault() to support large folio mm: shmem: add THP validation for PMD-mapped THP related statistics mm: shmem: add multi-size THP sysfs interface for anonymous shmem mm: shmem: add mTHP support for anonymous shmem mm: shmem: add mTHP size alignment in shmem_get_unmapped_area mm: shmem: add mTHP counters for anonymous shmem mm: memcontrol: add VM_BUG_ON_FOLIO() to catch lru folio in mem_cgrou= p_migrate() Barry Song (12): mm: remove the implementation of swap_free() and always use swap_free= _nr() mm: introduce pte_move_swp_offset() helper which can move offset bidi= rectionally mm: introduce arch_do_swap_page_nr() which allows restore metadata fo= r nr pages mm: swap: reuse exclusive folio directly instead of wp page faults mm: introduce pmd|pte_needs_soft_dirty_wp helpers for softdirty write= -protect mm: set pte writable while pte_soft_dirty() is true in do_swap_page() mm: extend rmap flags arguments for folio_add_new_anon_rmap mm: use folio_add_new_anon_rmap() if folio_test_anon(folio)=3D=3Dfalse mm: remove folio_test_anon(folio)=3D=3Dfalse path in __folio_add_anon= _rmap() tools/mm: introduce a tool to assess swap entry allocation for thp_sw= apout mm/vmscan: drop checking if _deferred_list is empty before using TTU_= SYNC mm: zswap: fix zswap_never_enabled() for CONFIG_ZSWAP=3D=3DN Brian Johannesmeyer (1): kmsan: introduce test_unpoison_memory() Chengming Zhou (7): mm/ksm: refactor out try_to_merge_with_zero_page() mm/ksm: don't waste time searching stable tree for fast changing page mm/ksm: optimize the chain()/chain_prune() interfaces mm/zsmalloc: change back to per-size_class lock mm/zswap: use only one pool in zswap mm/zsmalloc: clarify class per-fullness zspage counts mm/zsmalloc: move record_obj() into obj_malloc() Christoph Hellwig (1): mm: unexport vmf_insert_mixed_mkwrite Christophe Leroy (17): mm: define __pte_leaf_size() to also take a PMD entry mm: provide mm_struct and address to huge_ptep_get() powerpc/mm: remove _PAGE_PSIZE powerpc/mm: fix __find_linux_pte() on 32 bits with PMD leaf entries powerpc/mm: allow hugepages without hugepd powerpc/8xx: fix size given to set_huge_pte_at() powerpc/8xx: rework support for 8M pages using contiguous PTE entries powerpc/8xx: simplify struct mmu_psize_def powerpc/e500: remove enc and ind fields from struct mmu_psize_def powerpc/e500: switch to 64 bits PGD on 85xx (32 bits) powerpc/e500: encode hugepage size in PTE bits powerpc/e500: don't pre-check write access on data TLB error powerpc/e500: free r10 for FIND_PTE powerpc/e500: use contiguous PMD instead of hugepd powerpc/64s: use contiguous PMD/PUD instead of HUGEPD powerpc/mm: remove hugepd leftovers mm: remove CONFIG_ARCH_HAS_HUGEPD Chuanhua Han (3): mm: swap: introduce swap_free_nr() for batched swap_free() mm: swap: make should_try_to_free_swap() support large-folio mm: swap: entirely map large folios found in swapcache Dan Carpenter (1): mm/zswap: fix a white space issue Dan Schatzberg (2): mm: add defines for min/max swappiness mm: add swappiness=3D arg to memory.reclaim David Hildenbrand (23): mm/memory: move page_count() check into validate_page_before_insert() mm/memory: cleanly support zeropage in vm_insert_page*(), vm_map_page= s*() and vmf_insert_mixed() mm/rmap: sanity check that zeropages are not passed to RMAP fs/proc/task_mmu: indicate PM_FILE for PMD-mapped file THP fs/proc/task_mmu: don't indicate PM_MMAP_EXCLUSIVE without PM_PRESENT fs/proc/task_mmu: properly detect PM_MMAP_EXCLUSIVE per page of PMD-m= apped THPs fs/proc/task_mmu: account non-present entries as "maybe shared, but n= o idea how often" fs/proc: move page_mapcount() to fs/proc/internal.h Documentation/admin-guide/mm/pagemap.rst: drop "Using pagemap to do s= omething useful" mm/highmem: reimplement totalhigh_pages() by walking zones mm/highmem: make nr_free_highpages() return "unsigned long" mm: update _mapcount and page_type documentation mm: allow reuse of the lower 16 bit of the page type with an actual t= ype mm/zsmalloc: use a proper page type mm/page_alloc: clear PageBuddy using __ClearPageBuddy() for bad pages mm/filemap: reinitialize folio->_mapcount directly mm/mm_init: initialize page->_mapcount directly in __init_single_page= () mm: pass meminit_context to __free_pages_core() mm/memory_hotplug: initialize memmap of !ZONE_DEVICE with PageOffline= () instead of PageReserved() mm/memory_hotplug: skip adjust_managed_page_count() for PageOffline()= pages when offlining mm: read page_type using READ_ONCE mm/migrate: make migrate_misplaced_folio() return 0 on success mm/migrate: move NUMA hinting fault folio isolation + checks under PTL Dev Jain (3): selftests/mm: va_high_addr_switch: reduce test noise selftests/mm: va_high_addr_switch: dynamically initialize testcases t= o enable LPA2 testing mm: sparse: consistently use _nr Donet Tom (2): selftest: mm: Test if hugepage does not get leaked during __bio_relea= se_pages() hugetlbfs: ensure generic_hugetlb_get_unmapped_area() returns higher = address than mmap_min_addr Edward Liaw (3): selftests/mm: include linux/mman.h selftests/mm: guard defines from shm selftests: centralize -D_GNU_SOURCE=3D to CFLAGS in lib.mk Eric Chanudet (1): mm/mm_init: use node's number of cpus in deferred_page_init_max_threa= ds Ho-Ren (Jack) Chuang (1): memory tier: consolidate the initialization of memory tiers Hongfu Li (1): khugepaged: simplify the allocation of slab caches Honggyu Kim (5): mm: make alloc_demote_folio externally invokable for migration mm: rename alloc_demote_folio to alloc_migrate_folio mm/migrate: add MR_DAMON to migrate_reason mm/damon/paddr: introduce DAMOS_MIGRATE_COLD action for demotion Docs/damon: document damos_migrate_{hot,cold} Huang Ying (3): mm,swap: fix a theoretical underflow in readahead window calculation mm,swap: remove struct vma_swap_readahead mm,swap: simplify VMA based swap readahead window calculation Hugh Dickins (1): mm: simplify folio_migrate_mapping() Hyeongtak Ji (2): mm/damon/sysfs-schemes: add target_nid on sysfs-schemes mm/damon/paddr: introduce DAMOS_MIGRATE_HOT action for promotion Illia Ostapyshyn (1): mm/vmscan: update stale references to shrink_page_list Ilya Leoshkevich (40): ftrace: unpoison ftrace_regs in ftrace_ops_list_func() kmsan: make the tests compatible with kmsan.panic=3D1 kmsan: disable KMSAN when DEFERRED_STRUCT_PAGE_INIT is enabled kmsan: increase the maximum store size to 4096 kmsan: fix is_bad_asm_addr() on arches with overlapping address spaces kmsan: fix kmsan_copy_to_user() on arches with overlapping address sp= aces kmsan: remove a useless assignment from kmsan_vmap_pages_range_noflus= h() kmsan: remove an x86-specific #include from kmsan.h kmsan: expose kmsan_get_metadata() kmsan: export panic_on_kmsan kmsan: allow disabling KMSAN checks for the current task kmsan: introduce memset_no_sanitize_memory() kmsan: support SLAB_POISON kmsan: use ALIGN_DOWN() in kmsan_get_metadata() kmsan: do not round up pg_data_t size kmsan: expose KMSAN_WARN_ON() mm: slub: let KMSAN access metadata mm: slub: disable KMSAN when checking the padding bytes mm: kfence: disable KMSAN when checking the canary lib/zlib: unpoison DFLTCC output buffers kmsan: accept ranges starting with 0 on s390 s390/boot: turn off KMSAN s390: use a larger stack for KMSAN s390/boot: add the KMSAN runtime stub s390/checksum: add a KMSAN check s390/cpacf: unpoison the results of cpacf_trng() s390/cpumf: unpoison STCCTM output buffer s390/diag: unpoison diag224() output buffer s390/ftrace: unpoison ftrace_regs in kprobe_ftrace_handler() s390/irqflags: do not instrument arch_local_irq_*() with KMSAN s390/mm: define KMSAN metadata for vmalloc and modules s390/string: add KMSAN support s390/traps: unpoison the kernel_stack_overflow()'s pt_regs s390/uaccess: add KMSAN support to put_user() and get_user() s390/uaccess: add the missing linux/instrumented.h #include s390/unwind: disable KMSAN checks s390/kmsan: implement the architecture-specific functions kmsan: enable on s390 kmsan: add missing __user tags kmsan: do not pass NULL pointers as 0 JaeJoon Jung (1): maple_tree: modified return type of mas_wr_store_entry() Jan Kara (12): Revert "mm/writeback: fix possible divide-by-zero in wb_dirty_limits(= ), again" mm: avoid overflows in dirty throttling logic readahead: make sure sync readahead reads needed page filemap: fix page_cache_next_miss() when no hole found readahead: properly shorten readahead when falling back to do_page_ca= che_ra() readahead: drop pointless index from force_page_cache_ra() readahead: drop index argument of page_cache_async_readahead() readahead: drop dead code in page_cache_ra_order() readahead: drop dead code in ondemand_readahead() readahead: disentangle async and sync readahead readahead: fold try_context_readahead() into its single caller readahead: simplify gotos in page_cache_sync_ra() Jane Chu (5): mm/memory-failure: try to send SIGBUS even if unmap failed mm/madvise: add MF_ACTION_REQUIRED to madvise(MADV_HWPOISON) mm/memory-failure: improve memory failure action_result messages mm/memory-failure: move hwpoison_filter() higher up mm/memory-failure: send SIGBUS in the event of thp split fail Javier Martinez Canillas (1): mm/Kconfig: mention arm64 in DEFAULT_MMAP_MIN_ADDR symbol help text Jeff Johnson (9): mm/hwpoison: add MODULE_DESCRIPTION() mm/dmapool: add MODULE_DESCRIPTION() mm/kfence: add MODULE_DESCRIPTION() mm/zsmalloc: add MODULE_DESCRIPTION() kmemleak-test: add missing MODULE_DESCRIPTION() macro test_xarray: add missing MODULE_DESCRIPTION() macro ubsan: add missing MODULE_DESCRIPTION() macro test_maple_tree: add the missing MODULE_DESCRIPTION() macro lib: test_hmm: add missing MODULE_DESCRIPTION() macro Jiapeng Chong (1): mm: userfaultfd: use swap() in double_pt_lock() Jiaqi Yan (5): mm/memory-failure: refactor log format in unpoison_memory mm/memory-failure: refactor log format in soft offline code mm/memory-failure: userspace controls soft-offlining pages selftest/mm: test enable_soft_offline behaviors docs: mm: add enable_soft_offline sysctl Jinliang Zheng (1): mm: optimize the redundant loop of mm_update_owner_next() Johannes Weiner (2): mm: vmscan: restore incremental cgroup iteration mm: remove CONFIG_MEMCG_KMEM John Hubbard (6): selftests/mm: mseal, self_elf: fix missing __NR_mseal selftests/mm: mseal, self_elf: factor out test macros and other dupli= cated items selftests/mm: mseal, self_elf: rename TEST_END_CHECK to REPORT_TEST_P= ASS selftests/mm: fix vm_util.c build failures: add snapshot of fs.h selftests/mm: kvm, mdwe fixes to avoid requiring "make headers" selftests/mm: remove local __NR_* definitions Jonathan Cameron (1): mm/memory_hotplug: drop memblock_phys_free() call in try_remove_memor= y() Kairui Song (10): nilfs2: drop usage of page_index ceph: drop usage of page_index NFS: remove nfs_page_lengthg and usage of page_index afs: drop usage of folio_file_pos netfs: drop usage of folio_file_pos nfs: drop usage of folio_file_pos mm/swap: get the swap device offset directly mm: remove page_file_offset and folio_file_pos mm: drop page_index and simplify folio_index mm/swap: reduce swap cache search space Kees Cook (1): mm/kmemleak: replace strncpy() with strscpy() Kefeng Wang (28): mm: add folio_alloc_mpol() mm: mempolicy: use folio_alloc_mpol_noprof() in vma_alloc_folio_nopro= f() mm: mempolicy: use folio_alloc_mpol() in alloc_migration_target_by_mp= ol() mm: shmem: use folio_alloc_mpol() in shmem_alloc_folio() mm: memcontrol: remove page_memcg() rmap: remove DEFINE_PAGE_VMA_WALK() mm: migrate: simplify __buffer_migrate_folio() mm: migrate_device: use a newfolio in __migrate_device_pages() mm: migrate_device: unify migrate folio for MIGRATE_SYNC_NO_COPY mm: migrate: remove migrate_folio_extra() mm: remove MIGRATE_SYNC_NO_COPY mode mm: ksm: drop KSM_KMEM_CACHE() fs/proc/task_mmu: use folio API in pte_is_pinned() mm: remove page_maybe_dma_pinned() fb_defio: use a folio in fb_deferred_io_work() mm: remove page_mkclean() mm: memory: convert clear_huge_page() to folio_zero_user() mm: memory: use folio in struct copy_subpage_arg mm: memory: improve copy_user_large_folio() mm: memory: rename pages_per_huge_page to nr_pages mm: refactor folio_undo_large_rmappable() mm: move memory_failure_queue() into copy_mc_[user]_highpage() mm: add folio_mc_copy() mm: migrate: split folio_migrate_mapping() mm: migrate: support poisoned recover from migrate folio fs: hugetlbfs: support poisoned recover from hugetlbfs_migrate_folio() mm: migrate: remove folio_migrate_copy() mm: swap_state: use folio_alloc_mpol() in __read_swap_cache_async() Kemeng Shi (8): writeback: factor out wb_bg_dirty_limits to remove repeated code writeback: add general function domain_dirty_avail to calculate dirty= and avail of domain writeback: factor out domain_over_bg_thresh to remove repeated code writeback: factor out code of freerun to remove repeated code writeback: factor out wb_dirty_freerun to remove more repeated freeru= n code writeback: factor out balance_domain_limits to remove repeated code writeback: factor out wb_dirty_exceeded to remove repeated code writeback: factor out balance_wb_limits to remove repeated code Lance Yang (6): mm/rmap: remove duplicated exit code in pagewalk loop mm/rmap: integrate PMD-mapped folio splitting into pagewalk loop mm/vmscan: avoid split lazyfree THP during shrink_folio_list() mm/mlock: implement folio_mlock_step() using folio_pte_batch() mm: add per-order mTHP split counters mm: add docs for per-order mTHP split counters Leesoo Ahn (1): mm/sparse: use MEMBLOCK_ALLOC_ACCESSIBLE enum instead of 0 Maarten Lankhorst (1): mm/page_counter: move calculating protection values to page_counter Mateusz Guzik (1): mm: batch unlink_file_vma calls in free_pgd_range Matthew Wilcox (Oracle) (2): mm: remove page_mapping() mm/memory-failure: stop setting the folio error flag Miaohe Lin (16): mm/memory-failure: simplify put_ref_page() mm/memory-failure: remove MF_MSG_SLAB mm/memory-failure: add macro GET_PAGE_MAX_RETRY_NUM mm/memory-failure: save some page_folio() calls mm/memory-failure: remove unneeded empty string mm/memory-failure: remove confusing initialization to count mm/memory-failure: don't export hwpoison_filter() when !CONFIG_HWPOIS= ON_INJECT mm/memory-failure: use helper macro task_pid_nr() mm/memory-failure: remove obsolete comment in unpoison_memory() mm/memory-failure: move some function declarations into internal.h mm/memory-failure: fix comment of get_hwpoison_page() mm/memory-failure: remove obsolete comment in kill_proc() mm/memory-failure: correct comment in me_swapcache_dirty mm/memory-failure: remove obsolete MF_MSG_DIFFERENT_COMPOUND mm/hugetlb: fix possible recursive locking detected warning mm/hugetlb: fix kernel NULL pointer dereference when migrating hugetl= b folio Michael Ellerman (6): powerpc/64e: remove unused IBM HTW code powerpc/64e: split out nohash Book3E 64-bit code powerpc/64e: drop E500 ifdefs in 64-bit code powerpc/64e: drop MMU_FTR_TYPE_FSL_E checks in 64-bit code powerpc/64e: consolidate TLB miss handler patching powerpc/64e: drop unused TLB miss handlers Muhammad Usama Anjum (1): selftests: mm: check return values Oleg Nesterov (3): memcg: mm_update_next_owner: kill the "retry" logic memcg: mm_update_next_owner: move for_each_thread() into try_to_set_o= wner() get_task_mm: check PF_KTHREAD lockless Oscar Salvador (3): mm/hugetlb: drop node_alloc_noretry from alloc_fresh_hugetlb_folio arch/x86: do not explicitly clear Reserved flag in free_pagetable mm/hugetlb: guard dequeue_hugetlb_folio_nodemask against NUMA_NO_NODE= uses Pankaj Raghav (1): selftests/mm: use asm volatile to not optimize mmap read variable Pei Li (1): mm: ignore data-race in __swap_writepage Peter Xu (2): mm: drop leftover comment references to pxx_huge() mm/migrate: putback split folios when numa hint migration fails Ran Xiaokai (2): mm/huge_memory: mark racy access onhuge_anon_orders_always kpageflags: detect isolated KPF_THP folios Roman Gushchin (26): mm: memcg: introduce memcontrol-v1.c mm: memcg: move soft limit reclaim code to memcontrol-v1.c mm: memcg: rename soft limit reclaim-related functions mm: memcg: move charge migration code to memcontrol-v1.c mm: memcg: rename charge move-related functions mm: memcg: move legacy memcg event code into memcontrol-v1.c mm: memcg: rename memcg_check_events() mm: memcg: move cgroup v1 oom handling code into memcontrol-v1.c mm: memcg: rename memcg_oom_recover() mm: memcg: move cgroup v1 interface files to memcontrol-v1.c mm: memcg: make memcg1_update_tree() static mm: memcg: group cgroup v1 memcg related declarations mm: memcg: put cgroup v1-specific code under a config option MAINTAINERS: add mm/memcontrol-v1.c/h to the list of maintained files mm: memcg: move memcg_account_kmem() to memcontrol-v1.c mm: memcg: factor out legacy socket memory accounting code mm: memcg: guard cgroup v1-specific code in mem_cgroup_print_oom_memi= nfo() mm: memcg: gather memcg1-specific fields initialization in memcg1_mem= cg_init() mm: memcg: guard memcg1-specific fields accesses in mm/memcontrol.c mm: memcg: put memcg1-specific struct mem_cgroup's members under CONF= IG_MEMCG_V1 mm: memcg: guard memcg1-specific members of struct mem_cgroup_per_node mm: memcg: put struct task_struct::memcg_in_oom under CONFIG_MEMCG_V1 mm: memcg: put struct task_struct::in_user_fault under CONFIG_MEMCG_V1 mm: memcg: drop obsolete cache line padding in struct mem_cgroup mm: memcg: add cache line padding to mem_cgroup_per_node mm: memcg1: convert charge move flags to unsigned long long Ryan Roberts (2): mm: fix khugepaged activation policy mm: shmem: rename mTHP shmem counters Ryusuke Konishi (3): nilfs2: fix inode number range checks nilfs2: add missing check for inode numbers on directory entries nilfs2: fix incorrect inode allocation from reserved inodes SeongJae Park (32): mm/damon/core: implement DAMOS quota goals online commit function mm/damon/core: implement DAMON context commit function mm/damon/sysfs: use damon_commit_ctx() mm/damon/sysfs-schemes: use damos_commit_quota_goals() mm/damon/sysfs: remove unnecessary online tuning handling code mm/damon/sysfs: rename damon_sysfs_set_targets() to ...add_targets() mm/damon/sysfs-schemes: remove unnecessary online tuning handling code mm/damon/sysfs-schemes: rename *_set_{schemes,scheme_filters,quota_sc= ore,schemes}() mm/damon/reclaim: use damon_commit_ctx() mm/damon/reclaim: remove unnecessary code for online tuning mm/damon/lru_sort: use damon_commit_ctx() mm/damon/lru_sort: remove unnecessary online tuning handling code Docs/mm/damon/maintainer-profile: introduce HacKerMaiL Docs/mm/damon/maintainer-profile: document DAMON community meetups selftests/damon/access_memory: use user-defined region size selftests/damon/_damon_sysfs: support schemes_update_tried_regions selftests/damon: implement a program for even-numbered memory regions= access selftests/damon: implement DAMOS tried regions test selftests/damon/_damon_sysfs: implement kdamonds stop function selftests/damon: implement test for min/max_nr_regions _damon_sysfs: implement commit() for online parameters update selftests/damon/damon_nr_regions: test online-tuned max_nr_regions mm/damon/paddr: initialize nr_succeeded in __damon_pa_migrate_folio_l= ist() Docs/mm/damon/design: fix two typos Docs/mm/damon/design: clarify regions merging operation Docs/admin-guide/mm/damon/start: add access pattern snapshot example Docs/mm/damon/design: add links from overall architecture to sections= of details Docs/mm/damon/design: move 'Configurable Operations Set' section into= 'Operations Set Layer' section Docs/mm/damon/design: remove 'Programmable Modules' section in favor = of 'Modules' section Docs/mm/damon/design: add links to sections of DAMON sysfs interface = usage doc Docs/mm/damon/index: add links to design Docs/mm/damon/index: add links to admin-guide doc Sergey Senozhatsky (1): zsmalloc: rename class stat mutators Shakeel Butt (2): mm: vmscan: reset sc->priority on retry memcg: rearrange fields of mem_cgroup_per_node Shubhang Kaushik OS (1): vmalloc: modify the alloc_vmap_area() error message for better diagno= stics Sidhartha Kumar (2): mm/hugetlb: remove {Set,Clear}Hpage macros mm/hugetlb: mm/memory_hotplug: use a folio in scan_movable_pages() Sourav Panda (1): mm: report per-page metadata information Suren Baghdasaryan (4): mm: add comments for allocation helpers explaining why they are macros lib: add missing newline character in the warning message lib: reuse page_ext_data() to obtain codetag_ref alloc_tag: fix page_ext_get/page_ext_put sequence during page splitti= ng Tetsuo Handa (1): mm: mmap_lock: replace get_memcg_path_buf() with on-stack buffer Thomas Wei=DFschuh (1): mm/hugetlb: constify ctl_table arguments of utility functions Tvrtko Ursulin (1): mm/numa_balancing: teach mpol_to_str about the balancing mode Uros Bizjak (2): percpu: add __this_cpu_try_cmpxchg() mm/vmalloc: use __this_cpu_try_cmpxchg() in preload_this_cpu_lock() Usama Arif (1): mm: do not start/end writeback for pages stored in zswap Vivek Kasireddy (8): mm/gup: introduce unpin_folio/unpin_folios helpers mm/gup: introduce check_and_migrate_movable_folios() mm/gup: introduce memfd_pin_folios() for pinning memfd folios udmabuf: use vmf_insert_pfn and VM_PFNMAP for handling mmap udmabuf: add back support for mapping hugetlb pages udmabuf: convert udmabuf driver to use folios udmabuf: pin the pages using memfd_pin_folios() API selftests/udmabuf: add tests to verify data after page migration Vlastimil Babka (2): mm, slab: put should_failslab() back behind CONFIG_SHOULD_FAILSLAB mm, page_alloc: put should_fail_alloc_page() back behing CONFIG_FAIL_= PAGE_ALLOC Wei Yang (10): mm/mm_init.c: print mem_init info after defer_init is done mm/mm_init.c: simplify logic of deferred_[init|free]_pages mm/sparse: nr_pages won't be 0 mm/mm_init.c: move build check on MAX_ZONELISTS out of ifdef mm/page_alloc: fix a typo in comment about GFP flag mm/page_alloc: reword the comment of buddy_merge_likely() kernel/fork.c: get totalram_pages from memblock to calculate max_thre= ads kernel/fork.c: put set_max_threads()/task_struct_whitelist() in __ini= t section mm/page_alloc: remove prefetchw() on freeing page to buddy system mm/page_alloc: put __free_pages_core() in __meminit section Xiu Jianfeng (5): mm/hugetlb_cgroup: identify the legacy using cgroup_subsys_on_dfl() mm/hugetlb_cgroup: prepare cftypes based on template mm/hugetlb_cgroup: switch to the new cftypes mm: memcg: remove redundant seq_buf_has_overflowed() mm: memcg: adjust the warning when seq_buf overflows Yifei Li (1): mm/memory-failure: use helper llist_for_each_entry() Yosry Ahmed (8): mm: zswap: use sg_set_folio() in zswap_{compress/decompress}() mm :zswap: use kmap_local_folio() in zswap_load() mm: zswap: make same_filled functions folio-friendly mm: rmap: abstract updating per-node and per-memcg stats mm: swap: remove 'synchronous' argument to swap_read_folio() mm: zswap: rename is_zswap_enabled() to zswap_is_enabled() mm: zswap: add zswap_never_enabled() mm: zswap: handle incorrect attempts to load large folios Yu Zhao (4): mm/truncate: batch-clear shadow entries mm/mglru: fix div-by-zero in vmpressure_calc_level() mm/mglru: fix overshooting shrinker memory mm/mglru: fix ineffective protection calculation yangge (1): mm/gup: clear the LRU flag of a page before adding to LRU batch Documentation/ABI/testing/sysfs-kernel-mm-damon | 6 + Documentation/admin-guide/cgroup-v2.rst | 18 +- Documentation/admin-guide/kernel-parameters.txt | 9 +- Documentation/admin-guide/mm/damon/start.rst | 46 +- Documentation/admin-guide/mm/damon/usage.rst | 10 +- Documentation/admin-guide/mm/pagemap.rst | 25 +- Documentation/admin-guide/mm/transhuge.rst | 85 +- Documentation/admin-guide/sysctl/vm.rst | 38 + Documentation/core-api/pin_user_pages.rst | 18 +- Documentation/dev-tools/kmsan.rst | 11 +- Documentation/filesystems/proc.rst | 9 + Documentation/mm/arch_pgtable_helpers.rst | 4 - Documentation/mm/damon/design.rst | 149 +- Documentation/mm/damon/index.rst | 22 +- Documentation/mm/damon/maintainer-profile.rst | 36 + Documentation/mm/unevictable-lru.rst | 10 +- MAINTAINERS | 2 + arch/arm/include/asm/cacheflush.h | 2 +- arch/arm/include/asm/hugetlb-3level.h | 4 +- arch/arm64/include/asm/cacheflush.h | 2 +- arch/arm64/include/asm/hugetlb.h | 2 +- arch/arm64/mm/hugetlbpage.c | 2 +- arch/loongarch/include/asm/pgtable.h | 4 +- arch/mips/include/asm/pgtable.h | 4 +- arch/mips/mm/cache.c | 2 +- arch/powerpc/Kconfig | 1 - arch/powerpc/include/asm/book3s/32/pgalloc.h | 2 - arch/powerpc/include/asm/book3s/64/hash-4k.h | 15 - arch/powerpc/include/asm/book3s/64/hash.h | 40 +- arch/powerpc/include/asm/book3s/64/hugetlb.h | 38 - arch/powerpc/include/asm/book3s/64/pgtable-4k.h | 47 - arch/powerpc/include/asm/book3s/64/pgtable-64k.h | 20 - arch/powerpc/include/asm/book3s/64/pgtable.h | 22 +- arch/powerpc/include/asm/hugetlb.h | 15 +- arch/powerpc/include/asm/nohash/32/hugetlb-8xx.h | 38 +- arch/powerpc/include/asm/nohash/32/mmu-8xx.h | 9 +- arch/powerpc/include/asm/nohash/32/pte-44x.h | 3 - arch/powerpc/include/asm/nohash/32/pte-85xx.h | 3 - arch/powerpc/include/asm/nohash/32/pte-8xx.h | 58 +- arch/powerpc/include/asm/nohash/hugetlb-e500.h | 39 +- arch/powerpc/include/asm/nohash/mmu-e500.h | 6 +- arch/powerpc/include/asm/nohash/pgalloc.h | 2 - arch/powerpc/include/asm/nohash/pgtable.h | 46 +- arch/powerpc/include/asm/nohash/pte-e500.h | 63 +- arch/powerpc/include/asm/page.h | 32 - arch/powerpc/include/asm/pgtable-be-types.h | 10 - arch/powerpc/include/asm/pgtable-types.h | 13 +- arch/powerpc/include/asm/pgtable.h | 3 + arch/powerpc/kernel/exceptions-64e.S | 4 +- arch/powerpc/kernel/head_85xx.S | 70 +- arch/powerpc/kernel/head_8xx.S | 10 +- arch/powerpc/kernel/setup_64.c | 6 +- arch/powerpc/mm/book3s64/hash_utils.c | 11 +- arch/powerpc/mm/book3s64/hugetlbpage.c | 10 + arch/powerpc/mm/book3s64/pgtable.c | 12 - arch/powerpc/mm/hugetlbpage.c | 455 +- arch/powerpc/mm/init-common.c | 8 +- arch/powerpc/mm/kasan/8xx.c | 21 +- arch/powerpc/mm/nohash/8xx.c | 43 +- arch/powerpc/mm/nohash/Makefile | 2 +- arch/powerpc/mm/nohash/book3e_pgtable.c | 4 +- arch/powerpc/mm/nohash/tlb.c | 407 +- arch/powerpc/mm/nohash/tlb_64e.c | 314 ++ arch/powerpc/mm/nohash/tlb_low_64e.S | 428 +- arch/powerpc/mm/pgtable.c | 94 +- arch/powerpc/mm/pgtable_32.c | 2 +- arch/riscv/include/asm/hugetlb.h | 2 +- arch/riscv/include/asm/pgtable.h | 4 +- arch/riscv/mm/hugetlbpage.c | 2 +- arch/s390/Kconfig | 1 + arch/s390/Makefile | 2 +- arch/s390/boot/Makefile | 3 + arch/s390/boot/kmsan.c | 6 + arch/s390/boot/startup.c | 7 + arch/s390/boot/string.c | 16 + arch/s390/include/asm/checksum.h | 2 + arch/s390/include/asm/cpacf.h | 3 + arch/s390/include/asm/cpu_mf.h | 6 + arch/s390/include/asm/hugetlb.h | 4 +- arch/s390/include/asm/irqflags.h | 17 +- arch/s390/include/asm/kmsan.h | 59 + arch/s390/include/asm/pgtable.h | 12 + arch/s390/include/asm/string.h | 20 +- arch/s390/include/asm/thread_info.h | 2 +- arch/s390/include/asm/uaccess.h | 112 +- arch/s390/kernel/diag.c | 10 +- arch/s390/kernel/ftrace.c | 2 + arch/s390/kernel/traps.c | 6 + arch/s390/kernel/unwind_bc.c | 4 + arch/s390/mm/hugetlbpage.c | 4 +- arch/sparc/mm/init_64.c | 2 +- arch/x86/mm/init_64.c | 14 - arch/x86/mm/pat/set_memory.c | 4 +- arch/xtensa/include/asm/pgtable.h | 6 +- arch/xtensa/mm/tlb.c | 6 +- drivers/acpi/numa/hmat.c | 5 +- drivers/block/zram/Kconfig | 1 + drivers/dma-buf/Kconfig | 1 + drivers/dma-buf/udmabuf.c | 232 +- drivers/hv/hv_balloon.c | 5 +- drivers/s390/char/sclp.c | 2 +- drivers/video/fbdev/core/fb_defio.c | 13 +- drivers/virtio/virtio_mem.c | 29 +- drivers/xen/balloon.c | 9 +- fs/afs/dir.c | 6 +- fs/afs/dir_edit.c | 4 +- fs/aio.c | 15 +- fs/btrfs/relocation.c | 3 +- fs/btrfs/send.c | 2 +- fs/ceph/dir.c | 2 +- fs/ceph/inode.c | 2 +- fs/hugetlbfs/inode.c | 20 +- fs/netfs/buffered_read.c | 4 +- fs/netfs/buffered_write.c | 2 +- fs/nfs/file.c | 2 +- fs/nfs/internal.h | 19 - fs/nfs/iostat.h | 4 + fs/nfs/nfstrace.h | 4 +- fs/nfs/write.c | 6 +- fs/nilfs2/bmap.c | 10 +- fs/proc/internal.h | 33 + fs/proc/page.c | 42 +- fs/proc/task_mmu.c | 503 ++- fs/userfaultfd.c | 2 +- include/acpi/platform/aclinuxex.h | 9 +- include/asm-generic/hugetlb.h | 2 +- include/linux/alloc_tag.h | 2 +- include/linux/bpf.h | 8 +- include/linux/buffer_head.h | 2 +- include/linux/cgroup-defs.h | 2 - include/linux/damon.h | 17 +- include/linux/dma-fence-chain.h | 4 + include/linux/fault-inject.h | 11 +- include/linux/gfp.h | 8 + include/linux/hid_bpf.h | 5 + include/linux/highmem-internal.h | 17 +- include/linux/highmem.h | 8 +- include/linux/huge_mm.h | 53 +- include/linux/hugetlb.h | 30 +- include/linux/jbd2.h | 10 + include/linux/kmsan.h | 76 + include/linux/kmsan_types.h | 2 +- include/linux/list_lru.h | 2 +- include/linux/memblock.h | 2 - include/linux/memcontrol.h | 363 +- include/linux/memfd.h | 5 + include/linux/memory-tiers.h | 2 + include/linux/memory_hotplug.h | 4 +- include/linux/migrate.h | 10 +- include/linux/migrate_mode.h | 6 +- include/linux/mm.h | 81 +- include/linux/mm_types.h | 33 +- include/linux/mmzone.h | 2 + include/linux/page-flags.h | 82 +- include/linux/page_counter.h | 4 + include/linux/pagemap.h | 33 +- include/linux/percpu-defs.h | 6 + include/linux/pgalloc_tag.h | 7 +- include/linux/pgtable.h | 40 +- include/linux/rmap.h | 45 +- include/linux/sched.h | 9 +- include/linux/shmem_fs.h | 9 + include/linux/skbuff.h | 8 + include/linux/skmsg.h | 5 + include/linux/slab.h | 12 +- include/linux/swap.h | 14 +- include/linux/swapops.h | 4 +- include/linux/vmstat.h | 4 + include/linux/zswap.h | 10 +- include/ras/ras_event.h | 4 +- include/trace/events/kmem.h | 4 +- include/trace/events/migrate.h | 3 +- include/uapi/linux/fs.h | 158 +- init/Kconfig | 18 +- kernel/bpf/memalloc.c | 9 +- kernel/bpf/syscall.c | 6 +- kernel/bpf/verifier.c | 4 + kernel/events/core.c | 2 +- kernel/events/uprobes.c | 2 +- kernel/exit.c | 81 +- kernel/fork.c | 18 +- kernel/power/swap.c | 5 +- kernel/trace/ftrace.c | 1 + lib/maple_tree.c | 15 +- lib/test_hmm.c | 1 + lib/test_maple_tree.c | 1 + lib/test_ubsan.c | 1 + lib/test_xarray.c | 1 + lib/zlib_dfltcc/dfltcc.h | 1 + lib/zlib_dfltcc/dfltcc_util.h | 28 + mm/Kconfig | 23 +- mm/Makefile | 2 + mm/balloon_compaction.c | 8 - mm/damon/core.c | 338 +- mm/damon/dbgfs.c | 2 +- mm/damon/lru_sort.c | 56 +- mm/damon/paddr.c | 157 + mm/damon/reclaim.c | 65 +- mm/damon/sysfs-common.h | 2 +- mm/damon/sysfs-schemes.c | 127 +- mm/damon/sysfs-test.h | 10 +- mm/damon/sysfs.c | 81 +- mm/damon/vaddr.c | 6 +- mm/dmapool_test.c | 1 + mm/fail_page_alloc.c | 4 +- mm/failslab.c | 14 +- mm/filemap.c | 8 +- mm/folio-compat.c | 6 - mm/gup.c | 510 +-- mm/highmem.c | 21 +- mm/hmm.c | 2 +- mm/huge_memory.c | 193 +- mm/hugetlb.c | 137 +- mm/hugetlb_cgroup.c | 305 +- mm/hugetlb_vmemmap.c | 17 +- mm/hwpoison-inject.c | 1 + mm/internal.h | 75 +- mm/kfence/core.c | 17 +- mm/kfence/kfence.h | 2 +- mm/kfence/kfence_test.c | 1 + mm/khugepaged.c | 40 +- mm/kmemleak.c | 6 +- mm/kmsan/core.c | 5 +- mm/kmsan/hooks.c | 38 +- mm/kmsan/init.c | 9 +- mm/kmsan/instrumentation.c | 15 +- mm/kmsan/kmsan.h | 39 +- mm/kmsan/kmsan_test.c | 32 + mm/kmsan/report.c | 10 +- mm/kmsan/shadow.c | 9 +- mm/ksm.c | 261 +- mm/list_lru.c | 14 +- mm/madvise.c | 2 +- mm/memcontrol-v1.c | 2969 +++++++++++++ mm/memcontrol-v1.h | 147 + mm/memcontrol.c | 4417 +++-------------= ---- mm/memfd.c | 45 + mm/memory-failure.c | 259 +- mm/memory-tiers.c | 54 +- mm/memory.c | 376 +- mm/memory_hotplug.c | 52 +- mm/mempolicy.c | 38 +- mm/migrate.c | 213 +- mm/migrate_device.c | 24 +- mm/mincore.c | 4 +- mm/mlock.c | 19 +- mm/mm_init.c | 96 +- mm/mmap.c | 41 + mm/mmap_lock.c | 175 +- mm/mprotect.c | 4 +- mm/mremap.c | 2 +- mm/page-writeback.c | 319 +- mm/page_alloc.c | 78 +- mm/page_counter.c | 173 + mm/page_ext.c | 32 +- mm/page_io.c | 22 +- mm/pagewalk.c | 57 +- mm/percpu-internal.h | 6 +- mm/percpu.c | 6 +- mm/readahead.c | 276 +- mm/rmap.c | 169 +- mm/shmem.c | 359 +- mm/slab.h | 2 +- mm/slab_common.c | 10 +- mm/slub.c | 51 +- mm/sparse-vmemmap.c | 8 + mm/sparse.c | 28 +- mm/swap.c | 51 +- mm/swap.h | 30 +- mm/swap_state.c | 120 +- mm/swapfile.c | 75 +- mm/truncate.c | 70 +- mm/userfaultfd.c | 14 +- mm/util.c | 17 + mm/vmalloc.c | 9 +- mm/vmscan.c | 188 +- mm/vmstat.c | 26 +- mm/zsmalloc.c | 175 +- mm/zswap.c | 126 +- samples/kmemleak/kmemleak-test.c | 1 + tools/include/uapi/linux/fs.h | 552 +++ tools/include/uapi/linux/prctl.h | 331 ++ tools/mm/Makefile | 2 +- tools/mm/thp_swap_allocator_test.c | 234 ++ tools/objtool/check.c | 2 + tools/testing/selftests/cgroup/config | 1 - tools/testing/selftests/damon/Makefile | 3 +- tools/testing/selftests/damon/_damon_sysfs.py | 65 +- tools/testing/selftests/damon/access_memory.c | 2 +- tools/testing/selftests/damon/access_memory_even.c | 42 + tools/testing/selftests/damon/damon_nr_regions.py | 145 + .../testing/selftests/damon/damos_tried_regions.py | 65 + tools/testing/selftests/drivers/dma-buf/udmabuf.c | 214 +- tools/testing/selftests/exec/Makefile | 1 - tools/testing/selftests/futex/functional/Makefile | 2 +- tools/testing/selftests/intel_pstate/Makefile | 2 +- tools/testing/selftests/iommu/Makefile | 2 - tools/testing/selftests/kvm/Makefile | 2 +- tools/testing/selftests/lib.mk | 3 + tools/testing/selftests/mm/.gitignore | 1 + tools/testing/selftests/mm/Makefile | 3 + tools/testing/selftests/mm/hugepage-mremap.c | 2 +- tools/testing/selftests/mm/hugetlb-soft-offline.c | 228 + tools/testing/selftests/mm/hugetlb_dio.c | 117 + tools/testing/selftests/mm/ksm_functional_tests.c | 8 +- tools/testing/selftests/mm/memfd_secret.c | 14 +- tools/testing/selftests/mm/mkdirty.c | 8 +- tools/testing/selftests/mm/mlock2.h | 1 + tools/testing/selftests/mm/mseal_helpers.h | 41 + tools/testing/selftests/mm/mseal_test.c | 143 +- tools/testing/selftests/mm/pagemap_ioctl.c | 6 +- tools/testing/selftests/mm/protection_keys.c | 2 +- tools/testing/selftests/mm/run_vmtests.sh | 7 + tools/testing/selftests/mm/seal_elf.c | 37 +- tools/testing/selftests/mm/split_huge_page_test.c | 3 +- tools/testing/selftests/mm/thuge-gen.c | 15 +- tools/testing/selftests/mm/uffd-common.c | 4 - tools/testing/selftests/mm/uffd-stress.c | 31 +- tools/testing/selftests/mm/uffd-unit-tests.c | 14 +- tools/testing/selftests/mm/va_high_addr_switch.c | 454 +- tools/testing/selftests/mm/va_high_addr_switch.sh | 4 - tools/testing/selftests/net/Makefile | 2 +- tools/testing/selftests/net/tcp_ao/Makefile | 2 +- tools/testing/selftests/proc/Makefile | 2 +- tools/testing/selftests/proc/proc-pid-vm.c | 86 + tools/testing/selftests/resctrl/Makefile | 2 +- tools/testing/selftests/ring-buffer/Makefile | 1 - tools/testing/selftests/riscv/mm/Makefile | 2 +- tools/testing/selftests/sgx/Makefile | 2 +- tools/testing/selftests/tmpfs/Makefile | 1 - 330 files changed, 12969 insertions(+), 9745 deletions(-) delete mode 100644 arch/powerpc/include/asm/book3s/64/pgtable-4k.h create mode 100644 arch/powerpc/mm/nohash/tlb_64e.c create mode 100644 arch/s390/boot/kmsan.c create mode 100644 arch/s390/include/asm/kmsan.h create mode 100644 mm/memcontrol-v1.c create mode 100644 mm/memcontrol-v1.h create mode 100644 tools/include/uapi/linux/fs.h create mode 100644 tools/include/uapi/linux/prctl.h create mode 100644 tools/mm/thp_swap_allocator_test.c create mode 100644 tools/testing/selftests/damon/access_memory_even.c create mode 100644 tools/testing/selftests/damon/damon_nr_regions.py create mode 100644 tools/testing/selftests/damon/damos_tried_regions.py create mode 100644 tools/testing/selftests/mm/hugetlb-soft-offline.c create mode 100644 tools/testing/selftests/mm/hugetlb_dio.c create mode 100644 tools/testing/selftests/mm/mseal_helpers.h . Date: Sun, 21 Jul 2024 23:57:40 +0200 From: Alexandre Belloni To: Linus Torvalds Cc: linux-rtc@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] RTC for 6.11 Hello Linus, Here is the RTC subsystem pull request for 6.11. There are mstly small fixes this cycle. The alarm offset that is getting fixed doesn't affect many RTCs as most of them have a complete set of datetime registers. The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git tags/rtc-6.11 for you to fetch changes up to efa9c5be2caecae7dfa4f29c6ab3d4a2f341eb15: rtc: stm32: add new st,stm32mp25-rtc compatible and check RIF configuration (2024-07-10 17:15:33 +0200) ---------------------------------------------------------------- RTC for 6.11 Subsystem: - add missing MODULE_DESCRIPTION() macro - fix offset addition for alarms Drivers: - isl1208: alarm clearing fixes - mcp794xx: oscillator failure detection - stm32: stm32mp25 support - tps6594: power management support ---------------------------------------------------------------- Biju Das (2): rtc: isl1208: Add a delay for clearing alarm rtc: isl1208: Update correct procedure for clearing alarm Csókás, Bence (3): rtc: ds1307: Detect oscillator fail on mcp794xx rtc: ds1307: Clamp year to valid BCD (0-99) in `set_time()` rtc: interface: Add RTC offset to alarm after fix-up Frank Li (1): dt-bindings: rtc: Convert rtc-fsl-ftm-alarm.txt to yaml format Jeff Johnson (1): rtc: add missing MODULE_DESCRIPTION() macro Joy Chakraborty (3): rtc: isl1208: Fix return value of nvmem callbacks rtc: cmos: Fix return value of nvmem callbacks rtc: abx80x: Fix return value of nvmem callback on read Richard Genoud (3): rtc: tps6594: Fix memleak in probe rtc: tps6594: introduce private structure as drvdata rtc: tps6594: Add power management support Uwe Kleine-König (1): rtc: Drop explicit initialization of struct i2c_device_id::driver_data to 0 Valentin Caron (2): dt-bindings: rtc: stm32: introduce new st,stm32mp25-rtc compatible rtc: stm32: add new st,stm32mp25-rtc compatible and check RIF configuration .../devicetree/bindings/rtc/fsl,ls-ftm-alarm.yaml | 73 ++++++++++++++++++++ .../devicetree/bindings/rtc/rtc-fsl-ftm-alarm.txt | 36 ---------- .../devicetree/bindings/rtc/st,stm32-rtc.yaml | 5 +- drivers/rtc/interface.c | 9 +-- drivers/rtc/lib_test.c | 1 + drivers/rtc/rtc-ab-b5ze-s3.c | 2 +- drivers/rtc/rtc-ab-eoz9.c | 2 +- drivers/rtc/rtc-abx80x.c | 12 ++-- drivers/rtc/rtc-bq32k.c | 2 +- drivers/rtc/rtc-cmos.c | 10 ++- drivers/rtc/rtc-ds1307.c | 7 +- drivers/rtc/rtc-ds1374.c | 2 +- drivers/rtc/rtc-ds1672.c | 2 +- drivers/rtc/rtc-ds3232.c | 2 +- drivers/rtc/rtc-em3027.c | 2 +- drivers/rtc/rtc-fm3130.c | 2 +- drivers/rtc/rtc-goldfish.c | 1 + drivers/rtc/rtc-hym8563.c | 4 +- drivers/rtc/rtc-isl12022.c | 2 +- drivers/rtc/rtc-isl1208.c | 36 ++++++---- drivers/rtc/rtc-max31335.c | 2 +- drivers/rtc/rtc-max6900.c | 2 +- drivers/rtc/rtc-mpc5121.c | 1 + drivers/rtc/rtc-nct3018y.c | 2 +- drivers/rtc/rtc-omap.c | 1 + drivers/rtc/rtc-pcf8523.c | 2 +- drivers/rtc/rtc-pcf8563.c | 6 +- drivers/rtc/rtc-pcf8583.c | 2 +- drivers/rtc/rtc-rc5t583.c | 1 + drivers/rtc/rtc-rv3029c2.c | 4 +- drivers/rtc/rtc-rx6110.c | 2 +- drivers/rtc/rtc-rx8010.c | 2 +- drivers/rtc/rtc-rx8581.c | 2 +- drivers/rtc/rtc-s35390a.c | 2 +- drivers/rtc/rtc-sd3078.c | 2 +- drivers/rtc/rtc-stm32.c | 78 ++++++++++++++++++++++ drivers/rtc/rtc-tps65910.c | 1 + drivers/rtc/rtc-tps6594.c | 75 +++++++++++++++++---- drivers/rtc/rtc-twl.c | 1 + drivers/rtc/rtc-x1205.c | 2 +- 40 files changed, 299 insertions(+), 103 deletions(-) create mode 100644 Documentation/devicetree/bindings/rtc/fsl,ls-ftm-alarm.yaml delete mode 100644 Documentation/devicetree/bindings/rtc/rtc-fsl-ftm-alarm.txt -- Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com . Date: Sun, 21 Jul 2024 15:10:13 -0700 From: Andrew Morton To: Linus Torvalds Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, mm-commits@vger.kernel.org Subject: [GIT PULL] non-MM updates for 6.11-rc1 Linus, please pull this batch of other-than-MM updates for this development cycle, thanks. I'm seeing three conflicts during a test merge. I'd incorrectly attributed these to the mm-stble branch but these are actually issues in this mm-nonmm-stable pull. Those, along with their linux-next resolutions are: include/linux/interrupt.h, vs input tree: https://lkml.kernel.org/r/20240612103235.5ef64950@canb.auug.org.au include/linux/cacheinfo.h, vs tip tree: https://lkml.kernel.org/r/20240612112746.3130d68b@canb.auug.org.au fs/bcachefs/clock.c, vs bcachefs tree: https://lkml.kernel.org/r/20240712105711.6dc900a2@canb.auug.org.au The following changes since commit f2661062f16b2de5d7b6a5c42a9a5c96326b8454: Linux 6.10-rc5 (2024-06-23 17:08:54 -0400) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm tags/mm-nonmm-stable-2024-07-21-15-07 for you to fetch changes up to 67856f44da381973caf4eb692ad2cca1de7b2d37: ia64: scrub ia64 from poison.h (2024-07-17 21:11:34 -0700) ---------------------------------------------------------------- - In the series "treewide: Refactor heap related implementation", Kuan-Wei Chiu has significantly reworked the min_heap library code and has taught bcachefs to use the new more generic implementation. - Yury Norov's series "Cleanup cpumask.h inclusion in core headers" reworks the cpumask and nodemask headers to make things generally more rational. - Kuan-Wei Chiu has sent along some maintenance work against our sorting library code in the series "lib/sort: Optimizations and cleanups". - More library maintainance work from Christophe Jaillet in the series "Remove usage of the deprecated ida_simple_xx() API". - Ryusuke Konishi continues with the nilfs2 fixes and clanups in the series "nilfs2: eliminate the call to inode_attach_wb()". - Kuan-Ying Lee has some fixes to the gdb scripts in the series "Fix GDB command error". - Plus the usual shower of singleton patches all over the place. Please see the relevant changelogs for details. ---------------------------------------------------------------- Alexey Dobriyan (4): proc: test "Kthread:" field build-id: require program headers to be right after ELF header compiler.h: simplify data_race() macro ia64: scrub ia64 from poison.h Amer Al Shanawany (1): selftests: proc: remove unreached code and fix build warning Brian Masney (1): lib/Kconfig.debug: document panic= command line option and procfs entry for PANIC_TIMEOUT Chen Ni (1): test_bpf: convert comma to semicolon Christophe JAILLET (6): fsi: occ: remove usage of the deprecated ida_simple_xx() API most: remove usage of the deprecated ida_simple_xx() API proc: remove usage of the deprecated ida_simple_xx() API ocfs2: constify struct ocfs2_lock_res_ops ocfs2: constify struct ocfs2_stack_operations nilfs2: Constify struct kobj_type Dan Carpenter (1): checkpatch: check for missing Fixes tags Ferry Meng (2): ocfs2: add bounds checking to ocfs2_xattr_find_entry() ocfs2: strict bound check before memcmp in ocfs2_xattr_find_entry() Hsin Chang Yu (1): lib/rbtree.c: fix the example typo I Hsin Cheng (2): lib/plist.c: enforce memory ordering in plist_check_list lib/plist.c: avoid worst case scenario in plist_add Jani Nikula (4): kernel/panic: return early from print_tainted() when not tainted kernel/panic: convert print_tainted() to use struct seq_buf internally kernel/panic: initialize taint_flags[] using a macro kernel/panic: add verbose logging of kernel taints in backtraces Jeff Johnson (17): backtracetest: add MODULE_DESCRIPTION() lib/ts: add missing MODULE_DESCRIPTION() macros kunit/fortify: add missing MODULE_DESCRIPTION() macros KUnit: add missing MODULE_DESCRIPTION() macros for lib/*_test.ko lib/asn1_encoder: add missing MODULE_DESCRIPTION() macro kunit: add missing MODULE_DESCRIPTION() macros to lib/*.c uuid: add missing MODULE_DESCRIPTION() macro siphash: add missing MODULE_DESCRIPTION() macro lib/test_kmod: add missing MODULE_DESCRIPTION() macro lib/test_linear_ranges: add missing MODULE_DESCRIPTION() macro KUnit: add missing MODULE_DESCRIPTION() macros for lib/test_*.ko kfifo: add missing MODULE_DESCRIPTION() macros resource: add missing MODULE_DESCRIPTION() selftests/fpu: add missing MODULE_DESCRIPTION() macro fs: ufs: add MODULE_DESCRIPTION() lib/zlib: add missing MODULE_DESCRIPTION() macro math: rational: add missing MODULE_DESCRIPTION() macro Jesse Brandeburg (1): kernel-wide: fix spelling mistakes like "assocative" -> "associative" John Hubbard (1): selftests/mqueue: fix 5 warnings about signed/unsigned mismatches Kees Cook (1): tsacct: replace strncpy() with strscpy() Kuan-Wei Chiu (21): perf/core: fix several typos bcache: fix typo bcachefs: fix typo lib min_heap: add type safe interface lib min_heap: add min_heap_init() lib min_heap: add min_heap_peek() lib min_heap: add min_heap_full() lib min_heap: add args for min_heap_callbacks lib min_heap: add min_heap_sift_up() lib min_heap: add min_heap_del() lib min_heap: update min_heap_push() and min_heap_pop() to return bool values lib min_heap: rename min_heapify() to min_heap_sift_down() lib min_heap: update min_heap_push() to use min_heap_sift_up() lib/test_min_heap: add test for heap_del() bcache: remove heap-related macros and switch to generic min_heap bcachefs: remove heap-related macros and switch to generic min_heap lib/sort: remove unused pr_fmt macro lib/sort: fix outdated comment regarding glibc qsort() lib/sort: optimize heapsort for handling final 2 or 3 elements lib/test_sort: add a testcase to ensure code coverage tools/lib/list_sort: remove redundant code for cond_resched handling Kuan-Ying Lee (6): scripts/gdb: redefine MAX_ORDER sanely scripts/gdb: rework module VA range scripts/gdb: change the layout of vmemmap scripts/gdb: set vabits_actual based on TCR_EL1 scripts/gdb: change VA_BITS_MIN when we use 16K page scripts/gdb: rename pool_index to pool_index_plus_1 Masahiro Yamada (2): init: remove unused __MEMINIT* macros init/modpost: conditionally check section mismatch to __meminit* Mateusz Guzik (1): percpu_counter: add a cmpxchg-based _add_batch variant Oleg Nesterov (1): coredump: simplify zap_process() Ryusuke Konishi (3): nilfs2: prepare backing device folios for writing after adding checksums nilfs2: do not call inode_attach_wb() directly nilfs2: avoid undefined behavior in nilfs_cnt32_ge macro Sidhartha Kumar (2): tools/testing/radix-tree: add missing MODULE_DESCRIPTION definition tools/testing/radix-tree/idr-test: add missing MODULE_DESCRIPTION define Suren Baghdasaryan (1): lib/dump_stack: report process UID in dump_stack_print_info() Thomas Gleixner (1): watchdog/perf: properly initialize the turbo mode timestamp and rearm counter Thorsten Blum (1): lib/bch.c: use swap() to improve code Uros Bizjak (1): fork: use this_cpu_try_cmpxchg() in try_release_thread_stack_to_cache() Wei-Hsin Yeh (1): include/linux/jhash.h: fix typos Wen Yang (1): selftests: introduce additional eventfd test coverage Wenchao Hao (1): crash: remove header files which are included more than once Wolfram Sang (1): checkpatch: really skip LONG_LINE_* when LONG_LINE is ignored Xiong Nandi (2): scripts/decode_stacktrace.sh: wrap nm with UTIL_PREFIX and UTIL_SUFFIX scripts/decode_stacktrace.sh: better support to ARM32 module stack trace Yang Li (1): fs: add kernel-doc comments to ocfs2_prepare_orphan_dir() Yongliang Gao (1): hung_task: ignore hung_task_warnings when hung_task_panic is enabled Yury Norov (6): MAINTAINERS: add linux/nodemask_types.h to BITMAP API sched: avoid using ilog2() in sched.h cpumask: split out include/linux/cpumask_types.h sched: drop sched.h dependency on cpumask cpumask: cleanup core headers inclusion cpumask: make core headers including cpumask_types.h where possible lei lu (1): ocfs2: add bounds checking to ocfs2_check_dir_entry() MAINTAINERS | 2 + arch/powerpc/kernel/vmlinux.lds.S | 2 - drivers/fsi/fsi-occ.c | 17 +- drivers/gpu/drm/i915/gem/i915_gem_execbuffer.c | 2 +- drivers/md/bcache/alloc.c | 64 +++++-- drivers/md/bcache/bcache.h | 2 +- drivers/md/bcache/bset.c | 124 +++++++++----- drivers/md/bcache/bset.h | 40 ++--- drivers/md/bcache/btree.c | 69 ++++---- drivers/md/bcache/extents.c | 53 +++--- drivers/md/bcache/movinggc.c | 41 +++-- drivers/md/bcache/super.c | 3 +- drivers/md/bcache/sysfs.c | 4 +- drivers/md/bcache/util.c | 2 +- drivers/md/bcache/util.h | 67 +------- drivers/md/bcache/writeback.c | 13 +- drivers/md/dm-vdo/repair.c | 19 ++- drivers/md/dm-vdo/slab-depot.c | 14 +- drivers/most/core.c | 10 +- drivers/most/most_cdev.c | 6 +- drivers/net/wireless/ti/wl1251/acx.h | 2 +- drivers/scsi/qedf/qedf_main.c | 2 +- drivers/staging/rtl8723bs/core/rtw_mlme_ext.c | 2 +- drivers/staging/rtl8723bs/core/rtw_pwrctrl.c | 2 +- fs/bcachefs/clock.c | 47 ++++-- fs/bcachefs/clock_types.h | 2 +- fs/bcachefs/ec.c | 76 ++++++--- fs/bcachefs/ec_types.h | 2 +- fs/bcachefs/util.c | 2 +- fs/bcachefs/util.h | 118 +------------ fs/coredump.c | 14 +- fs/nilfs2/segment.c | 91 ++++++---- fs/nilfs2/sysfs.c | 6 +- fs/ocfs2/dir.c | 46 +++-- fs/ocfs2/dlmglue.c | 28 +-- fs/ocfs2/namei.c | 2 + fs/ocfs2/ocfs2.h | 2 +- fs/ocfs2/stack_o2cb.c | 2 +- fs/ocfs2/stack_user.c | 2 +- fs/ocfs2/stackglue.h | 2 +- fs/ocfs2/xattr.c | 27 ++- fs/proc/generic.c | 6 +- fs/ufs/super.c | 1 + include/asm-generic/vmlinux.lds.h | 18 +- include/linux/cacheinfo.h | 2 +- include/linux/cgroup.h | 1 - include/linux/clockchips.h | 2 +- include/linux/compiler.h | 6 +- include/linux/cpu.h | 1 - include/linux/cpu_cooling.h | 1 - include/linux/cpu_rmap.h | 2 +- include/linux/cpumask.h | 56 +----- include/linux/cpumask_types.h | 66 ++++++++ include/linux/init.h | 18 +- include/linux/interrupt.h | 2 +- include/linux/irqchip/irq-partition-percpu.h | 2 +- include/linux/jhash.h | 6 +- include/linux/kernel_stat.h | 1 - include/linux/min_heap.h | 188 ++++++++++++++++----- include/linux/msi.h | 2 +- include/linux/node.h | 1 - include/linux/nvme-fc-driver.h | 2 +- include/linux/panic.h | 8 +- include/linux/percpu.h | 1 - include/linux/pm_domain.h | 2 +- include/linux/poison.h | 6 - include/linux/profile.h | 1 - include/linux/rcupdate.h | 1 - include/linux/sched.h | 7 +- include/linux/seq_file.h | 1 - include/linux/soc/apple/rtkit.h | 4 +- include/linux/stop_machine.h | 2 +- include/linux/torture.h | 2 +- include/linux/tracepoint.h | 1 - include/linux/workqueue.h | 2 +- kernel/backtracetest.c | 1 + kernel/crash_reserve.c | 1 - kernel/events/core.c | 29 ++-- kernel/fork.c | 7 +- kernel/hung_task.c | 2 +- kernel/panic.c | 116 +++++++++---- kernel/resource_kunit.c | 1 + kernel/tsacct.c | 2 +- kernel/watchdog_perf.c | 11 +- lib/Kconfig.debug | 4 +- lib/asn1_encoder.c | 1 + lib/atomic64_test.c | 1 + lib/bch.c | 20 +-- lib/bitfield_kunit.c | 1 + lib/buildid.c | 14 ++ lib/checksum_kunit.c | 1 + lib/cmdline_kunit.c | 1 + lib/dhry_run.c | 1 + lib/dump_stack.c | 9 +- lib/fortify_kunit.c | 1 + lib/hashtable_test.c | 1 + lib/is_signed_type_kunit.c | 1 + lib/math/rational.c | 1 + lib/memcpy_kunit.c | 1 + lib/overflow_kunit.c | 1 + lib/percpu_counter.c | 44 ++++- lib/plist.c | 42 ++++- lib/rbtree.c | 8 +- lib/siphash_kunit.c | 1 + lib/sort.c | 14 +- lib/stackinit_kunit.c | 1 + lib/test-kstrtox.c | 1 + lib/test_bits.c | 1 + lib/test_blackhole_dev.c | 1 + lib/test_bpf.c | 4 +- lib/test_firmware.c | 1 + lib/test_fpu_glue.c | 1 + lib/test_free_pages.c | 1 + lib/test_hash.c | 1 + lib/test_hexdump.c | 1 + lib/test_ida.c | 1 + lib/test_kmod.c | 1 + lib/test_kprobes.c | 3 +- lib/test_linear_ranges.c | 1 + lib/test_list_sort.c | 1 + lib/test_memcat_p.c | 1 + lib/test_meminit.c | 1 + lib/test_min_heap.c | 76 ++++++--- lib/test_module.c | 1 + lib/test_ref_tracker.c | 3 +- lib/test_sort.c | 15 +- lib/test_static_key_base.c | 1 + lib/test_static_keys.c | 1 + lib/test_sysctl.c | 1 + lib/test_uuid.c | 1 + lib/ts_bm.c | 1 + lib/ts_fsm.c | 1 + lib/ts_kmp.c | 1 + lib/zlib_deflate/deflate_syms.c | 1 + net/netfilter/nf_conntrack_core.c | 2 +- net/tipc/socket.c | 2 +- samples/kfifo/bytestream-example.c | 1 + samples/kfifo/dma-example.c | 1 + samples/kfifo/inttype-example.c | 1 + samples/kfifo/record-example.c | 1 + scripts/checkpatch.pl | 26 ++- scripts/decode_stacktrace.sh | 6 +- scripts/gdb/linux/mm.py | 23 ++- scripts/gdb/linux/stackdepot.py | 8 +- scripts/mod/modpost.c | 19 +-- scripts/spelling.txt | 3 + tools/lib/list_sort.c | 10 -- tools/testing/radix-tree/idr-test.c | 1 + tools/testing/radix-tree/maple.c | 1 + tools/testing/radix-tree/xarray.c | 1 + .../selftests/filesystems/eventfd/eventfd_test.c | 136 ++++++++++++++- tools/testing/selftests/mqueue/mq_perf_tests.c | 6 +- tools/testing/selftests/proc/.gitignore | 2 + tools/testing/selftests/proc/Makefile | 2 + tools/testing/selftests/proc/proc-2-is-kthread.c | 53 ++++++ tools/testing/selftests/proc/proc-empty-vm.c | 3 - .../selftests/proc/proc-self-isnt-kthread.c | 37 ++++ 157 files changed, 1416 insertions(+), 845 deletions(-) create mode 100644 include/linux/cpumask_types.h create mode 100644 tools/testing/selftests/proc/proc-2-is-kthread.c create mode 100644 tools/testing/selftests/proc/proc-self-isnt-kthread.c . Date: Sun, 21 Jul 2024 18:55:51 -0500 From: Steve French To: Linus Torvalds Cc: CIFS , Namjae Jeon , LKML Subject: [GIT PULL] ksmbd server fixes Please pull the following changes since commit 0c3836482481200ead7b416ca80c68a29cfdaabd: Linux 6.10 (2024-07-14 15:43:32 -0700) are available in the Git repository at: git://git.samba.org/ksmbd.git tags/6.11-rc-smb3-server-fixes for you to fetch changes up to d484d621d40f4a8b8959008802d79bef3609641b: ksmbd: add durable scavenger timer (2024-07-14 21:45:40 -0500) ---------------------------------------------------------------- four ksmbd server fixes - two durable handle improvements - two small cleanup patches ---------------------------------------------------------------- ChenXiaoSong (1): ksmbd: remove duplicate SMB2 Oplock levels definitions Christophe JAILLET (1): ksmbd: Constify struct ksmbd_transport_ops Namjae Jeon (2): ksmbd: avoid reclaiming expired durable opens by the client ksmbd: add durable scavenger timer fs/smb/server/connection.h | 4 +- fs/smb/server/mgmt/user_session.c | 2 + fs/smb/server/oplock.h | 7 --- fs/smb/server/server.c | 1 + fs/smb/server/server.h | 1 + fs/smb/server/smb2pdu.c | 2 +- fs/smb/server/smb2pdu.h | 2 + fs/smb/server/transport_rdma.c | 4 +- fs/smb/server/transport_tcp.c | 4 +- fs/smb/server/vfs_cache.c | 173 ++++++++++++++++++++++++++++++++++++++++++++++-- fs/smb/server/vfs_cache.h | 3 + 11 files changed, 183 insertions(+), 20 deletions(-) -- Thanks, Steve . Date: Mon, 22 Jul 2024 12:40:14 +0300 From: Konstantin Komarov To: Subject: [GIT PULL] ntfs3: bugfixes for 6.11 Please pull this branch containing ntfs3 code for 6.11. All changed code was in linux-next branch for several weeks. Regards, Konstantin The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: https://github.com/Paragon-Software-Group/linux-ntfs3.git tags/ntfs3_for_6.11 for you to fetch changes up to 911daf695a740d9a58daef65dabfb5f69f18190f: fs/ntfs3: Fix formatting, change comments, renaming (2024-07-11 12:19:46 +0300) ---------------------------------------------------------------- ntfs3 changes for 6.11-rc1 Added: simple fileattr has been implement. Fixed: transform resident to nonresident for compressed files; the format of the "nocase" mount option; getting file type; many other internal bugs. Refactored: unused function and macros have been removed; partial transition from page to folio (suggested by Matthew Wilcox); legacy ntfs support. ---------------------------------------------------------------- Andy Shevchenko (1): fs/ntfs3: Drop stray '\' (backslash) in formatting string Huacai Chen (1): fs/ntfs3: Update log->page_{mask,bits} if log->page_size changed Konstantin Komarov (29): fs/ntfs3: Remove unused function fs/ntfs3: Merge synonym COMPRESSION_UNIT and NTFS_LZNT_CUNIT fs/ntfs3: Simplify initialization of $AttrDef and $UpCase fs/ntfs3: Use macros NTFS_LABEL_MAX_LENGTH instead of hardcoded value fs/ntfs3: Remove unused macros MAXIMUM_REPARSE_DATA_BUFFER_SIZE fs/ntfs3: Fix transform resident to nonresident for compressed files fs/ntfs3: Deny getting attr data block in compressed frame fs/ntfs3: Missed NI_FLAG_UPDATE_PARENT setting fs/ntfs3: Fix getting file type fs/ntfs3: Remove sync_blockdev_nowait() fs/ntfs3: Add missing .dirty_folio in address_space_operations fs/ntfs3: Fix attr_insert_range at end of file fs/ntfs3: Replace inode_trylock with inode_lock fs/ntfs3: One more reason to mark inode bad fs/ntfs3: Correct undo if ntfs_create_inode failed fs/ntfs3: Add a check for attr_names and oatbl fs/ntfs3: Rename variables fs/ntfs3: Add some comments fs/ntfs3: Fix field-spanning write in INDEX_HDR fs/ntfs3: Fix the format of the "nocase" mount option fs/ntfs3: Missed error return fs/ntfs3: Keep runs for $MFT::$ATTR_DATA and $MFT::$ATTR_BITMAP fs/ntfs3: Do copy_to_user out of run_lock fs/ntfs3: Check more cases when directory is corrupted fs/ntfs3: Minor ntfs_list_ea refactoring fs/ntfs3: Use function file_inode to get inode from file fs/ntfs3: Redesign legacy ntfs support fs/ntfs3: Implement simple fileattr fs/ntfs3: Fix formatting, change comments, renaming Matthew Wilcox (Oracle) (10): ntfs3: Convert ntfs_read_folio to use a folio ntfs3: Convert ntfs_write_begin to use a folio ntfs3: Convert attr_data_read_resident() to take a folio ntfs3: Convert ntfs_write_end() to work on a folio ntfs3: Convert attr_data_write_resident to use a folio ntfs3: Convert attr_make_nonresident to use a folio ntfs3: Remove calls to set/clear the error flag ntfs3: Convert ntfs_get_frame_pages() to use a folio ntfs3: Convert ni_readpage_cmpr() to take a folio ntfs3: Convert attr_wof_frame_info() to use a folio lei lu (1): fs/ntfs3: Validate ff offset fs/ntfs3/attrib.c | 132 ++++++++++++++++++++++++++++------------------------- fs/ntfs3/bitmap.c | 2 +- fs/ntfs3/dir.c | 57 ++++++++++++++--------- fs/ntfs3/file.c | 124 +++++++++++++++++++++++++++++++++++++------------ fs/ntfs3/frecord.c | 110 +++++++++++++++++++++++++++++++++++--------- fs/ntfs3/fslog.c | 77 +++++++++++++++++++++---------- fs/ntfs3/fsntfs.c | 11 +++-- fs/ntfs3/index.c | 4 +- fs/ntfs3/inode.c | 119 ++++++++++++++++++++++++----------------------- fs/ntfs3/namei.c | 6 +-- fs/ntfs3/ntfs.h | 15 ++---- fs/ntfs3/ntfs_fs.h | 36 ++++++--------- fs/ntfs3/super.c | 71 +++++++++++----------------- fs/ntfs3/xattr.c | 25 +++++----- 14 files changed, 480 insertions(+), 309 deletions(-) . Date: Mon, 22 Jul 2024 15:32:06 +0200 From: "Rafael J. Wysocki" To: Linus Torvalds Cc: Linux PM , Linux Kernel Mailing List , Daniel Lezcano Subject: [GIT PULL] Thermal control fix for v6.11-rc1 Hi Linus, Please pull from the tag git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git \ thermal-6.11-rc1-2 with top-most commit e528be3c87be953b73e7826a2d7e4b837cbad39d thermal: core: Allow thermal zones to tell the core to ignore them on top of commit 51835949dda3783d4639cfa74ce13a3c9829de00 Merge tag 'net-next-6.11' of git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next to receive a thermal control fix for 6.11-rc1. This fixes a flood of kernel messages coming from the thermal core on systems where iwlwifi is loaded, but the network interfaces controlled by it are down. Thanks! --------------- Rafael J. Wysocki (1): thermal: core: Allow thermal zones to tell the core to ignore them --------------- drivers/net/wireless/intel/iwlwifi/mvm/tt.c | 10 ++++-- drivers/thermal/thermal_core.c | 51 ++++++++++++++--------------- drivers/thermal/thermal_core.h | 3 ++ drivers/thermal/thermal_helpers.c | 2 ++ 4 files changed, 37 insertions(+), 29 deletions(-) . Date: Mon, 22 Jul 2024 22:48:22 +0800 From: Huacai Chen To: Linus Torvalds , Arnd Bergmann , Huacai Chen Cc: loongarch@lists.linux.dev, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, Guo Ren , Xuerui Wang , Jiaxun Yang , Huacai Chen Subject: [GIT PULL] LoongArch changes for v6.11 The following changes since commit 0c3836482481200ead7b416ca80c68a29cfdaabd: Linux 6.10 (2024-07-14 15:43:32 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson.git tags/loongarch-6.11 for you to fetch changes up to 998b17d4440b8559a8bf4926e86f493101995519: LoongArch: Make the users of larch_insn_gen_break() constant (2024-07-20 22:41:07 +0800) ---------------------------------------------------------------- LoongArch changes for v6.11 1, Define __ARCH_WANT_NEW_STAT in unistd.h; 2, Always enumerate MADT and setup logical-physical CPU mapping; 3, Add irq_work support via self IPIs; 4, Add RANDOMIZE_KSTACK_OFFSET support; 5, Add ARCH_HAS_PTE_DEVMAP support; 6, Add ARCH_HAS_DEBUG_VM_PGTABLE support; 7, Add writecombine support for DMW-based ioremap(); 8, Add architectural preparation for CPUFreq; 9, Add ACPI standard hardware register based S3 support; 10, Add support for relocating the kernel with RELR relocation; 11, Some bug fixes and other small changes. ---------------------------------------------------------------- Huacai Chen (10): Merge tag 'asm-generic-6.11' into loongarch-next LoongArch: Define __ARCH_WANT_NEW_STAT in unistd.h LoongArch: Always enumerate MADT and setup logical-physical CPU mapping LoongArch: Add irq_work support via self IPIs LoongArch: Add ARCH_HAS_PTE_DEVMAP support LoongArch: Add ARCH_HAS_DEBUG_VM_PGTABLE support LoongArch: Add writecombine support for DMW-based ioremap() LoongArch: Add architectural preparation for CPUFreq LoongArch: Automatically disable KASLR for hibernation LoongArch: Use correct API to map cmdline in relocate_kernel() Jiaxun Yang (1): LoongArch: Add ACPI standard hardware register based S3 support Jinjie Ruan (1): LoongArch: Add RANDOMIZE_KSTACK_OFFSET support Oleg Nesterov (1): LoongArch: Make the users of larch_insn_gen_break() constant Tiezhu Yang (1): LoongArch: Check TIF_LOAD_WATCH to enable user space watchpoint WANG Rui (1): LoongArch: Use rustc option -Zdirect-access-external-data Xi Ruoyao (2): LoongArch: Remove a redundant checking in relocator LoongArch: Add support for relocating the kernel with RELR relocation .../debug/debug-vm-pgtable/arch-support.txt | 2 +- arch/loongarch/Kconfig | 5 +++ arch/loongarch/Makefile | 3 +- arch/loongarch/include/asm/addrspace.h | 4 ++ arch/loongarch/include/asm/asmmacro.h | 1 + arch/loongarch/include/asm/hardirq.h | 3 +- arch/loongarch/include/asm/inst.h | 3 ++ arch/loongarch/include/asm/io.h | 10 ++++- arch/loongarch/include/asm/irq_work.h | 10 +++++ arch/loongarch/include/asm/loongarch.h | 13 +++++- arch/loongarch/include/asm/pgtable-bits.h | 6 ++- arch/loongarch/include/asm/pgtable.h | 19 ++++++++ arch/loongarch/include/asm/setup.h | 5 +++ arch/loongarch/include/asm/smp.h | 2 + arch/loongarch/include/asm/stackframe.h | 11 +++++ arch/loongarch/include/asm/unistd.h | 1 + arch/loongarch/include/asm/uprobes.h | 4 +- arch/loongarch/kernel/Makefile.syscalls | 3 +- arch/loongarch/kernel/acpi.c | 22 ++++++--- arch/loongarch/kernel/head.S | 11 +---- arch/loongarch/kernel/hw_breakpoint.c | 2 +- arch/loongarch/kernel/kprobes.c | 4 +- arch/loongarch/kernel/paravirt.c | 6 +++ arch/loongarch/kernel/ptrace.c | 3 ++ arch/loongarch/kernel/relocate.c | 52 ++++++++++++++++++++-- arch/loongarch/kernel/setup.c | 4 +- arch/loongarch/kernel/smp.c | 21 +++++++-- arch/loongarch/kernel/syscall.c | 22 ++++++++- arch/loongarch/kernel/vmlinux.lds.S | 8 ++++ arch/loongarch/power/platform.c | 37 ++++++++++++--- arch/loongarch/power/suspend_asm.S | 8 +--- drivers/firmware/efi/libstub/loongarch.c | 2 + 32 files changed, 256 insertions(+), 51 deletions(-) create mode 100644 arch/loongarch/include/asm/irq_work.h . Date: Mon, 22 Jul 2024 13:12:31 -0400 From: Kent Overstreet To: Linus Torvalds Cc: linux-bcachefs@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] bcachefs fixes for 6.11-rc1 The following changes since commit a97b43fac5b9b3ffca71b8a917a249789902fce9: lockdep: Add comments for lockdep_set_no{validate,track}_class() (2024-07-18 18:33:30 -0400) are available in the Git repository at: https://evilpiepirate.org/git/bcachefs.git tags/bcachefs-2024-07-22 for you to fetch changes up to 737759fc098f7bb7fb4cef64fec731803e955e01: bcachefs: Fix printbuf usage while atomic (2024-07-22 11:27:15 -0400) ---------------------------------------------------------------- bcachefs fixes for 6.11-rc1 - another fix for fsck getting stuck, from marcin - small syzbot fix - another undefined shift fix ---------------------------------------------------------------- Kent Overstreet (3): bcachefs: kill btree_trans_too_many_iters() in bch2_bucket_alloc_freelist() bcachefs: More informative error message in reattach_inode() bcachefs: Fix printbuf usage while atomic Tavian Barnes (1): bcachefs: mean_and_variance: Avoid too-large shift amounts fs/bcachefs/alloc_foreground.c | 6 ------ fs/bcachefs/fsck.c | 7 +++++-- fs/bcachefs/journal_reclaim.c | 1 + fs/bcachefs/mean_and_variance.h | 6 +++--- 4 files changed, 9 insertions(+), 11 deletions(-) . Date: Mon, 22 Jul 2024 21:27:20 +0200 (CEST) From: Thomas Gleixner To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] irq/msi for v6.11-rc1 Linus, please pull the latest irq/msi branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-msi-2024-07-= 22 up to: c9b4f313f6b8: irqchip/gic-v3-its: Correctly fish out the DID for plat= form MSI Switch ARM/ARM64 over to the modern per device MSI domains: This simplifies the handling of platform MSI and wire to MSI controllers and removes about 500 lines of legacy code. Aside of that it paves the way for ARM/ARM64 to utilize the dynamic allocation of PCI/MSI interrupts and to support the upcoming non standard IMS (Interrupt Message Store) mechanism on PCIe devices This has been split out from the original pull request and the two fixlets from Marc which cure the issues observed by Johan have been added on top. Thanks, tglx ------------------> Anna-Maria Behnsen (2): irqchip/imx-mu-msi: Fix codingstyle in imx_mu_msi_domains_init() irqdomain: Fix formatting irq_find_matching_fwspec() kerneldoc comment Marc Zyngier (2): irqchip/gic-v3-its: Correctly honor the RID remapping irqchip/gic-v3-its: Correctly fish out the DID for platform MSI Shivamurthy Shastri (1): PCI/MSI: Provide MSI_FLAG_PCI_MSI_MASK_PARENT Thomas Gleixner (20): irqchip: Provide irq-msi-lib irqchip/gic-v3-its: Provide MSI parent infrastructure irqchip/irq-msi-lib: Prepare for PCI MSI/MSIX irqchip/gic-v3-its: Provide MSI parent for PCI/MSI[-X] irqchip/irq-msi-lib: Prepare for DEVICE MSI to replace platform MSI irqchip/mbigen: Prepare for real per device MSI irqchip/irq-msi-lib: Prepare for DOMAIN_BUS_WIRED_TO_MSI irqchip/gic-v3-its: Switch platform MSI to MSI parent irqchip/mbigen: Remove platform_msi_create_device_domain() fallback genirq/msi: Remove platform_msi_create_device_domain() irqchip/gic_v3_mbi: Switch over to parent domain irqchip/gic-v2m: Switch to device MSI irqchip/imx-mu-msi: Switch to MSI parent irqchip/irq-mvebu-icu: Prepare for real per device MSI irqchip/mvebu-gicp: Switch to MSI parent irqchip/mvebu-odmi: Switch to parent MSI irqchip/irq-mvebu-sei: Switch to MSI parent irqchip/irq-mvebu-icu: Remove platform MSI leftovers genirq/msi: Remove platform MSI leftovers genirq/msi: Move msi_device_data to core drivers/base/platform-msi.c | 350 +-----------------------= -- drivers/irqchip/Kconfig | 8 + drivers/irqchip/Makefile | 4 +- drivers/irqchip/irq-gic-common.h | 3 + drivers/irqchip/irq-gic-v2m.c | 81 ++---- drivers/irqchip/irq-gic-v3-its-msi-parent.c | 210 ++++++++++++++++ drivers/irqchip/irq-gic-v3-its-pci-msi.c | 202 --------------- drivers/irqchip/irq-gic-v3-its-platform-msi.c | 163 ------------ drivers/irqchip/irq-gic-v3-its.c | 5 + drivers/irqchip/irq-gic-v3-mbi.c | 130 ++++------ drivers/irqchip/irq-imx-mu-msi.c | 54 ++-- drivers/irqchip/irq-mbigen.c | 96 +++---- drivers/irqchip/irq-msi-lib.c | 140 +++++++++++ drivers/irqchip/irq-msi-lib.h | 27 ++ drivers/irqchip/irq-mvebu-gicp.c | 44 ++-- drivers/irqchip/irq-mvebu-icu.c | 275 +++++++++----------- drivers/irqchip/irq-mvebu-odmi.c | 37 ++- drivers/irqchip/irq-mvebu-sei.c | 52 ++-- drivers/pci/msi/irqdomain.c | 20 ++ include/linux/msi.h | 52 +--- kernel/irq/irqdomain.c | 3 +- kernel/irq/msi.c | 95 ++----- 22 files changed, 747 insertions(+), 1304 deletions(-) create mode 100644 drivers/irqchip/irq-gic-v3-its-msi-parent.c delete mode 100644 drivers/irqchip/irq-gic-v3-its-pci-msi.c delete mode 100644 drivers/irqchip/irq-gic-v3-its-platform-msi.c create mode 100644 drivers/irqchip/irq-msi-lib.c create mode 100644 drivers/irqchip/irq-msi-lib.h diff --git a/drivers/base/platform-msi.c b/drivers/base/platform-msi.c index 11f5fdf65b9e..0e60dd650b5e 100644 --- a/drivers/base/platform-msi.c +++ b/drivers/base/platform-msi.c @@ -4,346 +4,12 @@ * * Copyright (C) 2015 ARM Limited, All Rights Reserved. * Author: Marc Zyngier + * Copyright (C) 2022 Linutronix GmbH */ =20 #include -#include -#include #include #include -#include - -/* Begin of removal area. Once everything is converted over. Cleanup the inc= ludes too! */ - -#define DEV_ID_SHIFT 21 -#define MAX_DEV_MSIS (1 << (32 - DEV_ID_SHIFT)) - -/* - * Internal data structure containing a (made up, but unique) devid - * and the callback to write the MSI message. - */ -struct platform_msi_priv_data { - struct device *dev; - void *host_data; - msi_alloc_info_t arg; - irq_write_msi_msg_t write_msg; - int devid; -}; - -/* The devid allocator */ -static DEFINE_IDA(platform_msi_devid_ida); - -#ifdef GENERIC_MSI_DOMAIN_OPS -/* - * Convert an msi_desc to a globaly unique identifier (per-device - * devid + msi_desc position in the msi_list). - */ -static irq_hw_number_t platform_msi_calc_hwirq(struct msi_desc *desc) -{ - u32 devid =3D desc->dev->msi.data->platform_data->devid; - - return (devid << (32 - DEV_ID_SHIFT)) | desc->msi_index; -} - -static void platform_msi_set_desc(msi_alloc_info_t *arg, struct msi_desc *de= sc) -{ - arg->desc =3D desc; - arg->hwirq =3D platform_msi_calc_hwirq(desc); -} - -static int platform_msi_init(struct irq_domain *domain, - struct msi_domain_info *info, - unsigned int virq, irq_hw_number_t hwirq, - msi_alloc_info_t *arg) -{ - return irq_domain_set_hwirq_and_chip(domain, virq, hwirq, - info->chip, info->chip_data); -} - -static void platform_msi_set_proxy_dev(msi_alloc_info_t *arg) -{ - arg->flags |=3D MSI_ALLOC_FLAGS_PROXY_DEVICE; -} -#else -#define platform_msi_set_desc NULL -#define platform_msi_init NULL -#define platform_msi_set_proxy_dev(x) do {} while(0) -#endif - -static void platform_msi_update_dom_ops(struct msi_domain_info *info) -{ - struct msi_domain_ops *ops =3D info->ops; - - BUG_ON(!ops); - - if (ops->msi_init =3D=3D NULL) - ops->msi_init =3D platform_msi_init; - if (ops->set_desc =3D=3D NULL) - ops->set_desc =3D platform_msi_set_desc; -} - -static void platform_msi_write_msg(struct irq_data *data, struct msi_msg *ms= g) -{ - struct msi_desc *desc =3D irq_data_get_msi_desc(data); - - desc->dev->msi.data->platform_data->write_msg(desc, msg); -} - -static void platform_msi_update_chip_ops(struct msi_domain_info *info) -{ - struct irq_chip *chip =3D info->chip; - - BUG_ON(!chip); - if (!chip->irq_mask) - chip->irq_mask =3D irq_chip_mask_parent; - if (!chip->irq_unmask) - chip->irq_unmask =3D irq_chip_unmask_parent; - if (!chip->irq_eoi) - chip->irq_eoi =3D irq_chip_eoi_parent; - if (!chip->irq_set_affinity) - chip->irq_set_affinity =3D msi_domain_set_affinity; - if (!chip->irq_write_msi_msg) - chip->irq_write_msi_msg =3D platform_msi_write_msg; - if (WARN_ON((info->flags & MSI_FLAG_LEVEL_CAPABLE) && - !(chip->flags & IRQCHIP_SUPPORTS_LEVEL_MSI))) - info->flags &=3D ~MSI_FLAG_LEVEL_CAPABLE; -} - -/** - * platform_msi_create_irq_domain - Create a platform MSI interrupt domain - * @fwnode: Optional fwnode of the interrupt controller - * @info: MSI domain info - * @parent: Parent irq domain - * - * Updates the domain and chip ops and creates a platform MSI - * interrupt domain. - * - * Returns: - * A domain pointer or NULL in case of failure. - */ -struct irq_domain *platform_msi_create_irq_domain(struct fwnode_handle *fwno= de, - struct msi_domain_info *info, - struct irq_domain *parent) -{ - struct irq_domain *domain; - - if (info->flags & MSI_FLAG_USE_DEF_DOM_OPS) - platform_msi_update_dom_ops(info); - if (info->flags & MSI_FLAG_USE_DEF_CHIP_OPS) - platform_msi_update_chip_ops(info); - info->flags |=3D MSI_FLAG_DEV_SYSFS | MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS | - MSI_FLAG_FREE_MSI_DESCS; - - domain =3D msi_create_irq_domain(fwnode, info, parent); - if (domain) - irq_domain_update_bus_token(domain, DOMAIN_BUS_PLATFORM_MSI); - - return domain; -} -EXPORT_SYMBOL_GPL(platform_msi_create_irq_domain); - -static int platform_msi_alloc_priv_data(struct device *dev, unsigned int nve= c, - irq_write_msi_msg_t write_msi_msg) -{ - struct platform_msi_priv_data *datap; - int err; - - /* - * Limit the number of interrupts to 2048 per device. Should we - * need to bump this up, DEV_ID_SHIFT should be adjusted - * accordingly (which would impact the max number of MSI - * capable devices). - */ - if (!dev->msi.domain || !write_msi_msg || !nvec || nvec > MAX_DEV_MSIS) - return -EINVAL; - - if (dev->msi.domain->bus_token !=3D DOMAIN_BUS_PLATFORM_MSI) { - dev_err(dev, "Incompatible msi_domain, giving up\n"); - return -EINVAL; - } - - err =3D msi_setup_device_data(dev); - if (err) - return err; - - /* Already initialized? */ - if (dev->msi.data->platform_data) - return -EBUSY; - - datap =3D kzalloc(sizeof(*datap), GFP_KERNEL); - if (!datap) - return -ENOMEM; - - datap->devid =3D ida_alloc_max(&platform_msi_devid_ida, - (1 << DEV_ID_SHIFT) - 1, GFP_KERNEL); - if (datap->devid < 0) { - err =3D datap->devid; - kfree(datap); - return err; - } - - datap->write_msg =3D write_msi_msg; - datap->dev =3D dev; - dev->msi.data->platform_data =3D datap; - return 0; -} - -static void platform_msi_free_priv_data(struct device *dev) -{ - struct platform_msi_priv_data *data =3D dev->msi.data->platform_data; - - dev->msi.data->platform_data =3D NULL; - ida_free(&platform_msi_devid_ida, data->devid); - kfree(data); -} - -/** - * platform_msi_domain_alloc_irqs - Allocate MSI interrupts for @dev - * @dev: The device for which to allocate interrupts - * @nvec: The number of interrupts to allocate - * @write_msi_msg: Callback to write an interrupt message for @dev - * - * Returns: - * Zero for success, or an error code in case of failure - */ -static int platform_msi_domain_alloc_irqs(struct device *dev, unsigned int n= vec, - irq_write_msi_msg_t write_msi_msg) -{ - int err; - - err =3D platform_msi_alloc_priv_data(dev, nvec, write_msi_msg); - if (err) - return err; - - err =3D msi_domain_alloc_irqs_range(dev, MSI_DEFAULT_DOMAIN, 0, nvec - 1); - if (err) - platform_msi_free_priv_data(dev); - - return err; -} - -/** - * platform_msi_get_host_data - Query the private data associated with - * a platform-msi domain - * @domain: The platform-msi domain - * - * Return: The private data provided when calling - * platform_msi_create_device_domain(). - */ -void *platform_msi_get_host_data(struct irq_domain *domain) -{ - struct platform_msi_priv_data *data =3D domain->host_data; - - return data->host_data; -} - -static struct lock_class_key platform_device_msi_lock_class; - -/** - * __platform_msi_create_device_domain - Create a platform-msi device domain - * - * @dev: The device generating the MSIs - * @nvec: The number of MSIs that need to be allocated - * @is_tree: flag to indicate tree hierarchy - * @write_msi_msg: Callback to write an interrupt message for @dev - * @ops: The hierarchy domain operations to use - * @host_data: Private data associated to this domain - * - * Return: An irqdomain for @nvec interrupts on success, NULL in case of err= or. - * - * This is for interrupt domains which stack on a platform-msi domain - * created by platform_msi_create_irq_domain(). @dev->msi.domain points to - * that platform-msi domain which is the parent for the new domain. - */ -struct irq_domain * -__platform_msi_create_device_domain(struct device *dev, - unsigned int nvec, - bool is_tree, - irq_write_msi_msg_t write_msi_msg, - const struct irq_domain_ops *ops, - void *host_data) -{ - struct platform_msi_priv_data *data; - struct irq_domain *domain; - int err; - - err =3D platform_msi_alloc_priv_data(dev, nvec, write_msi_msg); - if (err) - return NULL; - - /* - * Use a separate lock class for the MSI descriptor mutex on - * platform MSI device domains because the descriptor mutex nests - * into the domain mutex. See alloc/free below. - */ - lockdep_set_class(&dev->msi.data->mutex, &platform_device_msi_lock_class); - - data =3D dev->msi.data->platform_data; - data->host_data =3D host_data; - domain =3D irq_domain_create_hierarchy(dev->msi.domain, 0, - is_tree ? 0 : nvec, - dev->fwnode, ops, data); - if (!domain) - goto free_priv; - - platform_msi_set_proxy_dev(&data->arg); - err =3D msi_domain_prepare_irqs(domain->parent, dev, nvec, &data->arg); - if (err) - goto free_domain; - - return domain; - -free_domain: - irq_domain_remove(domain); -free_priv: - platform_msi_free_priv_data(dev); - return NULL; -} - -/** - * platform_msi_device_domain_free - Free interrupts associated with a platf= orm-msi - * device domain - * - * @domain: The platform-msi device domain - * @virq: The base irq from which to perform the free operation - * @nr_irqs: How many interrupts to free from @virq - */ -void platform_msi_device_domain_free(struct irq_domain *domain, unsigned int= virq, - unsigned int nr_irqs) -{ - struct platform_msi_priv_data *data =3D domain->host_data; - - msi_lock_descs(data->dev); - msi_domain_depopulate_descs(data->dev, virq, nr_irqs); - irq_domain_free_irqs_common(domain, virq, nr_irqs); - msi_free_msi_descs_range(data->dev, virq, virq + nr_irqs - 1); - msi_unlock_descs(data->dev); -} - -/** - * platform_msi_device_domain_alloc - Allocate interrupts associated with - * a platform-msi device domain - * - * @domain: The platform-msi device domain - * @virq: The base irq from which to perform the allocate operation - * @nr_irqs: How many interrupts to allocate from @virq - * - * Return 0 on success, or an error code on failure. Must be called - * with irq_domain_mutex held (which can only be done as part of a - * top-level interrupt allocation). - */ -int platform_msi_device_domain_alloc(struct irq_domain *domain, unsigned int= virq, - unsigned int nr_irqs) -{ - struct platform_msi_priv_data *data =3D domain->host_data; - struct device *dev =3D data->dev; - - return msi_domain_populate_irqs(domain->parent, dev, virq, nr_irqs, &data->= arg); -} - -/* End of removal area */ - -/* Real per device domain interfaces */ =20 /* * This indirection can go when platform_device_msi_init_and_alloc_irqs() @@ -357,7 +23,7 @@ static void platform_msi_write_msi_msg(struct irq_data *d,= struct msi_msg *msg) cb(irq_data_get_msi_desc(d), msg); } =20 -static void platform_msi_set_desc_byindex(msi_alloc_info_t *arg, struct msi_= desc *desc) +static void platform_msi_set_desc(msi_alloc_info_t *arg, struct msi_desc *de= sc) { arg->desc =3D desc; arg->hwirq =3D desc->msi_index; @@ -373,7 +39,7 @@ static const struct msi_domain_template platform_msi_templ= ate =3D { }, =20 .ops =3D { - .set_desc =3D platform_msi_set_desc_byindex, + .set_desc =3D platform_msi_set_desc, }, =20 .info =3D { @@ -408,10 +74,6 @@ int platform_device_msi_init_and_alloc_irqs(struct device= *dev, unsigned int nve if (!domain || !write_msi_msg) return -EINVAL; =20 - /* Migration support. Will go away once everything is converted */ - if (!irq_domain_is_msi_parent(domain)) - return platform_msi_domain_alloc_irqs(dev, nvec, write_msi_msg); - /* * @write_msi_msg is stored in the resulting msi_domain_info::data. * The underlying domain creation mechanism will assign that @@ -432,12 +94,6 @@ EXPORT_SYMBOL_GPL(platform_device_msi_init_and_alloc_irqs= ); */ void platform_device_msi_free_irqs_all(struct device *dev) { - struct irq_domain *domain =3D dev->msi.domain; - msi_domain_free_irqs_all(dev, MSI_DEFAULT_DOMAIN); - - /* Migration support. Will go away once everything is converted */ - if (!irq_domain_is_msi_parent(domain)) - platform_msi_free_priv_data(dev); } EXPORT_SYMBOL_GPL(platform_device_msi_free_irqs_all); diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig index 14464716bacb..4def6dc76fa6 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -26,6 +26,7 @@ config ARM_GIC_V2M bool depends on PCI select ARM_GIC + select IRQ_MSI_LIB select PCI_MSI =20 config GIC_NON_BANKED @@ -41,6 +42,7 @@ config ARM_GIC_V3 config ARM_GIC_V3_ITS bool select GENERIC_MSI_IRQ + select IRQ_MSI_LIB default ARM_GIC_V3 =20 config ARM_GIC_V3_ITS_PCI @@ -74,6 +76,9 @@ config ARM_VIC_NR The maximum number of VICs available in the system, for power management. =20 +config IRQ_MSI_LIB + bool + config ARMADA_370_XP_IRQ bool select GENERIC_IRQ_CHIP @@ -366,6 +371,7 @@ config MSCC_OCELOT_IRQ select GENERIC_IRQ_CHIP =20 config MVEBU_GICP + select IRQ_MSI_LIB bool =20 config MVEBU_ICU @@ -373,6 +379,7 @@ config MVEBU_ICU =20 config MVEBU_ODMI bool + select IRQ_MSI_LIB select GENERIC_MSI_IRQ =20 config MVEBU_PIC @@ -487,6 +494,7 @@ config IMX_MU_MSI select IRQ_DOMAIN select IRQ_DOMAIN_HIERARCHY select GENERIC_MSI_IRQ + select IRQ_MSI_LIB help Provide a driver for the i.MX Messaging Unit block used as a CPU-to-CPU MSI controller. This requires a specially crafted DT diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile index d9dc3d99aaa8..afc44f4709a6 100644 --- a/drivers/irqchip/Makefile +++ b/drivers/irqchip/Makefile @@ -29,10 +29,10 @@ obj-$(CONFIG_ARCH_SPEAR3XX) +=3D spear-shirq.o obj-$(CONFIG_ARM_GIC) +=3D irq-gic.o irq-gic-common.o obj-$(CONFIG_ARM_GIC_PM) +=3D irq-gic-pm.o obj-$(CONFIG_ARCH_REALVIEW) +=3D irq-gic-realview.o +obj-$(CONFIG_IRQ_MSI_LIB) +=3D irq-msi-lib.o obj-$(CONFIG_ARM_GIC_V2M) +=3D irq-gic-v2m.o obj-$(CONFIG_ARM_GIC_V3) +=3D irq-gic-v3.o irq-gic-v3-mbi.o irq-gic-common.o -obj-$(CONFIG_ARM_GIC_V3_ITS) +=3D irq-gic-v3-its.o irq-gic-v3-its-platform-= msi.o irq-gic-v4.o -obj-$(CONFIG_ARM_GIC_V3_ITS_PCI) +=3D irq-gic-v3-its-pci-msi.o +obj-$(CONFIG_ARM_GIC_V3_ITS) +=3D irq-gic-v3-its.o irq-gic-v4.o irq-gic-v3-= its-msi-parent.o obj-$(CONFIG_ARM_GIC_V3_ITS_FSL_MC) +=3D irq-gic-v3-its-fsl-mc-msi.o obj-$(CONFIG_PARTITION_PERCPU) +=3D irq-partition-percpu.o obj-$(CONFIG_HISILICON_IRQ_MBIGEN) +=3D irq-mbigen.o diff --git a/drivers/irqchip/irq-gic-common.h b/drivers/irqchip/irq-gic-commo= n.h index f407cce9ecaa..eb4a220dd6ad 100644 --- a/drivers/irqchip/irq-gic-common.h +++ b/drivers/irqchip/irq-gic-common.h @@ -8,6 +8,7 @@ =20 #include #include +#include #include =20 struct gic_quirk { @@ -29,6 +30,8 @@ void gic_enable_quirks(u32 iidr, const struct gic_quirk *qu= irks, void gic_enable_of_quirks(const struct device_node *np, const struct gic_quirk *quirks, void *data); =20 +extern const struct msi_parent_ops gic_v3_its_msi_parent_ops; + #define RDIST_FLAGS_PROPBASE_NEEDS_FLUSHING (1 << 0) #define RDIST_FLAGS_RD_TABLES_PREALLOCATED (1 << 1) #define RDIST_FLAGS_FORCE_NON_SHAREABLE (1 << 2) diff --git a/drivers/irqchip/irq-gic-v2m.c b/drivers/irqchip/irq-gic-v2m.c index f2ff4387870d..51af63c046ed 100644 --- a/drivers/irqchip/irq-gic-v2m.c +++ b/drivers/irqchip/irq-gic-v2m.c @@ -26,6 +26,8 @@ #include #include =20 +#include "irq-msi-lib.h" + /* * MSI_TYPER: * [31:26] Reserved @@ -72,31 +74,6 @@ struct v2m_data { u32 flags; /* v2m flags for specific implementation */ }; =20 -static void gicv2m_mask_msi_irq(struct irq_data *d) -{ - pci_msi_mask_irq(d); - irq_chip_mask_parent(d); -} - -static void gicv2m_unmask_msi_irq(struct irq_data *d) -{ - pci_msi_unmask_irq(d); - irq_chip_unmask_parent(d); -} - -static struct irq_chip gicv2m_msi_irq_chip =3D { - .name =3D "MSI", - .irq_mask =3D gicv2m_mask_msi_irq, - .irq_unmask =3D gicv2m_unmask_msi_irq, - .irq_eoi =3D irq_chip_eoi_parent, -}; - -static struct msi_domain_info gicv2m_msi_domain_info =3D { - .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS | - MSI_FLAG_PCI_MSIX | MSI_FLAG_MULTI_PCI_MSI), - .chip =3D &gicv2m_msi_irq_chip, -}; - static phys_addr_t gicv2m_get_msi_addr(struct v2m_data *v2m, int hwirq) { if (v2m->flags & GICV2M_GRAVITON_ADDRESS_ONLY) @@ -230,6 +207,7 @@ static void gicv2m_irq_domain_free(struct irq_domain *dom= ain, } =20 static const struct irq_domain_ops gicv2m_domain_ops =3D { + .select =3D msi_lib_irq_domain_select, .alloc =3D gicv2m_irq_domain_alloc, .free =3D gicv2m_irq_domain_free, }; @@ -250,19 +228,6 @@ static bool is_msi_spi_valid(u32 base, u32 num) return true; } =20 -static struct irq_chip gicv2m_pmsi_irq_chip =3D { - .name =3D "pMSI", -}; - -static struct msi_domain_ops gicv2m_pmsi_ops =3D { -}; - -static struct msi_domain_info gicv2m_pmsi_domain_info =3D { - .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS), - .ops =3D &gicv2m_pmsi_ops, - .chip =3D &gicv2m_pmsi_irq_chip, -}; - static void __init gicv2m_teardown(void) { struct v2m_data *v2m, *tmp; @@ -278,9 +243,27 @@ static void __init gicv2m_teardown(void) } } =20 + +#define GICV2M_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \ + MSI_FLAG_USE_DEF_CHIP_OPS | \ + MSI_FLAG_PCI_MSI_MASK_PARENT) + +#define GICV2M_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK | \ + MSI_FLAG_PCI_MSIX | \ + MSI_FLAG_MULTI_PCI_MSI) + +static struct msi_parent_ops gicv2m_msi_parent_ops =3D { + .supported_flags =3D GICV2M_MSI_FLAGS_SUPPORTED, + .required_flags =3D GICV2M_MSI_FLAGS_REQUIRED, + .bus_select_token =3D DOMAIN_BUS_NEXUS, + .bus_select_mask =3D MATCH_PCI_MSI | MATCH_PLATFORM_MSI, + .prefix =3D "GICv2m-", + .init_dev_msi_info =3D msi_lib_init_dev_msi_info, +}; + static __init int gicv2m_allocate_domains(struct irq_domain *parent) { - struct irq_domain *inner_domain, *pci_domain, *plat_domain; + struct irq_domain *inner_domain; struct v2m_data *v2m; =20 v2m =3D list_first_entry_or_null(&v2m_nodes, struct v2m_data, entry); @@ -295,22 +278,8 @@ static __init int gicv2m_allocate_domains(struct irq_dom= ain *parent) } =20 irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS); - pci_domain =3D pci_msi_create_irq_domain(v2m->fwnode, - &gicv2m_msi_domain_info, - inner_domain); - plat_domain =3D platform_msi_create_irq_domain(v2m->fwnode, - &gicv2m_pmsi_domain_info, - inner_domain); - if (!pci_domain || !plat_domain) { - pr_err("Failed to create MSI domains\n"); - if (plat_domain) - irq_domain_remove(plat_domain); - if (pci_domain) - irq_domain_remove(pci_domain); - irq_domain_remove(inner_domain); - return -ENOMEM; - } - + inner_domain->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT; + inner_domain->msi_parent_ops =3D &gicv2m_msi_parent_ops; return 0; } =20 @@ -511,7 +480,7 @@ acpi_parse_madt_msi(union acpi_subtable_headers *header, pr_info("applying Amazon Graviton quirk\n"); res.end =3D res.start + SZ_8K - 1; flags |=3D GICV2M_GRAVITON_ADDRESS_ONLY; - gicv2m_msi_domain_info.flags &=3D ~MSI_FLAG_MULTI_PCI_MSI; + gicv2m_msi_parent_ops.supported_flags &=3D ~MSI_FLAG_MULTI_PCI_MSI; } =20 if (m->flags & ACPI_MADT_OVERRIDE_SPI_VALUES) { diff --git a/drivers/irqchip/irq-gic-v3-its-msi-parent.c b/drivers/irqchip/ir= q-gic-v3-its-msi-parent.c new file mode 100644 index 000000000000..e150365fbe89 --- /dev/null +++ b/drivers/irqchip/irq-gic-v3-its-msi-parent.c @@ -0,0 +1,210 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (C) 2013-2015 ARM Limited, All Rights Reserved. +// Author: Marc Zyngier +// Copyright (C) 2022 Linutronix GmbH +// Copyright (C) 2022 Intel + +#include +#include + +#include "irq-gic-common.h" +#include "irq-msi-lib.h" + +#define ITS_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \ + MSI_FLAG_USE_DEF_CHIP_OPS | \ + MSI_FLAG_PCI_MSI_MASK_PARENT) + +#define ITS_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK | \ + MSI_FLAG_PCI_MSIX | \ + MSI_FLAG_MULTI_PCI_MSI) + +#ifdef CONFIG_PCI_MSI +static int its_pci_msi_vec_count(struct pci_dev *pdev, void *data) +{ + int msi, msix, *count =3D data; + + msi =3D max(pci_msi_vec_count(pdev), 0); + msix =3D max(pci_msix_vec_count(pdev), 0); + *count +=3D max(msi, msix); + + return 0; +} + +static int its_get_pci_alias(struct pci_dev *pdev, u16 alias, void *data) +{ + struct pci_dev **alias_dev =3D data; + + *alias_dev =3D pdev; + + return 0; +} + +static int its_pci_msi_prepare(struct irq_domain *domain, struct device *dev, + int nvec, msi_alloc_info_t *info) +{ + struct pci_dev *pdev, *alias_dev; + struct msi_domain_info *msi_info; + int alias_count =3D 0, minnvec =3D 1; + + if (!dev_is_pci(dev)) + return -EINVAL; + + pdev =3D to_pci_dev(dev); + /* + * If pdev is downstream of any aliasing bridges, take an upper + * bound of how many other vectors could map to the same DevID. + * Also tell the ITS that the signalling will come from a proxy + * device, and that special allocation rules apply. + */ + pci_for_each_dma_alias(pdev, its_get_pci_alias, &alias_dev); + if (alias_dev !=3D pdev) { + if (alias_dev->subordinate) + pci_walk_bus(alias_dev->subordinate, + its_pci_msi_vec_count, &alias_count); + info->flags |=3D MSI_ALLOC_FLAGS_PROXY_DEVICE; + } + + /* ITS specific DeviceID, as the core ITS ignores dev. */ + info->scratchpad[0].ul =3D pci_msi_domain_get_msi_rid(domain->parent, pdev); + + /* + * @domain->msi_domain_info->hwsize contains the size of the + * MSI[-X] domain, but vector allocation happens one by one. This + * needs some thought when MSI comes into play as the size of MSI + * might be unknown at domain creation time and therefore set to + * MSI_MAX_INDEX. + */ + msi_info =3D msi_get_domain_info(domain); + if (msi_info->hwsize > nvec) + nvec =3D msi_info->hwsize; + + /* + * Always allocate a power of 2, and special case device 0 for + * broken systems where the DevID is not wired (and all devices + * appear as DevID 0). For that reason, we generously allocate a + * minimum of 32 MSIs for DevID 0. If you want more because all + * your devices are aliasing to DevID 0, consider fixing your HW. + */ + nvec =3D max(nvec, alias_count); + if (!info->scratchpad[0].ul) + minnvec =3D 32; + nvec =3D max_t(int, minnvec, roundup_pow_of_two(nvec)); + + msi_info =3D msi_get_domain_info(domain->parent); + return msi_info->ops->msi_prepare(domain->parent, dev, nvec, info); +} +#else /* CONFIG_PCI_MSI */ +#define its_pci_msi_prepare NULL +#endif /* !CONFIG_PCI_MSI */ + +static int of_pmsi_get_dev_id(struct irq_domain *domain, struct device *dev, + u32 *dev_id) +{ + int ret, index =3D 0; + + /* Suck the DeviceID out of the msi-parent property */ + do { + struct of_phandle_args args; + + ret =3D of_parse_phandle_with_args(dev->of_node, + "msi-parent", "#msi-cells", + index, &args); + if (args.np =3D=3D irq_domain_get_of_node(domain)) { + if (WARN_ON(args.args_count !=3D 1)) + return -EINVAL; + *dev_id =3D args.args[0]; + break; + } + index++; + } while (!ret); + + return ret; +} + +int __weak iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id) +{ + return -1; +} + +static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev, + int nvec, msi_alloc_info_t *info) +{ + struct msi_domain_info *msi_info; + u32 dev_id; + int ret; + + if (dev->of_node) + ret =3D of_pmsi_get_dev_id(domain->parent, dev, &dev_id); + else + ret =3D iort_pmsi_get_dev_id(dev, &dev_id); + if (ret) + return ret; + + /* ITS specific DeviceID, as the core ITS ignores dev. */ + info->scratchpad[0].ul =3D dev_id; + + /* + * @domain->msi_domain_info->hwsize contains the size of the device + * domain, but vector allocation happens one by one. + */ + msi_info =3D msi_get_domain_info(domain); + if (msi_info->hwsize > nvec) + nvec =3D msi_info->hwsize; + + /* Allocate at least 32 MSIs, and always as a power of 2 */ + nvec =3D max_t(int, 32, roundup_pow_of_two(nvec)); + + msi_info =3D msi_get_domain_info(domain->parent); + return msi_info->ops->msi_prepare(domain->parent, + dev, nvec, info); +} + +static bool its_init_dev_msi_info(struct device *dev, struct irq_domain *dom= ain, + struct irq_domain *real_parent, struct msi_domain_info *info) +{ + if (!msi_lib_init_dev_msi_info(dev, domain, real_parent, info)) + return false; + + switch(info->bus_token) { + case DOMAIN_BUS_PCI_DEVICE_MSI: + case DOMAIN_BUS_PCI_DEVICE_MSIX: + /* + * FIXME: This probably should be done after a (not yet + * existing) post domain creation callback once to make + * support for dynamic post-enable MSI-X allocations + * work without having to reevaluate the domain size + * over and over. It is known already at allocation + * time via info->hwsize. + * + * That should work perfectly fine for MSI/MSI-X but needs + * some thoughts for purely software managed MSI domains + * where the index space is only limited artificially via + * %MSI_MAX_INDEX. + */ + info->ops->msi_prepare =3D its_pci_msi_prepare; + break; + case DOMAIN_BUS_DEVICE_MSI: + case DOMAIN_BUS_WIRED_TO_MSI: + /* + * FIXME: See the above PCI prepare comment. The domain + * size is also known at domain creation time. + */ + info->ops->msi_prepare =3D its_pmsi_prepare; + break; + default: + /* Confused. How did the lib return true? */ + WARN_ON_ONCE(1); + return false; + } + + return true; +} + +const struct msi_parent_ops gic_v3_its_msi_parent_ops =3D { + .supported_flags =3D ITS_MSI_FLAGS_SUPPORTED, + .required_flags =3D ITS_MSI_FLAGS_REQUIRED, + .bus_select_token =3D DOMAIN_BUS_NEXUS, + .bus_select_mask =3D MATCH_PCI_MSI | MATCH_PLATFORM_MSI, + .prefix =3D "ITS-", + .init_dev_msi_info =3D its_init_dev_msi_info, +}; diff --git a/drivers/irqchip/irq-gic-v3-its-pci-msi.c b/drivers/irqchip/irq-g= ic-v3-its-pci-msi.c deleted file mode 100644 index 93f77a8196da..000000000000 --- a/drivers/irqchip/irq-gic-v3-its-pci-msi.c +++ /dev/null @@ -1,202 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright (C) 2013-2015 ARM Limited, All Rights Reserved. - * Author: Marc Zyngier - */ - -#include -#include -#include -#include -#include -#include - -static void its_mask_msi_irq(struct irq_data *d) -{ - pci_msi_mask_irq(d); - irq_chip_mask_parent(d); -} - -static void its_unmask_msi_irq(struct irq_data *d) -{ - pci_msi_unmask_irq(d); - irq_chip_unmask_parent(d); -} - -static struct irq_chip its_msi_irq_chip =3D { - .name =3D "ITS-MSI", - .irq_unmask =3D its_unmask_msi_irq, - .irq_mask =3D its_mask_msi_irq, - .irq_eoi =3D irq_chip_eoi_parent, -}; - -static int its_pci_msi_vec_count(struct pci_dev *pdev, void *data) -{ - int msi, msix, *count =3D data; - - msi =3D max(pci_msi_vec_count(pdev), 0); - msix =3D max(pci_msix_vec_count(pdev), 0); - *count +=3D max(msi, msix); - - return 0; -} - -static int its_get_pci_alias(struct pci_dev *pdev, u16 alias, void *data) -{ - struct pci_dev **alias_dev =3D data; - - *alias_dev =3D pdev; - - return 0; -} - -static int its_pci_msi_prepare(struct irq_domain *domain, struct device *dev, - int nvec, msi_alloc_info_t *info) -{ - struct pci_dev *pdev, *alias_dev; - struct msi_domain_info *msi_info; - int alias_count =3D 0, minnvec =3D 1; - - if (!dev_is_pci(dev)) - return -EINVAL; - - msi_info =3D msi_get_domain_info(domain->parent); - - pdev =3D to_pci_dev(dev); - /* - * If pdev is downstream of any aliasing bridges, take an upper - * bound of how many other vectors could map to the same DevID. - * Also tell the ITS that the signalling will come from a proxy - * device, and that special allocation rules apply. - */ - pci_for_each_dma_alias(pdev, its_get_pci_alias, &alias_dev); - if (alias_dev !=3D pdev) { - if (alias_dev->subordinate) - pci_walk_bus(alias_dev->subordinate, - its_pci_msi_vec_count, &alias_count); - info->flags |=3D MSI_ALLOC_FLAGS_PROXY_DEVICE; - } - - /* ITS specific DeviceID, as the core ITS ignores dev. */ - info->scratchpad[0].ul =3D pci_msi_domain_get_msi_rid(domain, pdev); - - /* - * Always allocate a power of 2, and special case device 0 for - * broken systems where the DevID is not wired (and all devices - * appear as DevID 0). For that reason, we generously allocate a - * minimum of 32 MSIs for DevID 0. If you want more because all - * your devices are aliasing to DevID 0, consider fixing your HW. - */ - nvec =3D max(nvec, alias_count); - if (!info->scratchpad[0].ul) - minnvec =3D 32; - nvec =3D max_t(int, minnvec, roundup_pow_of_two(nvec)); - return msi_info->ops->msi_prepare(domain->parent, dev, nvec, info); -} - -static struct msi_domain_ops its_pci_msi_ops =3D { - .msi_prepare =3D its_pci_msi_prepare, -}; - -static struct msi_domain_info its_pci_msi_domain_info =3D { - .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS | - MSI_FLAG_MULTI_PCI_MSI | MSI_FLAG_PCI_MSIX), - .ops =3D &its_pci_msi_ops, - .chip =3D &its_msi_irq_chip, -}; - -static struct of_device_id its_device_id[] =3D { - { .compatible =3D "arm,gic-v3-its", }, - {}, -}; - -static int __init its_pci_msi_init_one(struct fwnode_handle *handle, - const char *name) -{ - struct irq_domain *parent; - - parent =3D irq_find_matching_fwnode(handle, DOMAIN_BUS_NEXUS); - if (!parent || !msi_get_domain_info(parent)) { - pr_err("%s: Unable to locate ITS domain\n", name); - return -ENXIO; - } - - if (!pci_msi_create_irq_domain(handle, &its_pci_msi_domain_info, - parent)) { - pr_err("%s: Unable to create PCI domain\n", name); - return -ENOMEM; - } - - return 0; -} - -static int __init its_pci_of_msi_init(void) -{ - struct device_node *np; - - for (np =3D of_find_matching_node(NULL, its_device_id); np; - np =3D of_find_matching_node(np, its_device_id)) { - if (!of_device_is_available(np)) - continue; - if (!of_property_read_bool(np, "msi-controller")) - continue; - - if (its_pci_msi_init_one(of_node_to_fwnode(np), np->full_name)) - continue; - - pr_info("PCI/MSI: %pOF domain created\n", np); - } - - return 0; -} - -#ifdef CONFIG_ACPI - -static int __init -its_pci_msi_parse_madt(union acpi_subtable_headers *header, - const unsigned long end) -{ - struct acpi_madt_generic_translator *its_entry; - struct fwnode_handle *dom_handle; - const char *node_name; - int err =3D -ENXIO; - - its_entry =3D (struct acpi_madt_generic_translator *)header; - node_name =3D kasprintf(GFP_KERNEL, "ITS@0x%lx", - (long)its_entry->base_address); - dom_handle =3D iort_find_domain_token(its_entry->translation_id); - if (!dom_handle) { - pr_err("%s: Unable to locate ITS domain handle\n", node_name); - goto out; - } - - err =3D its_pci_msi_init_one(dom_handle, node_name); - if (!err) - pr_info("PCI/MSI: %s domain created\n", node_name); - -out: - kfree(node_name); - return err; -} - -static int __init its_pci_acpi_msi_init(void) -{ - acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR, - its_pci_msi_parse_madt, 0); - return 0; -} -#else -static int __init its_pci_acpi_msi_init(void) -{ - return 0; -} -#endif - -static int __init its_pci_msi_init(void) -{ - its_pci_of_msi_init(); - its_pci_acpi_msi_init(); - - return 0; -} -early_initcall(its_pci_msi_init); diff --git a/drivers/irqchip/irq-gic-v3-its-platform-msi.c b/drivers/irqchip/= irq-gic-v3-its-platform-msi.c deleted file mode 100644 index daa6d5053bc3..000000000000 --- a/drivers/irqchip/irq-gic-v3-its-platform-msi.c +++ /dev/null @@ -1,163 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0-only -/* - * Copyright (C) 2013-2015 ARM Limited, All Rights Reserved. - * Author: Marc Zyngier - */ - -#include -#include -#include -#include -#include - -static struct irq_chip its_pmsi_irq_chip =3D { - .name =3D "ITS-pMSI", -}; - -static int of_pmsi_get_dev_id(struct irq_domain *domain, struct device *dev, - u32 *dev_id) -{ - int ret, index =3D 0; - - /* Suck the DeviceID out of the msi-parent property */ - do { - struct of_phandle_args args; - - ret =3D of_parse_phandle_with_args(dev->of_node, - "msi-parent", "#msi-cells", - index, &args); - if (args.np =3D=3D irq_domain_get_of_node(domain)) { - if (WARN_ON(args.args_count !=3D 1)) - return -EINVAL; - *dev_id =3D args.args[0]; - break; - } - index++; - } while (!ret); - - return ret; -} - -int __weak iort_pmsi_get_dev_id(struct device *dev, u32 *dev_id) -{ - return -1; -} - -static int its_pmsi_prepare(struct irq_domain *domain, struct device *dev, - int nvec, msi_alloc_info_t *info) -{ - struct msi_domain_info *msi_info; - u32 dev_id; - int ret; - - msi_info =3D msi_get_domain_info(domain->parent); - - if (dev->of_node) - ret =3D of_pmsi_get_dev_id(domain, dev, &dev_id); - else - ret =3D iort_pmsi_get_dev_id(dev, &dev_id); - if (ret) - return ret; - - /* ITS specific DeviceID, as the core ITS ignores dev. */ - info->scratchpad[0].ul =3D dev_id; - - /* Allocate at least 32 MSIs, and always as a power of 2 */ - nvec =3D max_t(int, 32, roundup_pow_of_two(nvec)); - return msi_info->ops->msi_prepare(domain->parent, - dev, nvec, info); -} - -static struct msi_domain_ops its_pmsi_ops =3D { - .msi_prepare =3D its_pmsi_prepare, -}; - -static struct msi_domain_info its_pmsi_domain_info =3D { - .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS), - .ops =3D &its_pmsi_ops, - .chip =3D &its_pmsi_irq_chip, -}; - -static const struct of_device_id its_device_id[] =3D { - { .compatible =3D "arm,gic-v3-its", }, - {}, -}; - -static int __init its_pmsi_init_one(struct fwnode_handle *fwnode, - const char *name) -{ - struct irq_domain *parent; - - parent =3D irq_find_matching_fwnode(fwnode, DOMAIN_BUS_NEXUS); - if (!parent || !msi_get_domain_info(parent)) { - pr_err("%s: unable to locate ITS domain\n", name); - return -ENXIO; - } - - if (!platform_msi_create_irq_domain(fwnode, &its_pmsi_domain_info, - parent)) { - pr_err("%s: unable to create platform domain\n", name); - return -ENXIO; - } - - pr_info("Platform MSI: %s domain created\n", name); - return 0; -} - -#ifdef CONFIG_ACPI -static int __init -its_pmsi_parse_madt(union acpi_subtable_headers *header, - const unsigned long end) -{ - struct acpi_madt_generic_translator *its_entry; - struct fwnode_handle *domain_handle; - const char *node_name; - int err =3D -ENXIO; - - its_entry =3D (struct acpi_madt_generic_translator *)header; - node_name =3D kasprintf(GFP_KERNEL, "ITS@0x%lx", - (long)its_entry->base_address); - domain_handle =3D iort_find_domain_token(its_entry->translation_id); - if (!domain_handle) { - pr_err("%s: Unable to locate ITS domain handle\n", node_name); - goto out; - } - - err =3D its_pmsi_init_one(domain_handle, node_name); - -out: - kfree(node_name); - return err; -} - -static void __init its_pmsi_acpi_init(void) -{ - acpi_table_parse_madt(ACPI_MADT_TYPE_GENERIC_TRANSLATOR, - its_pmsi_parse_madt, 0); -} -#else -static inline void its_pmsi_acpi_init(void) { } -#endif - -static void __init its_pmsi_of_init(void) -{ - struct device_node *np; - - for (np =3D of_find_matching_node(NULL, its_device_id); np; - np =3D of_find_matching_node(np, its_device_id)) { - if (!of_device_is_available(np)) - continue; - if (!of_property_read_bool(np, "msi-controller")) - continue; - - its_pmsi_init_one(of_node_to_fwnode(np), np->full_name); - } -} - -static int __init its_pmsi_init(void) -{ - its_pmsi_of_init(); - its_pmsi_acpi_init(); - return 0; -} -early_initcall(its_pmsi_init); diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-it= s.c index 3c755d5dad6e..d770d6aedb29 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -38,6 +38,7 @@ #include =20 #include "irq-gic-common.h" +#include "irq-msi-lib.h" =20 #define ITS_FLAGS_CMDQ_NEEDS_FLUSHING (1ULL << 0) #define ITS_FLAGS_WORKAROUND_CAVIUM_22375 (1ULL << 1) @@ -3688,6 +3689,7 @@ static void its_irq_domain_free(struct irq_domain *doma= in, unsigned int virq, } =20 static const struct irq_domain_ops its_domain_ops =3D { + .select =3D msi_lib_irq_domain_select, .alloc =3D its_irq_domain_alloc, .free =3D its_irq_domain_free, .activate =3D its_irq_domain_activate, @@ -4993,6 +4995,9 @@ static int its_init_domain(struct its_node *its) =20 irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_NEXUS); =20 + inner_domain->msi_parent_ops =3D &gic_v3_its_msi_parent_ops; + inner_domain->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT; + return 0; } =20 diff --git a/drivers/irqchip/irq-gic-v3-mbi.c b/drivers/irqchip/irq-gic-v3-mb= i.c index dbb8b1efda44..3fe870f8ee17 100644 --- a/drivers/irqchip/irq-gic-v3-mbi.c +++ b/drivers/irqchip/irq-gic-v3-mbi.c @@ -18,6 +18,8 @@ =20 #include =20 +#include "irq-msi-lib.h" + struct mbi_range { u32 spi_start; u32 nr_spis; @@ -138,6 +140,7 @@ static void mbi_irq_domain_free(struct irq_domain *domain, } =20 static const struct irq_domain_ops mbi_domain_ops =3D { + .select =3D msi_lib_irq_domain_select, .alloc =3D mbi_irq_domain_alloc, .free =3D mbi_irq_domain_free, }; @@ -151,54 +154,6 @@ static void mbi_compose_msi_msg(struct irq_data *data, s= truct msi_msg *msg) iommu_dma_compose_msi_msg(irq_data_get_msi_desc(data), msg); } =20 -#ifdef CONFIG_PCI_MSI -/* PCI-specific irqchip */ -static void mbi_mask_msi_irq(struct irq_data *d) -{ - pci_msi_mask_irq(d); - irq_chip_mask_parent(d); -} - -static void mbi_unmask_msi_irq(struct irq_data *d) -{ - pci_msi_unmask_irq(d); - irq_chip_unmask_parent(d); -} - -static struct irq_chip mbi_msi_irq_chip =3D { - .name =3D "MSI", - .irq_mask =3D mbi_mask_msi_irq, - .irq_unmask =3D mbi_unmask_msi_irq, - .irq_eoi =3D irq_chip_eoi_parent, - .irq_compose_msi_msg =3D mbi_compose_msi_msg, -}; - -static struct msi_domain_info mbi_msi_domain_info =3D { - .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS | - MSI_FLAG_PCI_MSIX | MSI_FLAG_MULTI_PCI_MSI), - .chip =3D &mbi_msi_irq_chip, -}; - -static int mbi_allocate_pci_domain(struct irq_domain *nexus_domain, - struct irq_domain **pci_domain) -{ - *pci_domain =3D pci_msi_create_irq_domain(nexus_domain->parent->fwnode, - &mbi_msi_domain_info, - nexus_domain); - if (!*pci_domain) - return -ENOMEM; - - return 0; -} -#else -static int mbi_allocate_pci_domain(struct irq_domain *nexus_domain, - struct irq_domain **pci_domain) -{ - *pci_domain =3D NULL; - return 0; -} -#endif - static void mbi_compose_mbi_msg(struct irq_data *data, struct msi_msg *msg) { mbi_compose_msi_msg(data, msg); @@ -210,28 +165,51 @@ static void mbi_compose_mbi_msg(struct irq_data *data, = struct msi_msg *msg) iommu_dma_compose_msi_msg(irq_data_get_msi_desc(data), &msg[1]); } =20 -/* Platform-MSI specific irqchip */ -static struct irq_chip mbi_pmsi_irq_chip =3D { - .name =3D "pMSI", - .irq_set_type =3D irq_chip_set_type_parent, - .irq_compose_msi_msg =3D mbi_compose_mbi_msg, - .flags =3D IRQCHIP_SUPPORTS_LEVEL_MSI, -}; - -static struct msi_domain_ops mbi_pmsi_ops =3D { -}; +static bool mbi_init_dev_msi_info(struct device *dev, struct irq_domain *dom= ain, + struct irq_domain *real_parent, struct msi_domain_info *info) +{ + if (!msi_lib_init_dev_msi_info(dev, domain, real_parent, info)) + return false; + + switch (info->bus_token) { + case DOMAIN_BUS_PCI_DEVICE_MSI: + case DOMAIN_BUS_PCI_DEVICE_MSIX: + info->chip->irq_compose_msi_msg =3D mbi_compose_msi_msg; + return true; + + case DOMAIN_BUS_DEVICE_MSI: + info->chip->irq_compose_msi_msg =3D mbi_compose_mbi_msg; + info->chip->irq_set_type =3D irq_chip_set_type_parent; + info->chip->flags |=3D IRQCHIP_SUPPORTS_LEVEL_MSI; + info->flags |=3D MSI_FLAG_LEVEL_CAPABLE; + return true; + + default: + WARN_ON_ONCE(1); + return false; + } +} =20 -static struct msi_domain_info mbi_pmsi_domain_info =3D { - .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS | - MSI_FLAG_LEVEL_CAPABLE), - .ops =3D &mbi_pmsi_ops, - .chip =3D &mbi_pmsi_irq_chip, +#define MBI_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \ + MSI_FLAG_USE_DEF_CHIP_OPS | \ + MSI_FLAG_PCI_MSI_MASK_PARENT) + +#define MBI_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK | \ + MSI_FLAG_PCI_MSIX | \ + MSI_FLAG_MULTI_PCI_MSI) + +static const struct msi_parent_ops gic_v3_mbi_msi_parent_ops =3D { + .supported_flags =3D MBI_MSI_FLAGS_SUPPORTED, + .required_flags =3D MBI_MSI_FLAGS_REQUIRED, + .bus_select_token =3D DOMAIN_BUS_NEXUS, + .bus_select_mask =3D MATCH_PCI_MSI | MATCH_PLATFORM_MSI, + .prefix =3D "MBI-", + .init_dev_msi_info =3D mbi_init_dev_msi_info, }; =20 -static int mbi_allocate_domains(struct irq_domain *parent) +static int mbi_allocate_domain(struct irq_domain *parent) { - struct irq_domain *nexus_domain, *pci_domain, *plat_domain; - int err; + struct irq_domain *nexus_domain; =20 nexus_domain =3D irq_domain_create_hierarchy(parent, 0, 0, parent->fwnode, &mbi_domain_ops, NULL); @@ -239,22 +217,8 @@ static int mbi_allocate_domains(struct irq_domain *paren= t) return -ENOMEM; =20 irq_domain_update_bus_token(nexus_domain, DOMAIN_BUS_NEXUS); - - err =3D mbi_allocate_pci_domain(nexus_domain, &pci_domain); - - plat_domain =3D platform_msi_create_irq_domain(parent->fwnode, - &mbi_pmsi_domain_info, - nexus_domain); - - if (err || !plat_domain) { - if (plat_domain) - irq_domain_remove(plat_domain); - if (pci_domain) - irq_domain_remove(pci_domain); - irq_domain_remove(nexus_domain); - return -ENOMEM; - } - + nexus_domain->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT; + nexus_domain->msi_parent_ops =3D &gic_v3_mbi_msi_parent_ops; return 0; } =20 @@ -317,7 +281,7 @@ int __init mbi_init(struct fwnode_handle *fwnode, struct = irq_domain *parent) =20 pr_info("Using MBI frame %pa\n", &mbi_phys_base); =20 - ret =3D mbi_allocate_domains(parent); + ret =3D mbi_allocate_domain(parent); if (ret) goto err_free_mbi; =20 diff --git a/drivers/irqchip/irq-imx-mu-msi.c b/drivers/irqchip/irq-imx-mu-ms= i.c index 90d41c1407ac..4342a21de1eb 100644 --- a/drivers/irqchip/irq-imx-mu-msi.c +++ b/drivers/irqchip/irq-imx-mu-msi.c @@ -24,6 +24,8 @@ #include #include =20 +#include "irq-msi-lib.h" + #define IMX_MU_CHANS 4 =20 enum imx_mu_xcr { @@ -114,20 +116,6 @@ static void imx_mu_msi_parent_ack_irq(struct irq_data *d= ata) imx_mu_read(msi_data, msi_data->cfg->xRR + data->hwirq * 4); } =20 -static struct irq_chip imx_mu_msi_irq_chip =3D { - .name =3D "MU-MSI", - .irq_ack =3D irq_chip_ack_parent, -}; - -static struct msi_domain_ops imx_mu_msi_irq_ops =3D { -}; - -static struct msi_domain_info imx_mu_msi_domain_info =3D { - .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS), - .ops =3D &imx_mu_msi_irq_ops, - .chip =3D &imx_mu_msi_irq_chip, -}; - static void imx_mu_msi_parent_compose_msg(struct irq_data *data, struct msi_msg *msg) { @@ -195,6 +183,7 @@ static void imx_mu_msi_domain_irq_free(struct irq_domain = *domain, } =20 static const struct irq_domain_ops imx_mu_msi_domain_ops =3D { + .select =3D msi_lib_irq_domain_select, .alloc =3D imx_mu_msi_domain_irq_alloc, .free =3D imx_mu_msi_domain_irq_free, }; @@ -216,35 +205,38 @@ static void imx_mu_msi_irq_handler(struct irq_desc *des= c) chained_irq_exit(chip, desc); } =20 +#define IMX_MU_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \ + MSI_FLAG_USE_DEF_CHIP_OPS | \ + MSI_FLAG_PARENT_PM_DEV) + +#define IMX_MU_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK) + +static const struct msi_parent_ops imx_mu_msi_parent_ops =3D { + .supported_flags =3D IMX_MU_MSI_FLAGS_SUPPORTED, + .required_flags =3D IMX_MU_MSI_FLAGS_REQUIRED, + .bus_select_token =3D DOMAIN_BUS_NEXUS, + .bus_select_mask =3D MATCH_PLATFORM_MSI, + .prefix =3D "MU-MSI-", + .init_dev_msi_info =3D msi_lib_init_dev_msi_info, +}; + static int imx_mu_msi_domains_init(struct imx_mu_msi *msi_data, struct devic= e *dev) { struct fwnode_handle *fwnodes =3D dev_fwnode(dev); struct irq_domain *parent; =20 /* Initialize MSI domain parent */ - parent =3D irq_domain_create_linear(fwnodes, - IMX_MU_CHANS, - &imx_mu_msi_domain_ops, - msi_data); + parent =3D irq_domain_create_linear(fwnodes, IMX_MU_CHANS, + &imx_mu_msi_domain_ops, msi_data); if (!parent) { dev_err(dev, "failed to create IRQ domain\n"); return -ENOMEM; } =20 irq_domain_update_bus_token(parent, DOMAIN_BUS_NEXUS); - - msi_data->msi_domain =3D platform_msi_create_irq_domain(fwnodes, - &imx_mu_msi_domain_info, - parent); - - if (!msi_data->msi_domain) { - dev_err(dev, "failed to create MSI domain\n"); - irq_domain_remove(parent); - return -ENOMEM; - } - - irq_domain_set_pm_device(msi_data->msi_domain, dev); - + parent->dev =3D parent->pm_dev =3D dev; + parent->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT; + parent->msi_parent_ops =3D &imx_mu_msi_parent_ops; return 0; } =20 diff --git a/drivers/irqchip/irq-mbigen.c b/drivers/irqchip/irq-mbigen.c index 58881d313979..093fd42893a7 100644 --- a/drivers/irqchip/irq-mbigen.c +++ b/drivers/irqchip/irq-mbigen.c @@ -135,24 +135,14 @@ static int mbigen_set_type(struct irq_data *data, unsig= ned int type) return 0; } =20 -static struct irq_chip mbigen_irq_chip =3D { - .name =3D "mbigen-v2", - .irq_mask =3D irq_chip_mask_parent, - .irq_unmask =3D irq_chip_unmask_parent, - .irq_eoi =3D mbigen_eoi_irq, - .irq_set_type =3D mbigen_set_type, - .irq_set_affinity =3D irq_chip_set_affinity_parent, -}; - -static void mbigen_write_msg(struct msi_desc *desc, struct msi_msg *msg) +static void mbigen_write_msi_msg(struct irq_data *d, struct msi_msg *msg) { - struct irq_data *d =3D irq_get_irq_data(desc->irq); void __iomem *base =3D d->chip_data; u32 val; =20 if (!msg->address_lo && !msg->address_hi) return; -=20 + base +=3D get_mbigen_vec_reg(d->hwirq); val =3D readl_relaxed(base); =20 @@ -165,10 +155,8 @@ static void mbigen_write_msg(struct msi_desc *desc, stru= ct msi_msg *msg) writel_relaxed(val, base); } =20 -static int mbigen_domain_translate(struct irq_domain *d, - struct irq_fwspec *fwspec, - unsigned long *hwirq, - unsigned int *type) +static int mbigen_domain_translate(struct irq_domain *d, struct irq_fwspec *= fwspec, + unsigned long *hwirq, unsigned int *type) { if (is_of_node(fwspec->fwnode) || is_acpi_device_node(fwspec->fwnode)) { if (fwspec->param_count !=3D 2) @@ -192,51 +180,48 @@ static int mbigen_domain_translate(struct irq_domain *d, return -EINVAL; } =20 -static int mbigen_irq_domain_alloc(struct irq_domain *domain, - unsigned int virq, - unsigned int nr_irqs, - void *args) +static void mbigen_domain_set_desc(msi_alloc_info_t *arg, struct msi_desc *d= esc) { - struct irq_fwspec *fwspec =3D args; - irq_hw_number_t hwirq; - unsigned int type; - struct mbigen_device *mgn_chip; - int i, err; - - err =3D mbigen_domain_translate(domain, fwspec, &hwirq, &type); - if (err) - return err; - - err =3D platform_msi_device_domain_alloc(domain, virq, nr_irqs); - if (err) - return err; + arg->desc =3D desc; + arg->hwirq =3D (u32)desc->data.icookie.value; +} =20 - mgn_chip =3D platform_msi_get_host_data(domain); +static const struct msi_domain_template mbigen_msi_template =3D { + .chip =3D { + .name =3D "mbigen-v2", + .irq_mask =3D irq_chip_mask_parent, + .irq_unmask =3D irq_chip_unmask_parent, + .irq_eoi =3D mbigen_eoi_irq, + .irq_set_type =3D mbigen_set_type, + .irq_write_msi_msg =3D mbigen_write_msi_msg, + }, =20 - for (i =3D 0; i < nr_irqs; i++) - irq_domain_set_hwirq_and_chip(domain, virq + i, hwirq + i, - &mbigen_irq_chip, mgn_chip->base); + .ops =3D { + .set_desc =3D mbigen_domain_set_desc, + .msi_translate =3D mbigen_domain_translate, + }, =20 - return 0; -} + .info =3D { + .bus_token =3D DOMAIN_BUS_WIRED_TO_MSI, + .flags =3D MSI_FLAG_USE_DEV_FWNODE, + }, +}; =20 -static void mbigen_irq_domain_free(struct irq_domain *domain, unsigned int v= irq, - unsigned int nr_irqs) +static bool mbigen_create_device_domain(struct device *dev, unsigned int siz= e, + struct mbigen_device *mgn_chip) { - platform_msi_device_domain_free(domain, virq, nr_irqs); -} + if (WARN_ON_ONCE(!dev->msi.domain)) + return false; =20 -static const struct irq_domain_ops mbigen_domain_ops =3D { - .translate =3D mbigen_domain_translate, - .alloc =3D mbigen_irq_domain_alloc, - .free =3D mbigen_irq_domain_free, -}; + return msi_create_device_irq_domain(dev, MSI_DEFAULT_DOMAIN, + &mbigen_msi_template, size, + NULL, mgn_chip->base); +} =20 static int mbigen_of_create_domain(struct platform_device *pdev, struct mbigen_device *mgn_chip) { struct platform_device *child; - struct irq_domain *domain; struct device_node *np; u32 num_pins; int ret =3D 0; @@ -258,11 +243,7 @@ static int mbigen_of_create_domain(struct platform_devic= e *pdev, break; } =20 - domain =3D platform_msi_create_device_domain(&child->dev, num_pins, - mbigen_write_msg, - &mbigen_domain_ops, - mgn_chip); - if (!domain) { + if (!mbigen_create_device_domain(&child->dev, num_pins, mgn_chip)) { ret =3D -ENOMEM; break; } @@ -284,7 +265,6 @@ MODULE_DEVICE_TABLE(acpi, mbigen_acpi_match); static int mbigen_acpi_create_domain(struct platform_device *pdev, struct mbigen_device *mgn_chip) { - struct irq_domain *domain; u32 num_pins =3D 0; int ret; =20 @@ -315,11 +295,7 @@ static int mbigen_acpi_create_domain(struct platform_dev= ice *pdev, if (ret || num_pins =3D=3D 0) return -EINVAL; =20 - domain =3D platform_msi_create_device_domain(&pdev->dev, num_pins, - mbigen_write_msg, - &mbigen_domain_ops, - mgn_chip); - if (!domain) + if (!mbigen_create_device_domain(&pdev->dev, num_pins, mgn_chip)) return -ENOMEM; =20 return 0; diff --git a/drivers/irqchip/irq-msi-lib.c b/drivers/irqchip/irq-msi-lib.c new file mode 100644 index 000000000000..b5b90003311a --- /dev/null +++ b/drivers/irqchip/irq-msi-lib.c @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (C) 2022 Linutronix GmbH +// Copyright (C) 2022 Intel + +#include + +#include "irq-msi-lib.h" + +/** + * msi_lib_init_dev_msi_info - Domain info setup for MSI domains + * @dev: The device for which the domain is created for + * @domain: The domain providing this callback + * @real_parent: The real parent domain of the domain to be initialized + * which might be a domain built on top of @domain or + * @domain itself + * @info: The domain info for the domain to be initialize + * + * This function is to be used for all types of MSI domains above the root + * parent domain and any intermediates. The topmost parent domain specific + * functionality is determined via @real_parent. + * + * All intermediate domains between the root and the device domain must + * have either msi_parent_ops.init_dev_msi_info =3D msi_parent_init_dev_msi_= info + * or invoke it down the line. + */ +bool msi_lib_init_dev_msi_info(struct device *dev, struct irq_domain *domain, + struct irq_domain *real_parent, + struct msi_domain_info *info) +{ + const struct msi_parent_ops *pops =3D real_parent->msi_parent_ops; + u32 required_flags; + + /* Parent ops available? */ + if (WARN_ON_ONCE(!pops)) + return false; + + /* + * MSI parent domain specific settings. For now there is only the + * root parent domain, e.g. NEXUS, acting as a MSI parent, but it is + * possible to stack MSI parents. See x86 vector -> irq remapping + */ + if (domain->bus_token =3D=3D pops->bus_select_token) { + if (WARN_ON_ONCE(domain !=3D real_parent)) + return false; + } else { + WARN_ON_ONCE(1); + return false; + } + + required_flags =3D pops->required_flags; + + /* Is the target domain bus token supported? */ + switch(info->bus_token) { + case DOMAIN_BUS_PCI_DEVICE_MSI: + case DOMAIN_BUS_PCI_DEVICE_MSIX: + if (WARN_ON_ONCE(!IS_ENABLED(CONFIG_PCI_MSI))) + return false; + + break; + case DOMAIN_BUS_DEVICE_MSI: + /* + * Per device MSI should never have any MSI feature bits + * set. It's sole purpose is to create a dumb interrupt + * chip which has a device specific irq_write_msi_msg() + * callback. + */ + if (WARN_ON_ONCE(info->flags)) + return false; + + /* Core managed MSI descriptors */ + info->flags =3D MSI_FLAG_ALLOC_SIMPLE_MSI_DESCS | MSI_FLAG_FREE_MSI_DESCS; + fallthrough; + case DOMAIN_BUS_WIRED_TO_MSI: + /* Remove PCI specific flags */ + required_flags &=3D ~MSI_FLAG_PCI_MSI_MASK_PARENT; + break; + default: + /* + * This should never be reached. See + * msi_lib_irq_domain_select() + */ + WARN_ON_ONCE(1); + return false; + } + + /* + * Mask out the domain specific MSI feature flags which are not + * supported by the real parent. + */ + info->flags &=3D pops->supported_flags; + /* Enforce the required flags */ + info->flags |=3D required_flags; + + /* Chip updates for all child bus types */ + if (!info->chip->irq_eoi) + info->chip->irq_eoi =3D irq_chip_eoi_parent; + if (!info->chip->irq_ack) + info->chip->irq_ack =3D irq_chip_ack_parent; + + /* + * The device MSI domain can never have a set affinity callback. It + * always has to rely on the parent domain to handle affinity + * settings. The device MSI domain just has to write the resulting + * MSI message into the hardware which is the whole purpose of the + * device MSI domain aside of mask/unmask which is provided e.g. by + * PCI/MSI device domains. + */ + info->chip->irq_set_affinity =3D msi_domain_set_affinity; + return true; +} +EXPORT_SYMBOL_GPL(msi_lib_init_dev_msi_info); + +/** + * msi_lib_irq_domain_select - Shared select function for NEXUS domains + * @d: Pointer to the irq domain on which select is invoked + * @fwspec: Firmware spec describing what is searched + * @bus_token: The bus token for which a matching irq domain is looked up + * + * Returns: %0 if @d is not what is being looked for + * + * %1 if @d is either the domain which is directly searched for or + * if @d is providing the parent MSI domain for the functionality + * requested with @bus_token. + */ +int msi_lib_irq_domain_select(struct irq_domain *d, struct irq_fwspec *fwspe= c, + enum irq_domain_bus_token bus_token) +{ + const struct msi_parent_ops *ops =3D d->msi_parent_ops; + u32 busmask =3D BIT(bus_token); + + if (fwspec->fwnode !=3D d->fwnode || fwspec->param_count !=3D 0) + return 0; + + /* Handle pure domain searches */ + if (bus_token =3D=3D ops->bus_select_token) + return 1; + + return ops && !!(ops->bus_select_mask & busmask); +} +EXPORT_SYMBOL_GPL(msi_lib_irq_domain_select); diff --git a/drivers/irqchip/irq-msi-lib.h b/drivers/irqchip/irq-msi-lib.h new file mode 100644 index 000000000000..681ceabb7bc7 --- /dev/null +++ b/drivers/irqchip/irq-msi-lib.h @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: GPL-2.0-only +// Copyright (C) 2022 Linutronix GmbH +// Copyright (C) 2022 Intel + +#ifndef _DRIVERS_IRQCHIP_IRQ_MSI_LIB_H +#define _DRIVERS_IRQCHIP_IRQ_MSI_LIB_H + +#include +#include +#include + +#ifdef CONFIG_PCI_MSI +#define MATCH_PCI_MSI BIT(DOMAIN_BUS_PCI_MSI) +#else +#define MATCH_PCI_MSI (0) +#endif + +#define MATCH_PLATFORM_MSI BIT(DOMAIN_BUS_PLATFORM_MSI) + +int msi_lib_irq_domain_select(struct irq_domain *d, struct irq_fwspec *fwspe= c, + enum irq_domain_bus_token bus_token); + +bool msi_lib_init_dev_msi_info(struct device *dev, struct irq_domain *domain, + struct irq_domain *real_parent, + struct msi_domain_info *info); + +#endif /* _DRIVERS_IRQCHIP_IRQ_MSI_LIB_H */ diff --git a/drivers/irqchip/irq-mvebu-gicp.c b/drivers/irqchip/irq-mvebu-gic= p.c index c43a345061d5..2b6183919ea4 100644 --- a/drivers/irqchip/irq-mvebu-gicp.c +++ b/drivers/irqchip/irq-mvebu-gicp.c @@ -17,6 +17,8 @@ #include #include =20 +#include "irq-msi-lib.h" + #include =20 #define GICP_SETSPI_NSR_OFFSET 0x0 @@ -145,32 +147,32 @@ static void gicp_irq_domain_free(struct irq_domain *dom= ain, } =20 static const struct irq_domain_ops gicp_domain_ops =3D { + .select =3D msi_lib_irq_domain_select, .alloc =3D gicp_irq_domain_alloc, .free =3D gicp_irq_domain_free, }; =20 -static struct irq_chip gicp_msi_irq_chip =3D { - .name =3D "GICP", - .irq_set_type =3D irq_chip_set_type_parent, - .flags =3D IRQCHIP_SUPPORTS_LEVEL_MSI, -}; +#define GICP_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \ + MSI_FLAG_USE_DEF_CHIP_OPS) =20 -static struct msi_domain_ops gicp_msi_ops =3D { -}; +#define GICP_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK | \ + MSI_FLAG_LEVEL_CAPABLE) =20 -static struct msi_domain_info gicp_msi_domain_info =3D { - .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS | - MSI_FLAG_LEVEL_CAPABLE), - .ops =3D &gicp_msi_ops, - .chip =3D &gicp_msi_irq_chip, +static const struct msi_parent_ops gicp_msi_parent_ops =3D { + .supported_flags =3D GICP_MSI_FLAGS_SUPPORTED, + .required_flags =3D GICP_MSI_FLAGS_REQUIRED, + .bus_select_token =3D DOMAIN_BUS_GENERIC_MSI, + .bus_select_mask =3D MATCH_PLATFORM_MSI, + .prefix =3D "GICP-", + .init_dev_msi_info =3D msi_lib_init_dev_msi_info, }; =20 static int mvebu_gicp_probe(struct platform_device *pdev) { - struct mvebu_gicp *gicp; - struct irq_domain *inner_domain, *plat_domain, *parent_domain; + struct irq_domain *inner_domain, *parent_domain; struct device_node *node =3D pdev->dev.of_node; struct device_node *irq_parent_dn; + struct mvebu_gicp *gicp; int ret, i; =20 gicp =3D devm_kzalloc(&pdev->dev, sizeof(*gicp), GFP_KERNEL); @@ -234,17 +236,9 @@ static int mvebu_gicp_probe(struct platform_device *pdev) if (!inner_domain) return -ENOMEM; =20 - - plat_domain =3D platform_msi_create_irq_domain(of_node_to_fwnode(node), - &gicp_msi_domain_info, - inner_domain); - if (!plat_domain) { - irq_domain_remove(inner_domain); - return -ENOMEM; - } - - platform_set_drvdata(pdev, gicp); - + irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_GENERIC_MSI); + inner_domain->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT; + inner_domain->msi_parent_ops =3D &gicp_msi_parent_ops; return 0; } =20 diff --git a/drivers/irqchip/irq-mvebu-icu.c b/drivers/irqchip/irq-mvebu-icu.c index 3c77acc7ec6a..b337f6c05f18 100644 --- a/drivers/irqchip/irq-mvebu-icu.c +++ b/drivers/irqchip/irq-mvebu-icu.c @@ -20,6 +20,8 @@ #include #include =20 +#include "irq-msi-lib.h" + #include =20 /* ICU registers */ @@ -60,99 +62,13 @@ struct mvebu_icu_msi_data { const struct mvebu_icu_subset_data *subset_data; }; =20 -struct mvebu_icu_irq_data { - struct mvebu_icu *icu; - unsigned int icu_group; - unsigned int type; -}; - static DEFINE_STATIC_KEY_FALSE(legacy_bindings); =20 -static void mvebu_icu_init(struct mvebu_icu *icu, - struct mvebu_icu_msi_data *msi_data, - struct msi_msg *msg) -{ - const struct mvebu_icu_subset_data *subset =3D msi_data->subset_data; - - if (atomic_cmpxchg(&msi_data->initialized, false, true)) - return; - - /* Set 'SET' ICU SPI message address in AP */ - writel_relaxed(msg[0].address_hi, icu->base + subset->offset_set_ah); - writel_relaxed(msg[0].address_lo, icu->base + subset->offset_set_al); - - if (subset->icu_group !=3D ICU_GRP_NSR) - return; - - /* Set 'CLEAR' ICU SPI message address in AP (level-MSI only) */ - writel_relaxed(msg[1].address_hi, icu->base + subset->offset_clr_ah); - writel_relaxed(msg[1].address_lo, icu->base + subset->offset_clr_al); -} - -static void mvebu_icu_write_msg(struct msi_desc *desc, struct msi_msg *msg) -{ - struct irq_data *d =3D irq_get_irq_data(desc->irq); - struct mvebu_icu_msi_data *msi_data =3D platform_msi_get_host_data(d->domai= n); - struct mvebu_icu_irq_data *icu_irqd =3D d->chip_data; - struct mvebu_icu *icu =3D icu_irqd->icu; - unsigned int icu_int; - - if (msg->address_lo || msg->address_hi) { - /* One off initialization per domain */ - mvebu_icu_init(icu, msi_data, msg); - /* Configure the ICU with irq number & type */ - icu_int =3D msg->data | ICU_INT_ENABLE; - if (icu_irqd->type & IRQ_TYPE_EDGE_RISING) - icu_int |=3D ICU_IS_EDGE; - icu_int |=3D icu_irqd->icu_group << ICU_GROUP_SHIFT; - } else { - /* De-configure the ICU */ - icu_int =3D 0; - } - - writel_relaxed(icu_int, icu->base + ICU_INT_CFG(d->hwirq)); - - /* - * The SATA unit has 2 ports, and a dedicated ICU entry per - * port. The ahci sata driver supports only one irq interrupt - * per SATA unit. To solve this conflict, we configure the 2 - * SATA wired interrupts in the south bridge into 1 GIC - * interrupt in the north bridge. Even if only a single port - * is enabled, if sata node is enabled, both interrupts are - * configured (regardless of which port is actually in use). - */ - if (d->hwirq =3D=3D ICU_SATA0_ICU_ID || d->hwirq =3D=3D ICU_SATA1_ICU_ID) { - writel_relaxed(icu_int, - icu->base + ICU_INT_CFG(ICU_SATA0_ICU_ID)); - writel_relaxed(icu_int, - icu->base + ICU_INT_CFG(ICU_SATA1_ICU_ID)); - } -} - -static struct irq_chip mvebu_icu_nsr_chip =3D { - .name =3D "ICU-NSR", - .irq_mask =3D irq_chip_mask_parent, - .irq_unmask =3D irq_chip_unmask_parent, - .irq_eoi =3D irq_chip_eoi_parent, - .irq_set_type =3D irq_chip_set_type_parent, - .irq_set_affinity =3D irq_chip_set_affinity_parent, -}; - -static struct irq_chip mvebu_icu_sei_chip =3D { - .name =3D "ICU-SEI", - .irq_ack =3D irq_chip_ack_parent, - .irq_mask =3D irq_chip_mask_parent, - .irq_unmask =3D irq_chip_unmask_parent, - .irq_set_type =3D irq_chip_set_type_parent, - .irq_set_affinity =3D irq_chip_set_affinity_parent, -}; - -static int -mvebu_icu_irq_domain_translate(struct irq_domain *d, struct irq_fwspec *fwsp= ec, +static int mvebu_icu_translate(struct irq_domain *d, struct irq_fwspec *fwsp= ec, unsigned long *hwirq, unsigned int *type) { unsigned int param_count =3D static_branch_unlikely(&legacy_bindings) ? 3 := 2; - struct mvebu_icu_msi_data *msi_data =3D platform_msi_get_host_data(d); + struct mvebu_icu_msi_data *msi_data =3D d->host_data; struct mvebu_icu *icu =3D msi_data->icu; =20 /* Check the count of the parameters in dt */ @@ -192,81 +108,126 @@ mvebu_icu_irq_domain_translate(struct irq_domain *d, s= truct irq_fwspec *fwspec, return 0; } =20 -static int -mvebu_icu_irq_domain_alloc(struct irq_domain *domain, unsigned int virq, - unsigned int nr_irqs, void *args) +static void mvebu_icu_init(struct mvebu_icu *icu, + struct mvebu_icu_msi_data *msi_data, + struct msi_msg *msg) { - int err; - unsigned long hwirq; - struct irq_fwspec *fwspec =3D args; - struct mvebu_icu_msi_data *msi_data =3D platform_msi_get_host_data(domain); - struct mvebu_icu *icu =3D msi_data->icu; - struct mvebu_icu_irq_data *icu_irqd; - struct irq_chip *chip =3D &mvebu_icu_nsr_chip; + const struct mvebu_icu_subset_data *subset =3D msi_data->subset_data; =20 - icu_irqd =3D kmalloc(sizeof(*icu_irqd), GFP_KERNEL); - if (!icu_irqd) - return -ENOMEM; + if (atomic_cmpxchg(&msi_data->initialized, false, true)) + return; =20 - err =3D mvebu_icu_irq_domain_translate(domain, fwspec, &hwirq, - &icu_irqd->type); - if (err) { - dev_err(icu->dev, "failed to translate ICU parameters\n"); - goto free_irqd; - } + /* Set 'SET' ICU SPI message address in AP */ + writel_relaxed(msg[0].address_hi, icu->base + subset->offset_set_ah); + writel_relaxed(msg[0].address_lo, icu->base + subset->offset_set_al); =20 - if (static_branch_unlikely(&legacy_bindings)) - icu_irqd->icu_group =3D fwspec->param[0]; - else - icu_irqd->icu_group =3D msi_data->subset_data->icu_group; - icu_irqd->icu =3D icu; + if (subset->icu_group !=3D ICU_GRP_NSR) + return; =20 - err =3D platform_msi_device_domain_alloc(domain, virq, nr_irqs); - if (err) { - dev_err(icu->dev, "failed to allocate ICU interrupt in parent domain\n"); - goto free_irqd; - } + /* Set 'CLEAR' ICU SPI message address in AP (level-MSI only) */ + writel_relaxed(msg[1].address_hi, icu->base + subset->offset_clr_ah); + writel_relaxed(msg[1].address_lo, icu->base + subset->offset_clr_al); +} =20 - /* Make sure there is no interrupt left pending by the firmware */ - err =3D irq_set_irqchip_state(virq, IRQCHIP_STATE_PENDING, false); - if (err) - goto free_msi; +static int mvebu_icu_msi_init(struct irq_domain *domain, struct msi_domain_i= nfo *info, + unsigned int virq, irq_hw_number_t hwirq, msi_alloc_info_t *arg) +{ + irq_domain_set_hwirq_and_chip(domain, virq, hwirq, info->chip, info->chip_d= ata); + return irq_set_irqchip_state(virq, IRQCHIP_STATE_PENDING, false); +} =20 - if (icu_irqd->icu_group =3D=3D ICU_GRP_SEI) - chip =3D &mvebu_icu_sei_chip; +static void mvebu_icu_set_desc(msi_alloc_info_t *arg, struct msi_desc *desc) +{ + arg->desc =3D desc; + arg->hwirq =3D (u32)desc->data.icookie.value; +} =20 - err =3D irq_domain_set_hwirq_and_chip(domain, virq, hwirq, - chip, icu_irqd); - if (err) { - dev_err(icu->dev, "failed to set the data to IRQ domain\n"); - goto free_msi; +static void mvebu_icu_write_msi_msg(struct irq_data *d, struct msi_msg *msg) +{ + struct mvebu_icu_msi_data *msi_data =3D d->chip_data; + unsigned int icu_group =3D msi_data->subset_data->icu_group; + struct msi_desc *desc =3D irq_data_get_msi_desc(d); + struct mvebu_icu *icu =3D msi_data->icu; + unsigned int type; + u32 icu_int; + + if (msg->address_lo || msg->address_hi) { + /* One off initialization per domain */ + mvebu_icu_init(icu, msi_data, msg); + /* Configure the ICU with irq number & type */ + icu_int =3D msg->data | ICU_INT_ENABLE; + type =3D (unsigned int)(desc->data.icookie.value >> 32); + if (type & IRQ_TYPE_EDGE_RISING) + icu_int |=3D ICU_IS_EDGE; + icu_int |=3D icu_group << ICU_GROUP_SHIFT; + } else { + /* De-configure the ICU */ + icu_int =3D 0; } =20 - return 0; + writel_relaxed(icu_int, icu->base + ICU_INT_CFG(d->hwirq)); =20 -free_msi: - platform_msi_device_domain_free(domain, virq, nr_irqs); -free_irqd: - kfree(icu_irqd); - return err; + /* + * The SATA unit has 2 ports, and a dedicated ICU entry per + * port. The ahci sata driver supports only one irq interrupt + * per SATA unit. To solve this conflict, we configure the 2 + * SATA wired interrupts in the south bridge into 1 GIC + * interrupt in the north bridge. Even if only a single port + * is enabled, if sata node is enabled, both interrupts are + * configured (regardless of which port is actually in use). + */ + if (d->hwirq =3D=3D ICU_SATA0_ICU_ID || d->hwirq =3D=3D ICU_SATA1_ICU_ID) { + writel_relaxed(icu_int, icu->base + ICU_INT_CFG(ICU_SATA0_ICU_ID)); + writel_relaxed(icu_int, icu->base + ICU_INT_CFG(ICU_SATA1_ICU_ID)); + } } =20 -static void -mvebu_icu_irq_domain_free(struct irq_domain *domain, unsigned int virq, - unsigned int nr_irqs) -{ - struct irq_data *d =3D irq_get_irq_data(virq); - struct mvebu_icu_irq_data *icu_irqd =3D d->chip_data; +static const struct msi_domain_template mvebu_icu_nsr_msi_template =3D { + .chip =3D { + .name =3D "ICU-NSR", + .irq_mask =3D irq_chip_mask_parent, + .irq_unmask =3D irq_chip_unmask_parent, + .irq_eoi =3D irq_chip_eoi_parent, + .irq_set_type =3D irq_chip_set_type_parent, + .irq_write_msi_msg =3D mvebu_icu_write_msi_msg, + .flags =3D IRQCHIP_SUPPORTS_LEVEL_MSI, + }, =20 - kfree(icu_irqd); + .ops =3D { + .msi_translate =3D mvebu_icu_translate, + .msi_init =3D mvebu_icu_msi_init, + .set_desc =3D mvebu_icu_set_desc, + }, =20 - platform_msi_device_domain_free(domain, virq, nr_irqs); -} + .info =3D { + .bus_token =3D DOMAIN_BUS_WIRED_TO_MSI, + .flags =3D MSI_FLAG_LEVEL_CAPABLE | + MSI_FLAG_USE_DEV_FWNODE, + }, +}; + +static const struct msi_domain_template mvebu_icu_sei_msi_template =3D { + .chip =3D { + .name =3D "ICU-SEI", + .irq_mask =3D irq_chip_mask_parent, + .irq_unmask =3D irq_chip_unmask_parent, + .irq_ack =3D irq_chip_ack_parent, + .irq_set_type =3D irq_chip_set_type_parent, + .irq_write_msi_msg =3D mvebu_icu_write_msi_msg, + .flags =3D IRQCHIP_SUPPORTS_LEVEL_MSI, + }, =20 -static const struct irq_domain_ops mvebu_icu_domain_ops =3D { - .translate =3D mvebu_icu_irq_domain_translate, - .alloc =3D mvebu_icu_irq_domain_alloc, - .free =3D mvebu_icu_irq_domain_free, + .ops =3D { + .msi_translate =3D mvebu_icu_translate, + .msi_init =3D mvebu_icu_msi_init, + .set_desc =3D mvebu_icu_set_desc, + }, + + .info =3D { + .bus_token =3D DOMAIN_BUS_WIRED_TO_MSI, + .flags =3D MSI_FLAG_LEVEL_CAPABLE | + MSI_FLAG_USE_DEV_FWNODE, + }, }; =20 static const struct mvebu_icu_subset_data mvebu_icu_nsr_subset_data =3D { @@ -297,10 +258,10 @@ static const struct of_device_id mvebu_icu_subset_of_ma= tch[] =3D { =20 static int mvebu_icu_subset_probe(struct platform_device *pdev) { + const struct msi_domain_template *tmpl; struct mvebu_icu_msi_data *msi_data; - struct device_node *msi_parent_dn; struct device *dev =3D &pdev->dev; - struct irq_domain *irq_domain; + bool sei; =20 msi_data =3D devm_kzalloc(dev, sizeof(*msi_data), GFP_KERNEL); if (!msi_data) @@ -314,20 +275,18 @@ static int mvebu_icu_subset_probe(struct platform_devic= e *pdev) msi_data->subset_data =3D of_device_get_match_data(dev); } =20 - dev->msi.domain =3D of_msi_get_domain(dev, dev->of_node, - DOMAIN_BUS_PLATFORM_MSI); + dev->msi.domain =3D of_msi_get_domain(dev, dev->of_node, DOMAIN_BUS_PLATFOR= M_MSI); if (!dev->msi.domain) return -EPROBE_DEFER; =20 - msi_parent_dn =3D irq_domain_get_of_node(dev->msi.domain); - if (!msi_parent_dn) + if (!irq_domain_get_of_node(dev->msi.domain)) return -ENODEV; =20 - irq_domain =3D platform_msi_create_device_tree_domain(dev, ICU_MAX_IRQS, - mvebu_icu_write_msg, - &mvebu_icu_domain_ops, - msi_data); - if (!irq_domain) { + sei =3D msi_data->subset_data->icu_group =3D=3D ICU_GRP_SEI; + tmpl =3D sei ? &mvebu_icu_sei_msi_template : &mvebu_icu_nsr_msi_template; + + if (!msi_create_device_irq_domain(dev, MSI_DEFAULT_DOMAIN, tmpl, + ICU_MAX_IRQS, NULL, msi_data)) { dev_err(dev, "Failed to create ICU MSI domain\n"); return -ENOMEM; } diff --git a/drivers/irqchip/irq-mvebu-odmi.c b/drivers/irqchip/irq-mvebu-odm= i.c index 108091533e10..ff19bfd258dc 100644 --- a/drivers/irqchip/irq-mvebu-odmi.c +++ b/drivers/irqchip/irq-mvebu-odmi.c @@ -17,6 +17,9 @@ #include #include #include + +#include "irq-msi-lib.h" + #include =20 #define GICP_ODMIN_SET 0x40 @@ -141,27 +144,29 @@ static void odmi_irq_domain_free(struct irq_domain *dom= ain, } =20 static const struct irq_domain_ops odmi_domain_ops =3D { + .select =3D msi_lib_irq_domain_select, .alloc =3D odmi_irq_domain_alloc, .free =3D odmi_irq_domain_free, }; =20 -static struct irq_chip odmi_msi_irq_chip =3D { - .name =3D "ODMI", -}; +#define ODMI_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \ + MSI_FLAG_USE_DEF_CHIP_OPS) =20 -static struct msi_domain_ops odmi_msi_ops =3D { -}; +#define ODMI_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK) =20 -static struct msi_domain_info odmi_msi_domain_info =3D { - .flags =3D (MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS), - .ops =3D &odmi_msi_ops, - .chip =3D &odmi_msi_irq_chip, +static const struct msi_parent_ops odmi_msi_parent_ops =3D { + .supported_flags =3D ODMI_MSI_FLAGS_SUPPORTED, + .required_flags =3D ODMI_MSI_FLAGS_REQUIRED, + .bus_select_token =3D DOMAIN_BUS_GENERIC_MSI, + .bus_select_mask =3D MATCH_PLATFORM_MSI, + .prefix =3D "ODMI-", + .init_dev_msi_info =3D msi_lib_init_dev_msi_info, }; =20 static int __init mvebu_odmi_init(struct device_node *node, struct device_node *parent) { - struct irq_domain *parent_domain, *inner_domain, *plat_domain; + struct irq_domain *parent_domain, *inner_domain; int ret, i; =20 if (of_property_read_u32(node, "marvell,odmi-frames", &odmis_count)) @@ -208,18 +213,12 @@ static int __init mvebu_odmi_init(struct device_node *n= ode, goto err_unmap; } =20 - plat_domain =3D platform_msi_create_irq_domain(of_node_to_fwnode(node), - &odmi_msi_domain_info, - inner_domain); - if (!plat_domain) { - ret =3D -ENOMEM; - goto err_remove_inner; - } + irq_domain_update_bus_token(inner_domain, DOMAIN_BUS_GENERIC_MSI); + inner_domain->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT; + inner_domain->msi_parent_ops =3D &odmi_msi_parent_ops; =20 return 0; =20 -err_remove_inner: - irq_domain_remove(inner_domain); err_unmap: for (i =3D 0; i < odmis_count; i++) { struct odmi_data *odmi =3D &odmis[i]; diff --git a/drivers/irqchip/irq-mvebu-sei.c b/drivers/irqchip/irq-mvebu-sei.c index a48dbe91b036..f8c70f2d100a 100644 --- a/drivers/irqchip/irq-mvebu-sei.c +++ b/drivers/irqchip/irq-mvebu-sei.c @@ -14,6 +14,8 @@ #include #include =20 +#include "irq-msi-lib.h" + /* Cause register */ #define GICP_SECR(idx) (0x0 + ((idx) * 0x4)) /* Mask register */ @@ -190,6 +192,7 @@ static void mvebu_sei_domain_free(struct irq_domain *doma= in, unsigned int virq, } =20 static const struct irq_domain_ops mvebu_sei_domain_ops =3D { + .select =3D msi_lib_irq_domain_select, .alloc =3D mvebu_sei_domain_alloc, .free =3D mvebu_sei_domain_free, }; @@ -307,21 +310,6 @@ static const struct irq_domain_ops mvebu_sei_cp_domain_o= ps =3D { .free =3D mvebu_sei_cp_domain_free, }; =20 -static struct irq_chip mvebu_sei_msi_irq_chip =3D { - .name =3D "SEI pMSI", - .irq_ack =3D irq_chip_ack_parent, - .irq_set_type =3D irq_chip_set_type_parent, -}; - -static struct msi_domain_ops mvebu_sei_msi_ops =3D { -}; - -static struct msi_domain_info mvebu_sei_msi_domain_info =3D { - .flags =3D MSI_FLAG_USE_DEF_DOM_OPS | MSI_FLAG_USE_DEF_CHIP_OPS, - .ops =3D &mvebu_sei_msi_ops, - .chip =3D &mvebu_sei_msi_irq_chip, -}; - static void mvebu_sei_handle_cascade_irq(struct irq_desc *desc) { struct mvebu_sei *sei =3D irq_desc_get_handler_data(desc); @@ -360,10 +348,23 @@ static void mvebu_sei_reset(struct mvebu_sei *sei) } } =20 +#define SEI_MSI_FLAGS_REQUIRED (MSI_FLAG_USE_DEF_DOM_OPS | \ + MSI_FLAG_USE_DEF_CHIP_OPS) + +#define SEI_MSI_FLAGS_SUPPORTED (MSI_GENERIC_FLAGS_MASK) + +static const struct msi_parent_ops sei_msi_parent_ops =3D { + .supported_flags =3D SEI_MSI_FLAGS_SUPPORTED, + .required_flags =3D SEI_MSI_FLAGS_REQUIRED, + .bus_select_mask =3D MATCH_PLATFORM_MSI, + .bus_select_token =3D DOMAIN_BUS_GENERIC_MSI, + .prefix =3D "SEI-", + .init_dev_msi_info =3D msi_lib_init_dev_msi_info, +}; + static int mvebu_sei_probe(struct platform_device *pdev) { struct device_node *node =3D pdev->dev.of_node; - struct irq_domain *plat_domain; struct mvebu_sei *sei; u32 parent_irq; int ret; @@ -440,33 +441,20 @@ static int mvebu_sei_probe(struct platform_device *pdev) } =20 irq_domain_update_bus_token(sei->cp_domain, DOMAIN_BUS_GENERIC_MSI); - - plat_domain =3D platform_msi_create_irq_domain(of_node_to_fwnode(node), - &mvebu_sei_msi_domain_info, - sei->cp_domain); - if (!plat_domain) { - pr_err("Failed to create CPs MSI domain\n"); - ret =3D -ENOMEM; - goto remove_cp_domain; - } + sei->cp_domain->flags |=3D IRQ_DOMAIN_FLAG_MSI_PARENT; + sei->cp_domain->msi_parent_ops =3D &sei_msi_parent_ops; =20 mvebu_sei_reset(sei); =20 - irq_set_chained_handler_and_data(parent_irq, - mvebu_sei_handle_cascade_irq, - sei); - + irq_set_chained_handler_and_data(parent_irq, mvebu_sei_handle_cascade_irq, = sei); return 0; =20 -remove_cp_domain: - irq_domain_remove(sei->cp_domain); remove_ap_domain: irq_domain_remove(sei->ap_domain); remove_sei_domain: irq_domain_remove(sei->sei_domain); dispose_irq: irq_dispose_mapping(parent_irq); - return ret; } =20 diff --git a/drivers/pci/msi/irqdomain.c b/drivers/pci/msi/irqdomain.c index 03d2dd25790d..569125726b3e 100644 --- a/drivers/pci/msi/irqdomain.c +++ b/drivers/pci/msi/irqdomain.c @@ -148,17 +148,35 @@ static void pci_device_domain_set_desc(msi_alloc_info_t= *arg, struct msi_desc *d arg->hwirq =3D desc->msi_index; } =20 +static __always_inline void cond_mask_parent(struct irq_data *data) +{ + struct msi_domain_info *info =3D data->domain->host_data; + + if (unlikely(info->flags & MSI_FLAG_PCI_MSI_MASK_PARENT)) + irq_chip_mask_parent(data); +} + +static __always_inline void cond_unmask_parent(struct irq_data *data) +{ + struct msi_domain_info *info =3D data->domain->host_data; + + if (unlikely(info->flags & MSI_FLAG_PCI_MSI_MASK_PARENT)) + irq_chip_unmask_parent(data); +} + static void pci_irq_mask_msi(struct irq_data *data) { struct msi_desc *desc =3D irq_data_get_msi_desc(data); =20 pci_msi_mask(desc, BIT(data->irq - desc->irq)); + cond_mask_parent(data); } =20 static void pci_irq_unmask_msi(struct irq_data *data) { struct msi_desc *desc =3D irq_data_get_msi_desc(data); =20 + cond_unmask_parent(data); pci_msi_unmask(desc, BIT(data->irq - desc->irq)); } =20 @@ -195,10 +213,12 @@ static const struct msi_domain_template pci_msi_templat= e =3D { static void pci_irq_mask_msix(struct irq_data *data) { pci_msix_mask(irq_data_get_msi_desc(data)); + cond_mask_parent(data); } =20 static void pci_irq_unmask_msix(struct irq_data *data) { + cond_unmask_parent(data); pci_msix_unmask(irq_data_get_msi_desc(data)); } =20 diff --git a/include/linux/msi.h b/include/linux/msi.h index dc27cf3903d5..369367ecae5e 100644 --- a/include/linux/msi.h +++ b/include/linux/msi.h @@ -21,11 +21,7 @@ #include #include #include -#include -#include -#include #include -#include =20 #include =20 @@ -81,7 +77,6 @@ extern int pci_msi_ignore_mask; /* Helper functions */ struct msi_desc; struct pci_dev; -struct platform_msi_priv_data; struct device_attribute; struct irq_domain; struct irq_affinity_desc; @@ -228,22 +223,6 @@ struct msi_dev_domain { struct irq_domain *domain; }; =20 -/** - * msi_device_data - MSI per device data - * @properties: MSI properties which are interesting to drivers - * @platform_data: Platform-MSI specific data - * @mutex: Mutex protecting the MSI descriptor store - * @__domains: Internal data for per device MSI domains - * @__iter_idx: Index to search the next entry for iterators - */ -struct msi_device_data { - unsigned long properties; - struct platform_msi_priv_data *platform_data; - struct mutex mutex; - struct msi_dev_domain __domains[MSI_MAX_DEVICE_IRQDOMAINS]; - unsigned long __iter_idx; -}; - int msi_setup_device_data(struct device *dev); =20 void msi_lock_descs(struct device *dev); @@ -556,6 +535,8 @@ enum { MSI_FLAG_USE_DEV_FWNODE =3D (1 << 7), /* Set parent->dev into domain->pm_dev on device domain creation */ MSI_FLAG_PARENT_PM_DEV =3D (1 << 8), + /* Support for parent mask/unmask */ + MSI_FLAG_PCI_MSI_MASK_PARENT =3D (1 << 9), =20 /* Mask for the generic functionality */ MSI_GENERIC_FLAGS_MASK =3D GENMASK(15, 0), @@ -639,35 +620,6 @@ void msi_domain_free_irqs_all(struct device *dev, unsign= ed int domid); =20 struct msi_domain_info *msi_get_domain_info(struct irq_domain *domain); =20 -struct irq_domain *platform_msi_create_irq_domain(struct fwnode_handle *fwno= de, - struct msi_domain_info *info, - struct irq_domain *parent); - -/* When an MSI domain is used as an intermediate domain */ -int msi_domain_prepare_irqs(struct irq_domain *domain, struct device *dev, - int nvec, msi_alloc_info_t *args); -int msi_domain_populate_irqs(struct irq_domain *domain, struct device *dev, - int virq, int nvec, msi_alloc_info_t *args); -void msi_domain_depopulate_descs(struct device *dev, int virq, int nvec); - -struct irq_domain * -__platform_msi_create_device_domain(struct device *dev, - unsigned int nvec, - bool is_tree, - irq_write_msi_msg_t write_msi_msg, - const struct irq_domain_ops *ops, - void *host_data); - -#define platform_msi_create_device_domain(dev, nvec, write, ops, data) \ - __platform_msi_create_device_domain(dev, nvec, false, write, ops, data) -#define platform_msi_create_device_tree_domain(dev, nvec, write, ops, data) \ - __platform_msi_create_device_domain(dev, nvec, true, write, ops, data) - -int platform_msi_device_domain_alloc(struct irq_domain *domain, unsigned int= virq, - unsigned int nr_irqs); -void platform_msi_device_domain_free(struct irq_domain *domain, unsigned int= virq, - unsigned int nvec); -void *platform_msi_get_host_data(struct irq_domain *domain); /* Per device platform MSI */ int platform_device_msi_init_and_alloc_irqs(struct device *dev, unsigned int= nvec, irq_write_msi_msg_t write_msi_msg); diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index aadc8891cc16..8475b83c5519 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -438,7 +438,8 @@ struct irq_domain *irq_find_matching_fwspec(struct irq_fw= spec *fwspec, struct fwnode_handle *fwnode =3D fwspec->fwnode; int rc; =20 - /* We might want to match the legacy controller last since + /* + * We might want to match the legacy controller last since * it might potentially be set to match all interrupts in * the absence of a device node. This isn't a problem so far * yet though... diff --git a/kernel/irq/msi.c b/kernel/irq/msi.c index 2024f89baea4..5fa0547ece0c 100644 --- a/kernel/irq/msi.c +++ b/kernel/irq/msi.c @@ -8,17 +8,33 @@ * This file contains common code to support Message Signaled Interrupts for * PCI compatible and non PCI compatible devices. */ -#include #include #include #include #include +#include +#include #include #include -#include +#include +#include =20 #include "internals.h" =20 +/** + * struct msi_device_data - MSI per device data + * @properties: MSI properties which are interesting to drivers + * @mutex: Mutex protecting the MSI descriptor store + * @__domains: Internal data for per device MSI domains + * @__iter_idx: Index to search the next entry for iterators + */ +struct msi_device_data { + unsigned long properties; + struct mutex mutex; + struct msi_dev_domain __domains[MSI_MAX_DEVICE_IRQDOMAINS]; + unsigned long __iter_idx; +}; + /** * struct msi_ctrl - MSI internal management control structure * @domid: ID of the domain on which management operations should be done @@ -1088,8 +1104,8 @@ bool msi_match_device_irq_domain(struct device *dev, un= signed int domid, return ret; } =20 -int msi_domain_prepare_irqs(struct irq_domain *domain, struct device *dev, - int nvec, msi_alloc_info_t *arg) +static int msi_domain_prepare_irqs(struct irq_domain *domain, struct device = *dev, + int nvec, msi_alloc_info_t *arg) { struct msi_domain_info *info =3D domain->host_data; struct msi_domain_ops *ops =3D info->ops; @@ -1097,77 +1113,6 @@ int msi_domain_prepare_irqs(struct irq_domain *domain,= struct device *dev, return ops->msi_prepare(domain, dev, nvec, arg); } =20 -int msi_domain_populate_irqs(struct irq_domain *domain, struct device *dev, - int virq_base, int nvec, msi_alloc_info_t *arg) -{ - struct msi_domain_info *info =3D domain->host_data; - struct msi_domain_ops *ops =3D info->ops; - struct msi_ctrl ctrl =3D { - .domid =3D MSI_DEFAULT_DOMAIN, - .first =3D virq_base, - .last =3D virq_base + nvec - 1, - }; - struct msi_desc *desc; - struct xarray *xa; - int ret, virq; - - msi_lock_descs(dev); - - if (!msi_ctrl_valid(dev, &ctrl)) { - ret =3D -EINVAL; - goto unlock; - } - - ret =3D msi_domain_add_simple_msi_descs(dev, &ctrl); - if (ret) - goto unlock; - - xa =3D &dev->msi.data->__domains[ctrl.domid].store; - - for (virq =3D virq_base; virq < virq_base + nvec; virq++) { - desc =3D xa_load(xa, virq); - desc->irq =3D virq; - - ops->set_desc(arg, desc); - ret =3D irq_domain_alloc_irqs_hierarchy(domain, virq, 1, arg); - if (ret) - goto fail; - - irq_set_msi_desc(virq, desc); - } - msi_unlock_descs(dev); - return 0; - -fail: - for (--virq; virq >=3D virq_base; virq--) { - msi_domain_depopulate_descs(dev, virq, 1); - irq_domain_free_irqs_common(domain, virq, 1); - } - msi_domain_free_descs(dev, &ctrl); -unlock: - msi_unlock_descs(dev); - return ret; -} - -void msi_domain_depopulate_descs(struct device *dev, int virq_base, int nvec) -{ - struct msi_ctrl ctrl =3D { - .domid =3D MSI_DEFAULT_DOMAIN, - .first =3D virq_base, - .last =3D virq_base + nvec - 1, - }; - struct msi_desc *desc; - struct xarray *xa; - unsigned long idx; - - if (!msi_ctrl_valid(dev, &ctrl)) - return; - - xa =3D &dev->msi.data->__domains[ctrl.domid].store; - xa_for_each_range(xa, idx, desc, ctrl.first, ctrl.last) - desc->irq =3D 0; -} - /* * Carefully check whether the device can use reservation mode. If * reservation mode is enabled then the early activation will assign a . Date: Mon, 22 Jul 2024 21:27:18 +0200 (CEST) From: Thomas Gleixner To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, x86@kernel.org Subject: [GIT pull] irq/core for v6.11-rc1 Linus, please pull the latest irq/core branch from: git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git irq-core-2024-07= -15 up to: b7b377332b96: irqdomain: Fix the kernel-doc and plug it into Document= ation [ Same as V1 minus the MSI conversion ] Updates for the interrupt subsystem: - Core: - Provide a new mechanism to create interrupt domains. The existing interfaces have already too many parameters and it's a pain to expand any of this for new required functionality. The new function takes a pointer to a data structure as argument. The data structure combines all existing parameters and allows for easy extension. The first extension for this is to handle the instantiation of generic interrupt chips at the core level and to allow drivers to provide extra init/exit callbacks. This is necessary to do the full interrupt chip initialization before the new domain is published, so that concurrent usage sites won't see a half initialized interrupt domain. Similar problems exist on teardown. This has turned out to be a real problem due to the deferred and parallel probing which was added in recent years. Handling this at the core level allows to remove quite some accrued boilerplate code in existing drivers and avoids horrible workarounds at the driver level. - The usual small improvements all over the place - Drivers - Add support for LAN966x OIC and RZ/Five SoC - Split the STM ExtI driver into a microcontroller and a SMP version to allow building the latter as a module for multi-platform kernels. - Enable MSI support for Armada 370XP on platforms which do not support IPIs. - The usual small fixes and enhancements all over the place. Thanks, tglx ------------------> Adrian Huang (1): genirq/proc: Simplify irqdesc::kstat_irqs handling further Antonio Borneo (8): irqchip/stm32-exti: Add CONFIG_STM32MP_EXTI ARM: stm32: Use different EXTI driver on ARMv7m and ARMv7a arm64: Kconfig: Select STM32MP_EXTI on STM32 platforms irqchip/stm32-exti: Split MCU and MPU code irqchip/stm32mp-exti: Rename internal symbols irqchip/stm32mp-exti: Allow building as module ARM: stm32: Allow build irq-stm32mp-exti driver as module arm64: Kconfig: Allow build irq-stm32mp-exti driver as module Geert Uytterhoeven (1): irqchip/gic-v3: Pass #redistributor-regions to gic_of_setup_kvm_info() Herve Codina (24): irqdomain: Add missing parameter descriptions in kernel-doc comments irqdomain: Fixed unbalanced fwnode get and put irqdomain: Introduce irq_domain_free() irqdomain: Introduce irq_domain_instantiate() irqdomain: Constify parameter in is_fwnode_irqchip() irqdomain: Use a dedicated function to set the domain name irqdomain: Convert __irq_domain_create() to use struct irq_domain_info irqdomain: Handle additional domain flags in irq_domain_instantiate() irqdomain: Handle domain hierarchy parent in irq_domain_instantiate() irqdomain: Use irq_domain_instantiate() for hierarchy domain creation irqdomain: Make __irq_domain_create() return an error code irqdomain: Handle domain bus token in irq_domain_create() irqdomain: Introduce init() and exit() hooks genirq/generic_chip: Introduce irq_domain_{alloc,remove}_generic_chips() genirq/generic_chip: Introduce init() and exit() hooks irqdomain: Add support for generic irq chips creation before publishing= a domain irqdomain: Add a resource managed version of irq_domain_instantiate() irqdomain: Convert __irq_domain_add() wrappers to irq_domain_instantiat= e() irqdomain: Convert domain creation functions to irq_domain_instantiate() _PATCH_19_23_um_virt_pci_Use_irq_domain_instantiate_ irqdomain: Remove __irq_domain_add() dt-bindings: interrupt-controller: Add support for Microchip LAN966x OIC irqchip: Add support for LAN966x OIC MAINTAINERS: Add the Microchip LAN966x OIC driver entry Jeff Johnson (1): irqchip: Add missing MODULE_DESCRIPTION() macros Jinjie Ruan (2): genirq/debugfs: Print irqdomain flags as human-readable strings irqchip/riscv-aplic: Simplify the initialization code Jiri Slaby (SUSE) (1): irqdomain: Fix the kernel-doc and plug it into Documentation Jisheng Zhang (2): irqchip/riscv-intc: Remove asmlinkage irqchip/dw-apb-ictl: Support building as module Lad Prabhakar (3): dt-bindings: interrupt-controller: renesas,rzg2l-irqc: Document RZ/Five= SoC irqchip/renesas-rzg2l: Add support for RZ/Five SoC irqchip/renesas-rzg2l: Reorder function calls in rzg2l_irqc_irq_disable= () Lorenzo Pieralisi (1): irqchip/gic-v3: Enable non-coherent redistributors/ITSes ACPI probing Marc Zyngier (3): irqchip/gic-v4: Always configure affinity on VPE activation irqchip/gic-v4: Substitute vmovp_lock for a per-VM lock irqchip/gic-v4: Make sure a VPE is locked when VMAPP is issued Marek Beh=C3=BAn (1): irqchip/armada-370-xp: Use atomic_io_modify() instead of another spinlo= ck Pali Roh=C3=A1r (4): irqchip/armada-370-xp: Do not allow mapping IRQ 0 and 1 irqchip/armada-370-xp: Only call ipi_resume() if IPI is available irqchip/armada-370-xp: Do not touch IPI registers on platforms without = IPI irqchip/armada-370-xp: Add support for 32 MSI interrupts on non-IPI pla= tforms Rafael J. Wysocki (1): genirq: Set IRQF_COND_ONESHOT in request_irq() Shenwei Wang (1): irqchip/imx-irqsteer: Handle runtime power management correctly Stefan Wahren (1): irqchip/bcm2835: Enable SKIP_SET_WAKE and MASK_ON_SUSPEND Thomas Gleixner (3): irqdomain: Make build work for CONFIG_GENERIC_IRQ_CHIP=3Dn Revert "Loongarch: Support loongarch avec" Revert "irqchip/dw-apb-ictl: Support building as module" Tianyang Zhang (1): Loongarch: Support loongarch avec Documentation/core-api/genericirq.rst | 2 + .../microchip,lan966x-oic.yaml | 55 ++ .../interrupt-controller/renesas,rzg2l-irqc.yaml | 17 +- MAINTAINERS | 6 + arch/arm/mach-stm32/Kconfig | 2 +- arch/arm64/Kconfig.platforms | 1 - arch/um/drivers/virt-pci.c | 16 +- drivers/acpi/processor_core.c | 15 + drivers/irqchip/Kconfig | 21 + drivers/irqchip/Makefile | 2 + drivers/irqchip/irq-armada-370-xp.c | 121 +++- drivers/irqchip/irq-bcm2835.c | 4 +- drivers/irqchip/irq-gic-v3-its.c | 52 +- drivers/irqchip/irq-gic-v3.c | 22 +- drivers/irqchip/irq-imx-irqsteer.c | 24 +- drivers/irqchip/irq-lan966x-oic.c | 278 ++++++++ drivers/irqchip/irq-meson-gpio.c | 1 + drivers/irqchip/irq-mvebu-pic.c | 1 + drivers/irqchip/irq-renesas-rzg2l.c | 150 ++++- drivers/irqchip/irq-riscv-aplic-main.c | 13 +- drivers/irqchip/irq-riscv-intc.c | 4 +- drivers/irqchip/irq-stm32-exti.c | 670 +------------------ drivers/irqchip/irq-stm32mp-exti.c | 729 +++++++++++++++++++= ++ drivers/irqchip/irq-ts4800.c | 1 + include/linux/acpi.h | 3 + include/linux/interrupt.h | 2 +- include/linux/irq.h | 43 ++ include/linux/irqchip/arm-gic-v4.h | 8 + include/linux/irqdomain.h | 136 +++- kernel/irq/debugfs.c | 10 +- kernel/irq/devres.c | 41 ++ kernel/irq/generic-chip.c | 111 +++- kernel/irq/internals.h | 10 + kernel/irq/irqdomain.c | 287 +++++--- kernel/irq/proc.c | 7 +- 35 files changed, 1965 insertions(+), 900 deletions(-) create mode 100644 Documentation/devicetree/bindings/interrupt-controller/mi= crochip,lan966x-oic.yaml create mode 100644 drivers/irqchip/irq-lan966x-oic.c create mode 100644 drivers/irqchip/irq-stm32mp-exti.c diff --git a/Documentation/core-api/genericirq.rst b/Documentation/core-api/g= enericirq.rst index 4a460639ab1c..7a27663f309f 100644 --- a/Documentation/core-api/genericirq.rst +++ b/Documentation/core-api/genericirq.rst @@ -410,6 +410,8 @@ which are used in the generic IRQ layer. .. kernel-doc:: include/linux/interrupt.h :internal: =20 +.. kernel-doc:: include/linux/irqdomain.h + Public Functions Provided =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 diff --git a/Documentation/devicetree/bindings/interrupt-controller/microchip= ,lan966x-oic.yaml b/Documentation/devicetree/bindings/interrupt-controller/mi= crochip,lan966x-oic.yaml new file mode 100644 index 000000000000..b2adc7174177 --- /dev/null +++ b/Documentation/devicetree/bindings/interrupt-controller/microchip,lan966= x-oic.yaml @@ -0,0 +1,55 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/interrupt-controller/microchip,lan966x-oi= c.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Microchip LAN966x outband interrupt controller + +maintainers: + - Herve Codina + +allOf: + - $ref: /schemas/interrupt-controller.yaml# + +description: | + The Microchip LAN966x outband interrupt controller (OIC) maps the internal + interrupt sources of the LAN966x device to an external interrupt. + When the LAN966x device is used as a PCI device, the external interrupt is + routed to the PCI interrupt. + +properties: + compatible: + const: microchip,lan966x-oic + + '#interrupt-cells': + const: 2 + + interrupt-controller: true + + reg: + maxItems: 1 + + interrupts: + maxItems: 1 + +required: + - compatible + - '#interrupt-cells' + - interrupt-controller + - interrupts + - reg + +additionalProperties: false + +examples: + - | + interrupt-controller@e00c0120 { + compatible =3D "microchip,lan966x-oic"; + reg =3D <0xe00c0120 0x190>; + #interrupt-cells =3D <2>; + interrupt-controller; + interrupts =3D <0>; + interrupt-parent =3D <&intc>; + }; +... diff --git a/Documentation/devicetree/bindings/interrupt-controller/renesas,r= zg2l-irqc.yaml b/Documentation/devicetree/bindings/interrupt-controller/renes= as,rzg2l-irqc.yaml index daef4ee06f4e..44b6ae5fc802 100644 --- a/Documentation/devicetree/bindings/interrupt-controller/renesas,rzg2l-ir= qc.yaml +++ b/Documentation/devicetree/bindings/interrupt-controller/renesas,rzg2l-ir= qc.yaml @@ -21,13 +21,16 @@ description: | =20 properties: compatible: - items: - - enum: - - renesas,r9a07g043u-irqc # RZ/G2UL - - renesas,r9a07g044-irqc # RZ/G2{L,LC} - - renesas,r9a07g054-irqc # RZ/V2L - - renesas,r9a08g045-irqc # RZ/G3S - - const: renesas,rzg2l-irqc + oneOf: + - items: + - enum: + - renesas,r9a07g043u-irqc # RZ/G2UL + - renesas,r9a07g044-irqc # RZ/G2{L,LC} + - renesas,r9a07g054-irqc # RZ/V2L + - renesas,r9a08g045-irqc # RZ/G3S + - const: renesas,rzg2l-irqc + + - const: renesas,r9a07g043f-irqc # RZ/Five =20 '#interrupt-cells': description: The first cell should contain a macro RZG2L_{NMI,IRQX} incl= uded in the diff --git a/MAINTAINERS b/MAINTAINERS index 8754ac2c259d..c47d8b9114b8 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -14727,6 +14727,12 @@ L: netdev@vger.kernel.org S: Maintained F: drivers/net/ethernet/microchip/lan966x/* =20 +MICROCHIP LAN966X OIC DRIVER +M: Herve Codina +S: Maintained +F: Documentation/devicetree/bindings/interrupt-controller/microchip,lan966x-= oic.yaml +F: drivers/irqchip/irq-lan966x-oic.c + MICROCHIP LCDFB DRIVER M: Nicolas Ferre L: linux-fbdev@vger.kernel.org diff --git a/arch/arm/mach-stm32/Kconfig b/arch/arm/mach-stm32/Kconfig index ae21a9f78f9c..630b992f32b1 100644 --- a/arch/arm/mach-stm32/Kconfig +++ b/arch/arm/mach-stm32/Kconfig @@ -11,7 +11,7 @@ menuconfig ARCH_STM32 select CLKSRC_STM32 select PINCTRL select RESET_CONTROLLER - select STM32_EXTI + select STM32_EXTI if ARM_SINGLE_ARMV7M select STM32_FIREWALL help Support for STMicroelectronics STM32 processors. diff --git a/arch/arm64/Kconfig.platforms b/arch/arm64/Kconfig.platforms index a52618073de2..a028ea312378 100644 --- a/arch/arm64/Kconfig.platforms +++ b/arch/arm64/Kconfig.platforms @@ -309,7 +309,6 @@ config ARCH_STM32 select GPIOLIB select PINCTRL select PINCTRL_STM32MP257 - select STM32_EXTI select ARM_SMC_MBOX select ARM_SCMI_PROTOCOL select COMMON_CLK_SCMI diff --git a/arch/um/drivers/virt-pci.c b/arch/um/drivers/virt-pci.c index 7cb503469bbd..a0883d5445b5 100644 --- a/arch/um/drivers/virt-pci.c +++ b/arch/um/drivers/virt-pci.c @@ -986,6 +986,11 @@ static struct resource virt_platform_resource =3D { =20 static int __init um_pci_init(void) { + struct irq_domain_info inner_domain_info =3D { + .size =3D MAX_MSI_VECTORS, + .hwirq_max =3D MAX_MSI_VECTORS, + .ops =3D &um_pci_inner_domain_ops, + }; int err, i; =20 WARN_ON(logic_iomem_add_region(&virt_cfgspace_resource, @@ -1015,11 +1020,10 @@ static int __init um_pci_init(void) goto free; } =20 - um_pci_inner_domain =3D __irq_domain_add(um_pci_fwnode, MAX_MSI_VECTORS, - MAX_MSI_VECTORS, 0, - &um_pci_inner_domain_ops, NULL); - if (!um_pci_inner_domain) { - err =3D -ENOMEM; + inner_domain_info.fwnode =3D um_pci_fwnode; + um_pci_inner_domain =3D irq_domain_instantiate(&inner_domain_info); + if (IS_ERR(um_pci_inner_domain)) { + err =3D PTR_ERR(um_pci_inner_domain); goto free; } =20 @@ -1056,7 +1060,7 @@ static int __init um_pci_init(void) goto free; return 0; free: - if (um_pci_inner_domain) + if (!IS_ERR_OR_NULL(um_pci_inner_domain)) irq_domain_remove(um_pci_inner_domain); if (um_pci_fwnode) irq_domain_free_fwnode(um_pci_fwnode); diff --git a/drivers/acpi/processor_core.c b/drivers/acpi/processor_core.c index b203cfe28550..915713c0e9b7 100644 --- a/drivers/acpi/processor_core.c +++ b/drivers/acpi/processor_core.c @@ -215,6 +215,21 @@ phys_cpuid_t __init acpi_map_madt_entry(u32 acpi_id) return rv; } =20 +int __init acpi_get_madt_revision(void) +{ + struct acpi_table_header *madt =3D NULL; + int revision; + + if (ACPI_FAILURE(acpi_get_table(ACPI_SIG_MADT, 0, &madt))) + return -EINVAL; + + revision =3D madt->revision; + + acpi_put_table(madt); + + return revision; +} + static phys_cpuid_t map_mat_entry(acpi_handle handle, int type, u32 acpi_id) { struct acpi_buffer buffer =3D { ACPI_ALLOCATE_BUFFER, NULL }; diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig index 14464716bacb..344c484736af 100644 --- a/drivers/irqchip/Kconfig +++ b/drivers/irqchip/Kconfig @@ -169,6 +169,18 @@ config IXP4XX_IRQ select IRQ_DOMAIN select SPARSE_IRQ =20 +config LAN966X_OIC + tristate "Microchip LAN966x OIC Support" + select GENERIC_IRQ_CHIP + select IRQ_DOMAIN + help + Enable support for the LAN966x Outbound Interrupt Controller. + This controller is present on the Microchip LAN966x PCI device and + maps the internal interrupts sources to PCIe interrupt. + + To compile this driver as a module, choose M here: the module + will be called irq-lan966x-oic. + config MADERA_IRQ tristate =20 @@ -392,6 +404,15 @@ config LS_SCFG_MSI config PARTITION_PERCPU bool =20 +config STM32MP_EXTI + tristate "STM32MP extended interrupts and event controller" + depends on (ARCH_STM32 && !ARM_SINGLE_ARMV7M) || COMPILE_TEST + default y + select IRQ_DOMAIN_HIERARCHY + select GENERIC_IRQ_CHIP + help + Support STM32MP EXTI (extended interrupts and event) controller. + config STM32_EXTI bool select IRQ_DOMAIN diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile index d9dc3d99aaa8..2df72b7b165b 100644 --- a/drivers/irqchip/Makefile +++ b/drivers/irqchip/Makefile @@ -84,6 +84,7 @@ obj-$(CONFIG_MVEBU_SEI) +=3D irq-mvebu-sei.o obj-$(CONFIG_LS_EXTIRQ) +=3D irq-ls-extirq.o obj-$(CONFIG_LS_SCFG_MSI) +=3D irq-ls-scfg-msi.o obj-$(CONFIG_ARCH_ASPEED) +=3D irq-aspeed-vic.o irq-aspeed-i2c-ic.o irq-asp= eed-scu-ic.o +obj-$(CONFIG_STM32MP_EXTI) +=3D irq-stm32mp-exti.o obj-$(CONFIG_STM32_EXTI) +=3D irq-stm32-exti.o obj-$(CONFIG_QCOM_IRQ_COMBINER) +=3D qcom-irq-combiner.o obj-$(CONFIG_IRQ_UNIPHIER_AIDET) +=3D irq-uniphier-aidet.o @@ -104,6 +105,7 @@ obj-$(CONFIG_IMX_IRQSTEER) +=3D irq-imx-irqsteer.o obj-$(CONFIG_IMX_INTMUX) +=3D irq-imx-intmux.o obj-$(CONFIG_IMX_MU_MSI) +=3D irq-imx-mu-msi.o obj-$(CONFIG_MADERA_IRQ) +=3D irq-madera.o +obj-$(CONFIG_LAN966X_OIC) +=3D irq-lan966x-oic.o obj-$(CONFIG_LS1X_IRQ) +=3D irq-ls1x.o obj-$(CONFIG_TI_SCI_INTR_IRQCHIP) +=3D irq-ti-sci-intr.o obj-$(CONFIG_TI_SCI_INTA_IRQCHIP) +=3D irq-ti-sci-inta.o diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada= -370-xp.c index 4b021a67bdfe..dce2b80bf439 100644 --- a/drivers/irqchip/irq-armada-370-xp.c +++ b/drivers/irqchip/irq-armada-370-xp.c @@ -13,6 +13,7 @@ * warranty of any kind, whether express or implied. */ =20 +#include #include #include #include @@ -29,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -135,6 +137,7 @@ =20 #define ARMADA_370_XP_MAX_PER_CPU_IRQS (28) =20 +/* IPI and MSI interrupt definitions for IPI platforms */ #define IPI_DOORBELL_START (0) #define IPI_DOORBELL_END (8) #define IPI_DOORBELL_MASK 0xFF @@ -143,6 +146,14 @@ #define PCI_MSI_DOORBELL_END (32) #define PCI_MSI_DOORBELL_MASK 0xFFFF0000 =20 +/* MSI interrupt definitions for non-IPI platforms */ +#define PCI_MSI_FULL_DOORBELL_START 0 +#define PCI_MSI_FULL_DOORBELL_NR 32 +#define PCI_MSI_FULL_DOORBELL_END 32 +#define PCI_MSI_FULL_DOORBELL_MASK GENMASK(31, 0) +#define PCI_MSI_FULL_DOORBELL_SRC0_MASK GENMASK(15, 0) +#define PCI_MSI_FULL_DOORBELL_SRC1_MASK GENMASK(31, 16) + static void __iomem *per_cpu_int_base; static void __iomem *main_int_base; static struct irq_domain *armada_370_xp_mpic_domain; @@ -151,11 +162,46 @@ static int parent_irq; #ifdef CONFIG_PCI_MSI static struct irq_domain *armada_370_xp_msi_domain; static struct irq_domain *armada_370_xp_msi_inner_domain; -static DECLARE_BITMAP(msi_used, PCI_MSI_DOORBELL_NR); +static DECLARE_BITMAP(msi_used, PCI_MSI_FULL_DOORBELL_NR); static DEFINE_MUTEX(msi_used_lock); static phys_addr_t msi_doorbell_addr; #endif =20 +static inline bool is_ipi_available(void) +{ + /* + * We distinguish IPI availability in the IC by the IC not having a + * parent irq defined. If a parent irq is defined, there is a parent + * interrupt controller (e.g. GIC) that takes care of inter-processor + * interrupts. + */ + return parent_irq <=3D 0; +} + +static inline u32 msi_doorbell_mask(void) +{ + return is_ipi_available() ? PCI_MSI_DOORBELL_MASK : + PCI_MSI_FULL_DOORBELL_MASK; +} + +static inline unsigned int msi_doorbell_start(void) +{ + return is_ipi_available() ? PCI_MSI_DOORBELL_START : + PCI_MSI_FULL_DOORBELL_START; +} + +static inline unsigned int msi_doorbell_size(void) +{ + return is_ipi_available() ? PCI_MSI_DOORBELL_NR : + PCI_MSI_FULL_DOORBELL_NR; +} + +static inline unsigned int msi_doorbell_end(void) +{ + return is_ipi_available() ? PCI_MSI_DOORBELL_END : + PCI_MSI_FULL_DOORBELL_END; +} + static inline bool is_percpu_irq(irq_hw_number_t irq) { if (irq <=3D ARMADA_370_XP_MAX_PER_CPU_IRQS) @@ -213,7 +259,7 @@ static void armada_370_xp_compose_msi_msg(struct irq_data= *data, struct msi_msg =20 msg->address_lo =3D lower_32_bits(msi_doorbell_addr); msg->address_hi =3D upper_32_bits(msi_doorbell_addr); - msg->data =3D BIT(cpu + 8) | (data->hwirq + PCI_MSI_DOORBELL_START); + msg->data =3D BIT(cpu + 8) | (data->hwirq + msi_doorbell_start()); } =20 static int armada_370_xp_msi_set_affinity(struct irq_data *irq_data, @@ -246,7 +292,7 @@ static int armada_370_xp_msi_alloc(struct irq_domain *dom= ain, unsigned int virq, int hwirq, i; =20 mutex_lock(&msi_used_lock); - hwirq =3D bitmap_find_free_region(msi_used, PCI_MSI_DOORBELL_NR, + hwirq =3D bitmap_find_free_region(msi_used, msi_doorbell_size(), order_base_2(nr_irqs)); mutex_unlock(&msi_used_lock); =20 @@ -283,9 +329,10 @@ static void armada_370_xp_msi_reenable_percpu(void) u32 reg; =20 /* Enable MSI doorbell mask and combined cpu local interrupt */ - reg =3D readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS) - | PCI_MSI_DOORBELL_MASK; + reg =3D readl(per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + reg |=3D msi_doorbell_mask(); writel(reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); + /* Unmask local doorbell interrupt */ writel(1, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); } @@ -297,7 +344,7 @@ static int armada_370_xp_msi_init(struct device_node *nod= e, ARMADA_370_XP_SW_TRIG_INT_OFFS; =20 armada_370_xp_msi_inner_domain =3D - irq_domain_add_linear(NULL, PCI_MSI_DOORBELL_NR, + irq_domain_add_linear(NULL, msi_doorbell_size(), &armada_370_xp_msi_domain_ops, NULL); if (!armada_370_xp_msi_inner_domain) return -ENOMEM; @@ -313,6 +360,10 @@ static int armada_370_xp_msi_init(struct device_node *no= de, =20 armada_370_xp_msi_reenable_percpu(); =20 + /* Unmask low 16 MSI irqs on non-IPI platforms */ + if (!is_ipi_available()) + writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); + return 0; } #else @@ -461,24 +512,18 @@ static __init void armada_xp_ipi_init(struct device_nod= e *node) set_smp_ipi_range(base_ipi, IPI_DOORBELL_END); } =20 -static DEFINE_RAW_SPINLOCK(irq_controller_lock); - static int armada_xp_set_affinity(struct irq_data *d, const struct cpumask *mask_val, bool force) { irq_hw_number_t hwirq =3D irqd_to_hwirq(d); - unsigned long reg, mask; int cpu; =20 /* Select a single core from the affinity mask which is online */ cpu =3D cpumask_any_and(mask_val, cpu_online_mask); - mask =3D 1UL << cpu_logical_map(cpu); =20 - raw_spin_lock(&irq_controller_lock); - reg =3D readl(main_int_base + ARMADA_370_XP_INT_SOURCE_CTL(hwirq)); - reg =3D (reg & (~ARMADA_370_XP_INT_SOURCE_CPU_MASK)) | mask; - writel(reg, main_int_base + ARMADA_370_XP_INT_SOURCE_CTL(hwirq)); - raw_spin_unlock(&irq_controller_lock); + atomic_io_modify(main_int_base + ARMADA_370_XP_INT_SOURCE_CTL(hwirq), + ARMADA_370_XP_INT_SOURCE_CPU_MASK, + BIT(cpu_logical_map(cpu))); =20 irq_data_update_effective_affinity(d, cpumask_of(cpu)); =20 @@ -496,6 +541,9 @@ static void armada_xp_mpic_smp_cpu_init(void) for (i =3D 0; i < nr_irqs; i++) writel(i, per_cpu_int_base + ARMADA_370_XP_INT_SET_MASK_OFFS); =20 + if (!is_ipi_available()) + return; + /* Disable all IPIs */ writel(0, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); =20 @@ -527,7 +575,8 @@ static void armada_xp_mpic_reenable_percpu(void) armada_370_xp_irq_unmask(data); } =20 - ipi_resume(); + if (is_ipi_available()) + ipi_resume(); =20 armada_370_xp_msi_reenable_percpu(); } @@ -566,6 +615,10 @@ static struct irq_chip armada_370_xp_irq_chip =3D { static int armada_370_xp_mpic_irq_map(struct irq_domain *h, unsigned int virq, irq_hw_number_t hw) { + /* IRQs 0 and 1 cannot be mapped, they are handled internally */ + if (hw <=3D 1) + return -EINVAL; + armada_370_xp_irq_mask(irq_get_irq_data(virq)); if (!is_percpu_irq(hw)) writel(hw, per_cpu_int_base + @@ -599,20 +652,20 @@ static void armada_370_xp_handle_msi_irq(struct pt_regs= *regs, bool is_chained) u32 msimask, msinr; =20 msimask =3D readl_relaxed(per_cpu_int_base + - ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS) - & PCI_MSI_DOORBELL_MASK; + ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS); + msimask &=3D msi_doorbell_mask(); =20 writel(~msimask, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_CAUSE_OFFS); =20 - for (msinr =3D PCI_MSI_DOORBELL_START; - msinr < PCI_MSI_DOORBELL_END; msinr++) { + for (msinr =3D msi_doorbell_start(); + msinr < msi_doorbell_end(); msinr++) { unsigned int irq; =20 if (!(msimask & BIT(msinr))) continue; =20 - irq =3D msinr - PCI_MSI_DOORBELL_START; + irq =3D msinr - msi_doorbell_start(); =20 generic_handle_domain_irq(armada_370_xp_msi_inner_domain, irq); } @@ -641,7 +694,7 @@ static void armada_370_xp_mpic_handle_cascade_irq(struct = irq_desc *desc) if (!(irqsrc & ARMADA_370_XP_INT_IRQ_FIQ_MASK(cpuid))) continue; =20 - if (irqn =3D=3D 1) { + if (irqn =3D=3D 0 || irqn =3D=3D 1) { armada_370_xp_handle_msi_irq(NULL, true); continue; } @@ -702,6 +755,7 @@ static int armada_370_xp_mpic_suspend(void) =20 static void armada_370_xp_mpic_resume(void) { + bool src0, src1; int nirqs; irq_hw_number_t irq; =20 @@ -741,12 +795,22 @@ static void armada_370_xp_mpic_resume(void) /* Reconfigure doorbells for IPIs and MSIs */ writel(doorbell_mask_reg, per_cpu_int_base + ARMADA_370_XP_IN_DRBEL_MSK_OFFS); - if (doorbell_mask_reg & IPI_DOORBELL_MASK) + + if (is_ipi_available()) { + src0 =3D doorbell_mask_reg & IPI_DOORBELL_MASK; + src1 =3D doorbell_mask_reg & PCI_MSI_DOORBELL_MASK; + } else { + src0 =3D doorbell_mask_reg & PCI_MSI_FULL_DOORBELL_SRC0_MASK; + src1 =3D doorbell_mask_reg & PCI_MSI_FULL_DOORBELL_SRC1_MASK; + } + + if (src0) writel(0, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); - if (doorbell_mask_reg & PCI_MSI_DOORBELL_MASK) + if (src1) writel(1, per_cpu_int_base + ARMADA_370_XP_INT_CLEAR_MASK_OFFS); =20 - ipi_resume(); + if (is_ipi_available()) + ipi_resume(); } =20 static struct syscore_ops armada_370_xp_mpic_syscore_ops =3D { @@ -791,13 +855,18 @@ static int __init armada_370_xp_mpic_of_init(struct dev= ice_node *node, BUG_ON(!armada_370_xp_mpic_domain); irq_domain_update_bus_token(armada_370_xp_mpic_domain, DOMAIN_BUS_WIRED); =20 + /* + * Initialize parent_irq before calling any other functions, since it is + * used to distinguish between IPI and non-IPI platforms. + */ + parent_irq =3D irq_of_parse_and_map(node, 0); + /* Setup for the boot CPU */ armada_xp_mpic_perf_init(); armada_xp_mpic_smp_cpu_init(); =20 armada_370_xp_msi_init(node, main_int_res.start); =20 - parent_irq =3D irq_of_parse_and_map(node, 0); if (parent_irq <=3D 0) { irq_set_default_host(armada_370_xp_mpic_domain); set_handle_irq(armada_370_xp_handle_irq); diff --git a/drivers/irqchip/irq-bcm2835.c b/drivers/irqchip/irq-bcm2835.c index e94e2882286c..6c20604c2242 100644 --- a/drivers/irqchip/irq-bcm2835.c +++ b/drivers/irqchip/irq-bcm2835.c @@ -102,7 +102,9 @@ static void armctrl_unmask_irq(struct irq_data *d) static struct irq_chip armctrl_chip =3D { .name =3D "ARMCTRL-level", .irq_mask =3D armctrl_mask_irq, - .irq_unmask =3D armctrl_unmask_irq + .irq_unmask =3D armctrl_unmask_irq, + .flags =3D IRQCHIP_MASK_ON_SUSPEND | + IRQCHIP_SKIP_SET_WAKE, }; =20 static int armctrl_xlate(struct irq_domain *d, struct device_node *ctrlr, diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-it= s.c index 40ebf1726393..c23a64fcf9b3 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -1317,7 +1317,6 @@ static void its_send_vmovp(struct its_vpe *vpe) { struct its_cmd_desc desc =3D {}; struct its_node *its; - unsigned long flags; int col_id =3D vpe->col_idx; =20 desc.its_vmovp_cmd.vpe =3D vpe; @@ -1329,6 +1328,12 @@ static void its_send_vmovp(struct its_vpe *vpe) return; } =20 + /* + * Protect against concurrent updates of the mapping state on + * individual VMs. + */ + guard(raw_spinlock_irqsave)(&vpe->its_vm->vmapp_lock); + /* * Yet another marvel of the architecture. If using the * its_list "feature", we need to make sure that all ITSs @@ -1337,8 +1342,7 @@ static void its_send_vmovp(struct its_vpe *vpe) * * Wall <-- Head. */ - raw_spin_lock_irqsave(&vmovp_lock, flags); - + guard(raw_spinlock)(&vmovp_lock); desc.its_vmovp_cmd.seq_num =3D vmovp_seq_num++; desc.its_vmovp_cmd.its_list =3D get_its_list(vpe->its_vm); =20 @@ -1353,8 +1357,6 @@ static void its_send_vmovp(struct its_vpe *vpe) desc.its_vmovp_cmd.col =3D &its->collections[col_id]; its_send_single_vcommand(its, its_build_vmovp_cmd, &desc); } - - raw_spin_unlock_irqrestore(&vmovp_lock, flags); } =20 static void its_send_vinvall(struct its_node *its, struct its_vpe *vpe) @@ -1791,12 +1793,10 @@ static bool gic_requires_eager_mapping(void) =20 static void its_map_vm(struct its_node *its, struct its_vm *vm) { - unsigned long flags; - if (gic_requires_eager_mapping()) return; =20 - raw_spin_lock_irqsave(&vmovp_lock, flags); + guard(raw_spinlock_irqsave)(&vm->vmapp_lock); =20 /* * If the VM wasn't mapped yet, iterate over the vpes and get @@ -1809,37 +1809,31 @@ static void its_map_vm(struct its_node *its, struct i= ts_vm *vm) =20 for (i =3D 0; i < vm->nr_vpes; i++) { struct its_vpe *vpe =3D vm->vpes[i]; - struct irq_data *d =3D irq_get_irq_data(vpe->irq); =20 - /* Map the VPE to the first possible CPU */ - vpe->col_idx =3D cpumask_first(cpu_online_mask); - its_send_vmapp(its, vpe, true); + scoped_guard(raw_spinlock, &vpe->vpe_lock) + its_send_vmapp(its, vpe, true); + its_send_vinvall(its, vpe); - irq_data_update_effective_affinity(d, cpumask_of(vpe->col_idx)); } } - - raw_spin_unlock_irqrestore(&vmovp_lock, flags); } =20 static void its_unmap_vm(struct its_node *its, struct its_vm *vm) { - unsigned long flags; - /* Not using the ITS list? Everything is always mapped. */ if (gic_requires_eager_mapping()) return; =20 - raw_spin_lock_irqsave(&vmovp_lock, flags); + guard(raw_spinlock_irqsave)(&vm->vmapp_lock); =20 if (!--vm->vlpi_count[its->list_nr]) { int i; =20 - for (i =3D 0; i < vm->nr_vpes; i++) + for (i =3D 0; i < vm->nr_vpes; i++) { + guard(raw_spinlock)(&vm->vpes[i]->vpe_lock); its_send_vmapp(its, vm->vpes[i], false); + } } - - raw_spin_unlock_irqrestore(&vmovp_lock, flags); } =20 static int its_vlpi_map(struct irq_data *d, struct its_cmd_info *info) @@ -3946,6 +3940,8 @@ static void its_vpe_invall(struct its_vpe *vpe) { struct its_node *its; =20 + guard(raw_spinlock_irqsave)(&vpe->its_vm->vmapp_lock); + list_for_each_entry(its, &its_nodes, entry) { if (!is_v4(its)) continue; @@ -4551,6 +4547,7 @@ static int its_vpe_irq_domain_alloc(struct irq_domain *= domain, unsigned int virq vm->db_lpi_base =3D base; vm->nr_db_lpis =3D nr_ids; vm->vprop_page =3D vprop_page; + raw_spin_lock_init(&vm->vmapp_lock); =20 if (gic_rdists->has_rvpeid) irqchip =3D &its_vpe_4_1_irq_chip; @@ -4582,6 +4579,10 @@ static int its_vpe_irq_domain_activate(struct irq_doma= in *domain, struct its_vpe *vpe =3D irq_data_get_irq_chip_data(d); struct its_node *its; =20 + /* Map the VPE to the first possible CPU */ + vpe->col_idx =3D cpumask_first(cpu_online_mask); + irq_data_update_effective_affinity(d, cpumask_of(vpe->col_idx)); + /* * If we use the list map, we issue VMAPP on demand... Unless * we're on a GICv4.1 and we eagerly map the VPE on all ITSs @@ -4590,9 +4591,6 @@ static int its_vpe_irq_domain_activate(struct irq_domai= n *domain, if (!gic_requires_eager_mapping()) return 0; =20 - /* Map the VPE to the first possible CPU */ - vpe->col_idx =3D cpumask_first(cpu_online_mask); - list_for_each_entry(its, &its_nodes, entry) { if (!is_v4(its)) continue; @@ -4601,8 +4599,6 @@ static int its_vpe_irq_domain_activate(struct irq_domai= n *domain, its_send_vinvall(its, vpe); } =20 - irq_data_update_effective_affinity(d, cpumask_of(vpe->col_idx)); - return 0; } =20 @@ -5600,6 +5596,10 @@ static int __init gic_acpi_parse_madt_its(union acpi_s= ubtable_headers *header, goto node_err; } =20 + if (acpi_get_madt_revision() >=3D 7 && + (its_entry->flags & ACPI_MADT_ITS_NON_COHERENT)) + its->flags |=3D ITS_FLAGS_FORCE_NON_SHAREABLE; + err =3D its_probe_one(its); if (!err) return 0; diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c index 6fb276504bcc..7c12d11513c6 100644 --- a/drivers/irqchip/irq-gic-v3.c +++ b/drivers/irqchip/irq-gic-v3.c @@ -2190,11 +2190,10 @@ static void __init gic_populate_ppi_partitions(struct= device_node *gic_node) of_node_put(parts_node); } =20 -static void __init gic_of_setup_kvm_info(struct device_node *node) +static void __init gic_of_setup_kvm_info(struct device_node *node, u32 nr_re= dist_regions) { int ret; struct resource r; - u32 gicv_idx; =20 gic_v3_kvm_info.type =3D GIC_V3; =20 @@ -2202,12 +2201,8 @@ static void __init gic_of_setup_kvm_info(struct device= _node *node) if (!gic_v3_kvm_info.maint_irq) return; =20 - if (of_property_read_u32(node, "#redistributor-regions", - &gicv_idx)) - gicv_idx =3D 1; - - gicv_idx +=3D 3; /* Also skip GICD, GICC, GICH */ - ret =3D of_address_to_resource(node, gicv_idx, &r); + /* Also skip GICD, GICC, GICH */ + ret =3D of_address_to_resource(node, nr_redist_regions + 3, &r); if (!ret) gic_v3_kvm_info.vcpu =3D r; =20 @@ -2297,7 +2292,7 @@ static int __init gic_of_init(struct device_node *node,= struct device_node *pare gic_populate_ppi_partitions(node); =20 if (static_branch_likely(&supports_deactivate_key)) - gic_of_setup_kvm_info(node); + gic_of_setup_kvm_info(node, nr_redist_regions); return 0; =20 out_unmap_rdist: @@ -2349,6 +2344,11 @@ gic_acpi_parse_madt_redist(union acpi_subtable_headers= *header, pr_err("Couldn't map GICR region @%llx\n", redist->base_address); return -ENOMEM; } + + if (acpi_get_madt_revision() >=3D 7 && + (redist->flags & ACPI_MADT_GICR_NON_COHERENT)) + gic_data.rdists.flags |=3D RDIST_FLAGS_FORCE_NON_SHAREABLE; + gic_request_region(redist->base_address, redist->length, "GICR"); =20 gic_acpi_register_redist(redist->base_address, redist_base); @@ -2373,6 +2373,10 @@ gic_acpi_parse_madt_gicc(union acpi_subtable_headers *= header, return -ENOMEM; gic_request_region(gicc->gicr_base_address, size, "GICR"); =20 + if (acpi_get_madt_revision() >=3D 7 && + (gicc->flags & ACPI_MADT_GICC_NON_COHERENT)) + gic_data.rdists.flags |=3D RDIST_FLAGS_FORCE_NON_SHAREABLE; + gic_acpi_register_redist(gicc->gicr_base_address, redist_base); return 0; } diff --git a/drivers/irqchip/irq-imx-irqsteer.c b/drivers/irqchip/irq-imx-irq= steer.c index 20cf7a9e9ece..75a0e980ff35 100644 --- a/drivers/irqchip/irq-imx-irqsteer.c +++ b/drivers/irqchip/irq-imx-irqsteer.c @@ -36,6 +36,7 @@ struct irqsteer_data { int channel; struct irq_domain *domain; u32 *saved_reg; + struct device *dev; }; =20 static int imx_irqsteer_get_reg_index(struct irqsteer_data *data, @@ -72,10 +73,26 @@ static void imx_irqsteer_irq_mask(struct irq_data *d) raw_spin_unlock_irqrestore(&data->lock, flags); } =20 +static void imx_irqsteer_irq_bus_lock(struct irq_data *d) +{ + struct irqsteer_data *data =3D d->chip_data; + + pm_runtime_get_sync(data->dev); +} + +static void imx_irqsteer_irq_bus_sync_unlock(struct irq_data *d) +{ + struct irqsteer_data *data =3D d->chip_data; + + pm_runtime_put_autosuspend(data->dev); +} + static const struct irq_chip imx_irqsteer_irq_chip =3D { - .name =3D "irqsteer", - .irq_mask =3D imx_irqsteer_irq_mask, - .irq_unmask =3D imx_irqsteer_irq_unmask, + .name =3D "irqsteer", + .irq_mask =3D imx_irqsteer_irq_mask, + .irq_unmask =3D imx_irqsteer_irq_unmask, + .irq_bus_lock =3D imx_irqsteer_irq_bus_lock, + .irq_bus_sync_unlock =3D imx_irqsteer_irq_bus_sync_unlock, }; =20 static int imx_irqsteer_irq_map(struct irq_domain *h, unsigned int irq, @@ -150,6 +167,7 @@ static int imx_irqsteer_probe(struct platform_device *pde= v) if (!data) return -ENOMEM; =20 + data->dev =3D &pdev->dev; data->regs =3D devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(data->regs)) { dev_err(&pdev->dev, "failed to initialize reg\n"); diff --git a/drivers/irqchip/irq-lan966x-oic.c b/drivers/irqchip/irq-lan966x-= oic.c new file mode 100644 index 000000000000..41ac880e3b87 --- /dev/null +++ b/drivers/irqchip/irq-lan966x-oic.c @@ -0,0 +1,278 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Driver for the Microchip LAN966x outbound interrupt controller + * + * Copyright (c) 2024 Technology Inc. and its subsidiaries. + * + * Authors: + * Horatiu Vultur + * Cl=C3=A9ment L=C3=A9ger + * Herve Codina + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +struct lan966x_oic_chip_regs { + int reg_off_ena_set; + int reg_off_ena_clr; + int reg_off_sticky; + int reg_off_ident; + int reg_off_map; +}; + +struct lan966x_oic_data { + void __iomem *regs; + int irq; +}; + +#define LAN966X_OIC_NR_IRQ 86 + +/* Interrupt sticky status */ +#define LAN966X_OIC_INTR_STICKY 0x30 +#define LAN966X_OIC_INTR_STICKY1 0x34 +#define LAN966X_OIC_INTR_STICKY2 0x38 + +/* Interrupt enable */ +#define LAN966X_OIC_INTR_ENA 0x48 +#define LAN966X_OIC_INTR_ENA1 0x4c +#define LAN966X_OIC_INTR_ENA2 0x50 + +/* Atomic clear of interrupt enable */ +#define LAN966X_OIC_INTR_ENA_CLR 0x54 +#define LAN966X_OIC_INTR_ENA_CLR1 0x58 +#define LAN966X_OIC_INTR_ENA_CLR2 0x5c + +/* Atomic set of interrupt */ +#define LAN966X_OIC_INTR_ENA_SET 0x60 +#define LAN966X_OIC_INTR_ENA_SET1 0x64 +#define LAN966X_OIC_INTR_ENA_SET2 0x68 + +/* Mapping of source to destination interrupts (_n =3D 0..8) */ +#define LAN966X_OIC_DST_INTR_MAP(_n) (0x78 + (_n) * 4) +#define LAN966X_OIC_DST_INTR_MAP1(_n) (0x9c + (_n) * 4) +#define LAN966X_OIC_DST_INTR_MAP2(_n) (0xc0 + (_n) * 4) + +/* Currently active interrupt sources per destination (_n =3D 0..8) */ +#define LAN966X_OIC_DST_INTR_IDENT(_n) (0xe4 + (_n) * 4) +#define LAN966X_OIC_DST_INTR_IDENT1(_n) (0x108 + (_n) * 4) +#define LAN966X_OIC_DST_INTR_IDENT2(_n) (0x12c + (_n) * 4) + +static unsigned int lan966x_oic_irq_startup(struct irq_data *data) +{ + struct irq_chip_generic *gc =3D irq_data_get_irq_chip_data(data); + struct irq_chip_type *ct =3D irq_data_get_chip_type(data); + struct lan966x_oic_chip_regs *chip_regs =3D gc->private; + u32 map; + + irq_gc_lock(gc); + + /* Map the source interrupt to the destination */ + map =3D irq_reg_readl(gc, chip_regs->reg_off_map); + map |=3D data->mask; + irq_reg_writel(gc, map, chip_regs->reg_off_map); + + irq_gc_unlock(gc); + + ct->chip.irq_ack(data); + ct->chip.irq_unmask(data); + + return 0; +} + +static void lan966x_oic_irq_shutdown(struct irq_data *data) +{ + struct irq_chip_generic *gc =3D irq_data_get_irq_chip_data(data); + struct irq_chip_type *ct =3D irq_data_get_chip_type(data); + struct lan966x_oic_chip_regs *chip_regs =3D gc->private; + u32 map; + + ct->chip.irq_mask(data); + + irq_gc_lock(gc); + + /* Unmap the interrupt */ + map =3D irq_reg_readl(gc, chip_regs->reg_off_map); + map &=3D ~data->mask; + irq_reg_writel(gc, map, chip_regs->reg_off_map); + + irq_gc_unlock(gc); +} + +static int lan966x_oic_irq_set_type(struct irq_data *data, + unsigned int flow_type) +{ + if (flow_type !=3D IRQ_TYPE_LEVEL_HIGH) { + pr_err("lan966x oic doesn't support flow type %d\n", flow_type); + return -EINVAL; + } + + return 0; +} + +static void lan966x_oic_irq_handler_domain(struct irq_domain *d, u32 first_i= rq) +{ + struct irq_chip_generic *gc =3D irq_get_domain_generic_chip(d, first_irq); + struct lan966x_oic_chip_regs *chip_regs =3D gc->private; + unsigned long ident; + unsigned int hwirq; + + ident =3D irq_reg_readl(gc, chip_regs->reg_off_ident); + if (!ident) + return; + + for_each_set_bit(hwirq, &ident, 32) + generic_handle_domain_irq(d, hwirq + first_irq); +} + +static void lan966x_oic_irq_handler(struct irq_desc *desc) +{ + struct irq_domain *d =3D irq_desc_get_handler_data(desc); + struct irq_chip *chip =3D irq_desc_get_chip(desc); + + chained_irq_enter(chip, desc); + lan966x_oic_irq_handler_domain(d, 0); + lan966x_oic_irq_handler_domain(d, 32); + lan966x_oic_irq_handler_domain(d, 64); + chained_irq_exit(chip, desc); +} + +static struct lan966x_oic_chip_regs lan966x_oic_chip_regs[3] =3D { + { + .reg_off_ena_set =3D LAN966X_OIC_INTR_ENA_SET, + .reg_off_ena_clr =3D LAN966X_OIC_INTR_ENA_CLR, + .reg_off_sticky =3D LAN966X_OIC_INTR_STICKY, + .reg_off_ident =3D LAN966X_OIC_DST_INTR_IDENT(0), + .reg_off_map =3D LAN966X_OIC_DST_INTR_MAP(0), + }, { + .reg_off_ena_set =3D LAN966X_OIC_INTR_ENA_SET1, + .reg_off_ena_clr =3D LAN966X_OIC_INTR_ENA_CLR1, + .reg_off_sticky =3D LAN966X_OIC_INTR_STICKY1, + .reg_off_ident =3D LAN966X_OIC_DST_INTR_IDENT1(0), + .reg_off_map =3D LAN966X_OIC_DST_INTR_MAP1(0), + }, { + .reg_off_ena_set =3D LAN966X_OIC_INTR_ENA_SET2, + .reg_off_ena_clr =3D LAN966X_OIC_INTR_ENA_CLR2, + .reg_off_sticky =3D LAN966X_OIC_INTR_STICKY2, + .reg_off_ident =3D LAN966X_OIC_DST_INTR_IDENT2(0), + .reg_off_map =3D LAN966X_OIC_DST_INTR_MAP2(0), + } +}; + +static int lan966x_oic_chip_init(struct irq_chip_generic *gc) +{ + struct lan966x_oic_data *lan966x_oic =3D gc->domain->host_data; + struct lan966x_oic_chip_regs *chip_regs; + + chip_regs =3D &lan966x_oic_chip_regs[gc->irq_base / 32]; + + gc->reg_base =3D lan966x_oic->regs; + gc->chip_types[0].regs.enable =3D chip_regs->reg_off_ena_set; + gc->chip_types[0].regs.disable =3D chip_regs->reg_off_ena_clr; + gc->chip_types[0].regs.ack =3D chip_regs->reg_off_sticky; + gc->chip_types[0].chip.irq_startup =3D lan966x_oic_irq_startup; + gc->chip_types[0].chip.irq_shutdown =3D lan966x_oic_irq_shutdown; + gc->chip_types[0].chip.irq_set_type =3D lan966x_oic_irq_set_type; + gc->chip_types[0].chip.irq_mask =3D irq_gc_mask_disable_reg; + gc->chip_types[0].chip.irq_unmask =3D irq_gc_unmask_enable_reg; + gc->chip_types[0].chip.irq_ack =3D irq_gc_ack_set_bit; + gc->private =3D chip_regs; + + /* Disable all interrupts handled by this chip */ + irq_reg_writel(gc, ~0U, chip_regs->reg_off_ena_clr); + + return 0; +} + +static void lan966x_oic_chip_exit(struct irq_chip_generic *gc) +{ + /* Disable and ack all interrupts handled by this chip */ + irq_reg_writel(gc, ~0U, gc->chip_types[0].regs.disable); + irq_reg_writel(gc, ~0U, gc->chip_types[0].regs.ack); +} + +static int lan966x_oic_domain_init(struct irq_domain *d) +{ + struct lan966x_oic_data *lan966x_oic =3D d->host_data; + + irq_set_chained_handler_and_data(lan966x_oic->irq, lan966x_oic_irq_handler,= d); + + return 0; +} + +static void lan966x_oic_domain_exit(struct irq_domain *d) +{ + struct lan966x_oic_data *lan966x_oic =3D d->host_data; + + irq_set_chained_handler_and_data(lan966x_oic->irq, NULL, NULL); +} + +static int lan966x_oic_probe(struct platform_device *pdev) +{ + struct irq_domain_chip_generic_info dgc_info =3D { + .name =3D "lan966x-oic", + .handler =3D handle_level_irq, + .irqs_per_chip =3D 32, + .num_ct =3D 1, + .init =3D lan966x_oic_chip_init, + .exit =3D lan966x_oic_chip_exit, + }; + struct irq_domain_info d_info =3D { + .fwnode =3D of_node_to_fwnode(pdev->dev.of_node), + .domain_flags =3D IRQ_DOMAIN_FLAG_DESTROY_GC, + .size =3D LAN966X_OIC_NR_IRQ, + .hwirq_max =3D LAN966X_OIC_NR_IRQ, + .ops =3D &irq_generic_chip_ops, + .dgc_info =3D &dgc_info, + .init =3D lan966x_oic_domain_init, + .exit =3D lan966x_oic_domain_exit, + }; + struct lan966x_oic_data *lan966x_oic; + struct device *dev =3D &pdev->dev; + struct irq_domain *domain; + + lan966x_oic =3D devm_kmalloc(dev, sizeof(*lan966x_oic), GFP_KERNEL); + if (!lan966x_oic) + return -ENOMEM; + + lan966x_oic->regs =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(lan966x_oic->regs)) + return dev_err_probe(dev, PTR_ERR(lan966x_oic->regs), + "failed to map resource\n"); + + lan966x_oic->irq =3D platform_get_irq(pdev, 0); + if (lan966x_oic->irq < 0) + return dev_err_probe(dev, lan966x_oic->irq, "failed to get the IRQ\n"); + + d_info.host_data =3D lan966x_oic; + domain =3D devm_irq_domain_instantiate(dev, &d_info); + if (IS_ERR(domain)) + return dev_err_probe(dev, PTR_ERR(domain), + "failed to instantiate the IRQ domain\n"); + return 0; +} + +static const struct of_device_id lan966x_oic_of_match[] =3D { + { .compatible =3D "microchip,lan966x-oic" }, + {} /* sentinel */ +}; +MODULE_DEVICE_TABLE(of, lan966x_oic_of_match); + +static struct platform_driver lan966x_oic_driver =3D { + .probe =3D lan966x_oic_probe, + .driver =3D { + .name =3D "lan966x-oic", + .of_match_table =3D lan966x_oic_of_match, + }, +}; +module_platform_driver(lan966x_oic_driver); + +MODULE_AUTHOR("Herve Codina "); +MODULE_DESCRIPTION("Microchip LAN966x OIC driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/irqchip/irq-meson-gpio.c b/drivers/irqchip/irq-meson-gpi= o.c index 9a1791908598..27e30ce41db3 100644 --- a/drivers/irqchip/irq-meson-gpio.c +++ b/drivers/irqchip/irq-meson-gpio.c @@ -608,5 +608,6 @@ IRQCHIP_MATCH("amlogic,meson-gpio-intc", meson_gpio_irq_o= f_init) IRQCHIP_PLATFORM_DRIVER_END(meson_gpio_intc) =20 MODULE_AUTHOR("Jerome Brunet "); +MODULE_DESCRIPTION("Meson GPIO Interrupt Multiplexer driver"); MODULE_LICENSE("GPL v2"); MODULE_ALIAS("platform:meson-gpio-intc"); diff --git a/drivers/irqchip/irq-mvebu-pic.c b/drivers/irqchip/irq-mvebu-pic.c index d17d9c0e2880..08b0cc862adf 100644 --- a/drivers/irqchip/irq-mvebu-pic.c +++ b/drivers/irqchip/irq-mvebu-pic.c @@ -193,6 +193,7 @@ module_platform_driver(mvebu_pic_driver); =20 MODULE_AUTHOR("Yehuda Yitschak "); MODULE_AUTHOR("Thomas Petazzoni "); +MODULE_DESCRIPTION("Marvell Armada 7K/8K PIC driver"); MODULE_LICENSE("GPL v2"); MODULE_ALIAS("platform:mvebu_pic"); =20 diff --git a/drivers/irqchip/irq-renesas-rzg2l.c b/drivers/irqchip/irq-renesa= s-rzg2l.c index f6484bf15e0b..693ff285ca2c 100644 --- a/drivers/irqchip/irq-renesas-rzg2l.c +++ b/drivers/irqchip/irq-renesas-rzg2l.c @@ -37,6 +37,8 @@ #define TSSEL_SHIFT(n) (8 * (n)) #define TSSEL_MASK GENMASK(7, 0) #define IRQ_MASK 0x3 +#define IMSK 0x10010 +#define TMSK 0x10020 =20 #define TSSR_OFFSET(n) ((n) % 4) #define TSSR_INDEX(n) ((n) / 4) @@ -69,12 +71,14 @@ struct rzg2l_irqc_reg_cache { /** * struct rzg2l_irqc_priv - IRQ controller private data structure * @base: Controller's base address + * @irqchip: Pointer to struct irq_chip * @fwspec: IRQ firmware specific data * @lock: Lock to serialize access to hardware registers * @cache: Registers cache for suspend/resume */ static struct rzg2l_irqc_priv { void __iomem *base; + const struct irq_chip *irqchip; struct irq_fwspec fwspec[IRQC_NUM_IRQ]; raw_spinlock_t lock; struct rzg2l_irqc_reg_cache cache; @@ -138,6 +142,111 @@ static void rzg2l_irqc_eoi(struct irq_data *d) irq_chip_eoi_parent(d); } =20 +static void rzfive_irqc_mask_irq_interrupt(struct rzg2l_irqc_priv *priv, + unsigned int hwirq) +{ + u32 bit =3D BIT(hwirq - IRQC_IRQ_START); + + writel_relaxed(readl_relaxed(priv->base + IMSK) | bit, priv->base + IMSK); +} + +static void rzfive_irqc_unmask_irq_interrupt(struct rzg2l_irqc_priv *priv, + unsigned int hwirq) +{ + u32 bit =3D BIT(hwirq - IRQC_IRQ_START); + + writel_relaxed(readl_relaxed(priv->base + IMSK) & ~bit, priv->base + IMSK); +} + +static void rzfive_irqc_mask_tint_interrupt(struct rzg2l_irqc_priv *priv, + unsigned int hwirq) +{ + u32 bit =3D BIT(hwirq - IRQC_TINT_START); + + writel_relaxed(readl_relaxed(priv->base + TMSK) | bit, priv->base + TMSK); +} + +static void rzfive_irqc_unmask_tint_interrupt(struct rzg2l_irqc_priv *priv, + unsigned int hwirq) +{ + u32 bit =3D BIT(hwirq - IRQC_TINT_START); + + writel_relaxed(readl_relaxed(priv->base + TMSK) & ~bit, priv->base + TMSK); +} + +static void rzfive_irqc_mask(struct irq_data *d) +{ + struct rzg2l_irqc_priv *priv =3D irq_data_to_priv(d); + unsigned int hwirq =3D irqd_to_hwirq(d); + + raw_spin_lock(&priv->lock); + if (hwirq >=3D IRQC_IRQ_START && hwirq <=3D IRQC_IRQ_COUNT) + rzfive_irqc_mask_irq_interrupt(priv, hwirq); + else if (hwirq >=3D IRQC_TINT_START && hwirq < IRQC_NUM_IRQ) + rzfive_irqc_mask_tint_interrupt(priv, hwirq); + raw_spin_unlock(&priv->lock); + irq_chip_mask_parent(d); +} + +static void rzfive_irqc_unmask(struct irq_data *d) +{ + struct rzg2l_irqc_priv *priv =3D irq_data_to_priv(d); + unsigned int hwirq =3D irqd_to_hwirq(d); + + raw_spin_lock(&priv->lock); + if (hwirq >=3D IRQC_IRQ_START && hwirq <=3D IRQC_IRQ_COUNT) + rzfive_irqc_unmask_irq_interrupt(priv, hwirq); + else if (hwirq >=3D IRQC_TINT_START && hwirq < IRQC_NUM_IRQ) + rzfive_irqc_unmask_tint_interrupt(priv, hwirq); + raw_spin_unlock(&priv->lock); + irq_chip_unmask_parent(d); +} + +static void rzfive_tint_irq_endisable(struct irq_data *d, bool enable) +{ + struct rzg2l_irqc_priv *priv =3D irq_data_to_priv(d); + unsigned int hwirq =3D irqd_to_hwirq(d); + + if (hwirq >=3D IRQC_TINT_START && hwirq < IRQC_NUM_IRQ) { + u32 offset =3D hwirq - IRQC_TINT_START; + u32 tssr_offset =3D TSSR_OFFSET(offset); + u8 tssr_index =3D TSSR_INDEX(offset); + u32 reg; + + raw_spin_lock(&priv->lock); + if (enable) + rzfive_irqc_unmask_tint_interrupt(priv, hwirq); + else + rzfive_irqc_mask_tint_interrupt(priv, hwirq); + reg =3D readl_relaxed(priv->base + TSSR(tssr_index)); + if (enable) + reg |=3D TIEN << TSSEL_SHIFT(tssr_offset); + else + reg &=3D ~(TIEN << TSSEL_SHIFT(tssr_offset)); + writel_relaxed(reg, priv->base + TSSR(tssr_index)); + raw_spin_unlock(&priv->lock); + } else { + raw_spin_lock(&priv->lock); + if (enable) + rzfive_irqc_unmask_irq_interrupt(priv, hwirq); + else + rzfive_irqc_mask_irq_interrupt(priv, hwirq); + raw_spin_unlock(&priv->lock); + } +} + +static void rzfive_irqc_irq_disable(struct irq_data *d) +{ + irq_chip_disable_parent(d); + rzfive_tint_irq_endisable(d, false); +} + +static void rzfive_irqc_irq_enable(struct irq_data *d) +{ + rzfive_tint_irq_endisable(d, true); + irq_chip_enable_parent(d); +} + static void rzg2l_tint_irq_endisable(struct irq_data *d, bool enable) { unsigned int hw_irq =3D irqd_to_hwirq(d); @@ -162,8 +271,8 @@ static void rzg2l_tint_irq_endisable(struct irq_data *d, = bool enable) =20 static void rzg2l_irqc_irq_disable(struct irq_data *d) { - rzg2l_tint_irq_endisable(d, false); irq_chip_disable_parent(d); + rzg2l_tint_irq_endisable(d, false); } =20 static void rzg2l_irqc_irq_enable(struct irq_data *d) @@ -321,7 +430,7 @@ static struct syscore_ops rzg2l_irqc_syscore_ops =3D { .resume =3D rzg2l_irqc_irq_resume, }; =20 -static const struct irq_chip irqc_chip =3D { +static const struct irq_chip rzg2l_irqc_chip =3D { .name =3D "rzg2l-irqc", .irq_eoi =3D rzg2l_irqc_eoi, .irq_mask =3D irq_chip_mask_parent, @@ -338,6 +447,23 @@ static const struct irq_chip irqc_chip =3D { IRQCHIP_SKIP_SET_WAKE, }; =20 +static const struct irq_chip rzfive_irqc_chip =3D { + .name =3D "rzfive-irqc", + .irq_eoi =3D rzg2l_irqc_eoi, + .irq_mask =3D rzfive_irqc_mask, + .irq_unmask =3D rzfive_irqc_unmask, + .irq_disable =3D rzfive_irqc_irq_disable, + .irq_enable =3D rzfive_irqc_irq_enable, + .irq_get_irqchip_state =3D irq_chip_get_parent_state, + .irq_set_irqchip_state =3D irq_chip_set_parent_state, + .irq_retrigger =3D irq_chip_retrigger_hierarchy, + .irq_set_type =3D rzg2l_irqc_set_type, + .irq_set_affinity =3D irq_chip_set_affinity_parent, + .flags =3D IRQCHIP_MASK_ON_SUSPEND | + IRQCHIP_SET_TYPE_MASKED | + IRQCHIP_SKIP_SET_WAKE, +}; + static int rzg2l_irqc_alloc(struct irq_domain *domain, unsigned int virq, unsigned int nr_irqs, void *arg) { @@ -369,7 +495,7 @@ static int rzg2l_irqc_alloc(struct irq_domain *domain, un= signed int virq, if (hwirq > (IRQC_NUM_IRQ - 1)) return -EINVAL; =20 - ret =3D irq_domain_set_hwirq_and_chip(domain, virq, hwirq, &irqc_chip, + ret =3D irq_domain_set_hwirq_and_chip(domain, virq, hwirq, priv->irqchip, (void *)(uintptr_t)tint); if (ret) return ret; @@ -401,7 +527,8 @@ static int rzg2l_irqc_parse_interrupts(struct rzg2l_irqc_= priv *priv, return 0; } =20 -static int rzg2l_irqc_init(struct device_node *node, struct device_node *par= ent) +static int rzg2l_irqc_common_init(struct device_node *node, struct device_no= de *parent, + const struct irq_chip *irq_chip) { struct irq_domain *irq_domain, *parent_domain; struct platform_device *pdev; @@ -422,6 +549,8 @@ static int rzg2l_irqc_init(struct device_node *node, stru= ct device_node *parent) if (!rzg2l_irqc_data) return -ENOMEM; =20 + rzg2l_irqc_data->irqchip =3D irq_chip; + rzg2l_irqc_data->base =3D devm_of_iomap(&pdev->dev, pdev->dev.of_node, 0, N= ULL); if (IS_ERR(rzg2l_irqc_data->base)) return PTR_ERR(rzg2l_irqc_data->base); @@ -472,8 +601,21 @@ static int rzg2l_irqc_init(struct device_node *node, str= uct device_node *parent) return ret; } =20 +static int __init rzg2l_irqc_init(struct device_node *node, + struct device_node *parent) +{ + return rzg2l_irqc_common_init(node, parent, &rzg2l_irqc_chip); +} + +static int __init rzfive_irqc_init(struct device_node *node, + struct device_node *parent) +{ + return rzg2l_irqc_common_init(node, parent, &rzfive_irqc_chip); +} + IRQCHIP_PLATFORM_DRIVER_BEGIN(rzg2l_irqc) IRQCHIP_MATCH("renesas,rzg2l-irqc", rzg2l_irqc_init) +IRQCHIP_MATCH("renesas,r9a07g043f-irqc", rzfive_irqc_init) IRQCHIP_PLATFORM_DRIVER_END(rzg2l_irqc) MODULE_AUTHOR("Lad Prabhakar "); MODULE_DESCRIPTION("Renesas RZ/G2L IRQC Driver"); diff --git a/drivers/irqchip/irq-riscv-aplic-main.c b/drivers/irqchip/irq-ris= cv-aplic-main.c index 774a0c97fdab..28dd175b5764 100644 --- a/drivers/irqchip/irq-riscv-aplic-main.c +++ b/drivers/irqchip/irq-riscv-aplic-main.c @@ -127,6 +127,7 @@ static void aplic_init_hw_irqs(struct aplic_priv *priv) =20 int aplic_setup_priv(struct aplic_priv *priv, struct device *dev, void __iom= em *regs) { + struct device_node *np =3D to_of_node(dev->fwnode); struct of_phandle_args parent; int rc; =20 @@ -134,7 +135,7 @@ int aplic_setup_priv(struct aplic_priv *priv, struct devi= ce *dev, void __iomem * * Currently, only OF fwnode is supported so extend this * function for ACPI support. */ - if (!is_of_node(dev->fwnode)) + if (!np) return -EINVAL; =20 /* Save device pointer and register base */ @@ -142,8 +143,7 @@ int aplic_setup_priv(struct aplic_priv *priv, struct devi= ce *dev, void __iomem * priv->regs =3D regs; =20 /* Find out number of interrupt sources */ - rc =3D of_property_read_u32(to_of_node(dev->fwnode), "riscv,num-sources", - &priv->nr_irqs); + rc =3D of_property_read_u32(np, "riscv,num-sources", &priv->nr_irqs); if (rc) { dev_err(dev, "failed to get number of interrupt sources\n"); return rc; @@ -155,8 +155,8 @@ int aplic_setup_priv(struct aplic_priv *priv, struct devi= ce *dev, void __iomem * * If "msi-parent" property is present then we ignore the * APLIC IDCs which forces the APLIC driver to use MSI mode. */ - if (!of_property_present(to_of_node(dev->fwnode), "msi-parent")) { - while (!of_irq_parse_one(to_of_node(dev->fwnode), priv->nr_idcs, &parent)) + if (!of_property_present(np, "msi-parent")) { + while (!of_irq_parse_one(np, priv->nr_idcs, &parent)) priv->nr_idcs++; } =20 @@ -184,8 +184,7 @@ static int aplic_probe(struct platform_device *pdev) * If msi-parent property is present then setup APLIC MSI * mode otherwise setup APLIC direct mode. */ - if (is_of_node(dev->fwnode)) - msi_mode =3D of_property_present(to_of_node(dev->fwnode), "msi-parent"); + msi_mode =3D of_property_present(to_of_node(dev->fwnode), "msi-parent"); if (msi_mode) rc =3D aplic_msi_setup(dev, regs); else diff --git a/drivers/irqchip/irq-riscv-intc.c b/drivers/irqchip/irq-riscv-int= c.c index 9e71c4428814..983538a89e65 100644 --- a/drivers/irqchip/irq-riscv-intc.c +++ b/drivers/irqchip/irq-riscv-intc.c @@ -26,7 +26,7 @@ static unsigned int riscv_intc_nr_irqs __ro_after_init =3D = BITS_PER_LONG; static unsigned int riscv_intc_custom_base __ro_after_init =3D BITS_PER_LONG; static unsigned int riscv_intc_custom_nr_irqs __ro_after_init; =20 -static asmlinkage void riscv_intc_irq(struct pt_regs *regs) +static void riscv_intc_irq(struct pt_regs *regs) { unsigned long cause =3D regs->cause & ~CAUSE_IRQ_FLAG; =20 @@ -34,7 +34,7 @@ static asmlinkage void riscv_intc_irq(struct pt_regs *regs) pr_warn_ratelimited("Failed to handle interrupt (cause: %ld)\n", cause); } =20 -static asmlinkage void riscv_intc_aia_irq(struct pt_regs *regs) +static void riscv_intc_aia_irq(struct pt_regs *regs) { unsigned long topi; =20 diff --git a/drivers/irqchip/irq-stm32-exti.c b/drivers/irqchip/irq-stm32-ext= i.c index 2cc9f3b7d669..7c6a0080c330 100644 --- a/drivers/irqchip/irq-stm32-exti.c +++ b/drivers/irqchip/irq-stm32-exti.c @@ -1,45 +1,22 @@ // SPDX-License-Identifier: GPL-2.0 /* * Copyright (C) Maxime Coquelin 2015 - * Copyright (C) STMicroelectronics 2017 + * Copyright (C) STMicroelectronics 2017-2024 * Author: Maxime Coquelin */ =20 #include -#include -#include #include #include #include #include #include #include -#include -#include #include #include -#include -#include - -#include =20 #define IRQS_PER_BANK 32 =20 -#define HWSPNLCK_TIMEOUT 1000 /* usec */ - -#define EXTI_EnCIDCFGR(n) (0x180 + (n) * 4) -#define EXTI_HWCFGR1 0x3f0 - -/* Register: EXTI_EnCIDCFGR(n) */ -#define EXTI_CIDCFGR_CFEN_MASK BIT(0) -#define EXTI_CIDCFGR_CID_MASK GENMASK(6, 4) -#define EXTI_CIDCFGR_CID_SHIFT 4 - -/* Register: EXTI_HWCFGR1 */ -#define EXTI_HWCFGR1_CIDWIDTH_MASK GENMASK(27, 24) - -#define EXTI_CID1 1 - struct stm32_exti_bank { u32 imr_ofst; u32 emr_ofst; @@ -47,13 +24,8 @@ struct stm32_exti_bank { u32 ftsr_ofst; u32 swier_ofst; u32 rpr_ofst; - u32 fpr_ofst; - u32 trg_ofst; - u32 seccfgr_ofst; }; =20 -#define UNDEF_REG ~0 - struct stm32_exti_drv_data { const struct stm32_exti_bank **exti_banks; const u8 *desc_irqs; @@ -63,7 +35,6 @@ struct stm32_exti_drv_data { struct stm32_exti_chip_data { struct stm32_exti_host_data *host_data; const struct stm32_exti_bank *reg_bank; - struct raw_spinlock rlock; u32 wake_active; u32 mask_cache; u32 rtsr_cache; @@ -76,8 +47,6 @@ struct stm32_exti_host_data { struct device *dev; struct stm32_exti_chip_data *chips_data; const struct stm32_exti_drv_data *drv_data; - struct hwspinlock *hwlock; - bool dt_has_irqs_desc; /* skip internal desc_irqs array and get it from DT = */ }; =20 static const struct stm32_exti_bank stm32f4xx_exti_b1 =3D { @@ -87,9 +56,6 @@ static const struct stm32_exti_bank stm32f4xx_exti_b1 =3D { .ftsr_ofst =3D 0x0C, .swier_ofst =3D 0x10, .rpr_ofst =3D 0x14, - .fpr_ofst =3D UNDEF_REG, - .trg_ofst =3D UNDEF_REG, - .seccfgr_ofst =3D UNDEF_REG, }; =20 static const struct stm32_exti_bank *stm32f4xx_exti_banks[] =3D { @@ -108,9 +74,6 @@ static const struct stm32_exti_bank stm32h7xx_exti_b1 =3D { .ftsr_ofst =3D 0x04, .swier_ofst =3D 0x08, .rpr_ofst =3D 0x88, - .fpr_ofst =3D UNDEF_REG, - .trg_ofst =3D UNDEF_REG, - .seccfgr_ofst =3D UNDEF_REG, }; =20 static const struct stm32_exti_bank stm32h7xx_exti_b2 =3D { @@ -120,9 +83,6 @@ static const struct stm32_exti_bank stm32h7xx_exti_b2 =3D { .ftsr_ofst =3D 0x24, .swier_ofst =3D 0x28, .rpr_ofst =3D 0x98, - .fpr_ofst =3D UNDEF_REG, - .trg_ofst =3D UNDEF_REG, - .seccfgr_ofst =3D UNDEF_REG, }; =20 static const struct stm32_exti_bank stm32h7xx_exti_b3 =3D { @@ -132,9 +92,6 @@ static const struct stm32_exti_bank stm32h7xx_exti_b3 =3D { .ftsr_ofst =3D 0x44, .swier_ofst =3D 0x48, .rpr_ofst =3D 0xA8, - .fpr_ofst =3D UNDEF_REG, - .trg_ofst =3D UNDEF_REG, - .seccfgr_ofst =3D UNDEF_REG, }; =20 static const struct stm32_exti_bank *stm32h7xx_exti_banks[] =3D { @@ -148,183 +105,12 @@ static const struct stm32_exti_drv_data stm32h7xx_drv_= data =3D { .bank_nr =3D ARRAY_SIZE(stm32h7xx_exti_banks), }; =20 -static const struct stm32_exti_bank stm32mp1_exti_b1 =3D { - .imr_ofst =3D 0x80, - .emr_ofst =3D UNDEF_REG, - .rtsr_ofst =3D 0x00, - .ftsr_ofst =3D 0x04, - .swier_ofst =3D 0x08, - .rpr_ofst =3D 0x0C, - .fpr_ofst =3D 0x10, - .trg_ofst =3D 0x3EC, - .seccfgr_ofst =3D 0x14, -}; - -static const struct stm32_exti_bank stm32mp1_exti_b2 =3D { - .imr_ofst =3D 0x90, - .emr_ofst =3D UNDEF_REG, - .rtsr_ofst =3D 0x20, - .ftsr_ofst =3D 0x24, - .swier_ofst =3D 0x28, - .rpr_ofst =3D 0x2C, - .fpr_ofst =3D 0x30, - .trg_ofst =3D 0x3E8, - .seccfgr_ofst =3D 0x34, -}; - -static const struct stm32_exti_bank stm32mp1_exti_b3 =3D { - .imr_ofst =3D 0xA0, - .emr_ofst =3D UNDEF_REG, - .rtsr_ofst =3D 0x40, - .ftsr_ofst =3D 0x44, - .swier_ofst =3D 0x48, - .rpr_ofst =3D 0x4C, - .fpr_ofst =3D 0x50, - .trg_ofst =3D 0x3E4, - .seccfgr_ofst =3D 0x54, -}; - -static const struct stm32_exti_bank *stm32mp1_exti_banks[] =3D { - &stm32mp1_exti_b1, - &stm32mp1_exti_b2, - &stm32mp1_exti_b3, -}; - -static struct irq_chip stm32_exti_h_chip; -static struct irq_chip stm32_exti_h_chip_direct; - -#define EXTI_INVALID_IRQ U8_MAX -#define STM32MP1_DESC_IRQ_SIZE (ARRAY_SIZE(stm32mp1_exti_banks) * IRQS_PER_B= ANK) - -/* - * Use some intentionally tricky logic here to initialize the whole array to - * EXTI_INVALID_IRQ, but then override certain fields, requiring us to indic= ate - * that we "know" that there are overrides in this structure, and we'll need= to - * disable that warning from W=3D1 builds. - */ -__diag_push(); -__diag_ignore_all("-Woverride-init", - "logic to initialize all and then override some is OK"); - -static const u8 stm32mp1_desc_irq[] =3D { - /* default value */ - [0 ... (STM32MP1_DESC_IRQ_SIZE - 1)] =3D EXTI_INVALID_IRQ, - - [0] =3D 6, - [1] =3D 7, - [2] =3D 8, - [3] =3D 9, - [4] =3D 10, - [5] =3D 23, - [6] =3D 64, - [7] =3D 65, - [8] =3D 66, - [9] =3D 67, - [10] =3D 40, - [11] =3D 42, - [12] =3D 76, - [13] =3D 77, - [14] =3D 121, - [15] =3D 127, - [16] =3D 1, - [19] =3D 3, - [21] =3D 31, - [22] =3D 33, - [23] =3D 72, - [24] =3D 95, - [25] =3D 107, - [26] =3D 37, - [27] =3D 38, - [28] =3D 39, - [29] =3D 71, - [30] =3D 52, - [31] =3D 53, - [32] =3D 82, - [33] =3D 83, - [46] =3D 151, - [47] =3D 93, - [48] =3D 138, - [50] =3D 139, - [52] =3D 140, - [53] =3D 141, - [54] =3D 135, - [61] =3D 100, - [65] =3D 144, - [68] =3D 143, - [70] =3D 62, - [73] =3D 129, -}; - -static const u8 stm32mp13_desc_irq[] =3D { - /* default value */ - [0 ... (STM32MP1_DESC_IRQ_SIZE - 1)] =3D EXTI_INVALID_IRQ, - - [0] =3D 6, - [1] =3D 7, - [2] =3D 8, - [3] =3D 9, - [4] =3D 10, - [5] =3D 24, - [6] =3D 65, - [7] =3D 66, - [8] =3D 67, - [9] =3D 68, - [10] =3D 41, - [11] =3D 43, - [12] =3D 77, - [13] =3D 78, - [14] =3D 106, - [15] =3D 109, - [16] =3D 1, - [19] =3D 3, - [21] =3D 32, - [22] =3D 34, - [23] =3D 73, - [24] =3D 93, - [25] =3D 114, - [26] =3D 38, - [27] =3D 39, - [28] =3D 40, - [29] =3D 72, - [30] =3D 53, - [31] =3D 54, - [32] =3D 83, - [33] =3D 84, - [44] =3D 96, - [47] =3D 92, - [48] =3D 116, - [50] =3D 117, - [52] =3D 118, - [53] =3D 119, - [68] =3D 63, - [70] =3D 98, -}; - -__diag_pop(); - -static const struct stm32_exti_drv_data stm32mp1_drv_data =3D { - .exti_banks =3D stm32mp1_exti_banks, - .bank_nr =3D ARRAY_SIZE(stm32mp1_exti_banks), - .desc_irqs =3D stm32mp1_desc_irq, -}; - -static const struct stm32_exti_drv_data stm32mp13_drv_data =3D { - .exti_banks =3D stm32mp1_exti_banks, - .bank_nr =3D ARRAY_SIZE(stm32mp1_exti_banks), - .desc_irqs =3D stm32mp13_desc_irq, -}; - static unsigned long stm32_exti_pending(struct irq_chip_generic *gc) { struct stm32_exti_chip_data *chip_data =3D gc->private; const struct stm32_exti_bank *stm32_bank =3D chip_data->reg_bank; - unsigned long pending; =20 - pending =3D irq_reg_readl(gc, stm32_bank->rpr_ofst); - if (stm32_bank->fpr_ofst !=3D UNDEF_REG) - pending |=3D irq_reg_readl(gc, stm32_bank->fpr_ofst); - - return pending; + return irq_reg_readl(gc, stm32_bank->rpr_ofst); } =20 static void stm32_irq_handler(struct irq_desc *desc) @@ -380,33 +166,21 @@ static int stm32_irq_set_type(struct irq_data *d, unsig= ned int type) struct irq_chip_generic *gc =3D irq_data_get_irq_chip_data(d); struct stm32_exti_chip_data *chip_data =3D gc->private; const struct stm32_exti_bank *stm32_bank =3D chip_data->reg_bank; - struct hwspinlock *hwlock =3D chip_data->host_data->hwlock; u32 rtsr, ftsr; int err; =20 irq_gc_lock(gc); =20 - if (hwlock) { - err =3D hwspin_lock_timeout_in_atomic(hwlock, HWSPNLCK_TIMEOUT); - if (err) { - pr_err("%s can't get hwspinlock (%d)\n", __func__, err); - goto unlock; - } - } - rtsr =3D irq_reg_readl(gc, stm32_bank->rtsr_ofst); ftsr =3D irq_reg_readl(gc, stm32_bank->ftsr_ofst); =20 err =3D stm32_exti_set_type(d, type, &rtsr, &ftsr); if (err) - goto unspinlock; + goto unlock; =20 irq_reg_writel(gc, rtsr, stm32_bank->rtsr_ofst); irq_reg_writel(gc, ftsr, stm32_bank->ftsr_ofst); =20 -unspinlock: - if (hwlock) - hwspin_unlock_in_atomic(hwlock); unlock: irq_gc_unlock(gc); =20 @@ -494,287 +268,10 @@ static void stm32_irq_ack(struct irq_data *d) irq_gc_lock(gc); =20 irq_reg_writel(gc, d->mask, stm32_bank->rpr_ofst); - if (stm32_bank->fpr_ofst !=3D UNDEF_REG) - irq_reg_writel(gc, d->mask, stm32_bank->fpr_ofst); =20 irq_gc_unlock(gc); } =20 -/* directly set the target bit without reading first. */ -static inline void stm32_exti_write_bit(struct irq_data *d, u32 reg) -{ - struct stm32_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); - void __iomem *base =3D chip_data->host_data->base; - u32 val =3D BIT(d->hwirq % IRQS_PER_BANK); - - writel_relaxed(val, base + reg); -} - -static inline u32 stm32_exti_set_bit(struct irq_data *d, u32 reg) -{ - struct stm32_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); - void __iomem *base =3D chip_data->host_data->base; - u32 val; - - val =3D readl_relaxed(base + reg); - val |=3D BIT(d->hwirq % IRQS_PER_BANK); - writel_relaxed(val, base + reg); - - return val; -} - -static inline u32 stm32_exti_clr_bit(struct irq_data *d, u32 reg) -{ - struct stm32_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); - void __iomem *base =3D chip_data->host_data->base; - u32 val; - - val =3D readl_relaxed(base + reg); - val &=3D ~BIT(d->hwirq % IRQS_PER_BANK); - writel_relaxed(val, base + reg); - - return val; -} - -static void stm32_exti_h_eoi(struct irq_data *d) -{ - struct stm32_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); - const struct stm32_exti_bank *stm32_bank =3D chip_data->reg_bank; - - raw_spin_lock(&chip_data->rlock); - - stm32_exti_write_bit(d, stm32_bank->rpr_ofst); - if (stm32_bank->fpr_ofst !=3D UNDEF_REG) - stm32_exti_write_bit(d, stm32_bank->fpr_ofst); - - raw_spin_unlock(&chip_data->rlock); - - if (d->parent_data->chip) - irq_chip_eoi_parent(d); -} - -static void stm32_exti_h_mask(struct irq_data *d) -{ - struct stm32_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); - const struct stm32_exti_bank *stm32_bank =3D chip_data->reg_bank; - - raw_spin_lock(&chip_data->rlock); - chip_data->mask_cache =3D stm32_exti_clr_bit(d, stm32_bank->imr_ofst); - raw_spin_unlock(&chip_data->rlock); - - if (d->parent_data->chip) - irq_chip_mask_parent(d); -} - -static void stm32_exti_h_unmask(struct irq_data *d) -{ - struct stm32_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); - const struct stm32_exti_bank *stm32_bank =3D chip_data->reg_bank; - - raw_spin_lock(&chip_data->rlock); - chip_data->mask_cache =3D stm32_exti_set_bit(d, stm32_bank->imr_ofst); - raw_spin_unlock(&chip_data->rlock); - - if (d->parent_data->chip) - irq_chip_unmask_parent(d); -} - -static int stm32_exti_h_set_type(struct irq_data *d, unsigned int type) -{ - struct stm32_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); - const struct stm32_exti_bank *stm32_bank =3D chip_data->reg_bank; - struct hwspinlock *hwlock =3D chip_data->host_data->hwlock; - void __iomem *base =3D chip_data->host_data->base; - u32 rtsr, ftsr; - int err; - - raw_spin_lock(&chip_data->rlock); - - if (hwlock) { - err =3D hwspin_lock_timeout_in_atomic(hwlock, HWSPNLCK_TIMEOUT); - if (err) { - pr_err("%s can't get hwspinlock (%d)\n", __func__, err); - goto unlock; - } - } - - rtsr =3D readl_relaxed(base + stm32_bank->rtsr_ofst); - ftsr =3D readl_relaxed(base + stm32_bank->ftsr_ofst); - - err =3D stm32_exti_set_type(d, type, &rtsr, &ftsr); - if (err) - goto unspinlock; - - writel_relaxed(rtsr, base + stm32_bank->rtsr_ofst); - writel_relaxed(ftsr, base + stm32_bank->ftsr_ofst); - -unspinlock: - if (hwlock) - hwspin_unlock_in_atomic(hwlock); -unlock: - raw_spin_unlock(&chip_data->rlock); - - return err; -} - -static int stm32_exti_h_set_wake(struct irq_data *d, unsigned int on) -{ - struct stm32_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); - u32 mask =3D BIT(d->hwirq % IRQS_PER_BANK); - - raw_spin_lock(&chip_data->rlock); - - if (on) - chip_data->wake_active |=3D mask; - else - chip_data->wake_active &=3D ~mask; - - raw_spin_unlock(&chip_data->rlock); - - return 0; -} - -static int stm32_exti_h_set_affinity(struct irq_data *d, - const struct cpumask *dest, bool force) -{ - if (d->parent_data->chip) - return irq_chip_set_affinity_parent(d, dest, force); - - return IRQ_SET_MASK_OK_DONE; -} - -static int stm32_exti_h_suspend(struct device *dev) -{ - struct stm32_exti_host_data *host_data =3D dev_get_drvdata(dev); - struct stm32_exti_chip_data *chip_data; - int i; - - for (i =3D 0; i < host_data->drv_data->bank_nr; i++) { - chip_data =3D &host_data->chips_data[i]; - stm32_chip_suspend(chip_data, chip_data->wake_active); - } - - return 0; -} - -static int stm32_exti_h_resume(struct device *dev) -{ - struct stm32_exti_host_data *host_data =3D dev_get_drvdata(dev); - struct stm32_exti_chip_data *chip_data; - int i; - - for (i =3D 0; i < host_data->drv_data->bank_nr; i++) { - chip_data =3D &host_data->chips_data[i]; - stm32_chip_resume(chip_data, chip_data->mask_cache); - } - - return 0; -} - -static int stm32_exti_h_retrigger(struct irq_data *d) -{ - struct stm32_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); - const struct stm32_exti_bank *stm32_bank =3D chip_data->reg_bank; - void __iomem *base =3D chip_data->host_data->base; - u32 mask =3D BIT(d->hwirq % IRQS_PER_BANK); - - writel_relaxed(mask, base + stm32_bank->swier_ofst); - - return 0; -} - -static struct irq_chip stm32_exti_h_chip =3D { - .name =3D "stm32-exti-h", - .irq_eoi =3D stm32_exti_h_eoi, - .irq_mask =3D stm32_exti_h_mask, - .irq_unmask =3D stm32_exti_h_unmask, - .irq_retrigger =3D stm32_exti_h_retrigger, - .irq_set_type =3D stm32_exti_h_set_type, - .irq_set_wake =3D stm32_exti_h_set_wake, - .flags =3D IRQCHIP_MASK_ON_SUSPEND, - .irq_set_affinity =3D IS_ENABLED(CONFIG_SMP) ? stm32_exti_h_set_affinity : = NULL, -}; - -static struct irq_chip stm32_exti_h_chip_direct =3D { - .name =3D "stm32-exti-h-direct", - .irq_eoi =3D irq_chip_eoi_parent, - .irq_ack =3D irq_chip_ack_parent, - .irq_mask =3D stm32_exti_h_mask, - .irq_unmask =3D stm32_exti_h_unmask, - .irq_retrigger =3D irq_chip_retrigger_hierarchy, - .irq_set_type =3D irq_chip_set_type_parent, - .irq_set_wake =3D stm32_exti_h_set_wake, - .flags =3D IRQCHIP_MASK_ON_SUSPEND, - .irq_set_affinity =3D IS_ENABLED(CONFIG_SMP) ? irq_chip_set_affinity_parent= : NULL, -}; - -static int stm32_exti_h_domain_alloc(struct irq_domain *dm, - unsigned int virq, - unsigned int nr_irqs, void *data) -{ - struct stm32_exti_host_data *host_data =3D dm->host_data; - struct stm32_exti_chip_data *chip_data; - u8 desc_irq; - struct irq_fwspec *fwspec =3D data; - struct irq_fwspec p_fwspec; - irq_hw_number_t hwirq; - int bank; - u32 event_trg; - struct irq_chip *chip; - - hwirq =3D fwspec->param[0]; - if (hwirq >=3D host_data->drv_data->bank_nr * IRQS_PER_BANK) - return -EINVAL; - - bank =3D hwirq / IRQS_PER_BANK; - chip_data =3D &host_data->chips_data[bank]; - - /* Check if event is reserved (Secure) */ - if (chip_data->event_reserved & BIT(hwirq % IRQS_PER_BANK)) { - dev_err(host_data->dev, "event %lu is reserved, secure\n", hwirq); - return -EPERM; - } - - event_trg =3D readl_relaxed(host_data->base + chip_data->reg_bank->trg_ofst= ); - chip =3D (event_trg & BIT(hwirq % IRQS_PER_BANK)) ? - &stm32_exti_h_chip : &stm32_exti_h_chip_direct; - - irq_domain_set_hwirq_and_chip(dm, virq, hwirq, chip, chip_data); - - if (host_data->dt_has_irqs_desc) { - struct of_phandle_args out_irq; - int ret; - - ret =3D of_irq_parse_one(host_data->dev->of_node, hwirq, &out_irq); - if (ret) - return ret; - /* we only support one parent, so far */ - if (of_node_to_fwnode(out_irq.np) !=3D dm->parent->fwnode) - return -EINVAL; - - of_phandle_args_to_fwspec(out_irq.np, out_irq.args, - out_irq.args_count, &p_fwspec); - - return irq_domain_alloc_irqs_parent(dm, virq, 1, &p_fwspec); - } - - if (!host_data->drv_data->desc_irqs) - return -EINVAL; - - desc_irq =3D host_data->drv_data->desc_irqs[hwirq]; - if (desc_irq !=3D EXTI_INVALID_IRQ) { - p_fwspec.fwnode =3D dm->parent->fwnode; - p_fwspec.param_count =3D 3; - p_fwspec.param[0] =3D GIC_SPI; - p_fwspec.param[1] =3D desc_irq; - p_fwspec.param[2] =3D IRQ_TYPE_LEVEL_HIGH; - - return irq_domain_alloc_irqs_parent(dm, virq, 1, &p_fwspec); - } - - return 0; -} - static struct stm32_exti_host_data *stm32_exti_host_init(const struct stm32_exti_drv_data = *dd, struct device_node *node) @@ -822,19 +319,12 @@ stm32_exti_chip_data *stm32_exti_chip_init(struct stm32= _exti_host_data *h_data, chip_data->host_data =3D h_data; chip_data->reg_bank =3D stm32_bank; =20 - raw_spin_lock_init(&chip_data->rlock); - /* * This IP has no reset, so after hot reboot we should * clear registers to avoid residue */ writel_relaxed(0, base + stm32_bank->imr_ofst); - if (stm32_bank->emr_ofst !=3D UNDEF_REG) - writel_relaxed(0, base + stm32_bank->emr_ofst); - - /* reserve Secure events */ - if (stm32_bank->seccfgr_ofst !=3D UNDEF_REG) - chip_data->event_reserved =3D readl_relaxed(base + stm32_bank->seccfgr_ofs= t); + writel_relaxed(0, base + stm32_bank->emr_ofst); =20 pr_info("%pOF: bank%d\n", node, bank_idx); =20 @@ -914,158 +404,6 @@ static int __init stm32_exti_init(const struct stm32_ex= ti_drv_data *drv_data, return ret; } =20 -static const struct irq_domain_ops stm32_exti_h_domain_ops =3D { - .alloc =3D stm32_exti_h_domain_alloc, - .free =3D irq_domain_free_irqs_common, - .xlate =3D irq_domain_xlate_twocell, -}; - -static void stm32_exti_check_rif(struct stm32_exti_host_data *host_data) -{ - unsigned int bank, i, event; - u32 cid, cidcfgr, hwcfgr1; - - /* quit on CID not supported */ - hwcfgr1 =3D readl_relaxed(host_data->base + EXTI_HWCFGR1); - if ((hwcfgr1 & EXTI_HWCFGR1_CIDWIDTH_MASK) =3D=3D 0) - return; - - for (bank =3D 0; bank < host_data->drv_data->bank_nr; bank++) { - for (i =3D 0; i < IRQS_PER_BANK; i++) { - event =3D bank * IRQS_PER_BANK + i; - cidcfgr =3D readl_relaxed(host_data->base + EXTI_EnCIDCFGR(event)); - cid =3D (cidcfgr & EXTI_CIDCFGR_CID_MASK) >> EXTI_CIDCFGR_CID_SHIFT; - if ((cidcfgr & EXTI_CIDCFGR_CFEN_MASK) && cid !=3D EXTI_CID1) - host_data->chips_data[bank].event_reserved |=3D BIT(i); - } - } -} - -static void stm32_exti_remove_irq(void *data) -{ - struct irq_domain *domain =3D data; - - irq_domain_remove(domain); -} - -static int stm32_exti_probe(struct platform_device *pdev) -{ - int ret, i; - struct device *dev =3D &pdev->dev; - struct device_node *np =3D dev->of_node; - struct irq_domain *parent_domain, *domain; - struct stm32_exti_host_data *host_data; - const struct stm32_exti_drv_data *drv_data; - - host_data =3D devm_kzalloc(dev, sizeof(*host_data), GFP_KERNEL); - if (!host_data) - return -ENOMEM; - - dev_set_drvdata(dev, host_data); - host_data->dev =3D dev; - - /* check for optional hwspinlock which may be not available yet */ - ret =3D of_hwspin_lock_get_id(np, 0); - if (ret =3D=3D -EPROBE_DEFER) - /* hwspinlock framework not yet ready */ - return ret; - - if (ret >=3D 0) { - host_data->hwlock =3D devm_hwspin_lock_request_specific(dev, ret); - if (!host_data->hwlock) { - dev_err(dev, "Failed to request hwspinlock\n"); - return -EINVAL; - } - } else if (ret !=3D -ENOENT) { - /* note: ENOENT is a valid case (means 'no hwspinlock') */ - dev_err(dev, "Failed to get hwspinlock\n"); - return ret; - } - - /* initialize host_data */ - drv_data =3D of_device_get_match_data(dev); - if (!drv_data) { - dev_err(dev, "no of match data\n"); - return -ENODEV; - } - host_data->drv_data =3D drv_data; - - host_data->chips_data =3D devm_kcalloc(dev, drv_data->bank_nr, - sizeof(*host_data->chips_data), - GFP_KERNEL); - if (!host_data->chips_data) - return -ENOMEM; - - host_data->base =3D devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(host_data->base)) - return PTR_ERR(host_data->base); - - for (i =3D 0; i < drv_data->bank_nr; i++) - stm32_exti_chip_init(host_data, i, np); - - stm32_exti_check_rif(host_data); - - parent_domain =3D irq_find_host(of_irq_find_parent(np)); - if (!parent_domain) { - dev_err(dev, "GIC interrupt-parent not found\n"); - return -EINVAL; - } - - domain =3D irq_domain_add_hierarchy(parent_domain, 0, - drv_data->bank_nr * IRQS_PER_BANK, - np, &stm32_exti_h_domain_ops, - host_data); - - if (!domain) { - dev_err(dev, "Could not register exti domain\n"); - return -ENOMEM; - } - - ret =3D devm_add_action_or_reset(dev, stm32_exti_remove_irq, domain); - if (ret) - return ret; - - if (of_property_read_bool(np, "interrupts-extended")) - host_data->dt_has_irqs_desc =3D true; - - return 0; -} - -/* platform driver only for MP1 */ -static const struct of_device_id stm32_exti_ids[] =3D { - { .compatible =3D "st,stm32mp1-exti", .data =3D &stm32mp1_drv_data}, - { .compatible =3D "st,stm32mp13-exti", .data =3D &stm32mp13_drv_data}, - {}, -}; -MODULE_DEVICE_TABLE(of, stm32_exti_ids); - -static const struct dev_pm_ops stm32_exti_dev_pm_ops =3D { - NOIRQ_SYSTEM_SLEEP_PM_OPS(stm32_exti_h_suspend, stm32_exti_h_resume) -}; - -static struct platform_driver stm32_exti_driver =3D { - .probe =3D stm32_exti_probe, - .driver =3D { - .name =3D "stm32_exti", - .of_match_table =3D stm32_exti_ids, - .pm =3D &stm32_exti_dev_pm_ops, - }, -}; - -static int __init stm32_exti_arch_init(void) -{ - return platform_driver_register(&stm32_exti_driver); -} - -static void __exit stm32_exti_arch_exit(void) -{ - return platform_driver_unregister(&stm32_exti_driver); -} - -arch_initcall(stm32_exti_arch_init); -module_exit(stm32_exti_arch_exit); - -/* no platform driver for F4 and H7 */ static int __init stm32f4_exti_of_init(struct device_node *np, struct device_node *parent) { diff --git a/drivers/irqchip/irq-stm32mp-exti.c b/drivers/irqchip/irq-stm32mp= -exti.c new file mode 100644 index 000000000000..33e0cfdea654 --- /dev/null +++ b/drivers/irqchip/irq-stm32mp-exti.c @@ -0,0 +1,729 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) Maxime Coquelin 2015 + * Copyright (C) STMicroelectronics 2017-2024 + * Author: Maxime Coquelin + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#define IRQS_PER_BANK 32 + +#define HWSPNLCK_TIMEOUT 1000 /* usec */ + +#define EXTI_EnCIDCFGR(n) (0x180 + (n) * 4) +#define EXTI_HWCFGR1 0x3f0 + +/* Register: EXTI_EnCIDCFGR(n) */ +#define EXTI_CIDCFGR_CFEN_MASK BIT(0) +#define EXTI_CIDCFGR_CID_MASK GENMASK(6, 4) +#define EXTI_CIDCFGR_CID_SHIFT 4 + +/* Register: EXTI_HWCFGR1 */ +#define EXTI_HWCFGR1_CIDWIDTH_MASK GENMASK(27, 24) + +#define EXTI_CID1 1 + +struct stm32mp_exti_bank { + u32 imr_ofst; + u32 rtsr_ofst; + u32 ftsr_ofst; + u32 swier_ofst; + u32 rpr_ofst; + u32 fpr_ofst; + u32 trg_ofst; + u32 seccfgr_ofst; +}; + +struct stm32mp_exti_drv_data { + const struct stm32mp_exti_bank **exti_banks; + const u8 *desc_irqs; + u32 bank_nr; +}; + +struct stm32mp_exti_chip_data { + struct stm32mp_exti_host_data *host_data; + const struct stm32mp_exti_bank *reg_bank; + struct raw_spinlock rlock; + u32 wake_active; + u32 mask_cache; + u32 rtsr_cache; + u32 ftsr_cache; + u32 event_reserved; +}; + +struct stm32mp_exti_host_data { + void __iomem *base; + struct device *dev; + struct stm32mp_exti_chip_data *chips_data; + const struct stm32mp_exti_drv_data *drv_data; + struct hwspinlock *hwlock; + /* skip internal desc_irqs array and get it from DT */ + bool dt_has_irqs_desc; +}; + +static const struct stm32mp_exti_bank stm32mp_exti_b1 =3D { + .imr_ofst =3D 0x80, + .rtsr_ofst =3D 0x00, + .ftsr_ofst =3D 0x04, + .swier_ofst =3D 0x08, + .rpr_ofst =3D 0x0C, + .fpr_ofst =3D 0x10, + .trg_ofst =3D 0x3EC, + .seccfgr_ofst =3D 0x14, +}; + +static const struct stm32mp_exti_bank stm32mp_exti_b2 =3D { + .imr_ofst =3D 0x90, + .rtsr_ofst =3D 0x20, + .ftsr_ofst =3D 0x24, + .swier_ofst =3D 0x28, + .rpr_ofst =3D 0x2C, + .fpr_ofst =3D 0x30, + .trg_ofst =3D 0x3E8, + .seccfgr_ofst =3D 0x34, +}; + +static const struct stm32mp_exti_bank stm32mp_exti_b3 =3D { + .imr_ofst =3D 0xA0, + .rtsr_ofst =3D 0x40, + .ftsr_ofst =3D 0x44, + .swier_ofst =3D 0x48, + .rpr_ofst =3D 0x4C, + .fpr_ofst =3D 0x50, + .trg_ofst =3D 0x3E4, + .seccfgr_ofst =3D 0x54, +}; + +static const struct stm32mp_exti_bank *stm32mp_exti_banks[] =3D { + &stm32mp_exti_b1, + &stm32mp_exti_b2, + &stm32mp_exti_b3, +}; + +static struct irq_chip stm32mp_exti_chip; +static struct irq_chip stm32mp_exti_chip_direct; + +#define EXTI_INVALID_IRQ U8_MAX +#define STM32MP_DESC_IRQ_SIZE (ARRAY_SIZE(stm32mp_exti_banks) * IRQS_PER_BA= NK) + +/* + * Use some intentionally tricky logic here to initialize the whole array to + * EXTI_INVALID_IRQ, but then override certain fields, requiring us to indic= ate + * that we "know" that there are overrides in this structure, and we'll need= to + * disable that warning from W=3D1 builds. + */ +__diag_push(); +__diag_ignore_all("-Woverride-init", + "logic to initialize all and then override some is OK"); + +static const u8 stm32mp1_desc_irq[] =3D { + /* default value */ + [0 ... (STM32MP_DESC_IRQ_SIZE - 1)] =3D EXTI_INVALID_IRQ, + + [0] =3D 6, + [1] =3D 7, + [2] =3D 8, + [3] =3D 9, + [4] =3D 10, + [5] =3D 23, + [6] =3D 64, + [7] =3D 65, + [8] =3D 66, + [9] =3D 67, + [10] =3D 40, + [11] =3D 42, + [12] =3D 76, + [13] =3D 77, + [14] =3D 121, + [15] =3D 127, + [16] =3D 1, + [19] =3D 3, + [21] =3D 31, + [22] =3D 33, + [23] =3D 72, + [24] =3D 95, + [25] =3D 107, + [26] =3D 37, + [27] =3D 38, + [28] =3D 39, + [29] =3D 71, + [30] =3D 52, + [31] =3D 53, + [32] =3D 82, + [33] =3D 83, + [46] =3D 151, + [47] =3D 93, + [48] =3D 138, + [50] =3D 139, + [52] =3D 140, + [53] =3D 141, + [54] =3D 135, + [61] =3D 100, + [65] =3D 144, + [68] =3D 143, + [70] =3D 62, + [73] =3D 129, +}; + +static const u8 stm32mp13_desc_irq[] =3D { + /* default value */ + [0 ... (STM32MP_DESC_IRQ_SIZE - 1)] =3D EXTI_INVALID_IRQ, + + [0] =3D 6, + [1] =3D 7, + [2] =3D 8, + [3] =3D 9, + [4] =3D 10, + [5] =3D 24, + [6] =3D 65, + [7] =3D 66, + [8] =3D 67, + [9] =3D 68, + [10] =3D 41, + [11] =3D 43, + [12] =3D 77, + [13] =3D 78, + [14] =3D 106, + [15] =3D 109, + [16] =3D 1, + [19] =3D 3, + [21] =3D 32, + [22] =3D 34, + [23] =3D 73, + [24] =3D 93, + [25] =3D 114, + [26] =3D 38, + [27] =3D 39, + [28] =3D 40, + [29] =3D 72, + [30] =3D 53, + [31] =3D 54, + [32] =3D 83, + [33] =3D 84, + [44] =3D 96, + [47] =3D 92, + [48] =3D 116, + [50] =3D 117, + [52] =3D 118, + [53] =3D 119, + [68] =3D 63, + [70] =3D 98, +}; + +__diag_pop(); + +static const struct stm32mp_exti_drv_data stm32mp1_drv_data =3D { + .exti_banks =3D stm32mp_exti_banks, + .bank_nr =3D ARRAY_SIZE(stm32mp_exti_banks), + .desc_irqs =3D stm32mp1_desc_irq, +}; + +static const struct stm32mp_exti_drv_data stm32mp13_drv_data =3D { + .exti_banks =3D stm32mp_exti_banks, + .bank_nr =3D ARRAY_SIZE(stm32mp_exti_banks), + .desc_irqs =3D stm32mp13_desc_irq, +}; + +static int stm32mp_exti_convert_type(struct irq_data *d, unsigned int type, = u32 *rtsr, u32 *ftsr) +{ + u32 mask =3D BIT(d->hwirq % IRQS_PER_BANK); + + switch (type) { + case IRQ_TYPE_EDGE_RISING: + *rtsr |=3D mask; + *ftsr &=3D ~mask; + break; + case IRQ_TYPE_EDGE_FALLING: + *rtsr &=3D ~mask; + *ftsr |=3D mask; + break; + case IRQ_TYPE_EDGE_BOTH: + *rtsr |=3D mask; + *ftsr |=3D mask; + break; + default: + return -EINVAL; + } + + return 0; +} + +static void stm32mp_chip_suspend(struct stm32mp_exti_chip_data *chip_data, u= 32 wake_active) +{ + const struct stm32mp_exti_bank *bank =3D chip_data->reg_bank; + void __iomem *base =3D chip_data->host_data->base; + + /* save rtsr, ftsr registers */ + chip_data->rtsr_cache =3D readl_relaxed(base + bank->rtsr_ofst); + chip_data->ftsr_cache =3D readl_relaxed(base + bank->ftsr_ofst); + + writel_relaxed(wake_active, base + bank->imr_ofst); +} + +static void stm32mp_chip_resume(struct stm32mp_exti_chip_data *chip_data, u3= 2 mask_cache) +{ + const struct stm32mp_exti_bank *bank =3D chip_data->reg_bank; + void __iomem *base =3D chip_data->host_data->base; + + /* restore rtsr, ftsr, registers */ + writel_relaxed(chip_data->rtsr_cache, base + bank->rtsr_ofst); + writel_relaxed(chip_data->ftsr_cache, base + bank->ftsr_ofst); + + writel_relaxed(mask_cache, base + bank->imr_ofst); +} + +/* directly set the target bit without reading first. */ +static inline void stm32mp_exti_write_bit(struct irq_data *d, u32 reg) +{ + struct stm32mp_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); + void __iomem *base =3D chip_data->host_data->base; + u32 val =3D BIT(d->hwirq % IRQS_PER_BANK); + + writel_relaxed(val, base + reg); +} + +static inline u32 stm32mp_exti_set_bit(struct irq_data *d, u32 reg) +{ + struct stm32mp_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); + void __iomem *base =3D chip_data->host_data->base; + u32 val; + + val =3D readl_relaxed(base + reg); + val |=3D BIT(d->hwirq % IRQS_PER_BANK); + writel_relaxed(val, base + reg); + + return val; +} + +static inline u32 stm32mp_exti_clr_bit(struct irq_data *d, u32 reg) +{ + struct stm32mp_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); + void __iomem *base =3D chip_data->host_data->base; + u32 val; + + val =3D readl_relaxed(base + reg); + val &=3D ~BIT(d->hwirq % IRQS_PER_BANK); + writel_relaxed(val, base + reg); + + return val; +} + +static void stm32mp_exti_eoi(struct irq_data *d) +{ + struct stm32mp_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); + const struct stm32mp_exti_bank *bank =3D chip_data->reg_bank; + + raw_spin_lock(&chip_data->rlock); + + stm32mp_exti_write_bit(d, bank->rpr_ofst); + stm32mp_exti_write_bit(d, bank->fpr_ofst); + + raw_spin_unlock(&chip_data->rlock); + + if (d->parent_data->chip) + irq_chip_eoi_parent(d); +} + +static void stm32mp_exti_mask(struct irq_data *d) +{ + struct stm32mp_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); + const struct stm32mp_exti_bank *bank =3D chip_data->reg_bank; + + raw_spin_lock(&chip_data->rlock); + chip_data->mask_cache =3D stm32mp_exti_clr_bit(d, bank->imr_ofst); + raw_spin_unlock(&chip_data->rlock); + + if (d->parent_data->chip) + irq_chip_mask_parent(d); +} + +static void stm32mp_exti_unmask(struct irq_data *d) +{ + struct stm32mp_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); + const struct stm32mp_exti_bank *bank =3D chip_data->reg_bank; + + raw_spin_lock(&chip_data->rlock); + chip_data->mask_cache =3D stm32mp_exti_set_bit(d, bank->imr_ofst); + raw_spin_unlock(&chip_data->rlock); + + if (d->parent_data->chip) + irq_chip_unmask_parent(d); +} + +static int stm32mp_exti_set_type(struct irq_data *d, unsigned int type) +{ + struct stm32mp_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); + const struct stm32mp_exti_bank *bank =3D chip_data->reg_bank; + struct hwspinlock *hwlock =3D chip_data->host_data->hwlock; + void __iomem *base =3D chip_data->host_data->base; + u32 rtsr, ftsr; + int err; + + raw_spin_lock(&chip_data->rlock); + + if (hwlock) { + err =3D hwspin_lock_timeout_in_atomic(hwlock, HWSPNLCK_TIMEOUT); + if (err) { + pr_err("%s can't get hwspinlock (%d)\n", __func__, err); + goto unlock; + } + } + + rtsr =3D readl_relaxed(base + bank->rtsr_ofst); + ftsr =3D readl_relaxed(base + bank->ftsr_ofst); + + err =3D stm32mp_exti_convert_type(d, type, &rtsr, &ftsr); + if (!err) { + writel_relaxed(rtsr, base + bank->rtsr_ofst); + writel_relaxed(ftsr, base + bank->ftsr_ofst); + } + + if (hwlock) + hwspin_unlock_in_atomic(hwlock); +unlock: + raw_spin_unlock(&chip_data->rlock); + return err; +} + +static int stm32mp_exti_set_wake(struct irq_data *d, unsigned int on) +{ + struct stm32mp_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); + u32 mask =3D BIT(d->hwirq % IRQS_PER_BANK); + + raw_spin_lock(&chip_data->rlock); + + if (on) + chip_data->wake_active |=3D mask; + else + chip_data->wake_active &=3D ~mask; + + raw_spin_unlock(&chip_data->rlock); + + return 0; +} + +static int stm32mp_exti_set_affinity(struct irq_data *d, const struct cpumas= k *dest, bool force) +{ + if (d->parent_data->chip) + return irq_chip_set_affinity_parent(d, dest, force); + + return IRQ_SET_MASK_OK_DONE; +} + +static int stm32mp_exti_suspend(struct device *dev) +{ + struct stm32mp_exti_host_data *host_data =3D dev_get_drvdata(dev); + struct stm32mp_exti_chip_data *chip_data; + int i; + + for (i =3D 0; i < host_data->drv_data->bank_nr; i++) { + chip_data =3D &host_data->chips_data[i]; + stm32mp_chip_suspend(chip_data, chip_data->wake_active); + } + + return 0; +} + +static int stm32mp_exti_resume(struct device *dev) +{ + struct stm32mp_exti_host_data *host_data =3D dev_get_drvdata(dev); + struct stm32mp_exti_chip_data *chip_data; + int i; + + for (i =3D 0; i < host_data->drv_data->bank_nr; i++) { + chip_data =3D &host_data->chips_data[i]; + stm32mp_chip_resume(chip_data, chip_data->mask_cache); + } + + return 0; +} + +static int stm32mp_exti_retrigger(struct irq_data *d) +{ + struct stm32mp_exti_chip_data *chip_data =3D irq_data_get_irq_chip_data(d); + const struct stm32mp_exti_bank *bank =3D chip_data->reg_bank; + void __iomem *base =3D chip_data->host_data->base; + u32 mask =3D BIT(d->hwirq % IRQS_PER_BANK); + + writel_relaxed(mask, base + bank->swier_ofst); + + return 0; +} + +static struct irq_chip stm32mp_exti_chip =3D { + .name =3D "stm32mp-exti", + .irq_eoi =3D stm32mp_exti_eoi, + .irq_mask =3D stm32mp_exti_mask, + .irq_unmask =3D stm32mp_exti_unmask, + .irq_retrigger =3D stm32mp_exti_retrigger, + .irq_set_type =3D stm32mp_exti_set_type, + .irq_set_wake =3D stm32mp_exti_set_wake, + .flags =3D IRQCHIP_MASK_ON_SUSPEND, + .irq_set_affinity =3D IS_ENABLED(CONFIG_SMP) ? stm32mp_exti_set_affinity : = NULL, +}; + +static struct irq_chip stm32mp_exti_chip_direct =3D { + .name =3D "stm32mp-exti-direct", + .irq_eoi =3D irq_chip_eoi_parent, + .irq_ack =3D irq_chip_ack_parent, + .irq_mask =3D stm32mp_exti_mask, + .irq_unmask =3D stm32mp_exti_unmask, + .irq_retrigger =3D irq_chip_retrigger_hierarchy, + .irq_set_type =3D irq_chip_set_type_parent, + .irq_set_wake =3D stm32mp_exti_set_wake, + .flags =3D IRQCHIP_MASK_ON_SUSPEND, + .irq_set_affinity =3D IS_ENABLED(CONFIG_SMP) ? irq_chip_set_affinity_parent= : NULL, +}; + +static int stm32mp_exti_domain_alloc(struct irq_domain *dm, + unsigned int virq, + unsigned int nr_irqs, void *data) +{ + struct stm32mp_exti_host_data *host_data =3D dm->host_data; + struct stm32mp_exti_chip_data *chip_data; + struct irq_fwspec *fwspec =3D data; + struct irq_fwspec p_fwspec; + irq_hw_number_t hwirq; + struct irq_chip *chip; + u32 event_trg; + u8 desc_irq; + int bank; + + hwirq =3D fwspec->param[0]; + if (hwirq >=3D host_data->drv_data->bank_nr * IRQS_PER_BANK) + return -EINVAL; + + bank =3D hwirq / IRQS_PER_BANK; + chip_data =3D &host_data->chips_data[bank]; + + /* Check if event is reserved (Secure) */ + if (chip_data->event_reserved & BIT(hwirq % IRQS_PER_BANK)) { + dev_err(host_data->dev, "event %lu is reserved, secure\n", hwirq); + return -EPERM; + } + + event_trg =3D readl_relaxed(host_data->base + chip_data->reg_bank->trg_ofst= ); + chip =3D (event_trg & BIT(hwirq % IRQS_PER_BANK)) ? + &stm32mp_exti_chip : &stm32mp_exti_chip_direct; + + irq_domain_set_hwirq_and_chip(dm, virq, hwirq, chip, chip_data); + + if (host_data->dt_has_irqs_desc) { + struct of_phandle_args out_irq; + int ret; + + ret =3D of_irq_parse_one(host_data->dev->of_node, hwirq, &out_irq); + if (ret) + return ret; + /* we only support one parent, so far */ + if (of_node_to_fwnode(out_irq.np) !=3D dm->parent->fwnode) + return -EINVAL; + + of_phandle_args_to_fwspec(out_irq.np, out_irq.args, + out_irq.args_count, &p_fwspec); + + return irq_domain_alloc_irqs_parent(dm, virq, 1, &p_fwspec); + } + + if (!host_data->drv_data->desc_irqs) + return -EINVAL; + + desc_irq =3D host_data->drv_data->desc_irqs[hwirq]; + if (desc_irq !=3D EXTI_INVALID_IRQ) { + p_fwspec.fwnode =3D dm->parent->fwnode; + p_fwspec.param_count =3D 3; + p_fwspec.param[0] =3D GIC_SPI; + p_fwspec.param[1] =3D desc_irq; + p_fwspec.param[2] =3D IRQ_TYPE_LEVEL_HIGH; + + return irq_domain_alloc_irqs_parent(dm, virq, 1, &p_fwspec); + } + + return 0; +} + +static struct stm32mp_exti_chip_data *stm32mp_exti_chip_init(struct stm32mp_= exti_host_data *h_data, + u32 bank_idx, struct device_node *node) +{ + struct stm32mp_exti_chip_data *chip_data; + const struct stm32mp_exti_bank *bank; + void __iomem *base =3D h_data->base; + + bank =3D h_data->drv_data->exti_banks[bank_idx]; + chip_data =3D &h_data->chips_data[bank_idx]; + chip_data->host_data =3D h_data; + chip_data->reg_bank =3D bank; + + raw_spin_lock_init(&chip_data->rlock); + + /* + * This IP has no reset, so after hot reboot we should + * clear registers to avoid residue + */ + writel_relaxed(0, base + bank->imr_ofst); + + /* reserve Secure events */ + chip_data->event_reserved =3D readl_relaxed(base + bank->seccfgr_ofst); + + pr_info("%pOF: bank%d\n", node, bank_idx); + + return chip_data; +} + +static const struct irq_domain_ops stm32mp_exti_domain_ops =3D { + .alloc =3D stm32mp_exti_domain_alloc, + .free =3D irq_domain_free_irqs_common, + .xlate =3D irq_domain_xlate_twocell, +}; + +static void stm32mp_exti_check_rif(struct stm32mp_exti_host_data *host_data) +{ + unsigned int bank, i, event; + u32 cid, cidcfgr, hwcfgr1; + + /* quit on CID not supported */ + hwcfgr1 =3D readl_relaxed(host_data->base + EXTI_HWCFGR1); + if ((hwcfgr1 & EXTI_HWCFGR1_CIDWIDTH_MASK) =3D=3D 0) + return; + + for (bank =3D 0; bank < host_data->drv_data->bank_nr; bank++) { + for (i =3D 0; i < IRQS_PER_BANK; i++) { + event =3D bank * IRQS_PER_BANK + i; + cidcfgr =3D readl_relaxed(host_data->base + EXTI_EnCIDCFGR(event)); + cid =3D (cidcfgr & EXTI_CIDCFGR_CID_MASK) >> EXTI_CIDCFGR_CID_SHIFT; + if ((cidcfgr & EXTI_CIDCFGR_CFEN_MASK) && cid !=3D EXTI_CID1) + host_data->chips_data[bank].event_reserved |=3D BIT(i); + } + } +} + +static void stm32mp_exti_remove_irq(void *data) +{ + struct irq_domain *domain =3D data; + + irq_domain_remove(domain); +} + +static int stm32mp_exti_probe(struct platform_device *pdev) +{ + const struct stm32mp_exti_drv_data *drv_data; + struct irq_domain *parent_domain, *domain; + struct stm32mp_exti_host_data *host_data; + struct device *dev =3D &pdev->dev; + struct device_node *np =3D dev->of_node; + int ret, i; + + host_data =3D devm_kzalloc(dev, sizeof(*host_data), GFP_KERNEL); + if (!host_data) + return -ENOMEM; + + dev_set_drvdata(dev, host_data); + host_data->dev =3D dev; + + /* check for optional hwspinlock which may be not available yet */ + ret =3D of_hwspin_lock_get_id(np, 0); + if (ret =3D=3D -EPROBE_DEFER) + /* hwspinlock framework not yet ready */ + return ret; + + if (ret >=3D 0) { + host_data->hwlock =3D devm_hwspin_lock_request_specific(dev, ret); + if (!host_data->hwlock) { + dev_err(dev, "Failed to request hwspinlock\n"); + return -EINVAL; + } + } else if (ret !=3D -ENOENT) { + /* note: ENOENT is a valid case (means 'no hwspinlock') */ + dev_err(dev, "Failed to get hwspinlock\n"); + return ret; + } + + /* initialize host_data */ + drv_data =3D of_device_get_match_data(dev); + if (!drv_data) { + dev_err(dev, "no of match data\n"); + return -ENODEV; + } + host_data->drv_data =3D drv_data; + + host_data->chips_data =3D devm_kcalloc(dev, drv_data->bank_nr, + sizeof(*host_data->chips_data), + GFP_KERNEL); + if (!host_data->chips_data) + return -ENOMEM; + + host_data->base =3D devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(host_data->base)) + return PTR_ERR(host_data->base); + + for (i =3D 0; i < drv_data->bank_nr; i++) + stm32mp_exti_chip_init(host_data, i, np); + + stm32mp_exti_check_rif(host_data); + + parent_domain =3D irq_find_host(of_irq_find_parent(np)); + if (!parent_domain) { + dev_err(dev, "GIC interrupt-parent not found\n"); + return -EINVAL; + } + + domain =3D irq_domain_add_hierarchy(parent_domain, 0, + drv_data->bank_nr * IRQS_PER_BANK, + np, &stm32mp_exti_domain_ops, + host_data); + + if (!domain) { + dev_err(dev, "Could not register exti domain\n"); + return -ENOMEM; + } + + ret =3D devm_add_action_or_reset(dev, stm32mp_exti_remove_irq, domain); + if (ret) + return ret; + + if (of_property_read_bool(np, "interrupts-extended")) + host_data->dt_has_irqs_desc =3D true; + + return 0; +} + +static const struct of_device_id stm32mp_exti_ids[] =3D { + { .compatible =3D "st,stm32mp1-exti", .data =3D &stm32mp1_drv_data}, + { .compatible =3D "st,stm32mp13-exti", .data =3D &stm32mp13_drv_data}, + {}, +}; +MODULE_DEVICE_TABLE(of, stm32mp_exti_ids); + +static const struct dev_pm_ops stm32mp_exti_dev_pm_ops =3D { + NOIRQ_SYSTEM_SLEEP_PM_OPS(stm32mp_exti_suspend, stm32mp_exti_resume) +}; + +static struct platform_driver stm32mp_exti_driver =3D { + .probe =3D stm32mp_exti_probe, + .driver =3D { + .name =3D "stm32mp_exti", + .of_match_table =3D stm32mp_exti_ids, + .pm =3D &stm32mp_exti_dev_pm_ops, + }, +}; + +module_platform_driver(stm32mp_exti_driver); + +MODULE_AUTHOR("Maxime Coquelin "); +MODULE_DESCRIPTION("STM32MP EXTI driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/irqchip/irq-ts4800.c b/drivers/irqchip/irq-ts4800.c index 57f610dab6b8..b5dddb3c1568 100644 --- a/drivers/irqchip/irq-ts4800.c +++ b/drivers/irqchip/irq-ts4800.c @@ -163,5 +163,6 @@ static struct platform_driver ts4800_ic_driver =3D { module_platform_driver(ts4800_ic_driver); =20 MODULE_AUTHOR("Damien Riegel "); +MODULE_DESCRIPTION("Multiplexed-IRQs driver for TS-4800's FPGA"); MODULE_LICENSE("GPL v2"); MODULE_ALIAS("platform:ts4800_irqc"); diff --git a/include/linux/acpi.h b/include/linux/acpi.h index 28c3fb2bef0d..000d339e1596 100644 --- a/include/linux/acpi.h +++ b/include/linux/acpi.h @@ -279,6 +279,9 @@ static inline bool invalid_phys_cpuid(phys_cpuid_t phys_i= d) return phys_id =3D=3D PHYS_CPUID_INVALID; } =20 + +int __init acpi_get_madt_revision(void); + /* Validate the processor object's proc_id */ bool acpi_duplicate_processor_id(int proc_id); /* Processor _CTS control */ diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 5c9bdd3ffccc..dac7466de5f3 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h @@ -168,7 +168,7 @@ static inline int __must_check request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev) { - return request_threaded_irq(irq, handler, NULL, flags, name, dev); + return request_threaded_irq(irq, handler, NULL, flags | IRQF_COND_ONESHOT, = name, dev); } =20 extern int __must_check diff --git a/include/linux/irq.h b/include/linux/irq.h index a217e1029c1d..1f5dbf1f92c9 100644 --- a/include/linux/irq.h +++ b/include/linux/irq.h @@ -1106,6 +1106,7 @@ enum irq_gc_flags { * @irq_flags_to_set: IRQ* flags to set on irq setup * @irq_flags_to_clear: IRQ* flags to clear on irq setup * @gc_flags: Generic chip specific setup flags + * @exit: Function called on each chip when they are destroyed. * @gc: Array of pointers to generic interrupt chips */ struct irq_domain_chip_generic { @@ -1114,9 +1115,37 @@ struct irq_domain_chip_generic { unsigned int irq_flags_to_clear; unsigned int irq_flags_to_set; enum irq_gc_flags gc_flags; + void (*exit)(struct irq_chip_generic *gc); struct irq_chip_generic *gc[]; }; =20 +/** + * struct irq_domain_chip_generic_info - Generic chip information structure + * @name: Name of the generic interrupt chip + * @handler: Interrupt handler used by the generic interrupt chip + * @irqs_per_chip: Number of interrupts each chip handles (max 32) + * @num_ct: Number of irq_chip_type instances associated with each + * chip + * @irq_flags_to_clear: IRQ_* bits to clear in the mapping function + * @irq_flags_to_set: IRQ_* bits to set in the mapping function + * @gc_flags: Generic chip specific setup flags + * @init: Function called on each chip when they are created. + * Allow to do some additional chip initialisation. + * @exit: Function called on each chip when they are destroyed. + * Allow to do some chip cleanup operation. + */ +struct irq_domain_chip_generic_info { + const char *name; + irq_flow_handler_t handler; + unsigned int irqs_per_chip; + unsigned int num_ct; + unsigned int irq_flags_to_clear; + unsigned int irq_flags_to_set; + enum irq_gc_flags gc_flags; + int (*init)(struct irq_chip_generic *gc); + void (*exit)(struct irq_chip_generic *gc); +}; + /* Generic chip callback functions */ void irq_gc_noop(struct irq_data *d); void irq_gc_mask_disable_reg(struct irq_data *d); @@ -1153,6 +1182,20 @@ int devm_irq_setup_generic_chip(struct device *dev, st= ruct irq_chip_generic *gc, =20 struct irq_chip_generic *irq_get_domain_generic_chip(struct irq_domain *d, u= nsigned int hw_irq); =20 +#ifdef CONFIG_GENERIC_IRQ_CHIP +int irq_domain_alloc_generic_chips(struct irq_domain *d, + const struct irq_domain_chip_generic_info *info); +void irq_domain_remove_generic_chips(struct irq_domain *d); +#else +static inline int +irq_domain_alloc_generic_chips(struct irq_domain *d, + const struct irq_domain_chip_generic_info *info) +{ + return -EINVAL; +} +static inline void irq_domain_remove_generic_chips(struct irq_domain *d) { } +#endif /* CONFIG_GENERIC_IRQ_CHIP */ + int __irq_alloc_domain_generic_chips(struct irq_domain *d, int irqs_per_chip, int num_ct, const char *name, irq_flow_handler_t handler, diff --git a/include/linux/irqchip/arm-gic-v4.h b/include/linux/irqchip/arm-g= ic-v4.h index 2c63375bbd43..ecabed6d3307 100644 --- a/include/linux/irqchip/arm-gic-v4.h +++ b/include/linux/irqchip/arm-gic-v4.h @@ -25,6 +25,14 @@ struct its_vm { irq_hw_number_t db_lpi_base; unsigned long *db_bitmap; int nr_db_lpis; + /* + * Ensures mutual exclusion between updates to vlpi_count[] + * and map/unmap when using the ITSList mechanism. + * + * The lock order for any sequence involving the ITSList is + * vmapp_lock -> vpe_lock ->vmovp_lock. + */ + raw_spinlock_t vmapp_lock; u32 vlpi_count[GICv4_ITS_LIST_MAX]; }; =20 diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h index 21ecf582a0fe..de6105f68fec 100644 --- a/include/linux/irqdomain.h +++ b/include/linux/irqdomain.h @@ -74,11 +74,24 @@ void of_phandle_args_to_fwspec(struct device_node *np, co= nst u32 *args, * struct irq_domain_ops - Methods for irq_domain objects * @match: Match an interrupt controller device node to a host, returns * 1 on a match + * @select: Match an interrupt controller fw specification. It is more gener= ic + * than @match as it receives a complete struct irq_fwspec. Therefore, + * @select is preferred if provided. Returns 1 on a match. * @map: Create or update a mapping between a virtual irq number and a hw * irq number. This is called only once for a given mapping. * @unmap: Dispose of such a mapping * @xlate: Given a device tree node and interrupt specifier, decode * the hardware irq number and linux irq type value. + * @alloc: Allocate @nr_irqs interrupts starting from @virq. + * @free: Free @nr_irqs interrupts starting from @virq. + * @activate: Activate one interrupt in HW (@irqd). If @reserve is set, only + * reserve the vector. If unset, assign the vector (called from + * request_irq()). + * @deactivate: Disarm one interrupt (@irqd). + * @translate: Given @fwspec, decode the hardware irq number (@out_hwirq) and + * linux irq type value (@out_type). This is a generalised @xlate + * (over struct irq_fwspec) and is preferred if provided. + * @debug_show: For domains to show specific data for an interrupt in debugf= s. * * Functions below are provided by the driver and called whenever a new mapp= ing * is created or an old mapping is disposed. The driver can then proceed to @@ -131,6 +144,9 @@ struct irq_domain_chip_generic; * Optional elements: * @fwnode: Pointer to firmware node associated with the irq_domain. Pretty = easy * to swap it for the of_node via the irq_domain_get_of_node accessor + * @bus_token: @fwnode's device_node might be used for several irq domains. = But + * in connection with @bus_token, the pair shall be unique in a + * system. * @gc: Pointer to a list of generic chips. There is a helper function for * setting up one or more generic chips for interrupt controllers * drivers using the generic chip library which uses this pointer. @@ -141,9 +157,12 @@ struct irq_domain_chip_generic; * purposes related to the irq domain. * @parent: Pointer to parent irq_domain to support hierarchy irq_domains * @msi_parent_ops: Pointer to MSI parent domain methods for per device doma= in init + * @exit: Function called when the domain is destroyed * * Revmap data, used internally by the irq domain code: - * @revmap_size: Size of the linear map table @revmap[] + * @hwirq_max: Top limit for the HW irq number. Especially to avoid + * conflicts/failures with reserved HW irqs. Can be ~0. + * @revmap_size: Size of the linear map table @revmap * @revmap_tree: Radix map tree for hwirqs that don't fit in the linear map * @revmap: Linear table of irq_data pointers */ @@ -169,6 +188,7 @@ struct irq_domain { #ifdef CONFIG_GENERIC_MSI_IRQ const struct msi_parent_ops *msi_parent_ops; #endif + void (*exit)(struct irq_domain *d); =20 /* reverse map data. The linear map gets appended to the irq_domain */ irq_hw_number_t hwirq_max; @@ -182,7 +202,7 @@ enum { /* Irq domain is hierarchical */ IRQ_DOMAIN_FLAG_HIERARCHY =3D (1 << 0), =20 - /* Irq domain name was allocated in __irq_domain_add() */ + /* Irq domain name was allocated internally */ IRQ_DOMAIN_NAME_ALLOCATED =3D (1 << 1), =20 /* Irq domain is an IPI domain with virq per cpu */ @@ -208,6 +228,9 @@ enum { /* Irq domain is a MSI device domain */ IRQ_DOMAIN_FLAG_MSI_DEVICE =3D (1 << 9), =20 + /* Irq domain must destroy generic chips when removed */ + IRQ_DOMAIN_FLAG_DESTROY_GC =3D (1 << 10), + /* * Flags starting from IRQ_DOMAIN_FLAG_NONCORE are reserved * for implementation specific purposes and ignored by the @@ -257,10 +280,51 @@ static inline struct fwnode_handle *irq_domain_alloc_fw= node(phys_addr_t *pa) } =20 void irq_domain_free_fwnode(struct fwnode_handle *fwnode); -struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, unsigned i= nt size, - irq_hw_number_t hwirq_max, int direct_max, - const struct irq_domain_ops *ops, - void *host_data); + +struct irq_domain_chip_generic_info; + +/** + * struct irq_domain_info - Domain information structure + * @fwnode: firmware node for the interrupt controller + * @domain_flags: Additional flags to add to the domain flags + * @size: Size of linear map; 0 for radix mapping only + * @hwirq_max: Maximum number of interrupts supported by controller + * @direct_max: Maximum value of direct maps; + * Use ~0 for no limit; 0 for no direct mapping + * @bus_token: Domain bus token + * @ops: Domain operation callbacks + * @host_data: Controller private data pointer + * @dgc_info: Geneneric chip information structure pointer used to + * create generic chips for the domain if not NULL. + * @init: Function called when the domain is created. + * Allow to do some additional domain initialisation. + * @exit: Function called when the domain is destroyed. + * Allow to do some additional cleanup operation. + */ +struct irq_domain_info { + struct fwnode_handle *fwnode; + unsigned int domain_flags; + unsigned int size; + irq_hw_number_t hwirq_max; + int direct_max; + enum irq_domain_bus_token bus_token; + const struct irq_domain_ops *ops; + void *host_data; +#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY + /** + * @parent: Pointer to the parent irq domain used in a hierarchy domain + */ + struct irq_domain *parent; +#endif + struct irq_domain_chip_generic_info *dgc_info; + int (*init)(struct irq_domain *d); + void (*exit)(struct irq_domain *d); +}; + +struct irq_domain *irq_domain_instantiate(const struct irq_domain_info *info= ); +struct irq_domain *devm_irq_domain_instantiate(struct device *dev, + const struct irq_domain_info *info); + struct irq_domain *irq_domain_create_simple(struct fwnode_handle *fwnode, unsigned int size, unsigned int first_irq, @@ -293,7 +357,7 @@ static inline struct fwnode_handle *of_node_to_fwnode(str= uct device_node *node) =20 extern const struct fwnode_operations irqchip_fwnode_ops; =20 -static inline bool is_fwnode_irqchip(struct fwnode_handle *fwnode) +static inline bool is_fwnode_irqchip(const struct fwnode_handle *fwnode) { return fwnode && fwnode->ops =3D=3D &irqchip_fwnode_ops; } @@ -350,7 +414,17 @@ static inline struct irq_domain *irq_domain_add_linear(s= truct device_node *of_no const struct irq_domain_ops *ops, void *host_data) { - return __irq_domain_add(of_node_to_fwnode(of_node), size, size, 0, ops, hos= t_data); + struct irq_domain_info info =3D { + .fwnode =3D of_node_to_fwnode(of_node), + .size =3D size, + .hwirq_max =3D size, + .ops =3D ops, + .host_data =3D host_data, + }; + struct irq_domain *d; + + d =3D irq_domain_instantiate(&info); + return IS_ERR(d) ? NULL : d; } =20 #ifdef CONFIG_IRQ_DOMAIN_NOMAP @@ -359,7 +433,17 @@ static inline struct irq_domain *irq_domain_add_nomap(st= ruct device_node *of_nod const struct irq_domain_ops *ops, void *host_data) { - return __irq_domain_add(of_node_to_fwnode(of_node), 0, max_irq, max_irq, op= s, host_data); + struct irq_domain_info info =3D { + .fwnode =3D of_node_to_fwnode(of_node), + .hwirq_max =3D max_irq, + .direct_max =3D max_irq, + .ops =3D ops, + .host_data =3D host_data, + }; + struct irq_domain *d; + + d =3D irq_domain_instantiate(&info); + return IS_ERR(d) ? NULL : d; } =20 extern unsigned int irq_create_direct_mapping(struct irq_domain *host); @@ -369,7 +453,16 @@ static inline struct irq_domain *irq_domain_add_tree(str= uct device_node *of_node const struct irq_domain_ops *ops, void *host_data) { - return __irq_domain_add(of_node_to_fwnode(of_node), 0, ~0, 0, ops, host_dat= a); + struct irq_domain_info info =3D { + .fwnode =3D of_node_to_fwnode(of_node), + .hwirq_max =3D ~0U, + .ops =3D ops, + .host_data =3D host_data, + }; + struct irq_domain *d; + + d =3D irq_domain_instantiate(&info); + return IS_ERR(d) ? NULL : d; } =20 static inline struct irq_domain *irq_domain_create_linear(struct fwnode_hand= le *fwnode, @@ -377,14 +470,33 @@ static inline struct irq_domain *irq_domain_create_line= ar(struct fwnode_handle * const struct irq_domain_ops *ops, void *host_data) { - return __irq_domain_add(fwnode, size, size, 0, ops, host_data); + struct irq_domain_info info =3D { + .fwnode =3D fwnode, + .size =3D size, + .hwirq_max =3D size, + .ops =3D ops, + .host_data =3D host_data, + }; + struct irq_domain *d; + + d =3D irq_domain_instantiate(&info); + return IS_ERR(d) ? NULL : d; } =20 static inline struct irq_domain *irq_domain_create_tree(struct fwnode_handle= *fwnode, const struct irq_domain_ops *ops, void *host_data) { - return __irq_domain_add(fwnode, 0, ~0, 0, ops, host_data); + struct irq_domain_info info =3D { + .fwnode =3D fwnode, + .hwirq_max =3D ~0, + .ops =3D ops, + .host_data =3D host_data, + }; + struct irq_domain *d; + + d =3D irq_domain_instantiate(&info); + return IS_ERR(d) ? NULL : d; } =20 extern void irq_domain_remove(struct irq_domain *host); diff --git a/kernel/irq/debugfs.c b/kernel/irq/debugfs.c index aae0402507ed..c6ffb97966be 100644 --- a/kernel/irq/debugfs.c +++ b/kernel/irq/debugfs.c @@ -9,14 +9,8 @@ =20 static struct dentry *irq_dir; =20 -struct irq_bit_descr { - unsigned int mask; - char *name; -}; -#define BIT_MASK_DESCR(m) { .mask =3D m, .name =3D #m } - -static void irq_debug_show_bits(struct seq_file *m, int ind, unsigned int st= ate, - const struct irq_bit_descr *sd, int size) +void irq_debug_show_bits(struct seq_file *m, int ind, unsigned int state, + const struct irq_bit_descr *sd, int size) { int i; =20 diff --git a/kernel/irq/devres.c b/kernel/irq/devres.c index f6e5515ee077..b3e98668f4dd 100644 --- a/kernel/irq/devres.c +++ b/kernel/irq/devres.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 #include #include +#include #include #include #include @@ -282,3 +283,43 @@ int devm_irq_setup_generic_chip(struct device *dev, stru= ct irq_chip_generic *gc, } EXPORT_SYMBOL_GPL(devm_irq_setup_generic_chip); #endif /* CONFIG_GENERIC_IRQ_CHIP */ + +#ifdef CONFIG_IRQ_DOMAIN +static void devm_irq_domain_remove(struct device *dev, void *res) +{ + struct irq_domain **domain =3D res; + + irq_domain_remove(*domain); +} + +/** + * devm_irq_domain_instantiate() - Instantiate a new irq domain data for a + * managed device. + * @dev: Device to instantiate the domain for + * @info: Domain information pointer pointing to the information for this + * domain + * + * Return: A pointer to the instantiated irq domain or an ERR_PTR value. + */ +struct irq_domain *devm_irq_domain_instantiate(struct device *dev, + const struct irq_domain_info *info) +{ + struct irq_domain *domain; + struct irq_domain **dr; + + dr =3D devres_alloc(devm_irq_domain_remove, sizeof(*dr), GFP_KERNEL); + if (!dr) + return ERR_PTR(-ENOMEM); + + domain =3D irq_domain_instantiate(info); + if (!IS_ERR(domain)) { + *dr =3D domain; + devres_add(dev, dr); + } else { + devres_free(dr); + } + + return domain; +} +EXPORT_SYMBOL_GPL(devm_irq_domain_instantiate); +#endif /* CONFIG_IRQ_DOMAIN */ diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c index d39a40bc542b..32ffcbb87fa1 100644 --- a/kernel/irq/generic-chip.c +++ b/kernel/irq/generic-chip.c @@ -276,21 +276,14 @@ irq_gc_init_mask_cache(struct irq_chip_generic *gc, enu= m irq_gc_flags flags) } =20 /** - * __irq_alloc_domain_generic_chips - Allocate generic chips for an irq doma= in - * @d: irq domain for which to allocate chips - * @irqs_per_chip: Number of interrupts each chip handles (max 32) - * @num_ct: Number of irq_chip_type instances associated with this - * @name: Name of the irq chip - * @handler: Default flow handler associated with these chips - * @clr: IRQ_* bits to clear in the mapping function - * @set: IRQ_* bits to set in the mapping function - * @gcflags: Generic chip specific setup flags + * irq_domain_alloc_generic_chips - Allocate generic chips for an irq domain + * @d: irq domain for which to allocate chips + * @info: Generic chip information + * + * Return: 0 on success, negative error code on failure */ -int __irq_alloc_domain_generic_chips(struct irq_domain *d, int irqs_per_chip, - int num_ct, const char *name, - irq_flow_handler_t handler, - unsigned int clr, unsigned int set, - enum irq_gc_flags gcflags) +int irq_domain_alloc_generic_chips(struct irq_domain *d, + const struct irq_domain_chip_generic_info *info) { struct irq_domain_chip_generic *dgc; struct irq_chip_generic *gc; @@ -300,27 +293,29 @@ int __irq_alloc_domain_generic_chips(struct irq_domain = *d, int irqs_per_chip, size_t gc_sz; size_t sz; void *tmp; + int ret; =20 if (d->gc) return -EBUSY; =20 - numchips =3D DIV_ROUND_UP(d->revmap_size, irqs_per_chip); + numchips =3D DIV_ROUND_UP(d->revmap_size, info->irqs_per_chip); if (!numchips) return -EINVAL; =20 /* Allocate a pointer, generic chip and chiptypes for each chip */ - gc_sz =3D struct_size(gc, chip_types, num_ct); + gc_sz =3D struct_size(gc, chip_types, info->num_ct); dgc_sz =3D struct_size(dgc, gc, numchips); sz =3D dgc_sz + numchips * gc_sz; =20 tmp =3D dgc =3D kzalloc(sz, GFP_KERNEL); if (!dgc) return -ENOMEM; - dgc->irqs_per_chip =3D irqs_per_chip; + dgc->irqs_per_chip =3D info->irqs_per_chip; dgc->num_chips =3D numchips; - dgc->irq_flags_to_set =3D set; - dgc->irq_flags_to_clear =3D clr; - dgc->gc_flags =3D gcflags; + dgc->irq_flags_to_set =3D info->irq_flags_to_set; + dgc->irq_flags_to_clear =3D info->irq_flags_to_clear; + dgc->gc_flags =3D info->gc_flags; + dgc->exit =3D info->exit; d->gc =3D dgc; =20 /* Calc pointer to the first generic chip */ @@ -328,15 +323,22 @@ int __irq_alloc_domain_generic_chips(struct irq_domain = *d, int irqs_per_chip, for (i =3D 0; i < numchips; i++) { /* Store the pointer to the generic chip */ dgc->gc[i] =3D gc =3D tmp; - irq_init_generic_chip(gc, name, num_ct, i * irqs_per_chip, - NULL, handler); + irq_init_generic_chip(gc, info->name, info->num_ct, + i * dgc->irqs_per_chip, NULL, + info->handler); =20 gc->domain =3D d; - if (gcflags & IRQ_GC_BE_IO) { + if (dgc->gc_flags & IRQ_GC_BE_IO) { gc->reg_readl =3D &irq_readl_be; gc->reg_writel =3D &irq_writel_be; } =20 + if (info->init) { + ret =3D info->init(gc); + if (ret) + goto err; + } + raw_spin_lock_irqsave(&gc_lock, flags); list_add_tail(&gc->list, &gc_list); raw_spin_unlock_irqrestore(&gc_lock, flags); @@ -344,6 +346,69 @@ int __irq_alloc_domain_generic_chips(struct irq_domain *= d, int irqs_per_chip, tmp +=3D gc_sz; } return 0; + +err: + while (i--) { + if (dgc->exit) + dgc->exit(dgc->gc[i]); + irq_remove_generic_chip(dgc->gc[i], ~0U, 0, 0); + } + d->gc =3D NULL; + kfree(dgc); + return ret; +} +EXPORT_SYMBOL_GPL(irq_domain_alloc_generic_chips); + +/** + * irq_domain_remove_generic_chips - Remove generic chips from an irq domain + * @d: irq domain for which generic chips are to be removed + */ +void irq_domain_remove_generic_chips(struct irq_domain *d) +{ + struct irq_domain_chip_generic *dgc =3D d->gc; + unsigned int i; + + if (!dgc) + return; + + for (i =3D 0; i < dgc->num_chips; i++) { + if (dgc->exit) + dgc->exit(dgc->gc[i]); + irq_remove_generic_chip(dgc->gc[i], ~0U, 0, 0); + } + d->gc =3D NULL; + kfree(dgc); +} +EXPORT_SYMBOL_GPL(irq_domain_remove_generic_chips); + +/** + * __irq_alloc_domain_generic_chips - Allocate generic chips for an irq doma= in + * @d: irq domain for which to allocate chips + * @irqs_per_chip: Number of interrupts each chip handles (max 32) + * @num_ct: Number of irq_chip_type instances associated with this + * @name: Name of the irq chip + * @handler: Default flow handler associated with these chips + * @clr: IRQ_* bits to clear in the mapping function + * @set: IRQ_* bits to set in the mapping function + * @gcflags: Generic chip specific setup flags + */ +int __irq_alloc_domain_generic_chips(struct irq_domain *d, int irqs_per_chip, + int num_ct, const char *name, + irq_flow_handler_t handler, + unsigned int clr, unsigned int set, + enum irq_gc_flags gcflags) +{ + struct irq_domain_chip_generic_info info =3D { + .irqs_per_chip =3D irqs_per_chip, + .num_ct =3D num_ct, + .name =3D name, + .handler =3D handler, + .irq_flags_to_clear =3D clr, + .irq_flags_to_set =3D set, + .gc_flags =3D gcflags, + }; + + return irq_domain_alloc_generic_chips(d, &info); } EXPORT_SYMBOL_GPL(__irq_alloc_domain_generic_chips); =20 diff --git a/kernel/irq/internals.h b/kernel/irq/internals.h index ed28059e9849..fe0272cd84a5 100644 --- a/kernel/irq/internals.h +++ b/kernel/irq/internals.h @@ -501,6 +501,16 @@ static inline struct irq_data *irqd_get_parent_data(stru= ct irq_data *irqd) #ifdef CONFIG_GENERIC_IRQ_DEBUGFS #include =20 +struct irq_bit_descr { + unsigned int mask; + char *name; +}; + +#define BIT_MASK_DESCR(m) { .mask =3D m, .name =3D #m } + +void irq_debug_show_bits(struct seq_file *m, int ind, unsigned int state, + const struct irq_bit_descr *sd, int size); + void irq_add_debugfs_entry(unsigned int irq, struct irq_desc *desc); static inline void irq_remove_debugfs_entry(struct irq_desc *desc) { diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c index aadc8891cc16..91eaf6bfcbf0 100644 --- a/kernel/irq/irqdomain.c +++ b/kernel/irq/irqdomain.c @@ -111,6 +111,7 @@ EXPORT_SYMBOL_GPL(__irq_domain_alloc_fwnode); =20 /** * irq_domain_free_fwnode - Free a non-OF-backed fwnode_handle + * @fwnode: fwnode_handle to free * * Free a fwnode_handle allocated with irq_domain_alloc_fwnode. */ @@ -127,27 +128,12 @@ void irq_domain_free_fwnode(struct fwnode_handle *fwnod= e) } EXPORT_SYMBOL_GPL(irq_domain_free_fwnode); =20 -static struct irq_domain *__irq_domain_create(struct fwnode_handle *fwnode, - unsigned int size, - irq_hw_number_t hwirq_max, - int direct_max, - const struct irq_domain_ops *ops, - void *host_data) +static int irq_domain_set_name(struct irq_domain *domain, + const struct fwnode_handle *fwnode, + enum irq_domain_bus_token bus_token) { - struct irqchip_fwid *fwid; - struct irq_domain *domain; - static atomic_t unknown_domains; - - if (WARN_ON((size && direct_max) || - (!IS_ENABLED(CONFIG_IRQ_DOMAIN_NOMAP) && direct_max) || - (direct_max && (direct_max !=3D hwirq_max)))) - return NULL; - - domain =3D kzalloc_node(struct_size(domain, revmap, size), - GFP_KERNEL, of_node_to_nid(to_of_node(fwnode))); - if (!domain) - return NULL; + struct irqchip_fwid *fwid; =20 if (is_fwnode_irqchip(fwnode)) { fwid =3D container_of(fwnode, struct irqchip_fwid, fwnode); @@ -155,17 +141,23 @@ static struct irq_domain *__irq_domain_create(struct fw= node_handle *fwnode, switch (fwid->type) { case IRQCHIP_FWNODE_NAMED: case IRQCHIP_FWNODE_NAMED_ID: - domain->fwnode =3D fwnode; - domain->name =3D kstrdup(fwid->name, GFP_KERNEL); - if (!domain->name) { - kfree(domain); - return NULL; - } + domain->name =3D bus_token ? + kasprintf(GFP_KERNEL, "%s-%d", + fwid->name, bus_token) : + kstrdup(fwid->name, GFP_KERNEL); + if (!domain->name) + return -ENOMEM; domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; break; default: - domain->fwnode =3D fwnode; domain->name =3D fwid->name; + if (bus_token) { + domain->name =3D kasprintf(GFP_KERNEL, "%s-%d", + fwid->name, bus_token); + if (!domain->name) + return -ENOMEM; + domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; + } break; } } else if (is_of_node(fwnode) || is_acpi_device_node(fwnode) || @@ -177,42 +169,68 @@ static struct irq_domain *__irq_domain_create(struct fw= node_handle *fwnode, * unhappy about. Replace them with ':', which does * the trick and is not as offensive as '\'... */ - name =3D kasprintf(GFP_KERNEL, "%pfw", fwnode); - if (!name) { - kfree(domain); - return NULL; - } + name =3D bus_token ? + kasprintf(GFP_KERNEL, "%pfw-%d", fwnode, bus_token) : + kasprintf(GFP_KERNEL, "%pfw", fwnode); + if (!name) + return -ENOMEM; =20 domain->name =3D strreplace(name, '/', ':'); - domain->fwnode =3D fwnode; domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; } =20 if (!domain->name) { if (fwnode) pr_err("Invalid fwnode type for irqdomain\n"); - domain->name =3D kasprintf(GFP_KERNEL, "unknown-%d", - atomic_inc_return(&unknown_domains)); - if (!domain->name) { - kfree(domain); - return NULL; - } + domain->name =3D bus_token ? + kasprintf(GFP_KERNEL, "unknown-%d-%d", + atomic_inc_return(&unknown_domains), + bus_token) : + kasprintf(GFP_KERNEL, "unknown-%d", + atomic_inc_return(&unknown_domains)); + if (!domain->name) + return -ENOMEM; domain->flags |=3D IRQ_DOMAIN_NAME_ALLOCATED; } =20 - fwnode_handle_get(fwnode); - fwnode_dev_initialized(fwnode, true); + return 0; +} + +static struct irq_domain *__irq_domain_create(const struct irq_domain_info *= info) +{ + struct irq_domain *domain; + int err; + + if (WARN_ON((info->size && info->direct_max) || + (!IS_ENABLED(CONFIG_IRQ_DOMAIN_NOMAP) && info->direct_max) || + (info->direct_max && info->direct_max !=3D info->hwirq_max))) + return ERR_PTR(-EINVAL); + + domain =3D kzalloc_node(struct_size(domain, revmap, info->size), + GFP_KERNEL, of_node_to_nid(to_of_node(info->fwnode))); + if (!domain) + return ERR_PTR(-ENOMEM); + + err =3D irq_domain_set_name(domain, info->fwnode, info->bus_token); + if (err) { + kfree(domain); + return ERR_PTR(err); + } + + domain->fwnode =3D fwnode_handle_get(info->fwnode); + fwnode_dev_initialized(domain->fwnode, true); =20 /* Fill structure */ INIT_RADIX_TREE(&domain->revmap_tree, GFP_KERNEL); - domain->ops =3D ops; - domain->host_data =3D host_data; - domain->hwirq_max =3D hwirq_max; + domain->ops =3D info->ops; + domain->host_data =3D info->host_data; + domain->bus_token =3D info->bus_token; + domain->hwirq_max =3D info->hwirq_max; =20 - if (direct_max) + if (info->direct_max) domain->flags |=3D IRQ_DOMAIN_FLAG_NO_MAP; =20 - domain->revmap_size =3D size; + domain->revmap_size =3D info->size; =20 /* * Hierarchical domains use the domain lock of the root domain @@ -240,34 +258,64 @@ static void __irq_domain_publish(struct irq_domain *dom= ain) pr_debug("Added domain %s\n", domain->name); } =20 +static void irq_domain_free(struct irq_domain *domain) +{ + fwnode_dev_initialized(domain->fwnode, false); + fwnode_handle_put(domain->fwnode); + if (domain->flags & IRQ_DOMAIN_NAME_ALLOCATED) + kfree(domain->name); + kfree(domain); +} + /** - * __irq_domain_add() - Allocate a new irq_domain data structure - * @fwnode: firmware node for the interrupt controller - * @size: Size of linear map; 0 for radix mapping only - * @hwirq_max: Maximum number of interrupts supported by controller - * @direct_max: Maximum value of direct maps; Use ~0 for no limit; 0 for no - * direct mapping - * @ops: domain callbacks - * @host_data: Controller private data pointer + * irq_domain_instantiate() - Instantiate a new irq domain data structure + * @info: Domain information pointer pointing to the information for this do= main * - * Allocates and initializes an irq_domain structure. - * Returns pointer to IRQ domain, or NULL on failure. + * Return: A pointer to the instantiated irq domain or an ERR_PTR value. */ -struct irq_domain *__irq_domain_add(struct fwnode_handle *fwnode, unsigned i= nt size, - irq_hw_number_t hwirq_max, int direct_max, - const struct irq_domain_ops *ops, - void *host_data) +struct irq_domain *irq_domain_instantiate(const struct irq_domain_info *info) { struct irq_domain *domain; + int err; =20 - domain =3D __irq_domain_create(fwnode, size, hwirq_max, direct_max, - ops, host_data); - if (domain) - __irq_domain_publish(domain); + domain =3D __irq_domain_create(info); + if (IS_ERR(domain)) + return domain; + + domain->flags |=3D info->domain_flags; + domain->exit =3D info->exit; + +#ifdef CONFIG_IRQ_DOMAIN_HIERARCHY + if (info->parent) { + domain->root =3D info->parent->root; + domain->parent =3D info->parent; + } +#endif + + if (info->dgc_info) { + err =3D irq_domain_alloc_generic_chips(domain, info->dgc_info); + if (err) + goto err_domain_free; + } + + if (info->init) { + err =3D info->init(domain); + if (err) + goto err_domain_gc_remove; + } + + __irq_domain_publish(domain); =20 return domain; + +err_domain_gc_remove: + if (info->dgc_info) + irq_domain_remove_generic_chips(domain); +err_domain_free: + irq_domain_free(domain); + return ERR_PTR(err); } -EXPORT_SYMBOL_GPL(__irq_domain_add); +EXPORT_SYMBOL_GPL(irq_domain_instantiate); =20 /** * irq_domain_remove() - Remove an irq domain. @@ -279,6 +327,9 @@ EXPORT_SYMBOL_GPL(__irq_domain_add); */ void irq_domain_remove(struct irq_domain *domain) { + if (domain->exit) + domain->exit(domain); + mutex_lock(&irq_domain_mutex); debugfs_remove_domain_dir(domain); =20 @@ -294,13 +345,11 @@ void irq_domain_remove(struct irq_domain *domain) =20 mutex_unlock(&irq_domain_mutex); =20 - pr_debug("Removed domain %s\n", domain->name); + if (domain->flags & IRQ_DOMAIN_FLAG_DESTROY_GC) + irq_domain_remove_generic_chips(domain); =20 - fwnode_dev_initialized(domain->fwnode, false); - fwnode_handle_put(domain->fwnode); - if (domain->flags & IRQ_DOMAIN_NAME_ALLOCATED) - kfree(domain->name); - kfree(domain); + pr_debug("Removed domain %s\n", domain->name); + irq_domain_free(domain); } EXPORT_SYMBOL_GPL(irq_domain_remove); =20 @@ -360,10 +409,17 @@ struct irq_domain *irq_domain_create_simple(struct fwno= de_handle *fwnode, const struct irq_domain_ops *ops, void *host_data) { + struct irq_domain_info info =3D { + .fwnode =3D fwnode, + .size =3D size, + .hwirq_max =3D size, + .ops =3D ops, + .host_data =3D host_data, + }; struct irq_domain *domain; =20 - domain =3D __irq_domain_add(fwnode, size, size, 0, ops, host_data); - if (!domain) + domain =3D irq_domain_instantiate(&info); + if (IS_ERR(domain)) return NULL; =20 if (first_irq > 0) { @@ -416,11 +472,20 @@ struct irq_domain *irq_domain_create_legacy(struct fwno= de_handle *fwnode, const struct irq_domain_ops *ops, void *host_data) { + struct irq_domain_info info =3D { + .fwnode =3D fwnode, + .size =3D first_hwirq + size, + .hwirq_max =3D first_hwirq + size, + .ops =3D ops, + .host_data =3D host_data, + }; struct irq_domain *domain; =20 - domain =3D __irq_domain_add(fwnode, first_hwirq + size, first_hwirq + size,= 0, ops, host_data); - if (domain) - irq_domain_associate_many(domain, first_irq, first_hwirq, size); + domain =3D irq_domain_instantiate(&info); + if (IS_ERR(domain)) + return NULL; + + irq_domain_associate_many(domain, first_irq, first_hwirq, size); =20 return domain; } @@ -982,6 +1047,12 @@ EXPORT_SYMBOL_GPL(__irq_resolve_mapping); =20 /** * irq_domain_xlate_onecell() - Generic xlate for direct one cell bindings + * @d: Interrupt domain involved in the translation + * @ctrlr: The device tree node for the device whose interrupt is translated + * @intspec: The interrupt specifier data from the device tree + * @intsize: The number of entries in @intspec + * @out_hwirq: Pointer to storage for the hardware interrupt number + * @out_type: Pointer to storage for the interrupt type * * Device Tree IRQ specifier translation function which works with one cell * bindings where the cell value maps directly to the hwirq number. @@ -1000,6 +1071,12 @@ EXPORT_SYMBOL_GPL(irq_domain_xlate_onecell); =20 /** * irq_domain_xlate_twocell() - Generic xlate for direct two cell bindings + * @d: Interrupt domain involved in the translation + * @ctrlr: The device tree node for the device whose interrupt is translated + * @intspec: The interrupt specifier data from the device tree + * @intsize: The number of entries in @intspec + * @out_hwirq: Pointer to storage for the hardware interrupt number + * @out_type: Pointer to storage for the interrupt type * * Device Tree IRQ specifier translation function which works with two cell * bindings where the cell values map directly to the hwirq number @@ -1018,6 +1095,12 @@ EXPORT_SYMBOL_GPL(irq_domain_xlate_twocell); =20 /** * irq_domain_xlate_onetwocell() - Generic xlate for one or two cell bindings + * @d: Interrupt domain involved in the translation + * @ctrlr: The device tree node for the device whose interrupt is translated + * @intspec: The interrupt specifier data from the device tree + * @intsize: The number of entries in @intspec + * @out_hwirq: Pointer to storage for the hardware interrupt number + * @out_type: Pointer to storage for the interrupt type * * Device Tree IRQ specifier translation function which works with either one * or two cell bindings where the cell values map directly to the hwirq numb= er @@ -1051,6 +1134,10 @@ EXPORT_SYMBOL_GPL(irq_domain_simple_ops); /** * irq_domain_translate_onecell() - Generic translate for direct one cell * bindings + * @d: Interrupt domain involved in the translation + * @fwspec: The firmware interrupt specifier to translate + * @out_hwirq: Pointer to storage for the hardware interrupt number + * @out_type: Pointer to storage for the interrupt type */ int irq_domain_translate_onecell(struct irq_domain *d, struct irq_fwspec *fwspec, @@ -1068,6 +1155,10 @@ EXPORT_SYMBOL_GPL(irq_domain_translate_onecell); /** * irq_domain_translate_twocell() - Generic translate for direct two cell * bindings + * @d: Interrupt domain involved in the translation + * @fwspec: The firmware interrupt specifier to translate + * @out_hwirq: Pointer to storage for the hardware interrupt number + * @out_type: Pointer to storage for the interrupt type * * Device Tree IRQ specifier translation function which works with two cell * bindings where the cell values map directly to the hwirq number @@ -1144,23 +1235,22 @@ struct irq_domain *irq_domain_create_hierarchy(struct= irq_domain *parent, const struct irq_domain_ops *ops, void *host_data) { - struct irq_domain *domain; - - if (size) - domain =3D __irq_domain_create(fwnode, size, size, 0, ops, host_data); - else - domain =3D __irq_domain_create(fwnode, 0, ~0, 0, ops, host_data); - - if (domain) { - if (parent) - domain->root =3D parent->root; - domain->parent =3D parent; - domain->flags |=3D flags; + struct irq_domain_info info =3D { + .fwnode =3D fwnode, + .size =3D size, + .hwirq_max =3D size, + .ops =3D ops, + .host_data =3D host_data, + .domain_flags =3D flags, + .parent =3D parent, + }; + struct irq_domain *d; =20 - __irq_domain_publish(domain); - } + if (!info.size) + info.hwirq_max =3D ~0U; =20 - return domain; + d =3D irq_domain_instantiate(&info); + return IS_ERR(d) ? NULL : d; } EXPORT_SYMBOL_GPL(irq_domain_create_hierarchy); =20 @@ -1932,13 +2022,26 @@ static void irq_domain_free_one_irq(struct irq_domain= *domain, unsigned int virq =20 static struct dentry *domain_dir; =20 -static void -irq_domain_debug_show_one(struct seq_file *m, struct irq_domain *d, int ind) +static const struct irq_bit_descr irqdomain_flags[] =3D { + BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_HIERARCHY), + BIT_MASK_DESCR(IRQ_DOMAIN_NAME_ALLOCATED), + BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_IPI_PER_CPU), + BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_IPI_SINGLE), + BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_MSI), + BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_ISOLATED_MSI), + BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_NO_MAP), + BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_MSI_PARENT), + BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_MSI_DEVICE), + BIT_MASK_DESCR(IRQ_DOMAIN_FLAG_NONCORE), +}; + +static void irq_domain_debug_show_one(struct seq_file *m, struct irq_domain = *d, int ind) { seq_printf(m, "%*sname: %s\n", ind, "", d->name); seq_printf(m, "%*ssize: %u\n", ind + 1, "", d->revmap_size); seq_printf(m, "%*smapped: %u\n", ind + 1, "", d->mapcount); seq_printf(m, "%*sflags: 0x%08x\n", ind +1 , "", d->flags); + irq_debug_show_bits(m, ind, d->flags, irqdomain_flags, ARRAY_SIZE(irqdomain= _flags)); if (d->ops && d->ops->debug_show) d->ops->debug_show(m, d, NULL, ind + 1); #ifdef CONFIG_IRQ_DOMAIN_HIERARCHY diff --git a/kernel/irq/proc.c b/kernel/irq/proc.c index 5c320c3f10a7..8cccdf40725a 100644 --- a/kernel/irq/proc.c +++ b/kernel/irq/proc.c @@ -461,10 +461,10 @@ int show_interrupts(struct seq_file *p, void *v) { static int prec; =20 - unsigned long flags, any_count =3D 0; int i =3D *(loff_t *) v, j; struct irqaction *action; struct irq_desc *desc; + unsigned long flags; =20 if (i > ACTUAL_NR_IRQS) return 0; @@ -488,10 +488,7 @@ int show_interrupts(struct seq_file *p, void *v) if (!desc || irq_settings_is_hidden(desc)) goto outsparse; =20 - if (desc->kstat_irqs) - any_count =3D kstat_irqs_desc(desc, cpu_online_mask); - - if ((!desc->action || irq_desc_is_chained(desc)) && !any_count) + if (!desc->action || irq_desc_is_chained(desc) || !desc->kstat_irqs) goto outsparse; =20 seq_printf(p, "%*d: ", prec, i); . Date: Mon, 22 Jul 2024 15:08:00 -0500 From: Dave Kleikamp To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, "jfs-discussion@lists.sourceforge.net" Subject: [GIT PULL] jfs updates for v6.11 The following changes since commit 6d69b6c12fce479fde7bc06f686212451688a102: Merge tag 'nfs-for-6.10-1' of git://git.linux-nfs.org/projects/trondmy/linux-nfs (2024-05-23 13:51:09 -0700) are available in the Git repository at: git@github.com:kleikamp/linux-shaggy.git tags/jfs-6.11 for you to fetch changes up to d0fa70aca54c8643248e89061da23752506ec0d4: jfs: don't walk off the end of ealist (2024-06-27 08:43:07 -0500) ---------------------------------------------------------------- Folio conversion from Matthew Wilcox and a few various fixes ---------------------------------------------------------------- Edward Adam Davis (1): jfs: fix null ptr deref in dtInsertEntry Jeongjun Park (1): jfs: Fix array-index-out-of-bounds in diFree Matthew Wilcox (Oracle) (14): jfs: Convert metapage_read_folio to use folio APIs jfs: Convert metapage_writepage to metapage_write_folio jfs: Convert __get_metapage to use a folio jfs: Convert insert_metapage() to take a folio jfs; Convert release_metapage to use a folio jfs: Convert drop_metapage and remove_metapage to take a folio jfs: Convert dec_io to take a folio jfs; Convert __invalidate_metapages to use a folio jfs: Convert page_to_mp to folio_to_mp jfs: Convert inc_io to take a folio jfs: Convert force_metapage to use a folio jfs: Change metapage->page to metapage->folio fs: Remove i_blocks_per_page jfs: Remove use of folio error flag Pei Li (1): jfs: Fix shift-out-of-bounds in dbDiscardAG lei lu (1): jfs: don't walk off the end of ealist fs/jfs/jfs_dmap.c | 2 + fs/jfs/jfs_dtree.c | 2 + fs/jfs/jfs_imap.c | 5 +- fs/jfs/jfs_logmgr.c | 2 +- fs/jfs/jfs_metapage.c | 316 ++++++++++++++++++++++++------------------------ fs/jfs/jfs_metapage.h | 16 +-- fs/jfs/xattr.c | 23 +++- include/linux/pagemap.h | 6 - 8 files changed, 193 insertions(+), 179 deletions(-) . Date: Mon, 22 Jul 2024 23:10:06 +0200 From: Sebastian Reichel To: Linus Torvalds Cc: linux-kernel@vger.kernel.org Subject: [GIT PULL] hsi changes for hsi-6.11 --2uwjop5b73lktmyw Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi Linus, The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi.git tags/hsi-for-6.11 for you to fetch changes up to f02cfe6950479b04fb75cf8424a852af7c50d3ad: HSI: ssi_protocol: Remove unused linux/gpio.h (2024-05-27 12:19:06 +0200) ---------------------------------------------------------------- HSI changes for the 6.11 series * drop unused gpio.h header from SSI McSAAB protocol driver ---------------------------------------------------------------- Andy Shevchenko (1): HSI: ssi_protocol: Remove unused linux/gpio.h drivers/hsi/clients/ssi_protocol.c | 1 - 1 file changed, 1 deletion(-) --2uwjop5b73lktmyw Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE72YNB0Y/i3JqeVQT2O7X88g7+poFAmaeyqgACgkQ2O7X88g7 +ppBrA/+MI62aVIeLizoc+TnM3MeH+5tcOFdOY7YS0dU+dXNiIOeKQfgSgGl0kOu eVI6PK2DcMQcngqMXlLOaINvlclEKBx3//cTZX3Ic8nwa8Rpfgf48dF+iT4JNv0g Sb2tF2m01LDeKCMrUjTExnz0lO7vXW0FcX4mSGdZ3uifYoqurXzT7YWhsoiDWgsn JVDdkIZyRB4Cm+KCmtiYacjedE4C8wvKyabD+ZsZS1GWTG8NN7l3A5iVn2Dz1Oky DtCe0Bxrec4nj/JvwLZN35Ly6YDyWe/JbXaTki6d7FTIzADw9ZfYxi3W+o61Ve2w gBzF3hkgWzus6mwY4jkyTb8gSPzYYEUTjv9ygywxTQyMvyDko8vi058os7dquxN3 KuEG5puKWGpJr0yrY+xvq1kny+V5zb9GcER9XFnRFYC9euLJqBhzVxE0fYj6Kxbp BxsZYR40xIIS2DEmQlk40/XOMF+Zl3+Lt7D/4vdE08OKYmab2g86RcNAycJR/E3N iS+AzQJPFxZ4c32sRof/8Oi+7cG1E2JLg7U4dOa9sWsY3iGvyNTOy9A1ZrhE/rqt mb4hphM6sEhkYkHEKmCwRpdmiANbF2uJnY12qSJJJrrdn+ZfXgR38itZHub45h+x Rx7pY1oiQEA7saL+A2iVtGpB+oOnwBYiHCz16E1Tetqq8RUYGFk= =Dzgr -----END PGP SIGNATURE----- --2uwjop5b73lktmyw-- . Date: Mon, 22 Jul 2024 23:10:23 +0200 From: Sebastian Reichel To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: [GIT PULL] power-supply changes for 6.11 --ip5bv667r5wohcbv Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi Linus, This time Stephen Rothwell noticed one merge conflict with the LED tree. The discussion around that can be found here: https://lore.kernel.org/all/20240709133420.55645c59@canb.auug.org.au/ All changes have been in -next for 3 weeks and are well-hung by now. Greetings, -- Sebastian The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-power-supply.gi= t tags/for-v6.11 for you to fetch changes up to be6299c6e55e971ffc060495708740a59aa0e45b: power: supply: sysfs: use power_supply_property_is_writeable() (2024-07-0= 4 12:30:49 +0200) ---------------------------------------------------------------- power supply and reset changes for the 6.11 series * power-supply core - new charging_orange_full_green RGB LED trigger - simplify and cleanup power-supply LED trigger code - expose power information via hwmon compatibility layer * new hardware support - enable battery support for Qualcomm Snapdragon X Elite - new battery driver for Maxim MAX17201/MAX17205 - new battery driver for Lenovo Yoga C630 laptop (custom EC) * cleanup 'struct i2c_device_id' initializations * misc. small battery driver cleanups and fixes ---------------------------------------------------------------- Abel Vesa (1): power: supply: qcom_battmgr: Enable battery support on x1e80100 Armin Wolf (1): power: supply: hwmon: Add support for power sensors Bjorn Andersson (1): dt-bindings: platform: Add Lenovo Yoga C630 EC Christophe JAILLET (6): power: supply: ab8500: Fix error handling when calling iio_read_chann= el_processed() power: supply: ab8500: Use iio_read_channel_processed_scale() power: supply: ab8500: Clean some error messages power: supply: ingenic: Fix some error handling paths in ingenic_batt= ery_get_property() power: supply: samsung-sdi-battery: Constify struct power_supply_vbat= _ri_table power: supply: samsung-sdi-battery: Constify struct power_supply_main= tenance_charge_table Dimitri Fedrau (2): dt-bindings: power: supply: add support for MAX17201/MAX17205 fuel ga= uge power: supply: add support for MAX1720x standalone fuel gauge Dmitry Baryshkov (3): platform: arm64: add Lenovo Yoga C630 WOS EC driver platform/arm64: build drivers even on non-ARM64 platforms power: supply: lenovo_yoga_c630_battery: add Lenovo C630 driver Dr. David Alan Gilbert (2): power: supply: bd99954: remove unused struct 'battery_data' power: supply: ab8500: remove unused struct 'inst_curr_result_list' Hans de Goede (6): leds: rgb: leds-ktd202x: Initialize mutex earlier leds: core: Add led_mc_set_brightness() function leds: trigger: Add led_mc_trigger_event() function power: supply: leds: Add power_supply_[un]register_led_trigger() power: supply: leds: Share trig pointer for online and charging_full power: supply: leds: Add activate() callback to triggers Jeff Johnson (1): power: reset: piix4: add missing MODULE_DESCRIPTION() macro Kate Hsuan (3): leds: rgb: leds-ktd202x: Get device properties through fwnode to supp= ort ACPI leds: rgb: leds-ktd202x: I2C ID tables for KTD2026 and 2027 power: supply: power-supply-leds: Add charging_orange_full_green trig= ger for RGB LED Sebastian Reichel (2): Merge tag 'ib-leds-platform-power-v6.11' Merge tag 'platform-drivers-x86-ib-lenovo-c630-v6.11-2' Thomas Wei=DFschuh (1): power: supply: sysfs: use power_supply_property_is_writeable() Uwe Kleine-K=F6nig (1): power: supply: Drop explicit initialization of struct i2c_device_id::= driver_data to 0 .../bindings/platform/lenovo,yoga-c630-ec.yaml | 83 ++++ .../bindings/power/supply/maxim,max17201.yaml | 58 +++ drivers/leds/led-class-multicolor.c | 1 + drivers/leds/led-core.c | 31 ++ drivers/leds/led-triggers.c | 20 + drivers/leds/rgb/Kconfig | 1 - drivers/leds/rgb/leds-ktd202x.c | 80 ++-- drivers/platform/Makefile | 2 +- drivers/platform/arm64/Kconfig | 14 + drivers/platform/arm64/Makefile | 1 + drivers/platform/arm64/lenovo-yoga-c630.c | 291 ++++++++++++ drivers/power/reset/piix4-poweroff.c | 1 + drivers/power/supply/Kconfig | 21 + drivers/power/supply/Makefile | 2 + drivers/power/supply/ab8500_chargalg.c | 2 +- drivers/power/supply/ab8500_charger.c | 52 ++- drivers/power/supply/ab8500_fg.c | 5 - drivers/power/supply/adp5061.c | 2 +- drivers/power/supply/bd99954-charger.c | 7 - drivers/power/supply/bq24735-charger.c | 2 +- drivers/power/supply/bq25890_charger.c | 10 +- drivers/power/supply/cw2015_battery.c | 2 +- drivers/power/supply/ingenic-battery.c | 10 +- drivers/power/supply/lenovo_yoga_c630_battery.c | 501 +++++++++++++++++= ++++ drivers/power/supply/lp8727_charger.c | 2 +- drivers/power/supply/ltc4162-l-charger.c | 4 +- drivers/power/supply/max14656_charger_detector.c | 2 +- drivers/power/supply/max1720x_battery.c | 337 ++++++++++++++ drivers/power/supply/max77976_charger.c | 4 +- drivers/power/supply/mm8013.c | 2 +- drivers/power/supply/power_supply_core.c | 4 +- drivers/power/supply/power_supply_hwmon.c | 25 + drivers/power/supply/power_supply_leds.c | 179 +++++--- drivers/power/supply/power_supply_sysfs.c | 3 +- drivers/power/supply/qcom_battmgr.c | 1 + drivers/power/supply/rt9455_charger.c | 4 +- drivers/power/supply/samsung-sdi-battery.c | 26 +- drivers/power/supply/sbs-charger.c | 2 +- drivers/power/supply/sbs-manager.c | 4 +- include/linux/leds.h | 26 ++ include/linux/platform_data/lenovo-yoga-c630.h | 44 ++ include/linux/power_supply.h | 19 +- 42 files changed, 1700 insertions(+), 187 deletions(-) create mode 100644 Documentation/devicetree/bindings/platform/lenovo,yoga-= c630-ec.yaml create mode 100644 Documentation/devicetree/bindings/power/supply/maxim,ma= x17201.yaml create mode 100644 drivers/platform/arm64/lenovo-yoga-c630.c create mode 100644 drivers/power/supply/lenovo_yoga_c630_battery.c create mode 100644 drivers/power/supply/max1720x_battery.c create mode 100644 include/linux/platform_data/lenovo-yoga-c630.h --ip5bv667r5wohcbv Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE72YNB0Y/i3JqeVQT2O7X88g7+poFAmaeyr4ACgkQ2O7X88g7 +pqPIhAAnrjfzh8GqtqP2GTcGyiALYX0GoJnmJx1yqxmtBlxe6wQwXK/X6Mtcd/z 28Jiz8UID1t0XsHL9LWBMg99CiT7oYBo0wncqE5Hx+/r8VlFIbU8aCUDgJ45y756 6tbfIhKjjqpiHX6Htc52Vs/OB1pXNRBeAxyYUi/yIzDw1HU4Peyh8nEraRM0MEpy rVl+wi6JYBE/5TlMaGuXHubsQM3PMQTZDdhyCqdHgfrCug8lGiYZZRbuddjXyImI ztJ0q/nhmhk3zG/Qp+EwB7d96qPYFpT7d6xUnDN/snmJ8EVwFKvjxsjtlFCXAaEB Bd7Moo1hkcOmDbcH4tee84OoECfcy4pEAGHoIcS0Ooern38pMK1Uvi31E1unPoKm agQbxSlIjTdd+h6BuN3E54S8UzCiQZkvwMuVQuwOIBKBds5y8/l/aipPnM5c8WA6 idTTL2HFtTIEbVWKSjPCggQCicuLR630sXaKA2adiMkxqmhtYU+wRGpe53MdpxDo //dwHetmidMvHM2d+/LgIvLFovUv9Zlr4CN8WN4BftV+raxs0dntXT1EWd/lO1eM ATBFSdgtoxOuhRxnIuNwrFlQ1dPf0MKslflqkJhx5SEL8LW+OvLMU/TDi13mFaPc e0CR/6fTrwixzSDVNPhIv5mumOTzv/81ROj0/V+CD14THv8LZFI= =yrtu -----END PGP SIGNATURE----- --ip5bv667r5wohcbv-- . Date: Tue, 23 Jul 2024 06:36:09 +0200 From: Dominik Brodowski To: torvalds@linux-foundation.org Cc: linux-kernel@vger.kernel.org Subject: [GIT PULL] PCMCIA improvements for 6.11-rc1 Hi Linus, a few PCMCIA changes since commit f2661062f16b2de5d7b6a5c42a9a5c96326b8454 Merge tag 'powerpc-6.8-3' of git://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux (2024-02-17 16:59:31 -0800) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/brodo/linux tags/pcmcia-6.11-rc1 for you to fetch changes up to 0630e3bc0e91b57288921df2927859b23184ca45: pcmcia: add missing MODULE_DESCRIPTION() macros (2024-06-30 15:51:34 +0200) ---------------------------------------------------------------- PCMCIA: improvements for v6.11-rc1 A number of tiny cleanups of the PCMCIA subsystem by Jeff Johnson, Jules Irenge, and Krzysztof Kozlowski. ---------------------------------------------------------------- Jeff Johnson (1): pcmcia: add missing MODULE_DESCRIPTION() macros Jules Irenge (1): pcmcia: Use resource_size function on resource object Krzysztof Kozlowski (1): pcmcia: bcm63xx: drop driver owner assignment drivers/pcmcia/bcm63xx_pcmcia.c | 1 - drivers/pcmcia/i82092.c | 1 + drivers/pcmcia/i82365.c | 1 + drivers/pcmcia/max1600.c | 1 + drivers/pcmcia/rsrc_mgr.c | 1 + drivers/pcmcia/yenta_socket.c | 7 ++++--- 6 files changed, 8 insertions(+), 4 deletions(-) Thanks, Dominik . Date: Tue, 23 Jul 2024 00:55:35 -0500 From: Jassi Brar To: Linus Torvalds Cc: Linux Kernel Mailing List , linux-arm-kernel Subject: [GIT PULL] Mailbox changes for v6.11 Hi Linus, The following changes since commit 256abd8e550ce977b728be79a74e1729438b4948: Linux 6.10-rc7 (2024-07-07 14:23:46 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jassibrar/mailbox.git tags/mailbox-v6.11 for you to fetch changes up to a8bd68e4329f9a0ad1b878733e0f80be6a971649: mailbox: mtk-cmdq: Move devm_mbox_controller_register() after devm_pm_runtime_enable() (2024-07-19 21:25:23 -0500) ---------------------------------------------------------------- broadcom: remove unused pdc_dma_map imx: fix TXDB_V2 channel race condition mediatek: cleanup and refactor driver add bindings for gce-props omap: fix mailbox interrupt sharing qcom: add bindings for SA8775p add CPUCP driver zynqmp: make polling period configurable ---------------------------------------------------------------- Andrew Davis (1): mailbox: omap: Fix mailbox interrupt sharing AngeloGioacchino Del Regno (3): mailbox: mtk-cmdq: Stop requiring name for GCE clock mailbox: mtk-cmdq: Move and partially refactor clocks probe mailbox: mtk-cmdq: Dynamically allocate clk_bulk_data structure Arnd Bergmann (1): mailbox: qcom-cpucp: fix 64BIT dependency Bartosz Golaszewski (1): dt-bindings: remoteproc: qcom,sa8775p-pas: Document the SA8775p ADSP, CDSP and GPDSP Ben Levinsky (1): mailbox: zynqmp-ipi: Make polling period configurable Dr. David Alan Gilbert (1): mailbox: bcm-pdc: remove unused struct 'pdc_dma_map' Jason-JH.Lin (2): dt-bindings: mailbox: Add mediatek,gce-props.yaml mailbox: mtk-cmdq: Move devm_mbox_controller_register() after devm_pm_runtime_enable() Jeff Johnson (1): mailbox: mtk-cmdq: add missing MODULE_DESCRIPTION() macro Peng Fan (1): mailbox: imx: fix TXDB_V2 channel race condition Sibi Sankar (2): dt-bindings: mailbox: qcom: Add CPUCP mailbox controller bindings mailbox: Add support for QTI CPUCP mailbox controller .../bindings/mailbox/mediatek,gce-props.yaml | 52 ++++++ .../bindings/mailbox/qcom,cpucp-mbox.yaml | 49 ++++++ .../bindings/remoteproc/qcom,sa8775p-pas.yaml | 160 ++++++++++++++++++ MAINTAINERS | 7 + drivers/mailbox/Kconfig | 8 + drivers/mailbox/Makefile | 2 + drivers/mailbox/bcm-pdc-mailbox.c | 4 - drivers/mailbox/imx-mailbox.c | 10 +- drivers/mailbox/mtk-cmdq-mailbox.c | 100 +++++++---- drivers/mailbox/omap-mailbox.c | 3 +- drivers/mailbox/qcom-cpucp-mbox.c | 187 +++++++++++++++++++++ drivers/mailbox/zynqmp-ipi-mailbox.c | 9 +- 12 files changed, 548 insertions(+), 43 deletions(-) create mode 100644 Documentation/devicetree/bindings/mailbox/mediatek,gce-props.yaml create mode 100644 Documentation/devicetree/bindings/mailbox/qcom,cpucp-mbox.yaml create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,sa8775p-pas.yaml create mode 100644 drivers/mailbox/qcom-cpucp-mbox.c . Date: Tue, 23 Jul 2024 13:19:36 +0200 From: Wolfram Sang To: Linus Torvalds Cc: linux-i2c@vger.kernel.org, linux-kernel@vger.kernel.org, Peter Rosin , Bartosz Golaszewski , Andi Shyti Subject: [PULL REQUEST] i2c-for-6.11-rc1-second-batch --qz7dd/UTaslIo8U4 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable The following changes since commit 8e5c0abfa02d85b9cd2419567ad2d73ed8fe4b74: Merge tag 'input-for-v6.11-rc0' of git://git.kernel.org/pub/scm/linux/ker= nel/git/dtor/input (2024-07-19 16:51:39 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux.git tags/i2c-for-= 6.11-rc1-second-batch for you to fetch changes up to 385ac870bdd531348de123d6790626ccd7827f69: i2c: header: improve kdoc for i2c_algorithm (2024-07-20 15:45:27 +0200) ---------------------------------------------------------------- I2C for 6.11-rc1 second batch The I2C core has two header documentation updates to be applied as the dependecies are in now. The I2C host drivers add some patches which nearly fell through the cracks, namely: Added descriptions in the DTS for the Qualcomm SM8650 and SM8550 Camera Control Interface (CCI). Added support for the "settle-time-us" property, which allows the gpio-mux device to switch from one bus to another with a configurable delay. The time can be set in the DTS. The latest change also includes file sorting. Fixed slot numbering in the SMBus framework to prevent failures when more than 8 slots are occupied. It now enforces a a maximum of 8 slots to be used. This ensures that the Intel PIIX4 device can register the SPDs correctly without failure, even if other slots are populated but not used. ---------------------------------------------------------------- Bastien Curutchet (3): dt-bindings: i2c: mux-gpio: Add 'settle-time-us' property i2c: mux: gpio: Re-order #include to match alphabetic order i2c: mux: gpio: Add support for the 'settle-time-us' property Thomas Wei=C3=9Fschuh (2): i2c: smbus: remove i801 assumptions from SPD probing i2c: piix4: Register SPDs Vladimir Zapolskiy (2): dt-bindings: i2c: qcom-cci: Document sm8550 compatible dt-bindings: i2c: qcom-cci: Document sm8650 compatible Wolfram Sang (3): Merge tag 'i2c-host-6.11-part-2' of git://git.kernel.org/pub/scm/linu= x/kernel/git/andi.shyti/linux into i2c/for-mergewindow i2c: header: remove unneeded stuff regarding i2c_algorithm i2c: header: improve kdoc for i2c_algorithm with much appreciated quality assurance from ---------------------------------------------------------------- Andi Shyti (3): (Rev.) i2c: mux: gpio: Add support for the 'settle-time-us' property (Rev.) i2c: mux: gpio: Re-order #include to match alphabetic order (Rev.) dt-bindings: i2c: mux-gpio: Add 'settle-time-us' property Guenter Roeck (2): (Rev.) i2c: piix4: Register SPDs (Test) i2c: piix4: Register SPDs Heiner Kallweit (1): (Rev.) i2c: smbus: remove i801 assumptions from SPD probing Krzysztof Kozlowski (3): (Rev.) dt-bindings: i2c: mux-gpio: Add 'settle-time-us' property (Rev.) dt-bindings: i2c: qcom-cci: Document sm8650 compatible (Rev.) dt-bindings: i2c: qcom-cci: Document sm8550 compatible .../devicetree/bindings/i2c/i2c-mux-gpio.yaml | 3 +++ .../devicetree/bindings/i2c/qcom,i2c-cci.yaml | 20 +++++++++++++++++= +++ drivers/i2c/busses/Kconfig | 1 + drivers/i2c/busses/i2c-piix4.c | 9 +++++++++ drivers/i2c/i2c-smbus.c | 15 ++++----------- drivers/i2c/muxes/i2c-mux-gpio.c | 14 ++++++++++---- include/linux/i2c.h | 21 +++++++----------= ---- include/linux/platform_data/i2c-mux-gpio.h | 2 ++ 8 files changed, 56 insertions(+), 29 deletions(-) --qz7dd/UTaslIo8U4 Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEOZGx6rniZ1Gk92RdFA3kzBSgKbYFAmafkcgACgkQFA3kzBSg KbZa3w//RFl0P8gWFR3hdS6fbKK0aVnhjQT3fsM44qD2PqTAaYHWAq/0iHRLyXtb GJnEGOU1BEgPwxGlnnleeUe2odHEQPxwFDEhmCedaylFe94FaDv3x5V/G+FmWjCC 7UhANR6X/1Ff+iuj1kPh2IxzsDTmx0FMX064QykxW2SxAZH76PWjFIqS+XvpBu32 pb0LkwNms6NbmVDTzlLiQc1RHok9D2nKHYJsXQo8+FqcikvDNgCiyXJndusAgVJY n5F0wX7/r6ZX2eOzxxlnapVONZGQJWRkat7YiD2qSVA0Xvri3rTYisjtVGu6t7EI /9PRrJsin18Z78WPuFQKFLwMGaNqMWoW1sMgjG+bU3bgqfILSyCat/PsoGZs7UtQ Hnfh19WSMOXScjMSL988WYXBjydMtESUtnR0tPEF2xQwIb1TTwS3HugSe+0Un+bT PoIXWWAW3HGE3ZZLh0x019ylSnf8SRr/qd1JphWqOCwaSlG6g1sdKp6v9mgEHE4N j6B1wekVrWuO9etU7GcNXCpwLxqaNtSMkqNeqYFsiKLvOcBWbgS5skxwejbkdwRm yLMvxmuptVgfZ+4PYUGaaRJ9z4P6/sst5TIRXaRwIENovYT3xs8x3lKOGKgSaEiE Xu6wUaM9qHuaQhgbb/ROT1d4kB1h0xTGzNEU213/QEvuhvOg+D8= =qCWM -----END PGP SIGNATURE----- --qz7dd/UTaslIo8U4-- . Date: Tue, 23 Jul 2024 16:38:18 +0200 From: Petr Mladek To: Linus Torvalds Cc: Sergey Senozhatsky , Steven Rostedt , John Ogness , Andy Shevchenko , Rasmus Villemoes , Sebastian Andrzej Siewior , Thomas Gleixner , Jan Kara , Peter Zijlstra , linux-kernel@vger.kernel.org Subject: [GIT PULL] printk for 6.11 Hi Linus, please pull the latest printk changes from git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git tags/printk-for-6.11 =========================================== Next preparation step for introducing printk kthreads. This part wires up flushing consoles via con->write_atomic() callback. The write_atomic() callback can be used for flushing nbcon consoles in any context. It is needed when the console could not be reliably flushed using the printk kthread. Namely, it is used: - During the early boot, from the legacy loop in console_unlock(). It allows to see the messages before processes (kthreads) could get started. Note that it must be used as long as there is a boot console registered. The console_lock() serializes accesses to the same HW port between the early and normal console driver. - In an emergency section, directly from nbcon_cpu_emergency_exit() or nbcon_cpu_emergency_flush(). It allows to see the messages when the system is in an unexpected state and might not be able to continue properly. The messages are flushed at the end of the emergency section to allow storing the full log (backtrace) first. It helps to see it even when other CPUs add messages in parallel. The flush() API is used to explicitly flush parts of longer logs which might not fit into the buffer or might cause a softlockup. The emergency section is used for WARN(), Oops, RCU stall, and lockdep reports. - In panic(), directly from printk() on the panic-CPU. Note that other CPUs are not allowed to add new messages at this point. There is also a new uart_port_lock() API in serial_core.h. It allows to take port->lock and also acquire the nbcon console context when the particular port gets registered as a console. The port->lock serializes code for non-printing activities, for example, for writing or setting the port speed. The nbcon context allows to serialize the access in emergency or panic situations where the classic spin lock (port->lock) could cause a deadlock. Note that the nbcon context allows a safe takeover in the middle of a printed message. IMPORTANT: The changes do not affect the behavior of legacy consoles, except for two situations: - Legacy consoles are not longer flushed directly from printk() in emergency sections. The flush is done on exit from the emergency section or by nbcon_cpu_emergency_flush(). The motivation is the same as for nbcon consoles. - Legacy consoles are not longer flushed directly from printk() in panic() when crash dump is created and a nbcon console is registered. They could create a deadlock in compare with nbcon consoles. ---------------------------------------------------------------- Jeff Johnson (1): vsprintf: add missing MODULE_DESCRIPTION() macro John Ogness (25): printk: Add notation to console_srcu locking printk: nbcon: Remove return value for write_atomic() printk: nbcon: Add detailed doc for write_atomic() printk: nbcon: Add callbacks to synchronize with driver printk: nbcon: Use driver synchronization while (un)registering serial: core: Provide low-level functions to lock port serial: core: Introduce wrapper to set @uart_port->cons console: Improve console_srcu_read_flags() comments nbcon: Add API to acquire context for non-printing operations serial: core: Implement processing in port->lock wrapper printk: nbcon: Do not rely on proxy headers printk: Make console_is_usable() available to nbcon printk: Let console_is_usable() handle nbcon printk: Add @flags argument for console_is_usable() printk: nbcon: Add helper to assign priority based on CPU state printk: Track registered boot consoles printk: nbcon: Use nbcon consoles in console_flush_all() printk: nbcon: Add unsafe flushing on panic printk: Avoid console_lock dance if no legacy or boot consoles printk: Track nbcon consoles printk: Coordinate direct printing in panic panic: Mark emergency section in oops rcu: Mark emergency sections in rcu stalls lockdep: Mark emergency sections in lockdep splats printk: nbcon: do not require migration disabled for nbcon_get_cpu_emergency_nesting() Petr Mladek (2): printk: Properly deal with nbcon consoles on seq init Merge branch 'rework/write-atomic' into for-linus Sebastian Andrzej Siewior (1): printk: Check printk_deferred_enter()/_exit() usage Sreenath Vijayan (1): printk: Rename console_replay_all() and update context Thomas Gleixner (3): printk: nbcon: Provide function to flush using write_atomic() printk: nbcon: Implement emergency sections panic: Mark emergency section in warn drivers/tty/serial/8250/8250_core.c | 6 +- drivers/tty/serial/amba-pl011.c | 2 +- drivers/tty/serial/serial_core.c | 16 +- drivers/tty/sysrq.c | 2 +- include/linux/console.h | 112 ++++++-- include/linux/printk.h | 37 ++- include/linux/serial_core.h | 117 +++++++- kernel/locking/lockdep.c | 84 +++++- kernel/panic.c | 9 + kernel/printk/internal.h | 73 ++++- kernel/printk/nbcon.c | 513 ++++++++++++++++++++++++++++++++++-- kernel/printk/printk.c | 313 ++++++++++++++++------ kernel/printk/printk_ringbuffer.h | 2 + kernel/printk/printk_safe.c | 23 +- kernel/rcu/tree_exp.h | 9 + kernel/rcu/tree_stall.h | 11 + lib/test_printf.c | 1 + lib/test_scanf.c | 1 + 18 files changed, 1194 insertions(+), 137 deletions(-) . Date: Tue, 23 Jul 2024 17:46:20 +0200 From: Petr Mladek To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, live-patching@vger.kernel.org Subject: [GIT PULL] livepatching for 6.11 Hi Linus, please pull the latest changes for the kernel livepatching from git://git.kernel.org/pub/scm/linux/kernel/git/livepatching/livepatching tags/livepatching-for-6.11 ============================================ - Show also patch->replace flag in sysfs. - Add or improve few selftests. ---------------------------------------------------------------- Marcos Paulo de Souza (1): selftests: livepatch: Test atomic replace against multiple modules Petr Mladek (1): Merge branch 'for-6.11/sysfs-patch-replace' into for-linus Ryan Sullivan (1): selftests/livepatch: define max test-syscall processes Yafang Shao (3): livepatch: Add "replace" sysfs attribute selftests/livepatch: Add selftests for "replace" sysfs attribute livepatch: Replace snprintf() with sysfs_emit() Documentation/ABI/testing/sysfs-kernel-livepatch | 8 ++ kernel/livepatch/core.c | 17 ++- .../testing/selftests/livepatch/test-livepatch.sh | 138 +++++++++++++-------- tools/testing/selftests/livepatch/test-syscall.sh | 5 +- tools/testing/selftests/livepatch/test-sysfs.sh | 48 +++++++ 5 files changed, 163 insertions(+), 53 deletions(-) . Date: Tue, 23 Jul 2024 10:14:01 -0700 From: Luis Chamberlain To: Linus Torvalds , linux-modules@vger.kernel.org Cc: patches@lists.linux.dev, linux-kernel@vger.kernel.org, jtornosm@redhat.com, lucas.demarchi@intel.com, mcgrof@kernel.org Subject: [GIT PULL] Modules changes for v6.11-rc1 The following changes since commit 6ba59ff4227927d3a8530fc2973b80e94b54d58f: Linux 6.10-rc4 (2024-06-16 13:40:16 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux.git/ tags/modules-6.11-rc1 for you to fetch changes up to 61842868de13aa7fd7391c626e889f4d6f1450bf: module: create weak dependecies (2024-06-30 18:57:20 -0700) ---------------------------------------------------------------- Modules changes for v6.11-rc1 This is a super boring development cycle this time around for modules, there is only one patch in this pull request. The patch deals with a corner case set of dependencies which is not resolved today to ensure users get the modules they need on initramfs. Currently only one modules is known to exist which needs this, however this can grow to capture other corner cases likely escaped and not reported before. The kernel change is just a section update, the real work is done and merged already on upstream kmod. This has been on linux-next for 3 weeks now. ---------------------------------------------------------------- Jose Ignacio Tornos Martinez (1): module: create weak dependecies include/linux/module.h | 6 ++++++ 1 file changed, 6 insertions(+) . Date: Tue, 23 Jul 2024 10:20:47 -0700 From: Bjorn Andersson To: Linus Torvalds Cc: linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, Richard Maina Subject: [GIT PULL] hwspinlock updates for v6.11 The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux.git tags/hwlock-v6.11 for you to fetch changes up to 718a7ad700b1ea86ae5a3ee636a275f98ba8ef86: Merge branch '20240529-hwspinlock-bust-v3-2-c8b924ffa5a2@quicinc.com' into hwspinlock-next (2024-05-29 12:52:37 -0700) ---------------------------------------------------------------- hwspinlock updates for v6.11 This introduces a mechanism in the hardware spinlock framework, and the Qualcomm TCSR mutex driver, for allowing clients to bust locks held by a remote processor in the event that this enters a faulty state while holding the shared lock. ---------------------------------------------------------------- Bjorn Andersson (1): Merge branch '20240529-hwspinlock-bust-v3-2-c8b924ffa5a2@quicinc.com' into hwspinlock-next Richard Maina (2): hwspinlock: Introduce hwspin_lock_bust() hwspinlock: qcom: implement bust operation Documentation/locking/hwspinlock.rst | 11 +++++++++++ drivers/hwspinlock/hwspinlock_core.c | 28 ++++++++++++++++++++++++++++ drivers/hwspinlock/hwspinlock_internal.h | 3 +++ drivers/hwspinlock/qcom_hwspinlock.c | 25 +++++++++++++++++++++++++ include/linux/hwspinlock.h | 6 ++++++ 5 files changed, 73 insertions(+) . Date: Tue, 23 Jul 2024 11:30:41 -0700 From: Bjorn Andersson To: Linus Torvalds Cc: linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, Dmitry Baryshkov , Andrew Davis , Richard Maina , Aleksandr Mishin , AngeloGioacchino Del Regno , Chris Lew , Frank Li , Garrett Giordano , Hari Nagalla , Jason Chen , =?UTF-8?q?N=C3=ADcolas=20F=20=2E=20R=20=2E=20A=20=2E=20Prado?= , Richard Genoud , Tanmay Shah Subject: [GIT PULL] remoteproc updates for v6.11 The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux.git tags/rproc-v6.11 for you to fetch changes up to 19cb6058620620e68f1a9aed99393be5c3629db4: remoteproc: mediatek: Increase MT8188/MT8195 SCP core0 DRAM size (2024-07-08 09:57:16 -0600) ---------------------------------------------------------------- remoteproc updates for v6.11 The maximum amount of DDR memory used by the Mediatek MT8188/MT8195 SCP is increased, to handle new use cases. Handling of optional L1TCM memory is made actually optional. An optimization is introduced to only clear the unused portion of IPI shared buffers, rather than the entire buffer before writing the message. Detection for IPC-only mode in the TI K3 DSP remoteproc driver is corrected. The loglevel of a debug print in the same is lowered from error. Support for attaching to an running remote processor is added to the Xilinx R5F. An in-kernel implementation of the Qualcomm "protected domain mapper" (aka service registry) service is introduced, to remove the dependency on a userspace implementation to detect when the battery monitor and USB Type-C port manager becomes available. This is then integrated with the Qualcomm remoteproc driver. The Qualcomm PAS remoteproc driver gains support for attempting to bust hwspinlocks held by the remote processor when it crashed/stopped. The TI OMAP remoteproc driver is transitioned to use devres helpers for various forms of allocations. Parsing of memory-regions in the i.MX remoteproc driver is improved to avoid a NULL pointer dereference if the phandle reference is empty. of_node reference counting is corrected in the same. ---------------------------------------------------------------- Aleksandr Mishin (2): remoteproc: imx_rproc: Skip over memory region when node value is NULL remoteproc: imx_rproc: Fix refcount mistake in imx_rproc_addr_init Andrew Davis (3): remoteproc: omap: Use devm_rproc_alloc() helper remoteproc: omap: Use devm action to release reserved memory remoteproc: omap: Use devm_rproc_add() helper AngeloGioacchino Del Regno (1): remoteproc: mediatek: Zero out only remaining bytes of IPI buffer Bjorn Andersson (2): Merge branch '20240529-hwspinlock-bust-v3-2-c8b924ffa5a2@quicinc.com' into rproc-next Merge branch '20240622-qcom-pd-mapper-v9-0-a84ee3591c8e@linaro.org' of https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux into rproc-next Chris Lew (1): soc: qcom: smem: Add qcom_smem_bust_hwspin_lock_by_host() Dmitry Baryshkov (6): soc: qcom: pdr: protect locator_addr with the main mutex soc: qcom: pdr: fix parsing of domains lists soc: qcom: pdr: extract PDR message marshalling data soc: qcom: add pd-mapper implementation remoteproc: qcom: enable in-kernel PD mapper remoteproc: qcom: select AUXILIARY_BUS Frank Li (1): dt-bindings: remoteproc: imx_rproc: Add minItems for power-domain Garrett Giordano (1): remoteproc: k3-dsp: Fix log levels where appropriate Hari Nagalla (1): dt-bindings: remoteproc: k3-dsp: Correct optional sram properties for AM62A SoCs Jason Chen (1): remoteproc: mediatek: Increase MT8188/MT8195 SCP core0 DRAM size Nícolas F. R. A. Prado (1): remoteproc: mediatek: Don't attempt to remap l1tcm memory if missing Richard Genoud (1): remoteproc: k3-r5: Fix IPC-only mode detection Richard Maina (3): hwspinlock: Introduce hwspin_lock_bust() hwspinlock: qcom: implement bust operation remoteproc: qcom_q6v5_pas: Add hwspinlock bust on stop Tanmay Shah (1): remoteproc: xlnx: Add attach detach support .../bindings/remoteproc/fsl,imx-rproc.yaml | 15 + .../bindings/remoteproc/ti,k3-dsp-rproc.yaml | 89 +-- Documentation/locking/hwspinlock.rst | 11 + drivers/hwspinlock/hwspinlock_core.c | 28 + drivers/hwspinlock/hwspinlock_internal.h | 3 + drivers/hwspinlock/qcom_hwspinlock.c | 25 + drivers/remoteproc/Kconfig | 1 + drivers/remoteproc/imx_rproc.c | 10 +- drivers/remoteproc/mtk_scp.c | 23 +- drivers/remoteproc/omap_remoteproc.c | 46 +- drivers/remoteproc/qcom_common.c | 87 +++ drivers/remoteproc/qcom_common.h | 10 + drivers/remoteproc/qcom_q6v5_adsp.c | 3 + drivers/remoteproc/qcom_q6v5_mss.c | 3 + drivers/remoteproc/qcom_q6v5_pas.c | 14 + drivers/remoteproc/qcom_q6v5_wcss.c | 3 + drivers/remoteproc/ti_k3_dsp_remoteproc.c | 2 +- drivers/remoteproc/ti_k3_r5_remoteproc.c | 13 +- drivers/remoteproc/xlnx_r5_remoteproc.c | 151 +++++ drivers/soc/qcom/Kconfig | 15 + drivers/soc/qcom/Makefile | 2 + drivers/soc/qcom/pdr_interface.c | 8 +- drivers/soc/qcom/pdr_internal.h | 318 +--------- drivers/soc/qcom/qcom_pd_mapper.c | 677 +++++++++++++++++++++ drivers/soc/qcom/qcom_pdr_msg.c | 353 +++++++++++ drivers/soc/qcom/smem.c | 26 + include/linux/hwspinlock.h | 6 + include/linux/soc/qcom/smem.h | 2 + 28 files changed, 1562 insertions(+), 382 deletions(-) create mode 100644 drivers/soc/qcom/qcom_pd_mapper.c create mode 100644 drivers/soc/qcom/qcom_pdr_msg.c . Date: Tue, 23 Jul 2024 12:17:49 -0700 From: Bjorn Andersson To: Linus Torvalds Cc: linux-remoteproc@vger.kernel.org, linux-kernel@vger.kernel.org, Arnaud Pouliquen , Gwenael Treuveur , Jeff Johnson Subject: [GIT PULL] rpmsg updates for v6.11 The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/remoteproc/linux.git tags/rpmsg-v6.11 for you to fetch changes up to 36862eab884d997e182aad9163cc6ca953614a68: rpmsg: char: add missing MODULE_DESCRIPTION() macro (2024-06-10 11:11:59 -0600) ---------------------------------------------------------------- rpmsg updates for v6.11 This corrects interrupt handling in the stm32 remoteproc driver when being attached to an already running remote processor. It fixes invalid kernel-doc and adds missing MODULE_DESCRIPTION() in the rpmsg char driver. ---------------------------------------------------------------- Arnaud Pouliquen (1): rpmsg: char: Fix rpmsg_eptdev structure documentation Gwenael Treuveur (1): remoteproc: stm32_rproc: Fix mailbox interrupts queuing Jeff Johnson (1): rpmsg: char: add missing MODULE_DESCRIPTION() macro drivers/remoteproc/stm32_rproc.c | 2 +- drivers/rpmsg/rpmsg_char.c | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) . Date: Wed, 24 Jul 2024 04:44:06 +0900 From: Masahiro Yamada To: Linus Torvalds Cc: Linux Kbuild mailing list , Linux Kernel Mailing List Subject: [GIT PULL] Kbuild updates for v6.11-rc1 Hello Linus, Please pull Kbuild updates for v6.11-rc1 You will get a merge conflict in scripts/Makefile.lib It is a conflict between the following two commits: 49636c5680b977d8a39263c6c8db6061c427346e 712aba5543b88996bc4682086471076fbf048927 The resolution exists in linux-next. Thank you. The following changes since commit 256abd8e550ce977b728be79a74e1729438b4948= : Linux 6.10-rc7 (2024-07-07 14:23:46 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/masahiroy/linux-kbuild.git tags/kbuild-v6.11 for you to fetch changes up to 13c239a2c088e91e453d26517b562c9a116444fa: kbuild: doc: gcc to CC change (2024-07-24 01:18:25 +0900) ---------------------------------------------------------------- Kbuild updates for v6.11 - Remove tristate choice support from Kconfig - Stop using the PROVIDE() directive in the linker script - Reduce the number of links for the combination of CONFIG_DEBUG_INFO_BTF and CONFIG_KALLSYMS - Enable the warning for symbol reference to .exit.* sections by default - Fix warnings in RPM package builds - Improve scripts/make_fit.py to generate a FIT image with separate base DTB and overlays - Improve choice value calculation in Kconfig - Fix conditional prompt behavior in choice in Kconfig - Remove support for the uncommon EMAIL environment variable in Debian package builds - Remove support for the uncommon "name " form for the DEBEMAIL environment variable - Raise the minimum supported GNU Make version to 4.0 - Remove stale code for the absolute kallsyms - Move header files commonly used for host programs to scripts/include/ - Introduce the pacman-pkg target to generate a pacman package used in Arch Linux - Clean up Kconfig ---------------------------------------------------------------- Chen-Yu Tsai (1): scripts/make_fit: Support decomposing DTBs HONG Yifan (1): kconfig: recursive checks drop file/lineno Ivan Davydov (1): kbuild: doc: gcc to CC change Jann Horn (1): kallsyms: get rid of code for absolute kallsyms Masahiro Yamada (55): initramfs: shorten cmd_initfs in usr/Makefile kconfig: qconf: remove initial call to conf_changed() kconfig: gconf: remove unnecessary forward declarations kconfig: gconf: move conf_changed() definition up kconfig: pass new conf_changed value to the callback kconfig: remove tristate choice support kconfig: refactor conf_set_all_new_symbols() to reduce indentation le= vel kconfig: refactor conf_write_defconfig() to reduce indentation level kbuild: refactor variables in scripts/link-vmlinux.sh kbuild: remove PROVIDE() for kallsyms symbols kbuild: merge temporary vmlinux for BTF and kallsyms kconfig: add -e and -u options to *conf-cfg.sh scripts kconfig: remove unneeded code in expr_compare_type() kconfig: add fallthrough comments to expr_compare_type() kconfig: introduce choice_set_value() helper kconfig: remember the current choice while parsing the choice block kbuild: move init/build-version to scripts/ kconfig: import list_move(_tail) and list_for_each_entry_reverse macr= os kconfig: refactor choice value calculation kconfig: remove sym_get_choice_value() kconfig: remove conf_unsaved in conf_read_simple() kconfig: change sym_choice_default() to take the choice menu kconfig: use menu_list_for_each_sym() in sym_choice_default() kconfig: remove expr_list_for_each_sym() macro kconfig: use sym_get_choice_menu() in sym_check_print_recursive() kconfig: use sym_get_choice_menu() in sym_check_choice_deps() kconfig: use sym_get_choice_menu() in sym_check_deps() kconfig: remove P_CHOICE property kconfig: remove E_LIST expression type treewide: change conditional prompt for choices to 'depends on' kconfig: fix conditional prompt behavior for choice kconfig: improve error message for dependency between choice members kconfig: improve error message for recursive dependency in choice kconfig: refactor error messages in sym_check_print_recursive() kbuild: deb-pkg: remove support for EMAIL environment variable kbuild: deb-pkg: remove support for "name " form for DEBEMAIL kbuild: package: add -e and -u options to some shell scripts kbuild: avoid build error when single DTB is turned into composite DT= B kbuild: raise the minimum GNU Make requirement to 4.0 modpost: remove self-definitions of R_ARM_* macros modpost: rename R_ARM_THM_CALL to R_ARM_THM_PC22 kbuild: deb-pkg: use default string when variable is unset or null kconfig: call expr_eliminate_yn() at least once in expr_eliminate_dup= s() kconfig: add const qualifiers to several function arguments kconfig: remove SYMBOL_CHOICEVAL flag kconfig: remove 'e1' and 'e2' macros from expression deduplication kbuild: clean up scripts/remove-stale-files Makefile: add comment to discourage tools/* addition for kernel build= s kbuild: move some helper headers from scripts/kconfig/ to scripts/inc= lude/ modpost: use generic macros for hash table implementation kallsyms: avoid repeated calculation of array size for markers kallsyms: use \t instead of a tab in printf() kallsyms: add more original symbol type/name in comment lines kallsyms: unify seq and start_pos fields of struct sym_entry kallsyms: change sym_entry::percpu_absolute to bool type Rafael Aquini (2): kbuild: rpm-pkg: make sure to have versioned 'Obsoletes' for kernel.s= pec kbuild: rpm-pkg: introduce a simple changelog section for kernel.spec Thomas Wei=C3=9Fschuh (1): kbuild: add script and target to generate pacman package Uwe Kleine-K=C3=B6nig (1): modpost: Enable section warning from *driver to .exit.text Zhang Bingwu (2): kbuild: Abort make on install failures kbuild: Create INSTALL_PATH directory if it does not exist .gitignore | 6 + Documentation/kbuild/kconfig-language.rst | 11 +- Documentation/kbuild/makefiles.rst | 6 +- Documentation/process/changes.rst | 4 +- MAINTAINERS | 8 + Makefile | 36 ++-- arch/arm/Kconfig | 6 +- arch/arm/boot/install.sh | 2 + arch/arm64/Kconfig | 3 +- arch/arm64/boot/install.sh | 2 + arch/m68k/install.sh | 2 + arch/mips/Kconfig | 6 +- arch/nios2/boot/install.sh | 2 + arch/parisc/install.sh | 2 + arch/powerpc/Kconfig | 3 +- arch/riscv/Kconfig | 3 +- arch/riscv/boot/install.sh | 2 + arch/s390/boot/install.sh | 2 + arch/sparc/boot/install.sh | 2 + arch/x86/boot/install.sh | 2 + fs/jffs2/Kconfig | 3 +- include/asm-generic/vmlinux.lds.h | 19 -- init/Kconfig | 18 -- init/Makefile | 2 +- kernel/kallsyms.c | 5 +- kernel/kallsyms_internal.h | 6 - kernel/vmcore_info.c | 4 - scripts/Kbuild.include | 2 +- scripts/Makefile.lib | 7 +- scripts/Makefile.package | 14 ++ {init =3D> scripts}/build-version | 0 scripts/{kconfig =3D> include}/array_size.h | 0 scripts/{kconfig =3D> include}/hashtable.h | 0 scripts/{kconfig =3D> include}/list.h | 53 ++++= ++ scripts/{kconfig =3D> include}/list_types.h | 0 scripts/install.sh | 4 + scripts/kallsyms.c | 125 ++++++------- scripts/kconfig/conf.c | 238 ++++++++++-------------- scripts/kconfig/confdata.c | 127 ++++--------- scripts/kconfig/expr.c | 128 ++++++------- scripts/kconfig/expr.h | 29 ++- scripts/kconfig/gconf-cfg.sh | 2 + scripts/kconfig/gconf.c | 26 ++- scripts/kconfig/internal.h | 2 +- scripts/kconfig/lkc.h | 34 ++-- scripts/kconfig/lkc_proto.h | 16 +- scripts/kconfig/mconf-cfg.sh | 2 + scripts/kconfig/mconf.c | 38 ++-- scripts/kconfig/menu.c | 111 ++---------- scripts/kconfig/mnconf-common.c | 2 +- scripts/kconfig/mnconf-common.h | 2 + scripts/kconfig/nconf-cfg.sh | 2 + scripts/kconfig/nconf.c | 38 ++-- scripts/kconfig/parser.y | 45 ++--- scripts/kconfig/preprocess.c | 4 +- scripts/kconfig/qconf-cfg.sh | 2 + scripts/kconfig/qconf.cc | 20 +-- scripts/kconfig/qconf.h | 2 +- scripts/kconfig/symbol.c | 369 ++++++++++++++++++++------------------ scripts/kconfig/tests/choice/Kconfig | 17 -- scripts/kconfig/tests/choice/__init__.py | 10 -- scripts/kconfig/tests/choice/alldef_expected_config | 3 - scripts/kconfig/tests/choice/allmod_expected_config | 3 - scripts/kconfig/tests/choice/allno_expected_config | 3 - scripts/kconfig/tests/choice/allyes_expected_config | 3 - scripts/kconfig/tests/choice/oldask0_expected_stdout | 4 - scripts/kconfig/tests/choice/oldask1_config | 1 - scripts/kconfig/tests/choice/oldask1_expected_stdout | 9 - scripts/kconfig/tests/choice_value_with_m_dep/Kconfig | 21 --- scripts/kconfig/tests/choice_value_with_m_dep/__init__.py | 16 -- scripts/kconfig/tests/choice_value_with_m_dep/config | 2 - scripts/kconfig/tests/choice_value_with_m_dep/expected_config | 3 - scripts/kconfig/tests/choice_value_with_m_dep/expected_stdout | 4 - scripts/kconfig/tests/err_recursive_dep/expected_stderr | 36 ++-- scripts/kconfig/tests/inter_choice/Kconfig | 25 --- scripts/kconfig/tests/inter_choice/__init__.py | 15 -- scripts/kconfig/tests/inter_choice/defconfig | 1 - scripts/kconfig/tests/inter_choice/expected_config | 4 - scripts/kconfig/util.c | 4 +- scripts/link-vmlinux.sh | 105 ++++++= ----- scripts/make_fit.py | 86 ++++++= --- scripts/mod/list.h | 213 ---------------------- scripts/mod/modpost.c | 67 +-----= - scripts/mod/modpost.h | 2 +- scripts/package/PKGBUILD | 108 ++++++= +++++ scripts/package/builddeb | 2 +- scripts/package/buildtar | 2 +- scripts/package/gen-diff-patch | 2 + scripts/package/install-extmod-build | 5 +- scripts/package/kernel.spec | 2 +- scripts/package/mkdebian | 44 ++--- scripts/package/mkspec | 27 ++- scripts/remove-stale-files | 18 -- tools/perf/tests/vmlinux-kallsyms.c | 1 - usr/Makefile | 4 +- 95 files changed, 1016 insertions(+), 1467 deletions(-) rename {init =3D> scripts}/build-version (100%) rename scripts/{kconfig =3D> include}/array_size.h (100%) rename scripts/{kconfig =3D> include}/hashtable.h (100%) rename scripts/{kconfig =3D> include}/list.h (81%) rename scripts/{kconfig =3D> include}/list_types.h (100%) delete mode 100644 scripts/kconfig/tests/choice/oldask1_config delete mode 100644 scripts/kconfig/tests/choice/oldask1_expected_stdout delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/Kconfig delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/__init__.= py delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/config delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/expected_config delete mode 100644 scripts/kconfig/tests/choice_value_with_m_dep/expected_stdout delete mode 100644 scripts/kconfig/tests/inter_choice/Kconfig delete mode 100644 scripts/kconfig/tests/inter_choice/__init__.py delete mode 100644 scripts/kconfig/tests/inter_choice/defconfig delete mode 100644 scripts/kconfig/tests/inter_choice/expected_config delete mode 100644 scripts/mod/list.h create mode 100644 scripts/package/PKGBUILD --=20 Best Regards Masahiro Yamada . Date: Tue, 23 Jul 2024 13:05:45 -0700 From: Kees Cook To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, Christian Brauner , David Gow , Kees Cook , SeongJae Park Subject: [GIT PULL] execve update for v6.11-rc1-fix1 Hi Linus, Please pull this execve fix for v6.11-rc1. This moves the exec and binfmt_elf tests out of your way and into the tests/ subdirectory, following the newly ratified KUnit naming conventions. :) Thanks! -Kees The following changes since commit 21f93108306026b8066db31c24a097192c8c36c7: exec: Avoid pathological argc, envc, and bprm->p values (2024-07-13 21:31:58 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git tags/execve-v6.11-rc1-fix1 for you to fetch changes up to b6f5ee4d53019443fb99dd23bc08680b1244ccfa: execve: Move KUnit tests to tests/ subdirectory (2024-07-22 18:25:47 -0700) ---------------------------------------------------------------- execve fix for v6.11-rc1 - Move KUnit tests to tests/ subdirectory ---------------------------------------------------------------- Kees Cook (1): execve: Move KUnit tests to tests/ subdirectory MAINTAINERS | 3 ++- fs/binfmt_elf.c | 2 +- fs/exec.c | 2 +- fs/{binfmt_elf_test.c => tests/binfmt_elf_kunit.c} | 0 fs/{exec_test.c => tests/exec_kunit.c} | 0 5 files changed, 4 insertions(+), 3 deletions(-) rename fs/{binfmt_elf_test.c => tests/binfmt_elf_kunit.c} (100%) rename fs/{exec_test.c => tests/exec_kunit.c} (100%) -- Kees Cook . Date: Tue, 23 Jul 2024 20:58:12 +0000 From: Jaegeuk Kim To: Linus Torvalds Cc: Linux F2FS Dev Mailing List , Linux Kernel Mailing List Subject: [GIT PULL] f2fs update for 6.11-rc1 Hi Linus, Could you please consider this pull request? Thanks, The following changes since commit 2ef5971ff345d3c000873725db555085e0131961: Merge tag 'vfs-6.10-rc4.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs (2024-06-11 12:04:21 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk/f2fs.git tags/f2fs-for-6.11-rc1 for you to fetch changes up to bed6b0317441d82c32506750ccd868d83850e6f4: f2fs: clean up addrs_per_{inode,block}() (2024-07-10 23:15:36 +0000) ---------------------------------------------------------------- f2fs update for 6.11-rc1 It's a pretty small update including mostly minor bug fixes in zoned storage along with the large section support. Enhancement: - add support for FS_IOC_GETFSSYSFSPATH - enable atgc dynamically if conditions are met - use new ioprio Macro to get ckpt thread ioprio level - remove unreachable lazytime mount option parsing Bug fix: - fix null reference error when checking end of zone - fix start segno of large section - fix to cover read extent cache access with lock - don't dirty inode for readonly filesystem - allocate a new section if curseg is not the first seg in its zone - only fragment segment in the same section - truncate preallocated blocks in f2fs_file_open() - fix to avoid use SSR allocate when do defragment - fix to force buffered IO on inline_data inode And, it includes some minor code clean-ups, and sanity checks. ---------------------------------------------------------------- Chao Yu (12): f2fs: fix to do sanity check on F2FS_INLINE_DATA flag in inode during GC f2fs: fix to do sanity check on blocks for inline_data inode f2fs: add support for FS_IOC_GETFSSYSFSPATH f2fs: fix to force buffered IO on inline_data inode f2fs: fix to don't dirty inode for readonly filesystem f2fs: fix return value of f2fs_convert_inline_inode() f2fs: fix to cover read extent cache access with lock f2fs: fix to truncate preallocated blocks in f2fs_file_open() f2fs: remove redundant sanity check in sanity_check_inode() f2fs: fix to update user block counts in block_operations() f2fs: clean up F2FS_I() f2fs: clean up addrs_per_{inode,block}() Daejun Park (1): f2fs: fix null reference error when checking end of zone Eric Sandeen (1): f2fs: remove unreachable lazytime mount option parsing Jaegeuk Kim (2): f2fs: clean up set REQ_RAHEAD given rac f2fs: assign CURSEG_ALL_DATA_ATGC if blkaddr is valid Sheng Yong (3): f2fs: alloc new section if curseg is not the first seg in its zone f2fs: fix start segno of large section f2fs: only fragment segment in the same section Sunmin Jeong (2): f2fs: use meta inode for GC of atomic file f2fs: use meta inode for GC of COW file Zhiguo Niu (5): f2fs: fix to remove redundant SBI_NEED_FSCK flag set f2fs: fix to avoid use SSR allocate when do defragment f2fs: use new ioprio Macro to get ckpt thread ioprio level f2fs: enable atgc dynamically if conditions are met f2fs: fix to use mnt_{want,drop}_write_file replace file_{start,end}_wrtie fs/f2fs/checkpoint.c | 11 ++-- fs/f2fs/compress.c | 2 +- fs/f2fs/data.c | 27 ++++++---- fs/f2fs/extent_cache.c | 48 +++++++---------- fs/f2fs/f2fs.h | 78 +++++++++++++++------------- fs/f2fs/file.c | 135 ++++++++++++++++++++++++++++++++++-------------- fs/f2fs/gc.c | 24 ++++++--- fs/f2fs/inline.c | 28 ++++++++-- fs/f2fs/inode.c | 84 ++++++++++++------------------ fs/f2fs/namei.c | 20 +++---- fs/f2fs/recovery.c | 11 ++-- fs/f2fs/segment.c | 54 +++++++++++++++---- fs/f2fs/segment.h | 3 +- fs/f2fs/super.c | 11 +--- fs/f2fs/sysfs.c | 12 ++--- include/linux/f2fs_fs.h | 7 ++- 16 files changed, 329 insertions(+), 226 deletions(-) . Date: Tue, 23 Jul 2024 16:04:36 -0700 From: Namhyung Kim To: Linus Torvalds Cc: Arnaldo Carvalho de Melo , Ian Rogers , Kan Liang , Peter Zijlstra , Ingo Molnar , LKML , linux-perf-users@vger.kernel.org Subject: [GIT PULL] perf-tools fixes for v6.11-rc1 Hi Linus, Please consider pulling the following changes in perf tools for v6.11. Thanks, Namhyung The following changes since commit 7a2fb5619cc1fb53cb8784154d5ef2bd99997436: perf trace: Fix iteration of syscall ids in syscalltbl->entries (2024-07-12 09:49:02 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/perf/perf-tools.git tags/perf-tools-fixes-for-v6.11-2024-07-23 for you to fetch changes up to 92717bc077892d1ce60fee07aee3a33f33909b85: perf dso: Fix build when libunwind is enabled (2024-07-17 13:17:57 -0700) ---------------------------------------------------------------- perf tools fixes for v6.11 Two fixes about building perf and other tools: * Fix breakage in tracing tools due to pkg-config for libtrace{event,fs} * Fix build of perf when libunwind is used Signed-off-by: Namhyung Kim ---------------------------------------------------------------- Guilherme Amadio (5): perf build: Warn if libtracefs is not found tools: Make pkg-config dependency checks usable by other tools tools/verification: Use pkg-config in lib_setup of Makefile.config tools/rtla: Use pkg-config in lib_setup of Makefile.config tools/latency: Use pkg-config in lib_setup of Makefile.config James Clark (1): perf dso: Fix build when libunwind is enabled tools/build/Makefile.feature | 18 ++++++++++++++++++ tools/perf/Makefile.config | 13 +++++-------- tools/perf/util/dso.c | 2 +- tools/perf/util/dso.h | 5 +++++ tools/perf/util/unwind-libunwind-local.c | 2 +- tools/tracing/latency/Makefile.config | 3 ++- tools/tracing/rtla/Makefile.config | 3 ++- tools/verification/rv/Makefile.config | 3 ++- 8 files changed, 36 insertions(+), 13 deletions(-) . Date: Tue, 23 Jul 2024 19:40:12 -0400 From: Gabriel Krisman Bertazi To: Linus Torvalds Cc: Ben Dooks , Jeff Johnson , linux-fsdevel , Linux Kernel Mailing List Subject: [GIT PULL] trivial unicode patches for 6.11 The following changes since commit 6ba59ff4227927d3a8530fc2973b80e94b54d58f: Linux 6.10-rc4 (2024-06-16 13:40:16 -0700) are available in the Git repository at: https://git.kernel.org/pub/scm/linux/kernel/git/krisman/unicode.git tags/unicode-next-6.11 for you to fetch changes up to 68318904a7758e11f16fa9d202a6df60f896e71a: unicode: add MODULE_DESCRIPTION() macros (2024-06-20 19:30:02 -0400) ---------------------------------------------------------------- Two small fixes to silent the compiler and static analyzers tools from Ben Dooks and Jeff Johnson. ---------------------------------------------------------------- Ben Dooks (1): unicode: make utf8 test count static Jeff Johnson (1): unicode: add MODULE_DESCRIPTION() macros fs/unicode/mkutf8data.c | 1 + fs/unicode/utf8-selftest.c | 5 +++-- fs/unicode/utf8data.c_shipped | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) -- Gabriel Krisman Bertazi . Date: Wed, 24 Jul 2024 13:15:49 +0530 From: Vinod Koul To: Linus Torvalds Cc: LKML Subject: [GIT PULL]: dmaengine updates for v6.11 --fRE79iUECku18urW Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hello Linus, Please pull to receive dmaengine updates for this cycle. A new dmaengine API with its user is the key feature of this request along with yaml conversion and updates to bunch of drivers. Please note that the tag dmaengine_topic_dma_vec was pulled into the iio tree so you might have recieved that or might receive it from iio people. The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/dmaengine.git tags/dm= aengine-6.11-rc1 for you to fetch changes up to b8ec9dba02a74797421c52b1226b23a4302362a6: dt-bindings: fsl-qdma: fix interrupts 'if' check logic (2024-07-10 15:42:= 40 +0530) ---------------------------------------------------------------- dmaengine updates for v6.11 New support: - New dmaengine_prep_peripheral_dma_vec() to support transfers using dma vectors and documentation and user in AXI dma - STMicro STM32 DMA3 support and new capabilities of cyclic dma Updates: - Yaml conversion for Freescale imx dma and qdma bindings, sprd sc9860 dma binding - Altera msgdma updates for descriptor management ---------------------------------------------------------------- Amelie Delaunay (11): dt-bindings: dma: New directory for STM32 DMA controllers bindings dmaengine: stm32: New directory for STM32 DMA controllers drivers MAINTAINERS: Add entry for STM32 DMA controllers drivers and document= ation dt-bindings: dma: Document STM32 DMA3 controller bindings dmaengine: Add STM32 DMA3 support dmaengine: stm32-dma3: add DMA_CYCLIC capability dmaengine: stm32-dma3: add DMA_MEMCPY capability dmaengine: stm32-dma3: add device_pause and device_resume ops dmaengine: stm32-dma3: improve residue granularity dmaengine: add channel device name to channel registration dmaengine: stm32-dma3: defer channel registration to specify channel = name Animesh Agarwal (1): dt-bindings: dma: fsl,imx-dma: Convert to dtschema Biju Das (1): dmaengine: sh: rz-dmac: Fix lockdep assert warning Dan Carpenter (1): dmaengine: qcom: gpi: clean up the IRQ disable/enable in gpi_reset_ch= an() Dr. David Alan Gilbert (2): dmaengine: moxart-dma: remove unused struct 'moxart_filter_data' dmaengine: qcom: gpi: remove unused struct 'reg_info' Frank Li (4): dmaengine: fsl-edma: request per-channel IRQ only when channel is all= ocated dmaengine: fsl-edma: remove redundant "idle" field from fsl_chan dt-bindings: fsl-qdma: Convert to yaml format dt-bindings: fsl-qdma: fix interrupts 'if' check logic Jeff Johnson (6): dmaengine: add missing MODULE_DESCRIPTION() macros dmaengine: qcom: add missing MODULE_DESCRIPTION() macros dmaengine: virt-dma: add missing MODULE_DESCRIPTION() macro dmaengine: ti: cppi41: add missing MODULE_DESCRIPTION() macro dmaengine: ti: add missing MODULE_DESCRIPTION() macros dmaengine: fsl-dpaa2-qdma: add missing MODULE_DESCRIPTION() macro Joy Zou (1): dmaengine: fsl-edma: change the memory access from local into remote = mode in i.MX 8QM Krzysztof Kozlowski (1): dmaengine: ti: k3-udma: fix module autoloading Lucas Stach (2): firmware: add nowarn variant of request_firmware_nowait() dmaengine: imx-sdma: don't print warning when firmware is absent Olivier Dautricourt (3): dmaengine: altera-msgdma: use irq variant of spin_lock/unlock while i= nvoking callbacks dmaengine: altera-msgdma: cleanup after completing all descriptors dmaengine: altera-msgdma: properly free descriptor in msgdma_free_des= criptor Paul Cercueil (3): dmaengine: Add API function dmaengine_prep_peripheral_dma_vec() dmaengine: dma-axi-dmac: Implement device_prep_peripheral_dma_vec Documentation: dmaengine: Document new dma_vec API Stanislav Jakubek (1): dt-bindings: dma: sprd,sc9860-dma: convert to YAML Vignesh Raghavendra (1): dmaengine: ti: k3-udma: Fix BCHAN count with UHC and HC channels Vinod Koul (1): Merge tag 'dmaengine_topic_dma_vec' into next .../devicetree/bindings/dma/fsl,imx-dma.yaml | 56 + .../devicetree/bindings/dma/fsl-imx-dma.txt | 50 - Documentation/devicetree/bindings/dma/fsl-qdma.txt | 58 - .../devicetree/bindings/dma/fsl-qdma.yaml | 132 ++ .../devicetree/bindings/dma/sprd,sc9860-dma.yaml | 92 + Documentation/devicetree/bindings/dma/sprd-dma.txt | 44 - .../bindings/dma/{ =3D> stm32}/st,stm32-dma.yaml | 4 +- .../bindings/dma/stm32/st,stm32-dma3.yaml | 135 ++ .../bindings/dma/{ =3D> stm32}/st,stm32-dmamux.yaml | 4 +- .../bindings/dma/{ =3D> stm32}/st,stm32-mdma.yaml | 4 +- .../devicetree/bindings/spi/st,stm32-spi.yaml | 2 +- Documentation/driver-api/dmaengine/client.rst | 9 + Documentation/driver-api/dmaengine/provider.rst | 10 + MAINTAINERS | 9 + drivers/base/firmware_loader/main.c | 106 +- drivers/dma/Kconfig | 34 +- drivers/dma/Makefile | 4 +- drivers/dma/altera-msgdma.c | 16 +- drivers/dma/dma-axi-dmac.c | 40 + drivers/dma/dmaengine.c | 16 +- drivers/dma/dmatest.c | 1 + drivers/dma/fsl-dpaa2-qdma/dpdmai.c | 1 + drivers/dma/fsl-edma-common.c | 24 +- drivers/dma/fsl-edma-common.h | 4 +- drivers/dma/fsl-edma-main.c | 34 +- drivers/dma/idxd/dma.c | 2 +- drivers/dma/idxd/init.c | 1 + drivers/dma/imx-sdma.c | 5 +- drivers/dma/ioat/init.c | 1 + drivers/dma/mcf-edma-main.c | 2 - drivers/dma/moxart-dma.c | 5 - drivers/dma/qcom/gpi.c | 11 +- drivers/dma/qcom/hidma.c | 1 + drivers/dma/qcom/hidma_mgmt.c | 1 + drivers/dma/sh/rz-dmac.c | 2 +- drivers/dma/stm32/Kconfig | 47 + drivers/dma/stm32/Makefile | 5 + drivers/dma/{ =3D> stm32}/stm32-dma.c | 2 +- drivers/dma/stm32/stm32-dma3.c | 1847 ++++++++++++++++= ++++ drivers/dma/{ =3D> stm32}/stm32-dmamux.c | 0 drivers/dma/{ =3D> stm32}/stm32-mdma.c | 2 +- drivers/dma/ti/cppi41.c | 1 + drivers/dma/ti/k3-psil.c | 1 + drivers/dma/ti/k3-udma-glue.c | 1 + drivers/dma/ti/k3-udma.c | 6 +- drivers/dma/ti/omap-dma.c | 1 + drivers/dma/virt-dma.c | 1 + include/linux/dmaengine.h | 36 +- include/linux/firmware.h | 12 + 49 files changed, 2592 insertions(+), 290 deletions(-) create mode 100644 Documentation/devicetree/bindings/dma/fsl,imx-dma.yaml delete mode 100644 Documentation/devicetree/bindings/dma/fsl-imx-dma.txt delete mode 100644 Documentation/devicetree/bindings/dma/fsl-qdma.txt create mode 100644 Documentation/devicetree/bindings/dma/fsl-qdma.yaml create mode 100644 Documentation/devicetree/bindings/dma/sprd,sc9860-dma.y= aml delete mode 100644 Documentation/devicetree/bindings/dma/sprd-dma.txt rename Documentation/devicetree/bindings/dma/{ =3D> stm32}/st,stm32-dma.ya= ml (97%) create mode 100644 Documentation/devicetree/bindings/dma/stm32/st,stm32-dm= a3.yaml rename Documentation/devicetree/bindings/dma/{ =3D> stm32}/st,stm32-dmamux= =2Eyaml (90%) rename Documentation/devicetree/bindings/dma/{ =3D> stm32}/st,stm32-mdma.y= aml (96%) create mode 100644 drivers/dma/stm32/Kconfig create mode 100644 drivers/dma/stm32/Makefile rename drivers/dma/{ =3D> stm32}/stm32-dma.c (99%) create mode 100644 drivers/dma/stm32/stm32-dma3.c rename drivers/dma/{ =3D> stm32}/stm32-dmamux.c (100%) rename drivers/dma/{ =3D> stm32}/stm32-mdma.c (99%) --=20 ~Vinod --fRE79iUECku18urW Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEE+vs47OPLdNbVcHzyfBQHDyUjg0cFAmagsS0ACgkQfBQHDyUj g0fgQhAAjRuTDIRV8uazVkPT7HeuWXNapu8CA7z8BnAHKD49YSfO3JD0C+vymrIE ly6a4G+4tssVa2xOFPzLuol1+umVI9xPqpoII4X3zQRgIxqUGEi7p/bQUC64EuLb gVWGJmd2RpE+jq6cy7DshR2ha2BVfuiz62kptb7lCjGZ/PrDkkWTFsozm+kH9u8f jrExdufi8CbSk4fRBPIv+W6FuoNhLLgcjkz1aBhPsrqvP1FKoOprouDpD8eu4A0I O8IOqe1uSTscGoDD0q2w1ojkr7ZHzQhanvIfDUgVTb9/p5cwUjGj9y1kaHHRzv3G NBr5jXyg9IfA3MjpBnM2stc/RpR1bDi09vyyf2OmJJW+qtYc+uHZ5ATjjUHRE60E 167sFob2S02AU58unN8p+oo1WOR0+rJcDkC3GumBecz8uaVUTLlhylLc4XlU4q8H HVDYwGnppUYDmzkt9tcD2OK6SoeqkuPbflk7946ergyZ8VRrL5OdgFA39P70I0Ah reeaOuMJKgKfJ6T1p85YqCp3uI5ab3jZKw8h7E7h1KOs7dLMmFHs48sfknGadke9 5DxTzSFnw+znR9941/2teC1UZcZ8gKRFj0er8FS9D+oEYziwslv7z6WEMlYxleGA CZH2mLpfZS2NzyvrESAw6k/AFn6PdHWbj/sXc7kGhJBu8gcNs+g= =5906 -----END PGP SIGNATURE----- --fRE79iUECku18urW-- . Date: Wed, 24 Jul 2024 13:17:57 +0530 From: Vinod Koul To: Linus Torvalds Cc: LKML Subject: [GIT PULL]: Generic phy updates for v6.11 --k1mDpk1/Cp1/jO8V Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hello again, Second request for generic phy subsystem feature bunch of new driver and device support and updates to few of the drivers The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/phy/linux-phy.git tags/phy-= for-6.11 for you to fetch changes up to 2a011c3c12e8de461fb1fdce85fa38d308c4eb8b: phy: airoha: Add dtime and Rx AEQ IO registers (2024-07-02 18:54:28 +0530) ---------------------------------------------------------------- phy-for-6.11 - New Support - Samsung Exynos gs101 drd combo phy - Qualcomm SC8180x USB uniphy, IPQ9574 QMP PCIe phy - Airoha EN7581 PCIe phy - Freescale i.MX8Q HSIO SerDes phy - Starfive jh7110 dphy tx - Updates - Resume support for j721e-wiz driver - Updates to Exynos usbdrd driver - Support for optional power domains in g12a usb2-phy driver - Debugfs support and updates to zynqmp driver ---------------------------------------------------------------- Andr=E9 Draszik (11): phy: exynos5-usbdrd: uniform order of register bit macros phy: exynos5-usbdrd: convert udelay() to fsleep() phy: exynos5-usbdrd: make phy_isol() take a bool for clarity phy: exynos5-usbdrd: fix definition of EXYNOS5_FSEL_26MHZ phy: exynos5-usbdrd: set ref clk freq in exynos850_usbdrd_utmi_init() dt-bindings: phy: samsung,usb3-drd-phy: add gs101 compatible phy: exynos5-usbdrd: support isolating HS and SS ports independently phy: exynos5-usbdrd: convert core clocks to clk_bulk phy: exynos5-usbdrd: convert (phy) register access clock to clk_bulk phy: exynos5-usbdrd: convert Vbus supplies to regulator_bulk phy: exynos5-usbdrd: support Exynos USBDRD 3.1 combo phy (HS & SS) Bjorn Andersson (2): dt-bindings: phy: qcom,sc8280xp-qmp-usb3-uni: Add sc8180x USB3 compat= ible phy: qcom-qmp-usb: Add sc8180x USB UNIPHY Changhuang Liang (1): phy: starfive: Correct the dphy configure process Cristian Ciocaltea (1): phy: phy-rockchip-samsung-hdptx: Select CONFIG_MFD_SYSCON Dmitry Baryshkov (2): phy: qcom: qmp-pcie: restore compatibility with existing DTs dt-bindings: phy: qcom,sc8280xp-qmp-pcie-phy: drop second output cloc= k name Dr. David Alan Gilbert (2): phy: starfive: remove unused struct 'regval' phy: miphy28lp: remove unused struct 'miphy_initval' Herman van Hazendonk (1): dt-bindings: phy: qcom,usb-hs-phy: Add compatible Jan Kiszka (1): phy: ti: am654-serdes: Remove duplicate define Jeff Johnson (1): phy: broadcom: add missing MODULE_DESCRIPTION() macros Josua Mayer (1): dt-bindings: phy: armada-cp110-utmi: add optional swap-dx-lanes prope= rty Liu Jing (1): phy: Fix the cacography in phy-exynos5250-usb2.c Lorenzo Bianconi (4): dt-bindings: phy: airoha: Add PCIe PHY controller phy: airoha: Add PCIe PHY driver for EN7581 SoC. dt-bindings: phy: airoha: Add dtime and Rx AEQ IO registers phy: airoha: Add dtime and Rx AEQ IO registers Ma Ke (1): phy: cadence-torrent: Check return value on register read Miaoqian Lin (1): phy: core: Fix documentation of of_phy_get Nathan Chancellor (1): phy: freescale: imx8qm-hsio: Include bitfield.h for FIELD_PREP Neil Armstrong (1): dt-bindings: phy: g12a-usb2-phy: add optional power-domains Richard Zhu (2): dt-bindings: phy: Add i.MX8Q HSIO SerDes PHY binding phy: freescale: imx8qm-hsio: Add i.MX8QM HSIO PHY driver support Sean Anderson (5): phy: zynqmp: Enable reference clock correctly phy: zynqmp: Store instance instead of type phy: zynqmp: Only wait for PLL lock "primary" instances phy: zynqmp: Take the phy mutex in xlate phy: zynqmp: Add debugfs support Shengyang Chen (2): dt-bindings: phy: Add starfive,jh7110-dphy-tx phy: starfive: Add mipi dphy tx support Shresth Prasad (1): dt-bindings: phy: rockchip-emmc-phy: Convert to dtschema Swapnil Jakhade (1): phy: cadence-torrent: Add SGMII + QSGMII multilink configuration for = 100MHz refclk Thomas Richard (8): phy: ti: phy-j721e-wiz: use dev_err_probe() instead of dev_err() phy: ti: phy-j721e-wiz: split wiz_clock_init() function phy: ti: phy-j721e-wiz: add resume support phy: cadence-torrent: extract calls to clk_get from cdns_torrent_clk phy: cadence-torrent: register resets even if the phy is already conf= igured phy: cadence-torrent: add already_configured to struct cdns_torrent_p= hy phy: cadence-torrent: remove noop_ops phy operations phy: cadence-torrent: add suspend and resume support Yijie Yang (1): dt-bindings: phy: qcom,qmp-usb: fix spelling error devi priya (4): dt-bindings: phy: qcom,ipq8074-qmp-pcie: Document the IPQ9574 QMP PCI= e PHYs phy: qcom-qmp: Add missing offsets for Qserdes PLL registers. phy: qcom-qmp: Add missing register definitions for PCS V5 phy: qcom-qmp-pcie: Add support for IPQ9574 g3x1 and g3x2 PCIEs .../bindings/phy/airoha,en7581-pcie-phy.yaml | 69 ++ .../bindings/phy/amlogic,g12a-usb2-phy.yaml | 3 + .../devicetree/bindings/phy/fsl,imx8qm-hsio.yaml | 164 +++ .../phy/marvell,armada-cp110-utmi-phy.yaml | 6 + .../bindings/phy/qcom,ipq8074-qmp-pcie-phy.yaml | 2 + .../bindings/phy/qcom,sc8280xp-qmp-pcie-phy.yaml | 7 +- .../phy/qcom,sc8280xp-qmp-usb3-uni-phy.yaml | 5 +- .../devicetree/bindings/phy/qcom,usb-hs-phy.yaml | 2 + .../bindings/phy/rockchip,rk3399-emmc-phy.yaml | 64 + .../devicetree/bindings/phy/rockchip-emmc-phy.txt | 43 - .../bindings/phy/samsung,usb3-drd-phy.yaml | 77 +- .../bindings/phy/starfive,jh7110-dphy-tx.yaml | 68 ++ .../devicetree/bindings/soc/rockchip/grf.yaml | 16 +- MAINTAINERS | 15 + drivers/phy/Kconfig | 10 + drivers/phy/Makefile | 1 + drivers/phy/broadcom/phy-bcm-ns-usb2.c | 1 + drivers/phy/broadcom/phy-bcm-ns-usb3.c | 1 + drivers/phy/cadence/phy-cadence-torrent.c | 207 +++- drivers/phy/freescale/Kconfig | 9 +- drivers/phy/freescale/Makefile | 1 + drivers/phy/freescale/phy-fsl-imx8qm-hsio.c | 611 ++++++++++ drivers/phy/phy-airoha-pcie-regs.h | 494 ++++++++ drivers/phy/phy-airoha-pcie.c | 1286 ++++++++++++++++= ++++ drivers/phy/phy-core.c | 2 +- drivers/phy/qualcomm/phy-qcom-qmp-pcie.c | 318 ++++- drivers/phy/qualcomm/phy-qcom-qmp-pcs-pcie-v5.h | 14 + drivers/phy/qualcomm/phy-qcom-qmp-qserdes-pll.h | 3 + drivers/phy/qualcomm/phy-qcom-qmp-usb.c | 3 + drivers/phy/rockchip/Kconfig | 2 + drivers/phy/samsung/phy-exynos5-usbdrd.c | 1053 +++++++++++++--- drivers/phy/samsung/phy-exynos5250-usb2.c | 2 +- drivers/phy/st/phy-miphy28lp.c | 5 - drivers/phy/starfive/Kconfig | 10 + drivers/phy/starfive/Makefile | 1 + drivers/phy/starfive/phy-jh7110-dphy-rx.c | 5 - drivers/phy/starfive/phy-jh7110-dphy-tx.c | 461 +++++++ drivers/phy/ti/phy-am654-serdes.c | 1 - drivers/phy/ti/phy-j721e-wiz.c | 133 +- drivers/phy/xilinx/phy-zynqmp.c | 198 +-- include/linux/soc/samsung/exynos-regs-pmu.h | 4 + 41 files changed, 4925 insertions(+), 452 deletions(-) create mode 100644 Documentation/devicetree/bindings/phy/airoha,en7581-pci= e-phy.yaml create mode 100644 Documentation/devicetree/bindings/phy/fsl,imx8qm-hsio.y= aml create mode 100644 Documentation/devicetree/bindings/phy/rockchip,rk3399-e= mmc-phy.yaml delete mode 100644 Documentation/devicetree/bindings/phy/rockchip-emmc-phy= =2Etxt create mode 100644 Documentation/devicetree/bindings/phy/starfive,jh7110-d= phy-tx.yaml create mode 100644 drivers/phy/freescale/phy-fsl-imx8qm-hsio.c create mode 100644 drivers/phy/phy-airoha-pcie-regs.h create mode 100644 drivers/phy/phy-airoha-pcie.c create mode 100644 drivers/phy/starfive/phy-jh7110-dphy-tx.c --=20 ~Vinod --k1mDpk1/Cp1/jO8V Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEE+vs47OPLdNbVcHzyfBQHDyUjg0cFAmagsa0ACgkQfBQHDyUj g0c6CRAAtQmq0V694Gjzep/QAJFiEUgi3z01ypJy0Tp6RYRQqRVZL38bURd/uF1I NCnF4nEXv/N6tpbjNMesAtMc/CeKXPmB2JwvaMMfM69Nbj9jAaJCq0U7rpU5FA3y e2YtrdT/vm4MFLYlTDqWkqnb5IsQe851nEq7ghxDKX4Ak36AyGRMlUmChIV1WudX A/6QiZphunWgYdHtVRBAmRZnzWthQAgxPDUpybyMjPWQwx8NLt1tE2/mGfMvdZoJ r++vykW4gm0/0VdTkZREop8CuD8azFVg8WoxbifSZ+tXbg5vrXNSA5fYRwLuhe1A a+/5pNPtQYWGiDtIhj73+Xb2YsExUATPGNkutvNLNy3Lw2xZpN77fCJYO/KFERj7 QCo9FTG5YiMVQEPVawktdnad1Oyx4rsZwjLrXoD+yl1o9x/pUhGvC3Gz10yUHA5c Cycvvbr54mUdWcTIbYmwAr0S2WS7xJCjjg2/AIgajv9pm+Ysn3URJy6mx15X2vh4 RQZdrEEGmbfY3XtNgLezZYfd2q0Sx8bVIJ5oTsZ/YG7oLektTfvPMMZlcQP8NhOj asPE8eNU9tRJM5fmpwyPHqrLQMWri0sAOH9V9pg0RoVkHTR+dc4qF1du5//Kg/Sj KNyP5KwiQ5hukIDbG8Cnqg58SRvKMunHsVLibkVoQqF79Jce3HI= =30MT -----END PGP SIGNATURE----- --k1mDpk1/Cp1/jO8V-- . Date: Wed, 24 Jul 2024 13:20:33 +0530 From: Vinod Koul To: Linus Torvalds Cc: LKML Subject: [GIT PULL]: Soundwire updates for v6.11 --XJG5oV6dLusnWwqG Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hello Linus, Last one in the lot for the soundwire subsystem updates. Fairly small one with a cleanup pile, debugfs command support and typical updates to drivers The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire.git tags/so= undwire-6.11-rc1 for you to fetch changes up to fdd3d14ca3c8c5269174f10d33d6181173cbd0b4: soundwire: debugfs: simplify with cleanup.h (2024-07-09 19:12:49 +0530) ---------------------------------------------------------------- soundwire updates for 6.11 - Simplification across subsystem using cleanup.h - Support for debugfs to read/write commands - Few Intel and Qualcomm driver updates ---------------------------------------------------------------- Bard Liao (2): soundwire: generic_bandwidth_allocation: change port_bo parameter to = pointer soundwire: intel_auxdevice: add cs42l43 codec to wake_capable_list Krzysztof Kozlowski (10): soundwire: bus: simplify by using local slave->prop soundwire: amd: simplify return path in hw_params soundwire: amd: simplify with cleanup.h soundwire: amd_init: simplify with cleanup.h soundwire: intel: simplify return path in hw_params soundwire: intel: simplify with cleanup.h soundwire: intel_ace2x: simplify return path in hw_params soundwire: intel_ace2x: simplify with cleanup.h soundwire: cadence: simplify with cleanup.h soundwire: debugfs: simplify with cleanup.h Pierre-Louis Bossart (5): soundwire: debugfs: add interface to read/write commands soundwire: bus: add stream refcount soundwire: intel_ace2.x: add AC timing extensions for PantherLake soundwire: Intel: clarify Copyright information soundwire: intel_auxdevice: start the bus at default frequency Srinivas Kandagatla (1): drivers:soundwire: qcom: cleanup port maask calculations drivers/soundwire/amd_init.c | 7 +- drivers/soundwire/amd_manager.c | 13 +- drivers/soundwire/bus.c | 6 +- drivers/soundwire/cadence_master.c | 5 +- drivers/soundwire/debugfs.c | 157 +++++++++++++++++++= +++- drivers/soundwire/generic_bandwidth_allocation.c | 14 +- drivers/soundwire/intel.c | 25 ++-- drivers/soundwire/intel.h | 5 + drivers/soundwire/intel_ace2x.c | 39 +++--- drivers/soundwire/intel_ace2x_debugfs.c | 2 +- drivers/soundwire/intel_auxdevice.c | 42 ++++++ drivers/soundwire/intel_bus_common.c | 2 +- drivers/soundwire/qcom.c | 22 +--- drivers/soundwire/stream.c | 5 + include/linux/soundwire/sdw.h | 2 + include/linux/soundwire/sdw_intel.h | 5 + 16 files changed, 271 insertions(+), 80 deletions(-) --=20 ~Vinod --XJG5oV6dLusnWwqG Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEE+vs47OPLdNbVcHzyfBQHDyUjg0cFAmagskkACgkQfBQHDyUj g0dMzg//YwiKDDQR9qnvBLGv2ndhv/uX8eMVjOpPWqkRYlogKbqY3fUUYPy6Laze V9bO3PLqwH8GmFrVzmwqjiwx2AOWOKGjDExOglEziztjH1mXSUvc8HaQbqhuudoq bRPe0i7ImYDoy+Mit2S0FzouTGhPAOVUPYU29r6tekG7XgB2DXK6qngdJ45jcCcK tTqKj8P1FgKJ2mK/0zSogY7kDmXp9XdOgpUrKZXA+GC0QpKzDl/HjNYOst4hYEan FimSXEx6srpnVmI8qbnb2B6tCuJV7mM8D4Wapr9b6Aihrp1PBP8ocI9l3A8ANZwI 6cq3jfHQR79qBt6RCytzo7eR0BlgKalAQFVQ7W0VhdxDnwTV/jvTXC7Qnl7g5P+r EyQ0EIRm0bHrUc/FFZnFskepe2XYrg0UDEaIad5z6qqfzjYPJYcaM1YOjWw25yUM kUurC2xmkaFurS42gvUu8rritDICCNlsOtaQ6bvdTgToEwIocOodo5hPyUdqI6NO fxMimmXQ7RMi4D87yCXKg4Wnd6PDlj4Bjxue/HLFqQuJXoZAeKGnqM801hdku6TV TTFwoDBIuRTPwMDU1f4CXypd+fYh93fWgMqPGz2XfifAwS2DYsBQPpq3JUnQe8h2 W7EdrejTXc2VDux88A2jH1N2I/hOHnmwnPntJ42wwjDw5YaaQ+w= =3m2l -----END PGP SIGNATURE----- --XJG5oV6dLusnWwqG-- . Date: Wed, 24 Jul 2024 11:19:49 +0200 From: Christian Brauner To: Linus Torvalds Cc: Christian Brauner , linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] vfs fixes /* Summary */ This contains fixes for this merge window: VFS: - The new 64bit mount ids start after the old mount id, i.e., at the first non-32 bit value. However, we started counting one id too late and thus lost 4294967296 as the first valid id. Fix that. - Update a few comments on some vfs_*() creation helpers. - Move copying of the xattr name out from the locks required to start a filesystem write. - Extend the filelock lock UAF fix to the compat code as well. - Now that we added the ability to look up an inode under RCU it's possible that lockless hash lookup can find and lock an inode after it gets I_FREEING set. It then waits until inode teardown in evict() is finished. The flag however is still set after evict() has woken up all waiters. If the inode lock is taken late enough on the waiting side after hash removal and wakeup happened the waiting thread will never be woken. Before RCU based lookup this was synchronized via the inode_hash_lock. But since unhashing requires the inode lock as well we can check whether the inode is unhashed while holding inode lock even without holding inode_hash_lock. pidfd: - The nsproxy structure contains nearly all of the namespaces associated with a task. When a namespace type isn't supported nsproxy might contain a NULL pointer or always point to the initial namespace type. The logic isn't consistent. So when deriving namespace fds we need to ensure that the namespace type is supported. First, so that we don't risk dereferncing NULL pointers. The correct bigger fix would be to change all namespaces to always set a valid namespace pointer in struct nsproxy independent of whether or not it is compiled in. But that requires quite a few changes. Second, so that we don't allow deriving namespace fds when the namespace type doesn't exist and thus when they couldn't also be derived via /proc/self/ns/. - Add missing selftests for the new pidfd ioctls to derive namespace fds. This simply extends the already existing testsuite. netfs: - Fix debug logging and fix kconfig variable name so it actually works. - Fix writeback that goes both to the server and cache. The streams are only activated once a subreq is added. When a server write happens the subreq doesn't need to have finished by the time the cache write is started. If the server write has already finished by the time the cache write is about to start the cache write will operate on a folio that might already have been reused. Fix this by preactivating the cache write. - Limit cachefiles subreq size for cache writes to MAX_RW_COUNT. The following changes since commit 933069701c1b507825b514317d4edd5d3fd9d417: Merge tag '6.11-rc-smb3-server-fixes' of git://git.samba.org/ksmbd (2024-07-21 20:50:39 -0700) are available in the Git repository at: git@gitolite.kernel.org:pub/scm/linux/kernel/git/vfs/vfs tags/vfs-6.11-rc1.fixes.2 for you to fetch changes up to f5e5e97c719d289025afce07050effcf1f7373ef: inode: clarify what's locked (2024-07-24 11:11:40 +0200) Please consider pulling these changes from the signed vfs-6.11-rc1.fixes.2 tag. Thanks! Christian ---------------------------------------------------------------- vfs-6.11-rc1.fixes.2 ---------------------------------------------------------------- Christian Brauner (4): pidfs: handle kernels without namespaces cleanly pidfs: add selftests for new namespace ioctls fs: use all available ids inode: clarify what's locked Congjie Zhou (1): vfs: correct the comments of vfs_*() helpers David Howells (5): netfs: Revert "netfs: Switch debug logging to pr_debug()" netfs: Rename CONFIG_FSCACHE_DEBUG to CONFIG_NETFS_DEBUG netfs: Fix writeback that needs to go to both server and cache cachefiles: Set the max subreq size for cache writes to MAX_RW_COUNT vfs: Fix potential circular locking through setxattr() and removexattr() Edward Adam Davis (1): pidfs: when time ns disabled add check for ioctl Jann Horn (1): filelock: Fix fcntl/close race recovery compat path Mateusz Guzik (1): vfs: handle __wait_on_freeing_inode() and evict() race fs/cachefiles/io.c | 2 +- fs/inode.c | 40 +++- fs/locks.c | 9 +- fs/namei.c | 26 +-- fs/namespace.c | 2 +- fs/netfs/Kconfig | 18 +- fs/netfs/buffered_read.c | 14 +- fs/netfs/buffered_write.c | 12 +- fs/netfs/direct_read.c | 2 +- fs/netfs/direct_write.c | 8 +- fs/netfs/fscache_cache.c | 4 +- fs/netfs/fscache_cookie.c | 28 +-- fs/netfs/fscache_io.c | 12 +- fs/netfs/fscache_main.c | 2 +- fs/netfs/fscache_volume.c | 4 +- fs/netfs/internal.h | 33 ++- fs/netfs/io.c | 12 +- fs/netfs/main.c | 4 + fs/netfs/misc.c | 4 +- fs/netfs/write_collect.c | 16 +- fs/netfs/write_issue.c | 37 ++-- fs/pidfs.c | 63 ++++-- fs/xattr.c | 91 ++++---- tools/testing/selftests/pidfd/pidfd_setns_test.c | 258 ++++++++++++++++++++--- 24 files changed, 488 insertions(+), 213 deletions(-) . Date: Wed, 24 Jul 2024 13:52:54 +0200 From: Wim Van Sebroeck To: Linus Torvalds Cc: Andrew Morton , LKML , Linux Watchdog Mailing List , Guenter Roeck , Biju Das , Chen Ni , Claudiu Beznea , Sascha Hauer , Thomas =?iso-8859-1?Q?Wei=DFschuh?= Subject: [GIT PULL REQUEST] watchdog - v6.11 release cycle. Hi Linus, On this sad day where the belgian linux community said goodbye to P2: Please pull following watchdog changes for the v6.11 release cycle. This series contains: * Make watchdog_class const * reworking of the rzg2l_wdt driver * Other small fixes and improvements The output from git request-pull: ---------------------------------------------------------------- The following changes since commit 22a40d14b572deb80c0648557f4bd502d7e83826: Linux 6.10-rc6 (2024-06-30 14:40:44 -0700) are available in the git repository at: git://www.linux-watchdog.org/linux-watchdog.git tags/linux-watchdog-6.11-rc1 for you to fetch changes up to 63d097d46799dc6ab4d1430482cd5ab6a409c4ec: dt-bindings: watchdog: dlg,da9062-watchdog: Drop blank space (2024-07-18 20:35:41 +0200) ---------------------------------------------------------------- linux-watchdog 6.11-rc1 tag ---------------------------------------------------------------- Biju Das (1): dt-bindings: watchdog: dlg,da9062-watchdog: Drop blank space Chen Ni (3): watchdog: starfive: Add missing clk_disable_unprepare() watchdog: lenovo_se10_wdt: Convert comma to semicolon watchdog: rzn1: Convert comma to semicolon Claudiu Beznea (9): watchdog: rzg2l_wdt: Restrict the driver to ARCH_RZG2L and ARCH_R9A09G011 watchdog: rzg2l_wdt: Make the driver depend on PM watchdog: rzg2l_wdt: Use pm_runtime_resume_and_get() watchdog: rzg2l_wdt: Check return status of pm_runtime_put() watchdog: rzg2l_wdt: Remove reset de-assert from probe watchdog: rzg2l_wdt: Remove comparison with zero watchdog: rzg2l_wdt: Rely on the reset driver for doing proper reset watchdog: rzg2l_wdt: Add suspend/resume support dt-bindings: watchdog: renesas,wdt: Document RZ/G3S support Sascha Hauer (1): watchdog: imx7ulp_wdt: keep already running watchdog enabled Thomas Weißschuh (1): watchdog: Make watchdog_class const .../bindings/watchdog/dlg,da9062-watchdog.yaml | 2 +- .../devicetree/bindings/watchdog/renesas,wdt.yaml | 1 + drivers/watchdog/Kconfig | 3 +- drivers/watchdog/imx7ulp_wdt.c | 5 + drivers/watchdog/lenovo_se10_wdt.c | 4 +- drivers/watchdog/rzg2l_wdt.c | 113 ++++++++++++--------- drivers/watchdog/rzn1_wdt.c | 6 +- drivers/watchdog/starfive-wdt.c | 4 +- drivers/watchdog/watchdog_dev.c | 2 +- 9 files changed, 81 insertions(+), 59 deletions(-) ---------------------------------------------------------------- Kind regards, Wim. . Date: Wed, 24 Jul 2024 07:39:35 -0700 From: Christoph Hellwig To: Linus Torvalds Cc: linux-kernel@vger.kernel.org, iommu@lists.linux.dev Subject: [GIT PULL] dma-mapping fix for Linux 6.11 The following changes since commit b69bdba5a37eb6224039e9572e0e98fc3a931fee: swiotlb: fix kernel-doc description for swiotlb_del_transient (2024-07-13 07:36:10 +0200) are available in the Git repository at: git://git.infradead.org/users/hch/dma-mapping.git tags/dma-mapping-6.11-2024-07-24 for you to fetch changes up to 28e8b7406d3a1f5329a03aa25a43aa28e087cb20: dma: fix call order in dmam_free_coherent (2024-07-19 07:27:28 +0200) ---------------------------------------------------------------- dma-mapping fix for Linux 6.11 - fix the order of actions in dmam_free_coherent (Lance Richardson) ---------------------------------------------------------------- Lance Richardson (1): dma: fix call order in dmam_free_coherent kernel/dma/mapping.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) . Date: Wed, 24 Jul 2024 17:54:06 +0200 (CEST) From: Richard Weinberger To: torvalds Cc: linux-um , linux-kernel Subject: [GIT PULL] UML Changes for v6.11-rc1 Linus, The following changes since commit 22a40d14b572deb80c0648557f4bd502d7e83826: Linux 6.10-rc6 (2024-06-30 14:40:44 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/uml/linux.git tags/uml-for-linus-6.11-rc1 for you to fetch changes up to 98ff534ec2cd02496c166614e6c1391d8e092e51: um: vector: always reset vp->opened (2024-07-04 12:03:26 +0200) ---------------------------------------------------------------- This pull request contains the following changes for UML: - Support for preemption - i386 Rust support - Huge cleanup by Benjamin Berg - UBSAN support - Removal of dead code ---------------------------------------------------------------- Anton Ivanov (2): um: Remove obsolete pcap driver um: Enable preemption in UML Benjamin Berg (16): um: irqs: process outstanding IRQs when unblocking signals um: chan_user: catch EINTR when reading and writing um: chan_user: retry partial writes um: chan: use blocking IO for console output for time-travel um: Remove stub-data.h include from common-offsets.h um: Create signal stack memory assignment in stub_data um: Add generic stub_syscall6 function um: Rework syscall handling um: compress memory related stub syscalls while adding them um: remove LDT support um: remove copy_context_skas0 um: Delay flushing syscalls until the thread is restarted um: Do not flush MM in flush_thread um: remove force_flush_all from fork_handler um: simplify and consolidate TLB updates um: refactor TLB update handling David Gow (2): arch: um: rust: Use the generated target.json again arch: um: rust: Add i386 support for Rust Dr. David Alan Gilbert (1): ubd: Remove unused mutex 'ubd_mutex' Jeff Johnson (2): um: harddog: add missing MODULE_DESCRIPTION() macro hostfs: add missing MODULE_DESCRIPTION() macro Johannes Berg (13): um: time-travel: fix time-travel-start option um: enable UBSAN hostfs: fix dev_t handling um: generalize os_rcv_fd um: add mmap/mremap OS calls um: add shared memory optimisation for time-travel=ext um: time-travel: remove time_exit() um: time-travel: fix signal blocking race/hang um: remove pcap driver from documentation um: line: always fill *error_out in setup_one_line() um: register power-off handler um: vector: remove vp->lock um: vector: always reset vp->opened Mordechay Goodstein (1): um: time-travel: support time-travel protocol broadcast messages Niklas Schnelle (1): um: Select HAS_IOREMAP for UML_IOMEM_EMULATION Tiwei Bie (2): um: Remove unused ncpus variable um: Remove /proc/sysemu support code Wei Yang (1): um/mm: remove redundant assignment of max_low_pfn Documentation/rust/arch-support.rst | 2 +- .../virt/uml/user_mode_linux_howto_v2.rst | 2 - arch/um/Kconfig | 8 +- arch/um/drivers/Kconfig | 20 - arch/um/drivers/Makefile | 10 +- arch/um/drivers/chan.h | 3 +- arch/um/drivers/chan_kern.c | 81 ++- arch/um/drivers/chan_user.c | 20 +- arch/um/drivers/harddog_kern.c | 1 + arch/um/drivers/line.c | 2 + arch/um/drivers/pcap_kern.c | 113 ----- arch/um/drivers/pcap_user.c | 137 ------ arch/um/drivers/pcap_user.h | 21 - arch/um/drivers/port_kern.c | 14 +- arch/um/drivers/ubd_kern.c | 3 - arch/um/drivers/vector_kern.c | 19 +- arch/um/drivers/vector_kern.h | 1 - arch/um/drivers/xterm.c | 2 +- arch/um/drivers/xterm_kern.c | 13 +- arch/um/include/asm/mmu.h | 10 +- arch/um/include/asm/mmu_context.h | 2 - arch/um/include/asm/pgtable.h | 32 ++ arch/um/include/asm/tlbflush.h | 46 +- arch/um/include/shared/as-layout.h | 2 +- arch/um/include/shared/common-offsets.h | 5 - arch/um/include/shared/kern_util.h | 1 - arch/um/include/shared/os.h | 33 +- arch/um/include/shared/skas/mm_id.h | 2 +- arch/um/include/shared/skas/skas.h | 2 + arch/um/include/shared/skas/stub-data.h | 36 +- arch/um/include/shared/timetravel.h | 9 + arch/um/include/shared/user.h | 8 + arch/um/kernel/exec.c | 9 - arch/um/kernel/irq.c | 80 +-- arch/um/kernel/ksyms.c | 2 +- arch/um/kernel/mem.c | 1 - arch/um/kernel/process.c | 69 --- arch/um/kernel/reboot.c | 15 + arch/um/kernel/skas/Makefile | 9 +- arch/um/kernel/skas/clone.c | 48 -- arch/um/kernel/skas/mmu.c | 54 +- arch/um/kernel/skas/process.c | 18 + arch/um/kernel/skas/stub.c | 69 +++ arch/um/kernel/time.c | 187 ++++++- arch/um/kernel/tlb.c | 545 ++++----------------- arch/um/kernel/trap.c | 15 +- arch/um/kernel/um_arch.c | 3 - arch/um/os-Linux/file.c | 94 ++-- arch/um/os-Linux/signal.c | 118 ++++- arch/um/os-Linux/skas/mem.c | 245 +++++---- arch/um/os-Linux/skas/process.c | 124 +---- arch/um/os-Linux/start_up.c | 1 + arch/x86/Makefile.um | 1 + arch/x86/um/Makefile | 5 +- arch/x86/um/asm/mm_context.h | 70 --- arch/x86/um/ldt.c | 380 -------------- arch/x86/um/shared/sysdep/stub.h | 2 +- arch/x86/um/shared/sysdep/stub_32.h | 45 +- arch/x86/um/shared/sysdep/stub_64.h | 41 +- arch/x86/um/stub_32.S | 56 --- arch/x86/um/stub_64.S | 50 -- arch/x86/um/tls_32.c | 1 + fs/hostfs/hostfs.h | 7 +- fs/hostfs/hostfs_kern.c | 11 +- fs/hostfs/hostfs_user.c | 7 +- include/uapi/linux/um_timetravel.h | 190 ++++++- rust/Makefile | 2 +- scripts/Makefile | 2 +- scripts/generate_rust_target.rs | 17 + 69 files changed, 1297 insertions(+), 1956 deletions(-) delete mode 100644 arch/um/drivers/pcap_kern.c delete mode 100644 arch/um/drivers/pcap_user.c delete mode 100644 arch/um/drivers/pcap_user.h delete mode 100644 arch/um/kernel/skas/clone.c create mode 100644 arch/um/kernel/skas/stub.c delete mode 100644 arch/x86/um/asm/mm_context.h delete mode 100644 arch/x86/um/ldt.c delete mode 100644 arch/x86/um/stub_32.S delete mode 100644 arch/x86/um/stub_64.S . Date: Wed, 24 Jul 2024 22:16:02 +0200 From: Helge Deller To: Linus Torvalds , linux-kernel@vger.kernel.org, linux-parisc@vger.kernel.org, James Bottomley , John David Anglin Subject: [GIT PULL] parisc architecture fixes for v6.11-rc1 Hi Linus, Please pull some updates for the parisc architecture for 6.11-rc1. The gettimeofday() and clock_gettime() syscalls are now available as vDSO functions, and Dave added a patch which allows to use NVMe cards in the PCI slots as fast and easy alternative to SCSI discs. Thanks! Helge ---------------------------------------------------------------- The following changes since commit 6ba59ff4227927d3a8530fc2973b80e94b54d58f: Linux 6.10-rc4 (2024-06-16 13:40:16 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux.git tags/parisc-for-6.11-rc1 for you to fetch changes up to cbade823342cd013f1fbd46f6e3b74825fecbc16: parisc: Add support for CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN (2024-07-24 02:04:05 +0200) ---------------------------------------------------------------- parisc architecture fixes and updates for kernel v6.11-rc1: - Add gettimeofday() and clock_gettime() vDSO functions - Enable PCI_MSI_ARCH_FALLBACKS to allow PCI to PCIe bridge adaptor with PCIe NVME card to function in parisc machines - Allow users to reduce kernel unaligned runtime warnings - minor code cleanups ---------------------------------------------------------------- Helge Deller (4): parisc: Clean up unistd.h file parisc: Add 32-bit gettimeofday() and clock_gettime() vDSO functions parisc: Add 64-bit gettimeofday() and clock_gettime() vDSO functions parisc: Add support for CONFIG_SYSCTL_ARCH_UNALIGN_NO_WARN John David Anglin (1): parisc: Fix warning at drivers/pci/msi/msi.h:121 Thorsten Blum (1): parisc: Use max() to calculate parisc_tlb_flush_threshold Documentation/admin-guide/sysctl/kernel.rst | 2 +- arch/parisc/Kconfig | 2 ++ arch/parisc/include/asm/unistd.h | 54 ++++++++--------------------- arch/parisc/include/asm/vdso.h | 2 +- arch/parisc/kernel/cache.c | 6 +--- arch/parisc/kernel/unaligned.c | 2 ++ arch/parisc/kernel/vdso32/Makefile | 24 +++++++++++-- arch/parisc/kernel/vdso32/vdso32.lds.S | 3 ++ arch/parisc/kernel/vdso32/vdso32_generic.c | 32 +++++++++++++++++ arch/parisc/kernel/vdso64/Makefile | 25 ++++++++++--- arch/parisc/kernel/vdso64/vdso64.lds.S | 2 ++ arch/parisc/kernel/vdso64/vdso64_generic.c | 24 +++++++++++++ 12 files changed, 125 insertions(+), 53 deletions(-) create mode 100644 arch/parisc/kernel/vdso32/vdso32_generic.c create mode 100644 arch/parisc/kernel/vdso64/vdso64_generic.c . Date: Thu, 25 Jul 2024 03:32:44 +0200 From: Miguel Ojeda To: Linus Torvalds Cc: Miguel Ojeda , Wedson Almeida Filho , Alex Gaynor , Boqun Feng , Gary Guo , =?UTF-8?q?Bj=C3=B6rn=20Roy=20Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Niko Matsakis , Sid Askary , =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Subject: [GIT PULL] Rust for 6.11 Hi Linus, This is the next round of the Rust support. Later than usual, but all the commits have been in linux-next for about 2 weeks. A trivial conflict with the block pull you already merged expected (resolved in linux -next). In addition, there is a small change to the C side from Arnd that akpm ack'ed. Please pull for v6.11 -- thanks! Cheers, Miguel The following changes since commit 256abd8e550ce977b728be79a74e1729438b4948: Linux 6.10-rc7 (2024-07-07 14:23:46 -0700) are available in the Git repository at: https://github.com/Rust-for-Linux/linux.git tags/rust-6.11 for you to fetch changes up to b1263411112305acf2af728728591465becb45b0: docs: rust: quick-start: add section on Linux distributions (2024-07-10 10:29:55 +0200) ---------------------------------------------------------------- Rust changes for v6.11 The highlight is the establishment of a minimum version for the Rust toolchain, including 'rustc' (and bundled tools) and 'bindgen'. The initial minimum will be the pinned version we currently have, i.e. we are just widening the allowed versions. That covers 3 stable Rust releases: 1.78.0, 1.79.0, 1.80.0 (getting released tomorrow), plus beta, plus nightly. This should already be enough for kernel developers in distributions that provide recent Rust compiler versions routinely, such as Arch Linux, Debian Unstable (outside the freeze period), Fedora Linux, Gentoo Linux (especially the testing channel), Nix (unstable) and openSUSE Slowroll and Tumbleweed. In addition, the kernel is now being built-tested by Rust's pre-merge CI. That is, every change that is attempting to land into the Rust compiler is tested against the kernel, and it is merged only if it passes. Similarly, the bindgen tool has agreed to build the kernel in their CI too. Thus, with the pre-merge CI in place, both projects hope to avoid unintentional changes to Rust that break the kernel. This means that, in general, apart from intentional changes on their side (that we will need to workaround conditionally on our side), the upcoming Rust compiler versions should generally work. In addition, the Rust project has proposed getting the kernel into stable Rust (at least solving the main blockers) as one of its three flagship goals for 2024H2 [1]. I would like to thank Niko, Sid, Emilio et al. for their help promoting the collaboration between Rust and the kernel. [1] https://rust-lang.github.io/rust-project-goals/2024h2/index.html#flagship-goals Toolchain and infrastructure: - Support several Rust toolchain versions. - Support several bindgen versions. - Remove 'cargo' requirement and simplify 'rusttest', thanks to 'alloc' having been dropped last cycle. - Provide proper error reporting for the 'rust-analyzer' target. 'kernel' crate: - Add 'uaccess' module with a safe userspace pointers abstraction. - Add 'page' module with a 'struct page' abstraction. - Support more complex generics in workqueue's 'impl_has_work!' macro. 'macros' crate: - Add 'firmware' field support to the 'module!' macro. - Improve 'module!' macro documentation. Documentation: - Provide instructions on what packages should be installed to build the kernel in some popular Linux distributions. - Introduce the new kernel.org LLVM+Rust toolchains. - Explain '#[no_std]'. And a few other small bits. ---------------------------------------------------------------- Alice Ryhl (4): rust: alloc: fix typo in docs for GFP_NOWAIT rust: alloc: add __GFP_HIGHMEM flag rust: uaccess: add typed accessors for userspace pointers rust: add abstraction for `struct page` Arnd Bergmann (1): uaccess: always export _copy_[from|to]_user with CONFIG_RUST Aswin Unnikrishnan (2): rust: add example for `alias` argument in `module` macro documentation rust: fix datatype in docs for `module` macro arguments Dirk Behme (1): docs: rust: no_std is used FUJITA Tomonori (1): rust: add 'firmware' field support to module! macro John Hubbard (2): kbuild: rust-analyzer: better error handling kbuild: rust-analyzer: improve comment documentation Miguel Ojeda (12): kbuild: rust: remove now-unneeded `rusttest` custom sysroot handling rust: macros: indent list item in `paste!`'s docs rust: init: simplify from `map_err` to `inspect_err` rust: allow `dead_code` for never constructed bindings rust: relax most deny-level lints to warnings rust: simplify Clippy warning flags set rust: start supporting several compiler versions rust: avoid assuming a particular `bindgen` build rust: work around `bindgen` 0.69.0 issue rust: start supporting several `bindgen` versions rust: warn about `bindgen` versions 0.66.0 and 0.66.1 docs: rust: quick-start: add section on Linux distributions Nathan Chancellor (1): docs: rust: introduce the new kernel.org LLVM+Rust toolchains Roland Xu (1): rust: kernel: make impl_has_work compatible with more generics Wedson Almeida Filho (1): rust: uaccess: add userspace pointers Documentation/process/changes.rst | 9 +- Documentation/rust/general-information.rst | 8 + Documentation/rust/quick-start.rst | 143 +++++++---- Documentation/rust/testing.rst | 5 +- Makefile | 30 +-- include/linux/uaccess.h | 46 ++-- init/Kconfig | 5 +- lib/usercopy.c | 30 +-- rust/Makefile | 74 +----- rust/bindings/bindings_helper.h | 2 + rust/bindings/lib.rs | 1 + rust/helpers.c | 34 +++ rust/kernel/alloc.rs | 17 +- rust/kernel/init.rs | 13 +- rust/kernel/lib.rs | 2 + rust/kernel/page.rs | 250 +++++++++++++++++++ rust/kernel/types.rs | 64 +++++ rust/kernel/uaccess.rs | 388 +++++++++++++++++++++++++++++ rust/kernel/workqueue.rs | 16 +- rust/macros/lib.rs | 45 +++- rust/macros/module.rs | 18 +- rust/uapi/lib.rs | 1 + scripts/rust_is_available.sh | 33 +-- scripts/rust_is_available_bindgen_0_66.h | 2 + scripts/rust_is_available_test.py | 59 +++-- 25 files changed, 1059 insertions(+), 236 deletions(-) create mode 100644 rust/kernel/page.rs create mode 100644 rust/kernel/uaccess.rs create mode 100644 scripts/rust_is_available_bindgen_0_66.h . Date: Thu, 25 Jul 2024 09:36:31 +0200 From: Greg KH To: Linus Torvalds , Andrew Morton Cc: linux-kernel@vger.kernel.org, Stephen Rothwell , Saravana Kannan Subject: [GIT PULL] Driver core changes for 6.11-rc1 *************** This merge request is coming late in the -rc1 cycle on purpose. I wanted to make sure that the merge issues and other problems were all resoved due to some core api changes (platform and bus structures) happening in this tree. You will have merge conflicts with your tree when you pull from here in the following two files: drivers/fsi/fsi-occ.c drivers/reset/reset-meson-audio-arb.c the resolution for them should be "obvious", and has been in linux-next for a while now. You will also get build errors for the following two platform drivers: drivers/net/ethernet/renesas/rtsn.c drivers/gpu/drm/stm/lvds.c due to these new files coming in during the merge window and them not being in my branch. They too have fixups that have been in linux-next for a while. I have all of the above problems resolved in the following branch: git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git driver-core-6.11-rc1-merge-resolution if you want to compare things, OR you can just pull from that point as well, I can make a signed tag for you there if that makes it simpler. Sorry for the conflicts, greg k-h *************** The following changes since commit 6ba59ff4227927d3a8530fc2973b80e94b54d58f: Linux 6.10-rc4 (2024-06-16 13:40:16 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-core.git tags/driver-core-6.11-rc1 for you to fetch changes up to b57d5ffc3ab507d0e19fc8b90b19c76af43fb790: ARM: sa1100: make match function take a const pointer (2024-07-19 13:47:20 +0200) ---------------------------------------------------------------- Driver core changes for 6.11-rc1 Here is the big set of driver core changes for 6.11-rc1. Lots of stuff in here, with not a huge diffstat, but apis are evolving which required lots of files to be touched. Highlights of the changes in here are: - platform remove callback api final fixups (Uwe took many releases to get here, finally!) - Rust bindings for basic firmware apis and initial driver-core interactions. It's not all that useful for a "write a whole driver in rust" type of thing, but the firmware bindings do help out the phy rust drivers, and the driver core bindings give a solid base on which others can start their work. There is still a long way to go here before we have a multitude of rust drivers being added, but it's a great first step. - driver core const api changes. This reached across all bus types, and there are some fix-ups for some not-common bus types that linux-next and 0-day testing shook out. This work is being done to help make the rust bindings more safe, as well as the C code, moving toward the end-goal of allowing us to put driver structures into read-only memory. We aren't there yet, but are getting closer. - minor devres cleanups and fixes found by code inspection - arch_topology minor changes - other minor driver core cleanups All of these have been in linux-next for a very long time with no reported problems. Signed-off-by: Greg Kroah-Hartman ---------------------------------------------------------------- Andy Shevchenko (2): driver core: device.h: Group of_node handling declarations and definitions driver core: platform: Switch to use kmemdup_array() Danilo Krummrich (9): rust: add abstraction for struct device rust: add firmware abstractions firmware: rust: improve safety comments MAINTAINERS: add Rust FW abstractions to FIRMWARE LOADER MAINTAINERS: add Danilo as FIRMWARE LOADER maintainer device: rust: improve safety comments MAINTAINERS: add Rust device abstractions to DRIVER CORE firmware_loader: annotate doctests as `no_run` firmware_loader: fix soundness issue in `request_internal` Geert Uytterhoeven (1): dio: Have dio_bus_match() callback take a const * Greg Kroah-Hartman (16): Merge tag 'platform-remove-void-step-b' of https://git.kernel.org/pub/scm/linux/kernel/git/ukleinek/linux into driver-core-next nvdimm: make nd_class constant auxbus: make to_auxiliary_drv accept and return a constant pointer driver core: platform: fix ups for constant struct device_driver driver core: driver: mark driver_add/remove_groups constant driver core: make device_release_driver_internal() take a const * driver core: make driver_detach() take a const * driver core: mark async_driver as a const * Merge tag 'v6.10-rc4' into driver-core-next driver core: make [device_]driver_attach take a const * driver core: have match() callback in struct bus_type take a const * driver core: make driver_[create|remove]_file take a const * driver core: make driver_find_device() take a const * driver core: module: make module_[add|remove]_driver take a const * zorro: make match function take a const pointer ARM: sa1100: make match function take a const pointer Ivan Orlov (1): dca: make dca_class a static const structure Jeff Johnson (1): samples/kobject: add missing MODULE_DESCRIPTION() macros Petr Tesarik (1): sysfs/cpu: Make crash_hotplug attribute world-readable Ricardo B. Marliere (1): parport: make parport_bus_type const Uwe Kleine-König (19): reset: meson-audio-arb: Convert to platform remove callback returning void reset: rzg2l-usbphy-ctrl: Convert to platform remove callback returning void reset: ti-sci: Convert to platform remove callback returning void Merge branch 'reset/next' of git://git.pengutronix.de/pza/linux fsi: master-aspeed: Convert to platform remove callback returning void fsi: master-ast-cf: Convert to platform remove callback returning void fsi: master-gpio: Convert to platform remove callback returning void fsi: occ: Convert to platform remove callback returning void pps: clients: gpio: Convert to platform remove callback returning void gpu: host1x: mipi: Benefit from devm_clk_get_prepared() drm/imagination: Convert to platform remove callback returning void drm/mediatek: Convert to platform remove callback returning void gpu: host1x: Convert to platform remove callback returning void gpu: ipu-v3: Convert to platform remove callback returning void nvdimm/e820: Convert to platform remove callback returning void nvdimm/of_pmem: Convert to platform remove callback returning void samples: qmi: Convert to platform remove callback returning void platform: Make platform_driver::remove() return void driver core: Make dev_err_probe() silent for -ENOMEM Vincenzo Mezzela (2): drivers: arch_topology: Refactor do-while loops drivers: arch_topology: use __free attribute instead of of_node_put() Zijun Hu (5): kobject_uevent: Fix OOB access within zap_modalias_env() devres: Fix devm_krealloc() wasting memory devres: Fix memory leakage caused by driver API devm_free_percpu() devres: Initialize an uninitialized struct member devres: Correct code style for functions that return a pointer type MAINTAINERS | 3 + arch/arm/common/locomo.c | 4 +- arch/arm/common/sa1111.c | 4 +- arch/arm/include/asm/hardware/locomo.h | 2 +- arch/arm/include/asm/hardware/sa1111.h | 2 +- arch/parisc/include/asm/parisc-device.h | 2 +- arch/parisc/kernel/drivers.c | 4 +- arch/powerpc/include/asm/ps3.h | 6 +- arch/powerpc/include/asm/vio.h | 6 +- arch/powerpc/platforms/ps3/system-bus.c | 4 +- arch/powerpc/platforms/pseries/ibmebus.c | 2 +- arch/powerpc/platforms/pseries/vio.c | 6 +- arch/s390/include/asm/ccwdev.h | 2 +- arch/sparc/include/asm/vio.h | 6 +- arch/sparc/kernel/vio.c | 4 +- drivers/acpi/bus.c | 4 +- drivers/amba/bus.c | 6 +- drivers/base/arch_topology.c | 143 ++++++++++----------- drivers/base/auxiliary.c | 10 +- drivers/base/base.h | 16 +-- drivers/base/core.c | 17 ++- drivers/base/cpu.c | 4 +- drivers/base/dd.c | 30 +++-- drivers/base/devres.c | 34 +++-- drivers/base/driver.c | 10 +- drivers/base/firmware_loader/Kconfig | 7 + drivers/base/isa.c | 2 +- drivers/base/module.c | 6 +- drivers/base/platform.c | 26 ++-- drivers/bcma/main.c | 6 +- drivers/bus/fsl-mc/fsl-mc-bus.c | 4 +- drivers/bus/mhi/ep/main.c | 4 +- drivers/bus/mhi/host/init.c | 4 +- drivers/bus/mips_cdmm.c | 6 +- drivers/bus/moxtet.c | 4 +- drivers/bus/sunxi-rsb.c | 2 +- drivers/cdx/cdx.c | 4 +- drivers/cxl/core/port.c | 2 +- drivers/cxl/cxl.h | 5 +- drivers/dax/bus.c | 17 +-- drivers/dca/dca-sysfs.c | 20 +-- drivers/dio/dio-driver.c | 4 +- drivers/dma/idxd/bus.c | 6 +- drivers/dma/idxd/compat.c | 1 - drivers/eisa/eisa-bus.c | 4 +- drivers/firewire/core-device.c | 6 +- drivers/firmware/arm_ffa/bus.c | 2 +- drivers/firmware/arm_scmi/bus.c | 6 +- drivers/firmware/google/coreboot_table.c | 6 +- drivers/fpga/dfl.c | 4 +- drivers/fsi/fsi-core.c | 4 +- drivers/fsi/fsi-master-aspeed.c | 6 +- drivers/fsi/fsi-master-ast-cf.c | 6 +- drivers/fsi/fsi-master-gpio.c | 6 +- drivers/fsi/fsi-occ.c | 6 +- drivers/gpio/gpiolib.c | 2 +- drivers/gpu/drm/display/drm_dp_aux_bus.c | 2 +- drivers/gpu/drm/drm_mipi_dsi.c | 2 +- drivers/gpu/drm/imagination/pvr_drv.c | 7 +- drivers/gpu/drm/mediatek/mtk_padding.c | 5 +- drivers/gpu/host1x/bus.c | 2 +- drivers/gpu/host1x/dev.c | 6 +- drivers/gpu/host1x/mipi.c | 17 +-- drivers/gpu/ipu-v3/ipu-common.c | 6 +- drivers/gpu/ipu-v3/ipu-pre.c | 5 +- drivers/gpu/ipu-v3/ipu-prg.c | 6 +- drivers/greybus/core.c | 4 +- drivers/hid/hid-core.c | 2 +- drivers/hid/intel-ish-hid/ishtp/bus.c | 2 +- drivers/hsi/hsi_core.c | 2 +- drivers/hv/vmbus_drv.c | 8 +- drivers/hwtracing/intel_th/core.c | 4 +- drivers/hwtracing/intel_th/intel_th.h | 2 +- drivers/i2c/i2c-core-base.c | 4 +- drivers/i3c/master.c | 4 +- drivers/input/gameport/gameport.c | 4 +- drivers/input/rmi4/rmi_bus.c | 6 +- drivers/input/rmi4/rmi_bus.h | 2 +- drivers/input/rmi4/rmi_driver.c | 2 +- drivers/input/rmi4/rmi_driver.h | 2 +- drivers/input/serio/serio.c | 4 +- drivers/ipack/ipack.c | 6 +- drivers/macintosh/macio_asic.c | 2 +- drivers/mcb/mcb-core.c | 4 +- drivers/media/pci/bt8xx/bttv-gpio.c | 4 +- drivers/media/pci/bt8xx/bttv.h | 2 +- drivers/media/pci/intel/ipu6/ipu6-bus.h | 2 +- drivers/memstick/core/memstick.c | 7 +- drivers/mfd/mcp-core.c | 2 +- drivers/misc/mei/bus.c | 4 +- drivers/misc/tifm_core.c | 6 +- drivers/mmc/core/sdio_bus.c | 10 +- drivers/most/core.c | 2 +- drivers/net/ethernet/broadcom/bnxt/bnxt_ulp.c | 4 +- drivers/net/ethernet/intel/ice/ice_ptp.c | 2 +- drivers/net/ethernet/mellanox/mlx5/core/dev.c | 4 +- drivers/net/phy/mdio_bus.c | 4 +- drivers/net/phy/mdio_device.c | 4 +- drivers/net/phy/phy_device.c | 4 +- drivers/ntb/ntb_transport.c | 2 +- drivers/nvdimm/bus.c | 25 ++-- drivers/nvdimm/e820.c | 5 +- drivers/nvdimm/of_pmem.c | 6 +- drivers/nvmem/layouts.c | 4 +- drivers/parport/share.c | 2 +- drivers/pci/endpoint/pci-epf-core.c | 4 +- drivers/pci/pci-driver.c | 8 +- drivers/pcmcia/ds.c | 2 +- drivers/peci/core.c | 4 +- drivers/peci/internal.h | 5 +- drivers/platform/surface/aggregator/bus.c | 4 +- drivers/platform/x86/wmi.c | 9 +- drivers/pnp/driver.c | 6 +- drivers/pps/clients/pps-gpio.c | 5 +- drivers/rapidio/rio-driver.c | 4 +- drivers/reset/reset-meson-audio-arb.c | 6 +- drivers/reset/reset-rzg2l-usbphy-ctrl.c | 6 +- drivers/reset/reset-ti-sci.c | 6 +- drivers/rpmsg/rpmsg_core.c | 4 +- drivers/rpmsg/rpmsg_internal.h | 2 +- drivers/s390/cio/css.c | 4 +- drivers/s390/cio/css.h | 2 +- drivers/s390/cio/device.c | 4 +- drivers/s390/crypto/ap_bus.c | 4 +- drivers/s390/crypto/ap_bus.h | 2 +- drivers/scsi/fcoe/fcoe_sysfs.c | 2 +- drivers/scsi/scsi_sysfs.c | 6 +- drivers/scsi/scsi_transport_iscsi.c | 2 +- drivers/sh/maple/maple.c | 4 +- drivers/siox/siox-core.c | 2 +- drivers/slimbus/core.c | 4 +- drivers/soc/qcom/apr.c | 4 +- drivers/soundwire/bus_type.c | 6 +- drivers/spi/spi.c | 2 +- drivers/spmi/spmi.c | 2 +- drivers/ssb/main.c | 4 +- drivers/staging/fieldbus/anybuss/anybuss-client.h | 6 +- drivers/staging/fieldbus/anybuss/host.c | 4 +- drivers/staging/greybus/gbphy.c | 2 +- .../vc04_services/interface/vchiq_arm/vchiq_bus.c | 2 +- drivers/staging/vme_user/vme.c | 2 +- drivers/tc/tc-driver.c | 6 +- drivers/tee/tee_core.c | 2 +- drivers/thunderbolt/domain.c | 8 +- drivers/tty/serdev/core.c | 2 +- drivers/tty/serial/serial_base_bus.c | 2 +- drivers/usb/common/ulpi.c | 2 +- drivers/usb/core/driver.c | 2 +- drivers/usb/gadget/udc/core.c | 2 +- drivers/usb/serial/bus.c | 2 +- drivers/usb/typec/bus.c | 2 +- drivers/vdpa/vdpa.c | 2 +- drivers/vfio/mdev/mdev_driver.c | 2 +- drivers/virtio/virtio.c | 2 +- drivers/xen/xenbus/xenbus.h | 2 +- drivers/xen/xenbus/xenbus_probe.c | 4 +- drivers/zorro/zorro-driver.c | 4 +- include/acpi/acpi_bus.h | 2 +- include/linux/arm_ffa.h | 2 +- include/linux/auxiliary_bus.h | 2 +- include/linux/cdx/cdx_bus.h | 2 +- include/linux/device.h | 21 +-- include/linux/device/bus.h | 2 +- include/linux/device/driver.h | 18 +-- include/linux/dfl.h | 2 +- include/linux/dio.h | 2 +- include/linux/eisa.h | 2 +- include/linux/fsi.h | 2 +- include/linux/fsl/mc.h | 2 +- include/linux/gameport.h | 2 +- include/linux/greybus.h | 2 +- include/linux/hyperv.h | 6 +- include/linux/i2c.h | 2 +- include/linux/i3c/device.h | 5 +- include/linux/maple.h | 2 +- include/linux/mcb.h | 5 +- include/linux/mdio.h | 19 +-- include/linux/mhi.h | 2 +- include/linux/mhi_ep.h | 2 +- include/linux/moxtet.h | 9 +- include/linux/nd.h | 6 +- include/linux/pci-epf.h | 3 +- include/linux/pci.h | 6 +- include/linux/phy.h | 2 +- include/linux/platform_device.h | 15 +-- include/linux/pnp.h | 2 +- include/linux/rio.h | 2 +- include/linux/scmi_protocol.h | 2 +- include/linux/serio.h | 2 +- include/linux/slimbus.h | 2 +- include/linux/soc/qcom/apr.h | 2 +- include/linux/soundwire/sdw_type.h | 2 +- include/linux/spi/spi.h | 6 +- include/linux/ssb/ssb.h | 2 +- include/linux/tc.h | 2 +- include/linux/tee_drv.h | 2 +- include/linux/virtio.h | 5 +- include/linux/zorro.h | 2 +- include/scsi/scsi_transport_iscsi.h | 2 +- include/sound/ac97/codec.h | 5 +- include/xen/xenbus.h | 5 +- lib/kobject_uevent.c | 17 ++- net/iucv/iucv.c | 2 +- rust/bindings/bindings_helper.h | 1 + rust/helpers.c | 1 + rust/kernel/device.rs | 105 +++++++++++++++ rust/kernel/firmware.rs | 117 +++++++++++++++++ rust/kernel/lib.rs | 3 + samples/kobject/kobject-example.c | 1 + samples/kobject/kset-example.c | 1 + samples/qmi/qmi_sample_client.c | 6 +- sound/ac97/bus.c | 4 +- sound/core/seq_device.c | 4 +- sound/hda/hda_bus_type.c | 2 +- sound/soc/sof/sof-client.c | 4 +- 215 files changed, 777 insertions(+), 620 deletions(-) create mode 100644 rust/kernel/device.rs create mode 100644 rust/kernel/firmware.rs . Date: Thu, 25 Jul 2024 10:47:41 +0200 From: Geert Uytterhoeven To: Linus Torvalds Cc: Andy Shevchenko , Andy Shevchenko , linux-kernel@vger.kernel.org, Geert Uytterhoeven Subject: [GIT PULL] auxdisplay updates for v6.11 Hi Linus, The following changes since commit 1613e604df0cd359cf2a7fbd9be7a0bcfacfabd0: Linux 6.10-rc1 (2024-05-26 15:20:12 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/geert/linux-m68k.git tags/auxdisplay-for-v6.11-tag1 for you to fetch changes up to 2ccfe94bc3ac980d2d1df9f7a0b2c6d2137abe55: auxdisplay: ht16k33: Drop reference after LED registration (2024-06-11 16:58:52 +0300) ---------------------------------------------------------------- auxdisplay updates for v6.11 - Add support for configuring the boot message on line displays, - Miscellaneous fixes and improvements. As Andy is on holidays[1], and after checking with him earlier today, I imported his branch, tagged it, and am sending a PR. All of this has been in linux-next for a while, through Andy's auxdisplay repo. Thanks for pulling! [1] https://lore.kernel.org/CAHp75VehHDikSSPJhc4c8t7jp81bQ_Z+pkqYnM_F87xdJP4Xew@mail.gmail.com/ ---------------------------------------------------------------- Andy Shevchenko (1): auxdisplay: charlcd: Provide a forward declaration Chris Packham (1): auxdisplay: linedisp: Support configuring the boot message Erick Archer (1): auxdisplay: Use sizeof(*pointer) instead of sizeof(type) Jeff Johnson (2): auxdisplay: linedisp: add missing MODULE_DESCRIPTION() macro auxdisplay: hd44780: add missing MODULE_DESCRIPTION() macro Markus Elfring (1): auxdisplay: ht16k33: Drop reference after LED registration drivers/auxdisplay/Kconfig | 2 +- drivers/auxdisplay/arm-charlcd.c | 2 +- drivers/auxdisplay/charlcd.h | 2 ++ drivers/auxdisplay/hd44780.c | 2 +- drivers/auxdisplay/hd44780_common.c | 1 + drivers/auxdisplay/ht16k33.c | 1 + drivers/auxdisplay/line-display.c | 11 ++++++++++- 7 files changed, 17 insertions(+), 4 deletions(-) Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds . Date: Thu, 25 Jul 2024 10:47:33 +0100 From: Daniel Thompson To: Linus Torvalds Cc: Jason Wessel , linux-kernel@vger.kernel.org, Douglas Anderson , Zheng Zengkai , Arnd Bergmann Subject: [GIT PULL] kgdb changes for v6.11 Hi Linus Sorry this is so late in the window. It's not even a good reason... I just lost track of which week it was. Happily this is only three small changes and all have been soaking in linux-next for a month or so. The following changes since commit 6ba59ff4227927d3a8530fc2973b80e94b54d58f: Linux 6.10-rc4 (2024-06-16 13:40:16 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/danielt/linux.git/ tags/kgdb-6.11-rc1 for you to fetch changes up to 9bccbe7b20876a34c70b13430ea1b308fc8d5a7e: kdb: Get rid of redundant kdb_curr_task() (2024-06-21 15:49:29 +0100) ---------------------------------------------------------------- kgdb patches for 6.11 Three small changes this cycle: 1. Cleaning up an architecture abstraction that is no longer needed because all the architectures have converged. 2. Actually use the prompt argument to kdb_position_cursor() instead of ignoring it (functionally this fix is a nop but that was due to luck rather than good judgement) 3. Fix a -Wformat-security warning. Signed-off-by: Daniel Thompson ---------------------------------------------------------------- Arnd Bergmann (1): kdb: address -Wformat-security warnings Douglas Anderson (1): kdb: Use the passed prompt in kdb_position_cursor() Zheng Zengkai (1): kdb: Get rid of redundant kdb_curr_task() kernel/debug/kdb/kdb_bt.c | 2 +- kernel/debug/kdb/kdb_io.c | 6 +++--- kernel/debug/kdb/kdb_main.c | 18 ++++-------------- kernel/debug/kdb/kdb_private.h | 2 -- 4 files changed, 8 insertions(+), 20 deletions(-) . Date: Thu, 25 Jul 2024 16:00:47 +0200 From: Petr Mladek To: Linus Torvalds Cc: Sergey Senozhatsky , Steven Rostedt , John Ogness , Andy Shevchenko , Rasmus Villemoes , Sebastian Andrzej Siewior , Thomas Gleixner , Jan Kara , Peter Zijlstra , Petr Mladek , linux-kernel@vger.kernel.org, Jeff Johnson Subject: [GIT PULL] trivial printk changes for 6.11 Hi Linus, please pull the two trivial changes for 6.11 from git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git tags/printk-for-6.11-trivial ======================================== - Misc clean up. ---------------------------------------------------------------- Jeff Johnson (1): vsprintf: add missing MODULE_DESCRIPTION() macro Sreenath Vijayan (1): printk: Rename console_replay_all() and update context drivers/tty/sysrq.c | 2 +- include/linux/printk.h | 4 ++-- kernel/printk/printk.c | 6 +++--- lib/test_printf.c | 1 + lib/test_scanf.c | 1 + 5 files changed, 8 insertions(+), 6 deletions(-) . Date: Thu, 25 Jul 2024 18:09:56 +0200 From: Thomas Bogendoerfer To: torvalds@linux-foundation.org Cc: linux-mips@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [GIT PULL] MIPS changes part 2 for v6.11 The following changes since commit bb2d63500b5c8fd1ea425caffe2d44c931fefc6b: MIPS: config: Add ip30_defconfig (2024-07-15 18:17:34 +0200) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/mips/linux.git/ tags/mips_6.11_1 for you to fetch changes up to 2c716cf17edee74424336e87fe42b99ee5e91bad: mips: sibyte: add missing MODULE_DESCRIPTION() macro (2024-07-23 09:47:40 +0200) ---------------------------------------------------------------- - Use improved timer sync for Loongson64 - Fix address of GCR_ACCESS register - Add missing MODULE_DESCRIPTION ---------------------------------------------------------------- Gregory CLEMENT (1): MIPS: SMP-CPS: Fix address for GCR_ACCESS register for CM3 and later Jeff Johnson (1): mips: sibyte: add missing MODULE_DESCRIPTION() macro Jiaxun Yang (1): MIPS: Loongson64: Switch to SYNC_R4K arch/mips/Kconfig | 1 + arch/mips/include/asm/mips-cm.h | 4 ++++ arch/mips/include/asm/smp.h | 1 - arch/mips/kernel/smp-cps.c | 5 ++++- arch/mips/loongson64/smp.c | 35 ++--------------------------------- arch/mips/sibyte/common/sb_tbprof.c | 1 + 6 files changed, 12 insertions(+), 35 deletions(-) -- Crap can work. Given enough thrust pigs will fly, but it's not necessarily a good idea. [ RFC1925, 2.3 ] . Date: Thu, 25 Jul 2024 11:06:28 -0700 From: John Johansen To: Linus Torvalds Cc: LKLM , "open list:SECURITY SUBSYSTEM" Subject: [GIT PULL] AppArmor updates for 6.11-rc1 Hi Linus, I know this is running extremely late so I have only included bug fixes and a few small cleanups. In particular the cleanup optimization: try to avoid refing the label in apparmor_file_open is nice to have for scaling on large systems, as it avoids take a ref count when it isn't necessary. For the file open test resulting in kernel test robot noticed a 93.1% improvement of will-it-scale.per_process_ops on: These patches have all been merge tested against your tree as of this morning and regression tested against your tree as of yesterday. thanks - john The following changes since commit 4cece764965020c22cff7665b18a012006359095: Linux 6.9-rc1 (2024-03-24 14:10:05 -0700) are available in the Git repository at: git://git.kernel.org/pub/scm/linux/kernel/git/jj/linux-apparmor tags/apparmor-pr-2024-07-25 for you to fetch changes up to e0ff0cff1f6cdce0aa596aac04129893201c4162: apparmor: unpack transition table if dfa is not present (2024-07-24 11:15:06 -0700) ---------------------------------------------------------------- apparmor-pr-2024-07-24 PR 2024-07-25 + Cleanups - optimization: try to avoid refing the label in apparmor_file_open - remove useless static inline function is_deleted - use kvfree_sensitive to free data->data - fix typo in kernel doc + Bug fixes - unpack transition table if dfa is not present - test: add MODULE_DESCRIPTION() - take nosymfollow flag into account - fix possible NULL pointer dereference - fix null pointer deref when receiving skb during sock creation ---------------------------------------------------------------- Alexander Mikhalitsyn (1): apparmor: take nosymfollow flag into account Christian Göttsche (1): apparmor: fix typo in kernel doc Colin Ian King (1): apparmor: remove useless static inline function is_deleted Fedor Pchelkin (1): apparmor: use kvfree_sensitive to free data->data Georgia Garcia (1): apparmor: unpack transition table if dfa is not present Jeff Johnson (1): apparmor: test: add MODULE_DESCRIPTION() Leesoo Ahn (1): apparmor: fix possible NULL pointer dereference Mateusz Guzik (1): apparmor: try to avoid refing the label in apparmor_file_open Xiao Liang (1): apparmor: Fix null pointer deref when receiving skb during sock creation security/apparmor/apparmorfs.c | 4 ++++ security/apparmor/file.c | 13 ---------- security/apparmor/include/cred.h | 20 ++++++++++++++++ security/apparmor/lsm.c | 14 ++++++++--- security/apparmor/mount.c | 2 ++ security/apparmor/policy.c | 2 +- security/apparmor/policy_unpack.c | 43 ++++++++++++++++++++-------------- security/apparmor/policy_unpack_test.c | 1 + 8 files changed, 65 insertions(+), 34 deletions(-) .