summaryrefslogtreecommitdiff
path: root/drivers
AgeCommit message (Collapse)Author
6 daysdrm/xen: replace struct drm_simple_display_pipe with regular atomic helpersZe Huang
Replace the Xen frontend simple display pipe with explicit plane, CRTC and encoder objects for each pipeline. Keep generic plane-state validation before Xen-specific checks, and install the GEM framebuffer prepare helper explicitly. Use commit-local plane state in the CRTC enable path and pass the new plane source position to the backend mode-set request. Handle pending page-flip events through the commit-local CRTC state in the plane update path. Signed-off-by: Ze Huang <ze.huang@oss.qualcomm.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patch.msgid.link/20260727-drm-simple-kms-removal-v3-8-cd5dc89858c6@oss.qualcomm.com
6 daysdrm/tve200: replace struct drm_simple_display_pipe with regular atomic helpersZe Huang
Convert TVE200 to explicit plane, CRTC and encoder objects. Keep generic plane-state validation before TVE200-specific mode, alignment, pitch and format-change checks. Install the GEM framebuffer prepare helper explicitly. Use commit-local plane state in the CRTC enable path when programming framebuffer format state. Move page-flip event handling to the CRTC commit path and wire the CRTC vblank callbacks explicitly. Signed-off-by: Ze Huang <ze.huang@oss.qualcomm.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patch.msgid.link/20260727-drm-simple-kms-removal-v3-7-cd5dc89858c6@oss.qualcomm.com
6 daysdrm/repaper: replace struct drm_simple_display_pipe with regular atomic helpersZe Huang
Convert repaper to explicit primary plane, CRTC and encoder objects. Keep the shadow-plane helpers, framebuffer access handling and no-scaling plane-state validation from the simple-KMS path. Signed-off-by: Ze Huang <ze.huang@oss.qualcomm.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patch.msgid.link/20260727-drm-simple-kms-removal-v3-6-cd5dc89858c6@oss.qualcomm.com
6 daysdrm/mcde: replace struct drm_simple_display_pipe with regular atomic helpersZe Huang
Convert MCDE to explicit plane, CRTC and encoder objects. Handle pending page-flip events from the CRTC atomic flush path using the commit-local CRTC state, and avoid manual connector/encoder attachment before the connector has been created by the bridge path. Signed-off-by: Ze Huang <ze.huang@oss.qualcomm.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patch.msgid.link/20260727-drm-simple-kms-removal-v3-3-cd5dc89858c6@oss.qualcomm.com
6 daysdrm/aspeed: replace struct drm_simple_display_pipe with regular atomic helpersZe Huang
Replace the simple display pipe with explicit plane, CRTC and encoder objects. Move callbacks to plane and CRTC helpers, and wire vblank handling through drm_crtc_funcs. Move page-flip event handling from plane atomic_update() to CRTC atomic_flush(). Use commit-local CRTC and plane state when programming mode and pixel format in the CRTC enable path. Signed-off-by: Ze Huang <ze.huang@oss.qualcomm.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patch.msgid.link/20260727-drm-simple-kms-removal-v3-2-cd5dc89858c6@oss.qualcomm.com
6 daysdrm/arcpgu: replace struct drm_simple_display_pipe with regular atomic helpersZe Huang
Instantiate the primary plane, CRTC and encoder directly and wire them up with standard atomic helpers. Move the simple-pipe callbacks into explicit plane and CRTC helper callbacks. Use commit-local CRTC and plane state in the CRTC enable path for mode and pixel-format programming. Handle missing remote encoder nodes explicitly and take the CRTC modeset lock while reading CRTC state from debugfs. Signed-off-by: Ze Huang <ze.huang@oss.qualcomm.com> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de> Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Link: https://patch.msgid.link/20260727-drm-simple-kms-removal-v3-1-cd5dc89858c6@oss.qualcomm.com
6 daysregulator: mpq4210: Address the post-merge review commentsMark Brown
Tapio Reijonen <tapio.reijonen@vaisala.com> says: The MPQ4210 series was applied to for-7.4 as e3c05a881fc9 and 61879d561e91, and two review comments arrived afterwards. Both are addressed here as incremental patches against current for-7.4. Patches 1 and 2 rename mps,fb-voltage-divider to mps,fb-voltage-divider-ohms, as Krzysztof asked. The split across the binding and the driver leaves one commit where the two disagree, so they are meant to be applied together. The suffix is worth more here than the convention alone: mps,mp886x.yaml already describes a property of the same name whose values are kilo ohms rather than ohms, so two bindings from the same vendor spelled the resistances identically while meaning different units. Nothing in tree uses the old name and it has not appeared in a release, so no fallback is kept. Patch 3 drops the <linux/mod_devicetable.h> include, as Uwe asked. Tested on an i.MX6SX board whose MPQ4210 sits behind a gpio i2c mux, with the device tree updated to the new property name. The regulator registers and the divider is parsed correctly: the board sets regulator-ramp-delay above every supported rate, and the core reports "Can't set ramp-delay 3000, setting 2101", where 2101 uV/us is the fastest reference rate scaled by this board's divider. That value can only be reached by reading both resistors from the renamed property. Link: https://patch.msgid.link/20260913-mpq4210-ohms-fixup-v1-0-dcff627001ff@vaisala.com
6 daysregulator: mpq4210: Drop the mod_devicetable.h includeTapio Reijonen
<linux/mod_devicetable.h> is meant to go away, and this driver does not need it: <linux/i2c.h> already supplies struct i2c_device_id and <linux/of.h> struct of_device_id, and both are included already. Suggested-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com> Link: https://lore.kernel.org/r/aqRMb8q7BT3uZ9iF@monoceros Signed-off-by: Tapio Reijonen <tapio.reijonen@vaisala.com> Acked-by: Uwe Kleine-König <u.kleine-koenig@baylibre.com> Link: https://patch.msgid.link/20260913-mpq4210-ohms-fixup-v1-3-dcff627001ff@vaisala.com Signed-off-by: Mark Brown <broonie@kernel.org>
6 daysregulator: mpq4210: Use the -ohms feedback divider propertyTapio Reijonen
Follow the binding rename of mps,fb-voltage-divider to mps,fb-voltage-divider-ohms. The old name was never in a release and this driver is its only reader, so it is dropped rather than kept as a fallback. Fixes: 61879d561e91 ("regulator: Add MPS MPQ4210 buck-boost regulator driver") Suggested-by: Krzysztof Kozlowski <krzk@kernel.org> Link: https://lore.kernel.org/r/20260911-gaur-of-satisfying-action-1a3b0f@quoll Signed-off-by: Tapio Reijonen <tapio.reijonen@vaisala.com> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com> Link: https://patch.msgid.link/20260913-mpq4210-ohms-fixup-v1-2-dcff627001ff@vaisala.com Signed-off-by: Mark Brown <broonie@kernel.org>
6 daysmmc: Merge branch fixes into nextUlf Hansson
Merge the mmc fixes for v7.3-rc[n] into the next branch, to allow them to get tested together with the mmc changes that are targeted for the next release. Signed-off-by: Ulf Hansson <ulfh@kernel.org>
6 daysmmc: dw_mmc: remove unused slot memberShawn Lin
struct dw_mci_slot does not exist anymore and nothing ever references host->slot; the member is a leftover from the multi-slot design this driver was upstreamed with, where the slot struct lived in the same header. Signed-off-by: Shawn Lin <shawn.lin@rock-chips.com> Signed-off-by: Ulf Hansson <ulfh@kernel.org>
6 daysmmc: sdhci-of-aspeed: Remove children before releasing SDC resourcesMyeonghun Pak
Probe failure and removal leave SDHCI child devices registered after the parent clock and managed resources are released. Unregister the OF children in reverse order before disabling the parent clock on both paths. Use of_platform_device_destroy() because manual child creation does not set the flag required by of_platform_depopulate(). This issue was identified during our ongoing static-analysis research while reviewing kernel code. Fixes: bb7b8ec62dfb ("mmc: sdhci-of-aspeed: Add support for the ASPEED SD controller") Co-developed-by: Ijae Kim <ae878000@gmail.com> Signed-off-by: Ijae Kim <ae878000@gmail.com> Signed-off-by: Myeonghun Pak <mhun512@gmail.com> Assisted-by: OpenAI:GPT-5.6 Cc: stable@vger.kernel.org Signed-off-by: Ulf Hansson <ulfh@kernel.org>
6 daysKVM: arm64: gic-v5: Create and manage VM and VPE tablesSascha Bischoff
GICv5 uses a set of in-memory tables to track and manage VM state. These must be allocated by the hypervisor and provided to the IRS. The VMT (Virtual Machine Table) is a linear or two-level table comprising VMT Entries (VMTEs). Each VMTE describes the state for a single VM. This state includes things such as the SPI and LPI IST configuration (coming in a future commit), an implementation-defined VM Descriptor, and a VPE Table (VPET). The VPET contains one entry per possible VPE ID belonging to a VM. It is used to mark a VPE as valid and provide the address of an implementation-defined VPE Descriptor (VPED), which the hardware uses to track and manage VPE state. Allocate each VM's VPEDs as a single dense array indexed by vcpu_idx, while the VPET remains indexed by the userspace-provided vcpu_id. This keeps VPED storage proportional to the number of vCPUs even when their IDs are sparse. The VMT and VPET are shared with the IRS. On systems with a non-coherent IRS, cache maintenance operates at cache-line granularity, while multiple entries can occupy the same cache line. Use a common lock for CPU accesses to these tables and IRS command processing so that writing back one entry cannot overwrite an IRS update to a neighbouring entry. The implementation-defined VMD and VPED storage is also visible to the IRS. Round these allocations up to whole cache lines to prevent cache maintenance from corrupting unrelated slab objects. Initialise the storage before publishing its addresses to the IRS. This commit adds support for allocating the VMT and its descriptor backing state, and for managing VMTEs. The VMTEs can be initialised or released for reuse. VM IDs are allocated with an IDA, while an XArray tracks the host-side allocations associated with populated VMTEs. Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com> Link: https://patch.msgid.link/20260904113404.4051341-10-sascha.bischoff@arm.com Signed-off-by: Marc Zyngier <maz@kernel.org>
6 daysirqchip/gic-v5: Set up gic_kvm_info on ACPI hostsSascha Bischoff
Device-tree based GICv5 probing already passes the IRS details and maintenance interrupt to KVM, but the ACPI path only initialises the irqchip and installs the ACPI IRQ model. As a result, KVM never sees the GICv5 host information required to probe the vGIC on ACPI systems. Add the ACPI equivalent of the DT KVM setup. Parse the MADT GICC entries for the maintenance interrupt, retaining the value from the first relevant entry and warning if later entries disagree. Warn if firmware describes the interrupt as edge-triggered, but register it as a level-sensitive, active-high GSI. Pass the resulting IRQ together with the IRS base and coherency information to KVM. Native GICv5 does not require a maintenance interrupt unless the legacy GICv3-compatible CPU interface is present, so preserve the existing no-maintenance-IRQ handling for that case. Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com> Link: https://patch.msgid.link/20260904113404.4051341-4-sascha.bischoff@arm.com Signed-off-by: Marc Zyngier <maz@kernel.org>
6 daysirqchip/gic-v5: Provide OF IRS config frame attrs to KVMSascha Bischoff
KVM needs to interact with the host IRS in order to, for example, make VMs or VPEs valid. There are two potential approaches here. Either the host irqchip driver can provide an interface, or KVM can interact directly with the host IRS. The latter of these two is chosen as the set of MMIO registers that KVM needs to interact with is orthogonal to the set used by the host irqchip driver (with the exception of some of the read-only IRS_IDRx registers). Pass KVM a pointer to an IRS config frame - the config frame belonging to ANY IRS is fine as long as one IRS's config frame is used consistently - in struct gic_kvm_info. Additionally, include a flag telling KVM whether the IRS is coherent or non-coherent in order to make sure that KVM can do the correct cache state management, if required. Only OF (Device Tree) is supported with this change. ACPI is not. Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com> Link: https://patch.msgid.link/20260904113404.4051341-3-sascha.bischoff@arm.com Signed-off-by: Marc Zyngier <maz@kernel.org>
6 daysirqchip/gic-v5: Allow KVM setup without a maintenance IRQSascha Bischoff
GICv5 does not require a virtual CPU interface maintenance interrupt for native GCIE operation. The interrupt is only needed when FEAT_GCIE_LEGACY is present, as the legacy GICv3 interface still relies on maintenance IRQ delivery. Stop rejecting KVM setup solely because the maintenance interrupt is absent. Parse the interrupt if present, but if none is described and the system does not advertise FEAT_GCIE_LEGACY, tell KVM that no maintenance interrupt is required. This lets native GICv5 KVM support be registered on systems that do not provide a maintenance interrupt, while requiring a maintenance interrupt for GICv3-capable systems. Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com> Link: https://patch.msgid.link/20260904113404.4051341-2-sascha.bischoff@arm.com Signed-off-by: Marc Zyngier <maz@kernel.org>
6 daysMerge branches 'thermal-core', 'thermal-intel' and 'thermal-docs' into ↵Rafael J. Wysocki
linux-next * thermal-core: thermal: gov_power_allocator: Fix NULL pointer dereference in update_tz() thermal: of: Match trip property helper types * thermal-intel: thermal: intel: powerclamp: Simplify idle_inject_update() thermal: intel: int340x: Fix temperature selection around 0 C thermal: intel: powerclamp: Simplify check_invalid() thermal: intel: intel_tcc_cooling: Add rugged Panther Lake support thermal: intel: powerclamp: Drop redundant clamp() in duration_set() thermal: intel: int340x: Drop redundant else in proc_thermal_add() thermal: intel: powerclamp: Reject invalid window_size values * thermal-docs: thermal: docs: cpu-idle-cooling.rst: Drop unbalanced paren
6 daysMerge branches 'pm-sleep' and 'pm-runtime' into linux-nextRafael J. Wysocki
* pm-sleep: PM: hibernate: docs: update swsusp.txt references to swsusp.rst * pm-runtime: PM: runtime: Add kunit test for supplier idle/suspend PM: runtime: Only queue an idle check for RPM-linked suppliers
6 daysMerge branches 'pm-cpuidle', 'pm-powercap' and 'pm-cpu' into linux-nextRafael J. Wysocki
* pm-cpuidle: cpuidle: tegra: fix repeated word 'that' in comment cpuidle: teo: Do not return a disabled idle state cpuidle: menu: Do not return a disabled idle state intel_idle: Use 2-argument strscpy() intel_idle: Replace min_t() with the better alternatives * pm-powercap: powercap: intel_rapl: Add rugged Panther Lake support * pm-cpu: PM: CPU: Restore synchronize_rcu() to cpu_pm_unregister_notifier() clocksource/drivers/timer-ti-dm: Unregister CPU PM notifier outside of the timer lock
6 daysMerge branch 'acpi-thermal' into linux-nextRafael J. Wysocki
* acpi-thermal: ACPI: fan: Use more suitable cooling device data ACPI: fan: Store ACPI device pointer in struct acpi_fan ACPI: processor: thermal: Use more suitable cooling device data ACPI: thermal: Use cooling device parent for thermal zone binding ACPI: fan: Use thermal_cooling_device_create() ACPI: video: Use thermal_cooling_device_create() ACPI: processor: thermal: Use thermal_cooling_device_create() thermal: core: Introduce thermal_cooling_device_create() ACPI: video: Fix backlight unregistration ordering ACPI: fan: Fix memory leak due to leftover devm_kcalloc() argument
6 daysMerge branches 'acpi-battery', 'acpi-sbs' and 'acpi-button' into linux-nextRafael J. Wysocki
* acpi-battery: ACPI: battery: Fix bogus cycle count values on systems without _BIX * acpi-sbs: ACPI: SBS: report relative state of charge as CAPACITY * acpi-button: ACPI: button: Add lid_init_state quirk for Razer Blade Stealth 13 (Early 2020) RZ09-0310
6 daysMerge branches 'acpi-tables', 'acpi-utils' and 'acpi-pfrut' into linux-nextRafael J. Wysocki
* acpi-tables: ACPI: MRRM: Use for_each_populated_zone() in get_node_num() * acpi-utils: ACPI: utils: Ignore leading root scope prefix in string _UID match ACPI: utils: Adjust message printing macros for ACPI objects * acpi-pfrut: ACPI: pfr_update: zero-initialize capability query result
6 daysMerge branches 'acpi-apei' and 'acpi-osl' into linux-nextRafael J. Wysocki
* acpi-apei: Documentation: ACPI: EINJ: Update stale driver source reference cxl/ras: Make cxl_cper_handle_prot_err() static ACPI: APEI: GHES: Bound AER info copy and sanitize software metadata ACPI: APEI: GHES: Validate memory error section length before payload access efi/cper: Read only validated fields in cper_mem_err_pack() ACPI: APEI: GHES: Validate CXL protocol error section length before RAS cap copy ACPI: APEI: GHES: Bound CXL event record copy to the firmware section length ACPI: extlog: Fix CONFIG_ACPI_APEI_PCIEAER guard typo ACPI: extlog: Validate PCIe error section length before payload access ACPI: extlog: Avoid populating software AER metadata from raw hardware buffer ACPI: extlog: Defer CXL protocol error handling to avoid lock inversion ACPI: extlog: Validate elog record length before walking sections efi/cper: Reject an error status block length that wraps a u32 efi/cper: Reject CPER records with an out-of-range error_data_length * acpi-osl: ACPI: OSL: Use vsnprintf() in acpi_os_vprintf()
6 daysMerge branches 'acpi-scan', 'acpi-glue' and 'acpi-bus' into linux-nextRafael J. Wysocki
* acpi-scan: ACPI: scan: Combine two conditionals in acpi_bus_attach() ACPI: PM: Move acpi_bus_init_power() declaration to internal header file ACPI: scan: Stop calling acpi_bus_init_power() early ACPI: PM: Drop parent state update from acpi_device_get_power() ACPI: scan: Drop useless and noisy debug statement * acpi-glue: ACPI: glue: Skip devices with no type in acpi_device_notify() ACPI: glue: Fix up and adjust acpi_unbind_one() ACPI: glue: Rearrange acpi_bind_one() to avoid breakage ACPI: glue: Carry out companion lookup under bus_type_sem ACPI: glue: Rework the success message in acpi_device_notify() ACPI: glue: Reduce debug noise from acpi_device_notify() * acpi-bus: ACPI: bus: Reduce runtime memory footprint of struct acpi_device
6 daysmmc: sdhci-pxav3: avoid of_nodeRosen Penev
Use device handlers instead of of_node ones for simplicity. As this driver is effectively OF only, it ends up behaving the same. Change is_bool to present as no-1-8-v is not specified as a bool in dts, but as either present or not. Signed-off-by: Rosen Penev <rosenp@gmail.com> Signed-off-by: Ulf Hansson <ulfh@kernel.org>
6 daysmmc: fix typos in commentsHemanth Selam
Fix typos in comments, reported by scripts/checkpatch.pl using the misspelling list in scripts/spelling.txt. Only touches comments, no code changes. Assisted-by: Cursor:claude-opus-5 Signed-off-by: Hemanth Selam <hemanth.selam@gmail.com> Signed-off-by: Ulf Hansson <ulfh@kernel.org>
6 daysdrm/ssd130x: Add SSD135X_FAMILY and SSD1351 supportAmit Barzilai
The Solomon SSD1351 is a 128x128 RGB color OLED controller. It shares the SSD133X pixel layout: one 65k color (RGB565) pixel per Segment, written as a bulk transfer once a column/row addressing window has been programmed. Add it as a new SSD135X_FAMILY rather than as a separate driver, so that the ssd130x plane, CRTC and encoder infrastructure is reused. Give the family its own primary plane update and disable, encoder enable and backlight callbacks instead of teaching the ssd133x ones about a second family. Only the callbacks that carry no family specific logic are reused as is: ssd133x_primary_plane_atomic_check(), ssd133x_crtc_atomic_check() and ssd130x_encoder_atomic_disable(). The data path differs from the ssd133x family in one respect. The SSD1351 only starts accepting pixel data after an explicit Write RAM command (0x5c), while the SSD133X enters data mode as soon as the address window has been programmed. Emit it from ssd135x_update_rect(), which both the damage update and the clear screen paths go through. SSD1351 differs from previous controllers in the command protocol. While the opcode is still sent on the command path, the parameters are sent on the data path. Introduce the cmd_params_are_data flag to struct ssd130x_deviceinfo and let ssd130x_write_cmds() split the buffer in accordance to the device specifications. The SSD1351 also needs its own init sequence (ssd135x_init). The remap byte is fixed at horizontal address increment, COM split, reversed COM scan direction, BGR sub-pixel order and 65k color depth; rotation is not supported. Contrast is calibrated per color channel as for the ssd133x family, but the three channels are parameters of a single command (0xc1) instead of one command per channel. Add ssd135x_set_contrast() for that and use it from both the init and the backlight update paths. The SSD1351 is SPI-only, so only the SPI transport match tables gain an entry; no new config symbol is needed. Assisted-by: LLM Signed-off-by: Amit Barzilai <amit.barzilai22@gmail.com> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Link: https://patch.msgid.link/20260914085931.66857-7-amit.barzilai22@gmail.com Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
6 daysdrm/ssd130x: Implement ssd130x_write_cmd() on top of ssd130x_write_cmds()Amit Barzilai
ssd130x_write_cmd() and ssd130x_write_cmds() each carried their own regmap_write() loop over SSD13XX_COMMAND, differing only in how the caller supplies the bytes. Turn ssd130x_write_cmd() into a thin variadic wrapper that collects its arguments into a small stack buffer and defers to ssd130x_write_cmds(), and move the protocol comment onto the latter, which is where the loop now lives. No functional change: the bytes sent and the bus transactions used to send them are identical for every chip on both the I2C and SPI transports. Assisted-by: LLM Signed-off-by: Amit Barzilai <amit.barzilai22@gmail.com> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Link: https://patch.msgid.link/20260914085931.66857-6-amit.barzilai22@gmail.com Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
6 daysdrm/ssd130x: Replace positional ssd130x_spi_id[] initialization with C99Amit Barzilai
ssd130x_spi_id[] is initialized with positional initializers, which easily create easy-to-miss bugs when changing the members of the target struct (struct spi_device_id in this example). Change this to C99 initializers to guarantee each member is initialized with the correct value. Signed-off-by: Amit Barzilai <amit.barzilai22@gmail.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Link: https://patch.msgid.link/20260914085931.66857-5-amit.barzilai22@gmail.com Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
6 daysdrm/ssd130x: Constify ssd130x_write_data() 'values' parameterAmit Barzilai
At no point does ssd130x_write_data() change the bytes it receives via the 'values' parameter. Constify the parameter so const-qualified buffers pass through without casting away const. Signed-off-by: Amit Barzilai <amit.barzilai22@gmail.com> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> Link: https://patch.msgid.link/20260914085931.66857-4-amit.barzilai22@gmail.com Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
6 daysdrm/ssd130x: Change SSD133X color format to RGB565 from RGB332Amit Barzilai
SSD133X screens were driven at 8bpp RGB332 despite supporting 16bpp RGB565. Switch the SSD133X data path to RGB565. Assisted-by: LLM Signed-off-by: Amit Barzilai <amit.barzilai22@gmail.com> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@intel.com> Link: https://patch.msgid.link/20260914085931.66857-3-amit.barzilai22@gmail.com Signed-off-by: Javier Martinez Canillas <javierm@redhat.com>
6 dayspinctrl: mpfs-mssio: use correct regmap function to set bank voltageConor Dooley
regmap_assign_bits() is not the correct function to use for an RMW operation, as it maps to regmap_set_bits() or regmap_clear_bits() and the former will never zero a bit. Use regmap_update_bits() instead, which will actually set the bank voltages to what have been requested. CC: stable@vger.kernel.org Fixes: 488d704ed7b7 ("pinctrl: add polarfire soc mssio pinctrl driver") Signed-off-by: Conor Dooley <conor.dooley@microchip.com> Signed-off-by: Linus Walleij <linusw@kernel.org>
6 dayspinctrl: mpfs-mssio: fix width of unused bank voltage settingConor Dooley
The bank voltages are only 4 bits wide, so when a pin was unused the driver was not correctly interpreting it as being at zero volts, because the driver's value for unused had two extra set bits. CC: stable@vger.kernel.org Fixes: 488d704ed7b7 ("pinctrl: add polarfire soc mssio pinctrl driver") Signed-off-by: Conor Dooley <conor.dooley@microchip.com> Signed-off-by: Linus Walleij <linusw@kernel.org>
6 daysMerge branches 'fastrpc-fixes' and 'fastrpc-for-7.4' into fastrpc-for-nextSrinivas Kandagatla
* fastrpc-fixes: misc: fastrpc: Allocate entire reserved memory for Audio PD in probe misc: fastrpc: fix double-free in fastrpc_map_attach() error path * fastrpc-for-7.4: misc: fastrpc: Use devm_of_reserved_mem_device_init() misc: fastrpc: Reduce console noise from expected DSP info, reserved memory and session messages
6 dayspinctrl: generic: serialise pinctrl_generic_dt_node_to_map()Sarah Emery
pinctrl_generic_add_group() documents that the caller must take care of locking, and pinmux_generic_add_function() needs it too, but pinctrl_generic_dt_node_to_map() calls them without holding pctldev->mutex, and the core caller in create_pinctrl() does not take it either. The driver core calls pinctrl_bind_pins() before probing a device, so two devices that reference the same pin controller can run pinctrl_generic_dt_node_to_map() on one pctldev at the same time. Both `add` functions take the new selector from pctldev->num_groups or pctldev->num_functions, and radix_tree_insert() at that index. Two racing callers can read the same selector before either has inserted, so the second insert collides and fails: k1-pinctrl d401e000.pinctrl: error -EEXIST: error adding function pcie2-0-cfg k1-pinctrl d401e000.pinctrl: does not have pin group pcie0-0-cfg.pcie0-0-pins leaving one consumer without its pin configuration. This was hit on a SpacemiT K3 board, where PCIe devices probe in parallel against the single shared pin controller. Take pctldev->mutex across the whole function, so that the groups and the function referring are in a single critical section. Fixes: 43722575e5cd ("pinctrl: add generic functions + pins mapper") Signed-off-by: Sarah Emery <sarah.emery@canonical.com> Signed-off-by: Linus Walleij <linusw@kernel.org>
6 daysthunderbolt: stream: Check the Rx ring before task starts sleepingMika Westerberg
In interrupt mode when tb_ring_poll_complete() is called it is possible that a frame was completed right before the ring interrupt was unmasked in which case there will be no interrupt and the task starts sleeping. Avoid this and check if there is anything completed prior putting the task to sleep. The same can happen with poll() so check the ring there too before reporting that there is nothing to read. Assisted-by: LLM Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
6 daysthunderbolt: stream: Do not hold the lock while busy pollingMika Westerberg
When in busy poll mode with a reader and writer, and there is nothing completed on the rings both sides keep taking and releasing the lock from each other and this can cause stalls. Avoid this by calling the new API function tb_ring_poll_pending() that only returns true if there is anything available in which case they can take the lock and know there is now work to do. Reported-by: Alan Borzeszkowski <alan.borzeszkowski@linux.intel.com> Assisted-by: LLM Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
6 daysthunderbolt: Add tb_ring_poll_pending()Mika Westerberg
This helper can be used to figure out whether tb_ring_poll() has a frame to be returned. This can be used without the caller needing to take its own lock. Assisted-by: LLM Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
6 daysthunderbolt: Write descriptors in tb_ring_poll()Mika Westerberg
When the ring is not in interrupt mode, it depends on something enqueuing new frames to write the descriptors from ring->queue to the hardware, and that can take a long time. Since we know that we just released one slot, we can push the next frame directly from tb_ring_poll(). Reported-by: Alan Borzeszkowski <alan.borzeszkowski@linux.intel.com> Assisted-by: LLM Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
6 daysgpio: virtuser: skip free_irq when no IRQ is installedRunyu Xiao
Disabling interrupt monitoring uses atomic_xchg() to clear the stored IRQ. When monitoring is already disabled, atomic_xchg() returns 0. It must not be passed to free_irq(). The bug is reproducible on an x86_64 QEMU guest with CONFIG_GPIO_VIRTUSER=y and CONFIG_GPIO_SIM=y. Configure a live gpio-virtuser device through configfs. Its input lookup must refer to a live gpio-sim bank, such as key gpio-sim-test with offset 0. The consumer's dev_name attribute is shown as <dev> below; then run: echo 0 > /sys/kernel/debug/gpio-virtuser/<dev>/gpiod:input:0/interrupts On an unpatched kernel, this reaches gpio_virtuser_interrupts_set() with ld->irq still at its initial value 0, and free_irq() reports: Trying to free already-free IRQ 0 The same reproducer completes without the warning on the patched kernel. Fixes: 91581c4b3f29 ("gpio: virtuser: new virtual testing driver for the GPIO API") Assisted-by: LLM Signed-off-by: Runyu Xiao <runyu.xiao@seu.edu.cn> Reviewed-by: Linus Walleij <linusw@kernel.org> Link: https://patch.msgid.link/20260914051537.15320-1-runyu.xiao@seu.edu.cn Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
6 daysthunderbolt: Reject oversized XDomain properties responsesDaehyeon Ko
tb_xdp_properties_request() allocates room for 45 data dwords in its 252-byte response buffer. The XDomain length field is six bits wide, however, and a malicious peer can set it to 63. After the fixed response fields are subtracted, the driver treats this as 48 data dwords. Commit 322e93448d90 ("thunderbolt: Clamp XDomain response data copy to allocation size") only bounds the copy against data_len. If data_len is at least 48, memcpy() reads 192 bytes from the 180-byte res->data array, causing a 12-byte heap out-of-bounds read. Commit 4db2bd2ed478 ("thunderbolt: Limit XDomain response copy to actual frame size") limits the earlier copy but does not constrain this header-derived length. Reject response data lengths that exceed the allocated source buffer before copying them into the assembled property block. Fixes: d1ff70241a27 ("thunderbolt: Add support for XDomain discovery protocol") Cc: stable@vger.kernel.org Assisted-by: LLM Signed-off-by: Daehyeon Ko <4ncienth@gmail.com> Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
6 dayspinctrl: meson: Fix typo in s4 group nameSean Anderson
One of the i2c pin groups has some junk at the end. The name should be i2c2_scl_h1, and indeed that's the name used by i2c2_pins3 in meson-s4.dtsi. Fixes: 775214d389c25 ("pinctrl: meson: add pinctrl driver support for Meson-S4 Soc") Signed-off-by: Sean Anderson <sanderson@brivo.com> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Signed-off-by: Linus Walleij <linusw@kernel.org>
6 daysgpio: realtek-otto: add pinctrl supportMichael Zavertkin
RTL9607C relies on pinctrl to mux SoC pins. Use pinctrl to request pins for GPIO. pinctrl driver for other SoCs might be implemented later. Signed-off-by: Michael Zavertkin <misha.zavertkin@mail.ru> Link: https://patch.msgid.link/adce57b3797cae6f6a3486eb1d21c33be61f14dc.1787830440.git.misha.zavertkin@mail.ru Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@oss.qualcomm.com>
6 dayspinctrl: amd: add timeout to irq-enable readbackLinkai Gong
amd_gpio_irq_set_type() polls INTERRUPT_ENABLE with IRQs off and no timeout. Use readl_poll_timeout_atomic() and return -ETIMEDOUT. Fixes: b85bfa246efd ("pinctrl/amd: poll InterruptEnable bits in amd_gpio_irq_set_type") Signed-off-by: Linkai Gong <gonglinkai@kylinos.cn> Signed-off-by: Linus Walleij <linusw@kernel.org>
6 daysdrm/mcde: dsi: simplify device_node management using scoped for_each variantLuca Ceresoli
Before further modifying this function, simpify the struct device_node management using the scoped variat of for_each_available_child_of_node(). Signed-off-by: Luca Ceresoli <luca.ceresoli@bootlin.com> Reviewed-by: Linus Walleij <linusw@kernel.org> Reviewed-by: Maxime Ripard <mripard@kernel.org> Signed-off-by: Linus Walleij <linusw@kernel.org> Link: https://patch.msgid.link/20260814-drm-bridge-every-panel-v1-8-19cd5277cc8d@bootlin.com
6 daysmisc: fastrpc: Use devm_of_reserved_mem_device_init()Mukesh Ojha
Use the devres-managed devm_of_reserved_mem_device_init() to ensure the reserved memory region is released on device removal, fixing a missing of_reserved_mem_device_release() in fastrpc_rpmsg_remove(). Reviewed-by: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com> Signed-off-by: Mukesh Ojha <mukesh.ojha@oss.qualcomm.com> Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com> Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
6 daysmisc: fastrpc: Reduce console noise from expected DSP info, reserved memory ↵Jianping Li
and session messages On some platforms the DSP firmware does not support the fastrpc capability/attribute query. The DSP side returns an error (err: -1) while handling the request, so fastrpc_get_info_from_dsp() does not return DSP_UNSUPPORTED_API but a generic error, and the "else if (err)" branch in fastrpc_get_info_from_kernel() is taken. cctx->valid_attributes is therefore never set and every open()/query re-prints the same "dsp information is incorrect" line. This is not tied to boot timing: it can be reproduced at any time by manually starting adsprpcd. On RC builds with metadata flashing enabled several clients come up and flood the console. As this is an expected, platform-specific and non-fatal condition, downgrade the message to dev_dbg. Similarly, the absence of reserved DMA memory is a valid configuration and does not indicate an error, so downgrade that message to dev_dbg as well. Also rate-limit the "No session available" message with dev_err_ratelimited(): it reflects a genuine failure (open() returns -EBUSY) so it should still be visible, but must not flood dmesg when the session pool is exhausted. No functional change intended. Signed-off-by: Jianping Li <jianping.li@oss.qualcomm.com> Link: https://lore.kernel.org/all/20260514062825.50172-1-jianping.li@oss.qualcomm.com/ Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
6 daysmisc: fastrpc: Allocate entire reserved memory for Audio PD in probeJianping Li
Allocating and freeing Audio PD memory from userspace is unsafe because the kernel cannot reliably determine when the DSP has finished using the memory. Userspace may free buffers while they are still in use by the DSP, and remote free requests cannot be safely trusted. Additionally, the current implementation allows userspace to repeatedly grow the Audio PD heap, but does not support shrinking it. This can lead to unbounded memory usage over time, effectively causing a memory leak. Fix this by allocating the entire Audio PD reserved-memory region during rpmsg probe and tying its lifetime to the rpmsg channel. This removes userspace-controlled alloc/free and ensures that memory is reclaimed only when the DSP process is torn down. The reserved-memory region is now mandatory for the Audio PD domain. Rather than failing rpmsg probe when it is missing, validate it in fastrpc_init_create_static_process() and reject only the static-process creation. This keeps the fastrpc device probing for all other domains even on a misconfigured device tree. Fixes: 0871561055e66 ("misc: fastrpc: Add support for audiopd") Cc: stable@kernel.org Signed-off-by: Jianping Li <jianping.li@oss.qualcomm.com> Reviewed-by: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com> Link: https://lore.kernel.org/all/20260814101955.234238-1-jianping.li@oss.qualcomm.com/ Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
6 daysmisc: fastrpc: fix double-free in fastrpc_map_attach() error pathYifei Gao
map->table is assigned right after dma_buf_map_attachment_unlocked() succeeds. The two failure checks that follow, the len > map->size test and, where subsystem VMIDs are configured, a failed qcom_scm_assign_mem(), jump to map_err with map->table already set. map_err manually calls dma_buf_detach() and dma_buf_put() and then falls through to fastrpc_map_put(). Since that change the error path tail is fastrpc_map_put() -> fastrpc_free_map(), and fastrpc_free_map() already unmaps, detaches and puts the dma-buf whenever map->table is set. The two operations therefore run twice: the second dma_buf_put() drops an extra reference on map->buf, and dma_buf_unmap_attachment_unlocked() dereferences the map->attach already freed by the manual dma_buf_detach(). kref_init() sets the refcount to 1 with no intervening get, so the final fastrpc_map_put() frees the map synchronously and the redundant cleanup is deterministic. The len > map->size branch is reachable by an unprivileged process via FASTRPC_IOCTL_MEM_MAP with an fd whose dma-buf is smaller than the requested length, before any DSP invocation. Route both map->table-is-set failure branches to get_err instead of map_err, so fastrpc_free_map() is the single owner of the unmap/detach/put sequence. map_err is retained for the dma_buf_map_attachment_unlocked() failure, which is reached with map->table still NULL and an attachment that fastrpc_free_map() will not clean up, so its dma_buf_detach()/dma_buf_put() must still run manually. Fixes: 334f1a1cbe03 ("misc: fastrpc: Use fastrpc_map_put in fastrpc_map_create on fail") Cc: stable@vger.kernel.org Assisted-by: Claude:claude-opus-4-8 Signed-off-by: Yifei Gao <gyf161023@gmail.com> Reviewed-by: Ekansh Gupta <ekansh.gupta@oss.qualcomm.com> Signed-off-by: Srinivas Kandagatla <srini@kernel.org>
6 daysclk: renesas: r9a09g077: Register SYSC regmapLad Prabhakar
Register a syscon regmap for the System Controller (SYSC) integrated into the RZ/T2H and RZ/N2H CPG block. Unlike traditional Renesas CPG/MSSR implementations, the RZ/T2H and RZ/N2H CPG block also integrates the SYSC, which provides low-power management, clock monitoring, write protection and peripheral configuration registers shared by multiple drivers. Implement the RZ/T2H-specific .post_init() callback to create and register a syscon regmap covering the SYSC register space using the CPG device node. For backward compatibility, return without registering the regmap when the mapped resources correspond to older Device Trees that expose only the legacy 64 KiB CPG register window. Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Link: https://patch.msgid.link/20260817192540.423994-2-prabhakar.mahadev-lad.rj@bp.renesas.com Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>