From patchwork Mon Feb 17 16:37:07 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 13978228 Received: from mail-wr1-f49.google.com (mail-wr1-f49.google.com [209.85.221.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 162DF225769; Mon, 17 Feb 2025 16:37:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810250; cv=none; b=oa0vLpHuQmVS47CI0w3MkSHtZ+UlIzcERFt8EsW1gvvPOt1Olp0xdjKmPa2zN3Ol1yjGYHYdiLGU0d5vA8ev0sq9qU2XMlkzEAVqgECaq9c6jsFu9urLolo9CiIkqyANu33lXDzI27IvgZBSapVdv5d5U7c3Jj4Fc7INYye+VEo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810250; c=relaxed/simple; bh=pyIfQBw2UC7YVUWWfeUsXxTyzWYpgbd4mSHY+C/a9tA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fEavr8OJafABznrhwMJO4pCWI99UxeDAW4lLpowuiIoKM5cH3XdCkg5mD0vkxMi/NZGL/SdeSG5e7zTUd3r7Ae/bCzcdvCuT386L0zLbom8ASCkIyQO42xWIVmPTtemcc3cbUzKxIztpgaHrQwEFG5DD0VSpjkwhBMpYCfRuzjM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Mt1PXXBI; arc=none smtp.client-ip=209.85.221.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Mt1PXXBI" Received: by mail-wr1-f49.google.com with SMTP id ffacd0b85a97d-38f22fe889aso3586950f8f.3; Mon, 17 Feb 2025 08:37:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739810243; x=1740415043; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ht6Tw66XBXpDEdLi5x6CX6yF/C+fg+QYQL0S/NppgKE=; b=Mt1PXXBICl5Egp4Zo0ARpkE+NNqajjoLa1kxvo+Z//HH0TnIOGbSDxg8ysBKtSFpL8 CwObsNLCMk3M7i4SN4HCEPp22u4jzKdNJ/fC26oxzUe29w8HoExs9KaKQS6ws9TmzqcH PIuZ3HoCSEdZyWKMhAK+lsFNVHxgzytlvTrdKHkQrgQNzWtEq9gVxSKUfPAyoWf78brB J6AriW0DRwHbTvp34dAippat1LmtGg5i/D/c5F8REXdiNIMTZuF+XzdJDRQe3DVEZ5B3 +ekkVRCbjYbMVGbhGrND2iLf6Poq/imkvgnIHSPoqTnczwyY3F5NcSmbkxtOXv+meyvG xU+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739810243; x=1740415043; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ht6Tw66XBXpDEdLi5x6CX6yF/C+fg+QYQL0S/NppgKE=; b=aXFS4Oyc+6G5AyyUVVNxlPN66TBXgMmGqaXRk1JbY7MvDCpxZeYAYcl2HYCyKGnecH wkCJPk2Q3WcHRf9TC+u2AxPQPu6s7o2eqB09z3WeaOLArZRnncStZq4L2K/dtVostWBW o/sdS3kNHZQ80GQHMQ5rqwltGUhUve74BonnaBIx3YrB6nc8maiGDmHI1QEem2Pxni+z FxGsKAWXndjik0FYjSvcJmFw8ZwDqvrLXddXJd5NRYmXK3Fomao5oy4hXe4JWAswz3mk Yo+9iiO+9DdtTv+YsjlSgXn4UgEEBx5yMj7E+TvzJKokpUYJMlSwXEvg9jKFQQgBX5N5 gNrA== X-Forwarded-Encrypted: i=1; AJvYcCUXJhgHv50bm/vT3HhywbEtjBDsvLBahBNZ9yWszi9kGkDAwD78hc1OpdwafT5fhmmtUD9k7Nc8KQnY@vger.kernel.org, AJvYcCUjsVuIOvhGG4mEWLRMNt8yNZ8b2aKIdpwPsc1kVa4iB4B1J8KBtROn7b7et+8VeJaJi14jPL9nXv2e0t69@vger.kernel.org, AJvYcCWFoRb+zAhAdNthGP2VJorsR8qzAnzZYPAy6aXeCWZY+wFVembMJIp+U0X75UtHoZS0WHuzDfiTZ4/Y@vger.kernel.org, AJvYcCWPYAhG2pS3VBXUPmZv91DYfU2PPFLI+5D3Q2XZUGvqZh0iAwgxRF/RJ5xcM4YcYPKlcyiTbgpO0vE=@vger.kernel.org, AJvYcCXuBFI9b5eW2pKGFnkmKoLFU+GTVzg/spGYsvj5ng+zmHjopoEYT/XEXgEBdH48gcs7LR76z5nP+sSD4Q==@vger.kernel.org X-Gm-Message-State: AOJu0YwzoiogdfemW4OfbJotQMvihajLTDCm9klhMjXErRTfiyNlVrBv 0wFktpWNMMGsqnEMBiAbeb+ocplDWbgz67yf/G+yByDDBTey7QEp X-Gm-Gg: ASbGncsL7A3Gggql76jZTHllzuIIWGhs2Upn5m2CIOQ1NNN0b7ToqpMh7HzCZAcIBng 87KZXc89ODuFTv2t+HOe5mNKCItTZ5b8rlajmnESGthKq8b+dSrKqbN5RT57VDXeX3QmJ90WtIw Hdx4dOD0fzmaFzL0StLJ/vSRonKR0qsXn76u/15D7bOLHzoxZ/fJKtpjMQb/oRjBDHIbaQZTITL xS6cpQ6hOk/XinFSgGbFT4YNCb+xoD3NXUqiim7muO0p3JomN6enGbqyYQ+TrkMUBelpC4qHZem bOSIu22i/Lnmu66pTjGSfcsMAChhRZcFR0YLuhd2+hoUxN9YSKbqybY2R3n4N3jZbIK/OvEKf8C t7haQM+s= X-Google-Smtp-Source: AGHT+IG2VnNWvd1Smnp6D3wlajIrpI/BwbrfZkIXbLuygzQ8+rlsnp9dqjIX61Nx7wg6bF3b5jg72g== X-Received: by 2002:a5d:6c66:0:b0:38f:2f0e:9813 with SMTP id ffacd0b85a97d-38f33e8067cmr12055449f8f.0.1739810242634; Mon, 17 Feb 2025 08:37:22 -0800 (PST) Received: from localhost (p200300e41f22a600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f22:a600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38f2591570esm12880746f8f.59.2025.02.17.08.37.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 08:37:21 -0800 (PST) From: Thierry Reding To: Greg Kroah-Hartman Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/7] syscore: Pass context data to callbacks Date: Mon, 17 Feb 2025 17:37:07 +0100 Message-ID: <20250217163713.211949-2-thierry.reding@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217163713.211949-1-thierry.reding@gmail.com> References: <20250217163713.211949-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Thierry Reding Pass a pointer to the syscore_ops structure that was registered to the callbacks. This enables callbacks to act on instance data (syscore_ops can be embedded into other structures, and driver-specific data can be obtained using container_of()) rather than the current practice of relying on global variables. Signed-off-by: Thierry Reding --- arch/arm/mach-exynos/mcpm-exynos.c | 4 ++-- arch/arm/mach-exynos/suspend.c | 14 +++++++------- arch/arm/mach-pxa/irq.c | 4 ++-- arch/arm/mach-pxa/mfp-pxa2xx.c | 4 ++-- arch/arm/mach-pxa/mfp-pxa3xx.c | 4 ++-- arch/arm/mach-pxa/smemc.c | 4 ++-- arch/arm/mach-s3c/irq-pm-s3c64xx.c | 4 ++-- arch/arm/mach-s5pv210/pm.c | 2 +- arch/arm/mach-versatile/integrator_ap.c | 4 ++-- arch/arm/mm/cache-b15-rac.c | 4 ++-- arch/loongarch/kernel/smp.c | 4 ++-- arch/mips/alchemy/common/dbdma.c | 4 ++-- arch/mips/alchemy/common/irq.c | 8 ++++---- arch/mips/alchemy/common/usb.c | 4 ++-- arch/mips/pci/pci-alchemy.c | 4 ++-- arch/powerpc/platforms/cell/spu_base.c | 2 +- arch/powerpc/platforms/powermac/pic.c | 4 ++-- arch/powerpc/sysdev/fsl_lbc.c | 4 ++-- arch/powerpc/sysdev/fsl_pci.c | 4 ++-- arch/powerpc/sysdev/ipic.c | 4 ++-- arch/powerpc/sysdev/mpic.c | 4 ++-- arch/powerpc/sysdev/mpic_timer.c | 2 +- arch/sh/mm/pmb.c | 2 +- arch/x86/events/amd/ibs.c | 4 ++-- arch/x86/hyperv/hv_init.c | 4 ++-- arch/x86/kernel/amd_gart_64.c | 2 +- arch/x86/kernel/apic/apic.c | 4 ++-- arch/x86/kernel/apic/io_apic.c | 9 +++++++-- arch/x86/kernel/cpu/aperfmperf.c | 6 +++--- arch/x86/kernel/cpu/intel_epb.c | 8 ++++---- arch/x86/kernel/cpu/mce/core.c | 6 +++--- arch/x86/kernel/cpu/microcode/core.c | 7 ++++++- arch/x86/kernel/cpu/mtrr/legacy.c | 4 ++-- arch/x86/kernel/cpu/umwait.c | 2 +- arch/x86/kernel/i8237.c | 2 +- arch/x86/kernel/i8259.c | 6 +++--- arch/x86/kernel/kvm.c | 4 ++-- drivers/acpi/pci_link.c | 2 +- drivers/acpi/sleep.c | 4 ++-- drivers/base/firmware_loader/main.c | 2 +- drivers/base/syscore.c | 8 ++++---- drivers/bus/mvebu-mbus.c | 4 ++-- drivers/clk/at91/pmc.c | 4 ++-- drivers/clk/imx/clk-vf610.c | 4 ++-- drivers/clk/ingenic/pm.c | 4 ++-- drivers/clk/ingenic/tcu.c | 4 ++-- drivers/clk/mvebu/common.c | 4 ++-- drivers/clk/rockchip/clk-rk3288.c | 4 ++-- drivers/clk/samsung/clk-s5pv210-audss.c | 4 ++-- drivers/clk/samsung/clk.c | 4 ++-- drivers/clk/tegra/clk-tegra210.c | 4 ++-- drivers/clocksource/timer-armada-370-xp.c | 4 ++-- drivers/cpuidle/cpuidle-psci.c | 4 ++-- drivers/gpio/gpio-mxc.c | 4 ++-- drivers/gpio/gpio-pxa.c | 4 ++-- drivers/hv/vmbus_drv.c | 4 ++-- drivers/iommu/amd/init.c | 4 ++-- drivers/iommu/intel/iommu.c | 4 ++-- drivers/irqchip/exynos-combiner.c | 6 ++++-- drivers/irqchip/irq-armada-370-xp.c | 4 ++-- drivers/irqchip/irq-bcm7038-l1.c | 4 ++-- drivers/irqchip/irq-gic-v3-its.c | 4 ++-- drivers/irqchip/irq-i8259.c | 4 ++-- drivers/irqchip/irq-imx-gpcv2.c | 4 ++-- drivers/irqchip/irq-loongson-eiointc.c | 4 ++-- drivers/irqchip/irq-loongson-htpic.c | 2 +- drivers/irqchip/irq-loongson-htvec.c | 4 ++-- drivers/irqchip/irq-loongson-pch-lpc.c | 4 ++-- drivers/irqchip/irq-loongson-pch-pic.c | 4 ++-- drivers/irqchip/irq-mchp-eic.c | 4 ++-- drivers/irqchip/irq-mst-intc.c | 4 ++-- drivers/irqchip/irq-mtk-cirq.c | 4 ++-- drivers/irqchip/irq-renesas-rzg2l.c | 4 ++-- drivers/irqchip/irq-sa11x0.c | 4 ++-- drivers/irqchip/irq-sifive-plic.c | 4 ++-- drivers/irqchip/irq-sun6i-r.c | 10 +++++----- drivers/irqchip/irq-tegra.c | 4 ++-- drivers/irqchip/irq-vic.c | 4 ++-- drivers/leds/trigger/ledtrig-cpu.c | 6 +++--- drivers/macintosh/via-pmu.c | 4 ++-- drivers/power/reset/sc27xx-poweroff.c | 2 +- drivers/sh/clk/core.c | 2 +- drivers/sh/intc/core.c | 4 ++-- drivers/soc/bcm/brcmstb/biuctrl.c | 4 ++-- drivers/soc/tegra/pmc.c | 4 ++-- drivers/thermal/intel/intel_hfi.c | 4 ++-- drivers/xen/xen-acpi-processor.c | 2 +- include/linux/syscore_ops.h | 6 +++--- kernel/cpu_pm.c | 4 ++-- kernel/irq/generic-chip.c | 6 +++--- kernel/irq/pm.c | 2 +- kernel/printk/printk.c | 2 +- kernel/time/sched_clock.c | 14 ++++++++++++-- kernel/time/timekeeping.c | 14 ++++++++++++-- virt/kvm/kvm_main.c | 6 +++--- 95 files changed, 227 insertions(+), 195 deletions(-) diff --git a/arch/arm/mach-exynos/mcpm-exynos.c b/arch/arm/mach-exynos/mcpm-exynos.c index fd0dbeb93357..e9ec6bc1936e 100644 --- a/arch/arm/mach-exynos/mcpm-exynos.c +++ b/arch/arm/mach-exynos/mcpm-exynos.c @@ -215,7 +215,7 @@ static const struct of_device_id exynos_dt_mcpm_match[] = { {}, }; -static void exynos_mcpm_setup_entry_point(void) +static void exynos_mcpm_setup_entry_point(struct syscore_ops *ops) { /* * U-Boot SPL is hardcoded to jump to the start of ns_sram_base_addr @@ -300,7 +300,7 @@ static int __init exynos_mcpm_init(void) pmu_raw_writel(value, EXYNOS_COMMON_OPTION(i)); } - exynos_mcpm_setup_entry_point(); + exynos_mcpm_setup_entry_point(NULL); register_syscore_ops(&exynos_mcpm_syscore_ops); diff --git a/arch/arm/mach-exynos/suspend.c b/arch/arm/mach-exynos/suspend.c index cac4e82f6c82..0c355e8e01cf 100644 --- a/arch/arm/mach-exynos/suspend.c +++ b/arch/arm/mach-exynos/suspend.c @@ -53,8 +53,8 @@ struct exynos_pm_data { void (*pm_prepare)(void); void (*pm_resume_prepare)(void); - void (*pm_resume)(void); - int (*pm_suspend)(void); + void (*pm_resume)(struct syscore_ops *ops); + int (*pm_suspend)(struct syscore_ops *ops); int (*cpu_suspend)(unsigned long); }; @@ -377,7 +377,7 @@ static void exynos5420_pm_prepare(void) } -static int exynos_pm_suspend(void) +static int exynos_pm_suspend(struct syscore_ops *ops) { exynos_pm_central_suspend(); @@ -391,7 +391,7 @@ static int exynos_pm_suspend(void) return 0; } -static int exynos5420_pm_suspend(void) +static int exynos5420_pm_suspend(struct syscore_ops *ops) { u32 this_cluster; @@ -409,7 +409,7 @@ static int exynos5420_pm_suspend(void) return 0; } -static void exynos_pm_resume(void) +static void exynos_pm_resume(struct syscore_ops *ops) { u32 cpuid = read_cpuid_part(); @@ -430,7 +430,7 @@ static void exynos_pm_resume(void) exynos_set_delayed_reset_assertion(true); } -static void exynos3250_pm_resume(void) +static void exynos3250_pm_resume(struct syscore_ops *ops) { u32 cpuid = read_cpuid_part(); @@ -474,7 +474,7 @@ static void exynos5420_prepare_pm_resume(void) } } -static void exynos5420_pm_resume(void) +static void exynos5420_pm_resume(struct syscore_ops *ops) { unsigned long tmp; diff --git a/arch/arm/mach-pxa/irq.c b/arch/arm/mach-pxa/irq.c index a9ef71008147..6f4ab713a0d1 100644 --- a/arch/arm/mach-pxa/irq.c +++ b/arch/arm/mach-pxa/irq.c @@ -179,7 +179,7 @@ void __init pxa_init_irq(int irq_nr, int (*fn)(struct irq_data *, unsigned int)) static unsigned long saved_icmr[MAX_INTERNAL_IRQS/32]; static unsigned long saved_ipr[MAX_INTERNAL_IRQS]; -static int pxa_irq_suspend(void) +static int pxa_irq_suspend(struct syscore_ops *ops) { int i; @@ -198,7 +198,7 @@ static int pxa_irq_suspend(void) return 0; } -static void pxa_irq_resume(void) +static void pxa_irq_resume(struct syscore_ops *ops) { int i; diff --git a/arch/arm/mach-pxa/mfp-pxa2xx.c b/arch/arm/mach-pxa/mfp-pxa2xx.c index f5a3d890f682..55d697c80f45 100644 --- a/arch/arm/mach-pxa/mfp-pxa2xx.c +++ b/arch/arm/mach-pxa/mfp-pxa2xx.c @@ -346,7 +346,7 @@ static unsigned long saved_gpdr[4]; static unsigned long saved_gplr[4]; static unsigned long saved_pgsr[4]; -static int pxa2xx_mfp_suspend(void) +static int pxa2xx_mfp_suspend(struct syscore_ops *ops) { int i; @@ -385,7 +385,7 @@ static int pxa2xx_mfp_suspend(void) return 0; } -static void pxa2xx_mfp_resume(void) +static void pxa2xx_mfp_resume(struct syscore_ops *ops) { int i; diff --git a/arch/arm/mach-pxa/mfp-pxa3xx.c b/arch/arm/mach-pxa/mfp-pxa3xx.c index d16ab7451efe..263ffe35e893 100644 --- a/arch/arm/mach-pxa/mfp-pxa3xx.c +++ b/arch/arm/mach-pxa/mfp-pxa3xx.c @@ -27,13 +27,13 @@ * a pull-down mode if they're an active low chip select, and we're * just entering standby. */ -static int pxa3xx_mfp_suspend(void) +static int pxa3xx_mfp_suspend(struct syscore_ops *ops) { mfp_config_lpm(); return 0; } -static void pxa3xx_mfp_resume(void) +static void pxa3xx_mfp_resume(struct syscore_ops *ops) { mfp_config_run(); diff --git a/arch/arm/mach-pxa/smemc.c b/arch/arm/mach-pxa/smemc.c index 2d2a321d82f8..265a6b86d19d 100644 --- a/arch/arm/mach-pxa/smemc.c +++ b/arch/arm/mach-pxa/smemc.c @@ -18,7 +18,7 @@ static unsigned long msc[2]; static unsigned long sxcnfg, memclkcfg; static unsigned long csadrcfg[4]; -static int pxa3xx_smemc_suspend(void) +static int pxa3xx_smemc_suspend(struct syscore_ops *ops) { msc[0] = __raw_readl(MSC0); msc[1] = __raw_readl(MSC1); @@ -32,7 +32,7 @@ static int pxa3xx_smemc_suspend(void) return 0; } -static void pxa3xx_smemc_resume(void) +static void pxa3xx_smemc_resume(struct syscore_ops *ops) { __raw_writel(msc[0], MSC0); __raw_writel(msc[1], MSC1); diff --git a/arch/arm/mach-s3c/irq-pm-s3c64xx.c b/arch/arm/mach-s3c/irq-pm-s3c64xx.c index 4a1e935bada1..0841c5df9614 100644 --- a/arch/arm/mach-s3c/irq-pm-s3c64xx.c +++ b/arch/arm/mach-s3c/irq-pm-s3c64xx.c @@ -58,7 +58,7 @@ static struct irq_grp_save { static u32 irq_uart_mask[SERIAL_SAMSUNG_UARTS]; -static int s3c64xx_irq_pm_suspend(void) +static int s3c64xx_irq_pm_suspend(struct syscore_ops *ops) { struct irq_grp_save *grp = eint_grp_save; int i; @@ -79,7 +79,7 @@ static int s3c64xx_irq_pm_suspend(void) return 0; } -static void s3c64xx_irq_pm_resume(void) +static void s3c64xx_irq_pm_resume(struct syscore_ops *ops) { struct irq_grp_save *grp = eint_grp_save; int i; diff --git a/arch/arm/mach-s5pv210/pm.c b/arch/arm/mach-s5pv210/pm.c index 6fa70f787df4..5b1dd70259f3 100644 --- a/arch/arm/mach-s5pv210/pm.c +++ b/arch/arm/mach-s5pv210/pm.c @@ -195,7 +195,7 @@ static const struct platform_suspend_ops s5pv210_suspend_ops = { /* * Syscore operations used to delay restore of certain registers. */ -static void s5pv210_pm_resume(void) +static void s5pv210_pm_resume(struct syscore_ops *ops) { s3c_pm_do_restore_core(s5pv210_core_save, ARRAY_SIZE(s5pv210_core_save)); } diff --git a/arch/arm/mach-versatile/integrator_ap.c b/arch/arm/mach-versatile/integrator_ap.c index 4bd6712e9f52..90718a4ca613 100644 --- a/arch/arm/mach-versatile/integrator_ap.c +++ b/arch/arm/mach-versatile/integrator_ap.c @@ -63,13 +63,13 @@ static void __init ap_map_io(void) #ifdef CONFIG_PM static unsigned long ic_irq_enable; -static int irq_suspend(void) +static int irq_suspend(struct syscore_ops *ops) { ic_irq_enable = readl(VA_IC_BASE + IRQ_ENABLE); return 0; } -static void irq_resume(void) +static void irq_resume(struct syscore_ops *ops) { /* disable all irq sources */ cm_clear_irqs(); diff --git a/arch/arm/mm/cache-b15-rac.c b/arch/arm/mm/cache-b15-rac.c index 6f63b90f9e1a..fcb07d2050d0 100644 --- a/arch/arm/mm/cache-b15-rac.c +++ b/arch/arm/mm/cache-b15-rac.c @@ -256,7 +256,7 @@ static int b15_rac_dead_cpu(unsigned int cpu) return 0; } -static int b15_rac_suspend(void) +static int b15_rac_suspend(struct syscore_ops *ops) { /* Suspend the read-ahead cache oeprations, forcing our cache * implementation to fallback to the regular ARMv7 calls. @@ -271,7 +271,7 @@ static int b15_rac_suspend(void) return 0; } -static void b15_rac_resume(void) +static void b15_rac_resume(struct syscore_ops *ops) { /* Coming out of a S3 suspend/resume cycle, the read-ahead cache * register RAC_CONFIG0_REG will be restored to its default value, make diff --git a/arch/loongarch/kernel/smp.c b/arch/loongarch/kernel/smp.c index fbf747447f13..cd8c5e639b5a 100644 --- a/arch/loongarch/kernel/smp.c +++ b/arch/loongarch/kernel/smp.c @@ -454,12 +454,12 @@ void __noreturn arch_cpu_idle_dead(void) */ #ifdef CONFIG_PM -static int loongson_ipi_suspend(void) +static int loongson_ipi_suspend(struct syscore_ops *ops) { return 0; } -static void loongson_ipi_resume(void) +static void loongson_ipi_resume(struct syscore_ops *ops) { iocsr_write32(0xffffffff, LOONGARCH_IOCSR_IPI_EN); } diff --git a/arch/mips/alchemy/common/dbdma.c b/arch/mips/alchemy/common/dbdma.c index 6a3c890f7bbf..0cccf427756a 100644 --- a/arch/mips/alchemy/common/dbdma.c +++ b/arch/mips/alchemy/common/dbdma.c @@ -982,7 +982,7 @@ u32 au1xxx_dbdma_put_dscr(u32 chanid, au1x_ddma_desc_t *dscr) static unsigned long alchemy_dbdma_pm_data[NUM_DBDMA_CHANS + 1][6]; -static int alchemy_dbdma_suspend(void) +static int alchemy_dbdma_suspend(struct syscore_ops *ops) { int i; void __iomem *addr; @@ -1019,7 +1019,7 @@ static int alchemy_dbdma_suspend(void) return 0; } -static void alchemy_dbdma_resume(void) +static void alchemy_dbdma_resume(struct syscore_ops *ops) { int i; void __iomem *addr; diff --git a/arch/mips/alchemy/common/irq.c b/arch/mips/alchemy/common/irq.c index da9f9220048f..8e999dbbed46 100644 --- a/arch/mips/alchemy/common/irq.c +++ b/arch/mips/alchemy/common/irq.c @@ -758,7 +758,7 @@ static inline void alchemy_ic_resume_one(void __iomem *base, unsigned long *d) wmb(); } -static int alchemy_ic_suspend(void) +static int alchemy_ic_suspend(struct syscore_ops *ops) { alchemy_ic_suspend_one((void __iomem *)KSEG1ADDR(AU1000_IC0_PHYS_ADDR), alchemy_gpic_pmdata); @@ -767,7 +767,7 @@ static int alchemy_ic_suspend(void) return 0; } -static void alchemy_ic_resume(void) +static void alchemy_ic_resume(struct syscore_ops *ops) { alchemy_ic_resume_one((void __iomem *)KSEG1ADDR(AU1000_IC1_PHYS_ADDR), &alchemy_gpic_pmdata[7]); @@ -775,7 +775,7 @@ static void alchemy_ic_resume(void) alchemy_gpic_pmdata); } -static int alchemy_gpic_suspend(void) +static int alchemy_gpic_suspend(struct syscore_ops *ops) { void __iomem *base = (void __iomem *)KSEG1ADDR(AU1300_GPIC_PHYS_ADDR); int i; @@ -806,7 +806,7 @@ static int alchemy_gpic_suspend(void) return 0; } -static void alchemy_gpic_resume(void) +static void alchemy_gpic_resume(struct syscore_ops *ops) { void __iomem *base = (void __iomem *)KSEG1ADDR(AU1300_GPIC_PHYS_ADDR); int i; diff --git a/arch/mips/alchemy/common/usb.c b/arch/mips/alchemy/common/usb.c index 5d618547ebf0..3d9bb51e00ea 100644 --- a/arch/mips/alchemy/common/usb.c +++ b/arch/mips/alchemy/common/usb.c @@ -580,13 +580,13 @@ static void alchemy_usb_pm(int susp) } } -static int alchemy_usb_suspend(void) +static int alchemy_usb_suspend(struct syscore_ops *ops) { alchemy_usb_pm(1); return 0; } -static void alchemy_usb_resume(void) +static void alchemy_usb_resume(struct syscore_ops *ops) { alchemy_usb_pm(0); } diff --git a/arch/mips/pci/pci-alchemy.c b/arch/mips/pci/pci-alchemy.c index 58625d1b6465..a20de7160b6b 100644 --- a/arch/mips/pci/pci-alchemy.c +++ b/arch/mips/pci/pci-alchemy.c @@ -304,7 +304,7 @@ static int alchemy_pci_def_idsel(unsigned int devsel, int assert) } /* save PCI controller register contents. */ -static int alchemy_pci_suspend(void) +static int alchemy_pci_suspend(struct syscore_ops *ops) { struct alchemy_pci_context *ctx = __alchemy_pci_ctx; if (!ctx) @@ -326,7 +326,7 @@ static int alchemy_pci_suspend(void) return 0; } -static void alchemy_pci_resume(void) +static void alchemy_pci_resume(struct syscore_ops *ops) { struct alchemy_pci_context *ctx = __alchemy_pci_ctx; if (!ctx) diff --git a/arch/powerpc/platforms/cell/spu_base.c b/arch/powerpc/platforms/cell/spu_base.c index dea6f0f25897..c85a1eb0745d 100644 --- a/arch/powerpc/platforms/cell/spu_base.c +++ b/arch/powerpc/platforms/cell/spu_base.c @@ -727,7 +727,7 @@ static inline void crash_register_spus(struct list_head *list) } #endif -static void spu_shutdown(void) +static void spu_shutdown(struct syscore_ops *ops) { struct spu *spu; diff --git a/arch/powerpc/platforms/powermac/pic.c b/arch/powerpc/platforms/powermac/pic.c index 2202bf77c7a3..571f7039a7cc 100644 --- a/arch/powerpc/platforms/powermac/pic.c +++ b/arch/powerpc/platforms/powermac/pic.c @@ -599,7 +599,7 @@ static int pmacpic_find_viaint(void) return viaint; } -static int pmacpic_suspend(void) +static int pmacpic_suspend(struct syscore_ops *ops) { int viaint = pmacpic_find_viaint(); @@ -620,7 +620,7 @@ static int pmacpic_suspend(void) return 0; } -static void pmacpic_resume(void) +static void pmacpic_resume(struct syscore_ops *ops) { int i; diff --git a/arch/powerpc/sysdev/fsl_lbc.c b/arch/powerpc/sysdev/fsl_lbc.c index 217cea150987..d215c6aeec8b 100644 --- a/arch/powerpc/sysdev/fsl_lbc.c +++ b/arch/powerpc/sysdev/fsl_lbc.c @@ -350,7 +350,7 @@ static int fsl_lbc_ctrl_probe(struct platform_device *dev) #ifdef CONFIG_SUSPEND /* save lbc registers */ -static int fsl_lbc_syscore_suspend(void) +static int fsl_lbc_syscore_suspend(struct syscore_ops *ops) { struct fsl_lbc_ctrl *ctrl; struct fsl_lbc_regs __iomem *lbc; @@ -374,7 +374,7 @@ static int fsl_lbc_syscore_suspend(void) } /* restore lbc registers */ -static void fsl_lbc_syscore_resume(void) +static void fsl_lbc_syscore_resume(struct syscore_ops *ops) { struct fsl_lbc_ctrl *ctrl; struct fsl_lbc_regs __iomem *lbc; diff --git a/arch/powerpc/sysdev/fsl_pci.c b/arch/powerpc/sysdev/fsl_pci.c index ef7707ea0db7..64ab3f46a1b7 100644 --- a/arch/powerpc/sysdev/fsl_pci.c +++ b/arch/powerpc/sysdev/fsl_pci.c @@ -1258,7 +1258,7 @@ static void fsl_pci_syscore_do_suspend(struct pci_controller *hose) send_pme_turnoff_message(hose); } -static int fsl_pci_syscore_suspend(void) +static int fsl_pci_syscore_suspend(struct syscore_ops *ops) { struct pci_controller *hose, *tmp; @@ -1291,7 +1291,7 @@ static void fsl_pci_syscore_do_resume(struct pci_controller *hose) setup_pci_atmu(hose); } -static void fsl_pci_syscore_resume(void) +static void fsl_pci_syscore_resume(struct syscore_ops *ops) { struct pci_controller *hose, *tmp; diff --git a/arch/powerpc/sysdev/ipic.c b/arch/powerpc/sysdev/ipic.c index 5f69e2d50f26..f63040ec022c 100644 --- a/arch/powerpc/sysdev/ipic.c +++ b/arch/powerpc/sysdev/ipic.c @@ -817,7 +817,7 @@ static struct { u32 sercr; } ipic_saved_state; -static int ipic_suspend(void) +static int ipic_suspend(struct syscore_ops *ops) { struct ipic *ipic = primary_ipic; @@ -848,7 +848,7 @@ static int ipic_suspend(void) return 0; } -static void ipic_resume(void) +static void ipic_resume(struct syscore_ops *ops) { struct ipic *ipic = primary_ipic; diff --git a/arch/powerpc/sysdev/mpic.c b/arch/powerpc/sysdev/mpic.c index d94cf36b0f65..c56f2287b3a8 100644 --- a/arch/powerpc/sysdev/mpic.c +++ b/arch/powerpc/sysdev/mpic.c @@ -1943,7 +1943,7 @@ static void mpic_suspend_one(struct mpic *mpic) } } -static int mpic_suspend(void) +static int mpic_suspend(struct syscore_ops *ops) { struct mpic *mpic = mpics; @@ -1985,7 +1985,7 @@ static void mpic_resume_one(struct mpic *mpic) } /* end for loop */ } -static void mpic_resume(void) +static void mpic_resume(struct syscore_ops *ops) { struct mpic *mpic = mpics; diff --git a/arch/powerpc/sysdev/mpic_timer.c b/arch/powerpc/sysdev/mpic_timer.c index 7166e2e0baaf..9f9986bb2dc9 100644 --- a/arch/powerpc/sysdev/mpic_timer.c +++ b/arch/powerpc/sysdev/mpic_timer.c @@ -519,7 +519,7 @@ static void __init timer_group_init(struct device_node *np) kfree(priv); } -static void mpic_timer_resume(void) +static void mpic_timer_resume(struct syscore_ops *ops) { struct timer_group_priv *priv; diff --git a/arch/sh/mm/pmb.c b/arch/sh/mm/pmb.c index 68eb7cc6e564..7b71038bcc71 100644 --- a/arch/sh/mm/pmb.c +++ b/arch/sh/mm/pmb.c @@ -857,7 +857,7 @@ static int __init pmb_debugfs_init(void) subsys_initcall(pmb_debugfs_init); #ifdef CONFIG_PM -static void pmb_syscore_resume(void) +static void pmb_syscore_resume(struct syscore_ops *ops) { struct pmb_entry *pmbe; int i; diff --git a/arch/x86/events/amd/ibs.c b/arch/x86/events/amd/ibs.c index 7978d7910adc..278a579834d1 100644 --- a/arch/x86/events/amd/ibs.c +++ b/arch/x86/events/amd/ibs.c @@ -1545,13 +1545,13 @@ static int x86_pmu_amd_ibs_starting_cpu(unsigned int cpu) #ifdef CONFIG_PM -static int perf_ibs_suspend(void) +static int perf_ibs_suspend(struct syscore_ops *ops) { clear_APIC_ibs(); return 0; } -static void perf_ibs_resume(void) +static void perf_ibs_resume(struct syscore_ops *ops) { ibs_eilvt_setup(); setup_APIC_ibs(); diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index 9be1446f5bd3..c8e0600b5353 100644 --- a/arch/x86/hyperv/hv_init.c +++ b/arch/x86/hyperv/hv_init.c @@ -312,7 +312,7 @@ static int __init hv_pci_init(void) return 1; } -static int hv_suspend(void) +static int hv_suspend(struct syscore_ops *ops) { union hv_x64_msr_hypercall_contents hypercall_msr; int ret; @@ -339,7 +339,7 @@ static int hv_suspend(void) return ret; } -static void hv_resume(void) +static void hv_resume(struct syscore_ops *ops) { union hv_x64_msr_hypercall_contents hypercall_msr; int ret; diff --git a/arch/x86/kernel/amd_gart_64.c b/arch/x86/kernel/amd_gart_64.c index c884deca839b..29206f0ba7fd 100644 --- a/arch/x86/kernel/amd_gart_64.c +++ b/arch/x86/kernel/amd_gart_64.c @@ -591,7 +591,7 @@ static void gart_fixup_northbridges(void) } } -static void gart_resume(void) +static void gart_resume(struct syscore_ops *ops) { pr_info("PCI-DMA: Resuming GART IOMMU\n"); diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index e893dc6f11c1..6d8f4ee0e629 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -2378,7 +2378,7 @@ static struct { unsigned int apic_cmci; } apic_pm_state; -static int lapic_suspend(void) +static int lapic_suspend(struct syscore_ops *ops) { unsigned long flags; int maxlvt; @@ -2426,7 +2426,7 @@ static int lapic_suspend(void) return 0; } -static void lapic_resume(void) +static void lapic_resume(struct syscore_ops *ops) { unsigned int l, h; unsigned long flags; diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c index eebc360ed1bb..497e29c1e248 100644 --- a/arch/x86/kernel/apic/io_apic.c +++ b/arch/x86/kernel/apic/io_apic.c @@ -2308,7 +2308,12 @@ static void resume_ioapic_id(int ioapic_idx) } } -static void ioapic_resume(void) +static int ioapic_suspend(struct syscore_ops *ops) +{ + return save_ioapic_entries(); +} + +static void ioapic_resume(struct syscore_ops *ops) { int ioapic_idx; @@ -2319,7 +2324,7 @@ static void ioapic_resume(void) } static struct syscore_ops ioapic_syscore_ops = { - .suspend = save_ioapic_entries, + .suspend = ioapic_suspend, .resume = ioapic_resume, }; diff --git a/arch/x86/kernel/cpu/aperfmperf.c b/arch/x86/kernel/cpu/aperfmperf.c index f642de2ebdac..b82c89756941 100644 --- a/arch/x86/kernel/cpu/aperfmperf.c +++ b/arch/x86/kernel/cpu/aperfmperf.c @@ -36,7 +36,7 @@ static DEFINE_PER_CPU_SHARED_ALIGNED(struct aperfmperf, cpu_samples) = { .seq = SEQCNT_ZERO(cpu_samples.seq) }; -static void init_counter_refs(void) +static void init_counter_refs(struct syscore_ops *ops) { u64 aperf, mperf; @@ -534,7 +534,7 @@ static int __init bp_init_aperfmperf(void) if (!cpu_feature_enabled(X86_FEATURE_APERFMPERF)) return 0; - init_counter_refs(); + init_counter_refs(NULL); bp_init_freq_invariance(); return 0; } @@ -543,5 +543,5 @@ early_initcall(bp_init_aperfmperf); void ap_init_aperfmperf(void) { if (cpu_feature_enabled(X86_FEATURE_APERFMPERF)) - init_counter_refs(); + init_counter_refs(NULL); } diff --git a/arch/x86/kernel/cpu/intel_epb.c b/arch/x86/kernel/cpu/intel_epb.c index 30b1d63b97f3..d41db3b9544d 100644 --- a/arch/x86/kernel/cpu/intel_epb.c +++ b/arch/x86/kernel/cpu/intel_epb.c @@ -75,7 +75,7 @@ static u8 energ_perf_values[] = { [EPB_INDEX_POWERSAVE] = ENERGY_PERF_BIAS_POWERSAVE, }; -static int intel_epb_save(void) +static int intel_epb_save(struct syscore_ops *ops) { u64 epb; @@ -89,7 +89,7 @@ static int intel_epb_save(void) return 0; } -static void intel_epb_restore(void) +static void intel_epb_restore(struct syscore_ops *ops) { u64 val = this_cpu_read(saved_epb); u64 epb; @@ -185,7 +185,7 @@ static int intel_epb_online(unsigned int cpu) { struct device *cpu_dev = get_cpu_device(cpu); - intel_epb_restore(); + intel_epb_restore(NULL); if (!cpuhp_tasks_frozen) sysfs_merge_group(&cpu_dev->kobj, &intel_epb_attr_group); @@ -199,7 +199,7 @@ static int intel_epb_offline(unsigned int cpu) if (!cpuhp_tasks_frozen) sysfs_unmerge_group(&cpu_dev->kobj, &intel_epb_attr_group); - intel_epb_save(); + intel_epb_save(NULL); return 0; } diff --git a/arch/x86/kernel/cpu/mce/core.c b/arch/x86/kernel/cpu/mce/core.c index 0dc00c9894c7..9f1755bed917 100644 --- a/arch/x86/kernel/cpu/mce/core.c +++ b/arch/x86/kernel/cpu/mce/core.c @@ -2459,13 +2459,13 @@ static void vendor_disable_error_reporting(void) mce_disable_error_reporting(); } -static int mce_syscore_suspend(void) +static int mce_syscore_suspend(struct syscore_ops *ops) { vendor_disable_error_reporting(); return 0; } -static void mce_syscore_shutdown(void) +static void mce_syscore_shutdown(struct syscore_ops *ops) { vendor_disable_error_reporting(); } @@ -2475,7 +2475,7 @@ static void mce_syscore_shutdown(void) * Only one CPU is active at this time, the others get re-added later using * CPU hotplug: */ -static void mce_syscore_resume(void) +static void mce_syscore_resume(struct syscore_ops *ops) { __mcheck_cpu_init_generic(); __mcheck_cpu_init_vendor(raw_cpu_ptr(&cpu_info)); diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c index b3658d11e7b6..20943f4d2b7a 100644 --- a/arch/x86/kernel/cpu/microcode/core.c +++ b/arch/x86/kernel/cpu/microcode/core.c @@ -762,8 +762,13 @@ void microcode_bsp_resume(void) reload_early_microcode(cpu); } +static void microcode_bsp_syscore_resume(struct syscore_ops *ops) +{ + microcode_bsp_resume(); +} + static struct syscore_ops mc_syscore_ops = { - .resume = microcode_bsp_resume, + .resume = microcode_bsp_syscore_resume, }; static int mc_cpu_online(unsigned int cpu) diff --git a/arch/x86/kernel/cpu/mtrr/legacy.c b/arch/x86/kernel/cpu/mtrr/legacy.c index d25882fcf181..51258e44f246 100644 --- a/arch/x86/kernel/cpu/mtrr/legacy.c +++ b/arch/x86/kernel/cpu/mtrr/legacy.c @@ -41,7 +41,7 @@ struct mtrr_value { static struct mtrr_value *mtrr_value; -static int mtrr_save(void) +static int mtrr_save(struct syscore_ops *ops) { int i; @@ -56,7 +56,7 @@ static int mtrr_save(void) return 0; } -static void mtrr_restore(void) +static void mtrr_restore(struct syscore_ops *ops) { int i; diff --git a/arch/x86/kernel/cpu/umwait.c b/arch/x86/kernel/cpu/umwait.c index 2293efd6ffa6..757df74d2aa6 100644 --- a/arch/x86/kernel/cpu/umwait.c +++ b/arch/x86/kernel/cpu/umwait.c @@ -86,7 +86,7 @@ static int umwait_cpu_offline(unsigned int cpu) * trust the firmware nor does it matter if the same value is written * again. */ -static void umwait_syscore_resume(void) +static void umwait_syscore_resume(struct syscore_ops *ops) { umwait_update_control_msr(NULL); } diff --git a/arch/x86/kernel/i8237.c b/arch/x86/kernel/i8237.c index 2cd124ad9380..aaa86ed1539a 100644 --- a/arch/x86/kernel/i8237.c +++ b/arch/x86/kernel/i8237.c @@ -19,7 +19,7 @@ * in asm/dma.h. */ -static void i8237A_resume(void) +static void i8237A_resume(struct syscore_ops *ops) { unsigned long flags; int i; diff --git a/arch/x86/kernel/i8259.c b/arch/x86/kernel/i8259.c index c20d1832c481..091d9d3e7420 100644 --- a/arch/x86/kernel/i8259.c +++ b/arch/x86/kernel/i8259.c @@ -246,19 +246,19 @@ static void save_ELCR(char *trigger) trigger[1] = inb(PIC_ELCR2) & 0xDE; } -static void i8259A_resume(void) +static void i8259A_resume(struct syscore_ops *ops) { init_8259A(i8259A_auto_eoi); restore_ELCR(irq_trigger); } -static int i8259A_suspend(void) +static int i8259A_suspend(struct syscore_ops *ops) { save_ELCR(irq_trigger); return 0; } -static void i8259A_shutdown(void) +static void i8259A_shutdown(struct syscore_ops *ops) { /* Put the i8259A into a quiescent state that * the kernel initialization code can get it diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 7a422a6c5983..b845d0592915 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -720,7 +720,7 @@ static int kvm_cpu_down_prepare(unsigned int cpu) #endif -static int kvm_suspend(void) +static int kvm_suspend(struct syscore_ops *ops) { u64 val = 0; @@ -734,7 +734,7 @@ static int kvm_suspend(void) return 0; } -static void kvm_resume(void) +static void kvm_resume(struct syscore_ops *ops) { kvm_cpu_online(raw_smp_processor_id()); diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c index 08e10b6226dc..b1ab30522f98 100644 --- a/drivers/acpi/pci_link.c +++ b/drivers/acpi/pci_link.c @@ -761,7 +761,7 @@ static int acpi_pci_link_resume(struct acpi_pci_link *link) return 0; } -static void irqrouter_resume(void) +static void irqrouter_resume(struct syscore_ops *ops) { struct acpi_pci_link *link; diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c index c8ee8e42b0f6..9f6b108384a7 100644 --- a/drivers/acpi/sleep.c +++ b/drivers/acpi/sleep.c @@ -884,13 +884,13 @@ bool acpi_s2idle_wakeup(void) #ifdef CONFIG_PM_SLEEP static u32 saved_bm_rld; -static int acpi_save_bm_rld(void) +static int acpi_save_bm_rld(struct syscore_ops *ops) { acpi_read_bit_register(ACPI_BITREG_BUS_MASTER_RLD, &saved_bm_rld); return 0; } -static void acpi_restore_bm_rld(void) +static void acpi_restore_bm_rld(struct syscore_ops *ops) { u32 resumed_bm_rld = 0; diff --git a/drivers/base/firmware_loader/main.c b/drivers/base/firmware_loader/main.c index cb0912ea3e62..7f9a775abf7d 100644 --- a/drivers/base/firmware_loader/main.c +++ b/drivers/base/firmware_loader/main.c @@ -1620,7 +1620,7 @@ static int fw_pm_notify(struct notifier_block *notify_block, } /* stop caching firmware once syscore_suspend is reached */ -static int fw_suspend(void) +static int fw_suspend(struct syscore_ops *ops) { fw_cache.state = FW_LOADER_NO_CACHE; return 0; diff --git a/drivers/base/syscore.c b/drivers/base/syscore.c index 13db1f78d2ce..e467078faa28 100644 --- a/drivers/base/syscore.c +++ b/drivers/base/syscore.c @@ -62,7 +62,7 @@ int syscore_suspend(void) list_for_each_entry_reverse(ops, &syscore_ops_list, node) if (ops->suspend) { pm_pr_dbg("Calling %pS\n", ops->suspend); - ret = ops->suspend(); + ret = ops->suspend(ops); if (ret) goto err_out; WARN_ONCE(!irqs_disabled(), @@ -77,7 +77,7 @@ int syscore_suspend(void) list_for_each_entry_continue(ops, &syscore_ops_list, node) if (ops->resume) - ops->resume(); + ops->resume(ops); return ret; } @@ -99,7 +99,7 @@ void syscore_resume(void) list_for_each_entry(ops, &syscore_ops_list, node) if (ops->resume) { pm_pr_dbg("Calling %pS\n", ops->resume); - ops->resume(); + ops->resume(ops); WARN_ONCE(!irqs_disabled(), "Interrupts enabled after %pS\n", ops->resume); } @@ -121,7 +121,7 @@ void syscore_shutdown(void) if (ops->shutdown) { if (initcall_debug) pr_info("PM: Calling %pS\n", ops->shutdown); - ops->shutdown(); + ops->shutdown(ops); } mutex_unlock(&syscore_ops_lock); diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c index 00cb792bda18..92daa45cc844 100644 --- a/drivers/bus/mvebu-mbus.c +++ b/drivers/bus/mvebu-mbus.c @@ -1006,7 +1006,7 @@ static __init int mvebu_mbus_debugfs_init(void) } fs_initcall(mvebu_mbus_debugfs_init); -static int mvebu_mbus_suspend(void) +static int mvebu_mbus_suspend(struct syscore_ops *ops) { struct mvebu_mbus_state *s = &mbus_state; int win; @@ -1040,7 +1040,7 @@ static int mvebu_mbus_suspend(void) return 0; } -static void mvebu_mbus_resume(void) +static void mvebu_mbus_resume(struct syscore_ops *ops) { struct mvebu_mbus_state *s = &mbus_state; int win; diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index acf780a81589..ad1ac97f65c9 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -115,7 +115,7 @@ struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem, /* Address in SECURAM that say if we suspend to backup mode. */ static void __iomem *at91_pmc_backup_suspend; -static int at91_pmc_suspend(void) +static int at91_pmc_suspend(struct syscore_ops *ops) { unsigned int backup; @@ -129,7 +129,7 @@ static int at91_pmc_suspend(void) return clk_save_context(); } -static void at91_pmc_resume(void) +static void at91_pmc_resume(struct syscore_ops *ops) { unsigned int backup; diff --git a/drivers/clk/imx/clk-vf610.c b/drivers/clk/imx/clk-vf610.c index 9e11f1c7c397..94aee6c5f9f4 100644 --- a/drivers/clk/imx/clk-vf610.c +++ b/drivers/clk/imx/clk-vf610.c @@ -139,7 +139,7 @@ static struct clk * __init vf610_get_fixed_clock( return clk; }; -static int vf610_clk_suspend(void) +static int vf610_clk_suspend(struct syscore_ops *ops) { int i; @@ -156,7 +156,7 @@ static int vf610_clk_suspend(void) return 0; } -static void vf610_clk_resume(void) +static void vf610_clk_resume(struct syscore_ops *ops) { int i; diff --git a/drivers/clk/ingenic/pm.c b/drivers/clk/ingenic/pm.c index 341752b640d2..b13f7f56b816 100644 --- a/drivers/clk/ingenic/pm.c +++ b/drivers/clk/ingenic/pm.c @@ -15,7 +15,7 @@ static void __iomem * __maybe_unused ingenic_cgu_base; -static int __maybe_unused ingenic_cgu_pm_suspend(void) +static int __maybe_unused ingenic_cgu_pm_suspend(struct syscore_ops *ops) { u32 val = readl(ingenic_cgu_base + CGU_REG_LCR); @@ -24,7 +24,7 @@ static int __maybe_unused ingenic_cgu_pm_suspend(void) return 0; } -static void __maybe_unused ingenic_cgu_pm_resume(void) +static void __maybe_unused ingenic_cgu_pm_resume(struct syscore_ops *ops) { u32 val = readl(ingenic_cgu_base + CGU_REG_LCR); diff --git a/drivers/clk/ingenic/tcu.c b/drivers/clk/ingenic/tcu.c index 7d04ef40b7cf..85bd4bc73c1b 100644 --- a/drivers/clk/ingenic/tcu.c +++ b/drivers/clk/ingenic/tcu.c @@ -455,7 +455,7 @@ static int __init ingenic_tcu_probe(struct device_node *np) return ret; } -static int __maybe_unused tcu_pm_suspend(void) +static int __maybe_unused tcu_pm_suspend(struct syscore_ops *ops) { struct ingenic_tcu *tcu = ingenic_tcu; @@ -465,7 +465,7 @@ static int __maybe_unused tcu_pm_suspend(void) return 0; } -static void __maybe_unused tcu_pm_resume(void) +static void __maybe_unused tcu_pm_resume(struct syscore_ops *ops) { struct ingenic_tcu *tcu = ingenic_tcu; diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c index 785dbede4835..ee77d307efe0 100644 --- a/drivers/clk/mvebu/common.c +++ b/drivers/clk/mvebu/common.c @@ -215,13 +215,13 @@ static struct clk *clk_gating_get_src( return ERR_PTR(-ENODEV); } -static int mvebu_clk_gating_suspend(void) +static int mvebu_clk_gating_suspend(struct syscore_ops *ops) { ctrl->saved_reg = readl(ctrl->base); return 0; } -static void mvebu_clk_gating_resume(void) +static void mvebu_clk_gating_resume(struct syscore_ops *ops) { writel(ctrl->saved_reg, ctrl->base); } diff --git a/drivers/clk/rockchip/clk-rk3288.c b/drivers/clk/rockchip/clk-rk3288.c index 90d329216064..357471d85799 100644 --- a/drivers/clk/rockchip/clk-rk3288.c +++ b/drivers/clk/rockchip/clk-rk3288.c @@ -871,7 +871,7 @@ static const int rk3288_saved_cru_reg_ids[] = { static u32 rk3288_saved_cru_regs[ARRAY_SIZE(rk3288_saved_cru_reg_ids)]; -static int rk3288_clk_suspend(void) +static int rk3288_clk_suspend(struct syscore_ops *ops) { int i, reg_id; @@ -906,7 +906,7 @@ static int rk3288_clk_suspend(void) return 0; } -static void rk3288_clk_resume(void) +static void rk3288_clk_resume(struct syscore_ops *ops) { int i, reg_id; diff --git a/drivers/clk/samsung/clk-s5pv210-audss.c b/drivers/clk/samsung/clk-s5pv210-audss.c index d19a3d9fd452..0059abeb6362 100644 --- a/drivers/clk/samsung/clk-s5pv210-audss.c +++ b/drivers/clk/samsung/clk-s5pv210-audss.c @@ -35,7 +35,7 @@ static unsigned long reg_save[][2] = { {ASS_CLK_GATE, 0}, }; -static int s5pv210_audss_clk_suspend(void) +static int s5pv210_audss_clk_suspend(struct syscore_ops *ops) { int i; @@ -45,7 +45,7 @@ static int s5pv210_audss_clk_suspend(void) return 0; } -static void s5pv210_audss_clk_resume(void) +static void s5pv210_audss_clk_resume(struct syscore_ops *ops) { int i; diff --git a/drivers/clk/samsung/clk.c b/drivers/clk/samsung/clk.c index 8d440cf56bd4..93e395509d6f 100644 --- a/drivers/clk/samsung/clk.c +++ b/drivers/clk/samsung/clk.c @@ -271,7 +271,7 @@ void __init samsung_clk_of_register_fixed_ext(struct samsung_clk_provider *ctx, } #ifdef CONFIG_PM_SLEEP -static int samsung_clk_suspend(void) +static int samsung_clk_suspend(struct syscore_ops *ops) { struct samsung_clock_reg_cache *reg_cache; @@ -284,7 +284,7 @@ static int samsung_clk_suspend(void) return 0; } -static void samsung_clk_resume(void) +static void samsung_clk_resume(struct syscore_ops *ops) { struct samsung_clock_reg_cache *reg_cache; diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra210.c index a3488aaac3f7..6f8c2d7be0b1 100644 --- a/drivers/clk/tegra/clk-tegra210.c +++ b/drivers/clk/tegra/clk-tegra210.c @@ -3444,7 +3444,7 @@ static void tegra210_disable_cpu_clock(u32 cpu) static u32 spare_reg_ctx, misc_clk_enb_ctx, clk_msk_arm_ctx; static u32 cpu_softrst_ctx[3]; -static int tegra210_clk_suspend(void) +static int tegra210_clk_suspend(struct syscore_ops *ops) { unsigned int i; @@ -3465,7 +3465,7 @@ static int tegra210_clk_suspend(void) return 0; } -static void tegra210_clk_resume(void) +static void tegra210_clk_resume(struct syscore_ops *ops) { unsigned int i; diff --git a/drivers/clocksource/timer-armada-370-xp.c b/drivers/clocksource/timer-armada-370-xp.c index 54284c1c0651..5f6225842018 100644 --- a/drivers/clocksource/timer-armada-370-xp.c +++ b/drivers/clocksource/timer-armada-370-xp.c @@ -207,14 +207,14 @@ static int armada_370_xp_timer_dying_cpu(unsigned int cpu) static u32 timer0_ctrl_reg, timer0_local_ctrl_reg; -static int armada_370_xp_timer_suspend(void) +static int armada_370_xp_timer_suspend(struct syscore_ops *ops) { timer0_ctrl_reg = readl(timer_base + TIMER_CTRL_OFF); timer0_local_ctrl_reg = readl(local_base + TIMER_CTRL_OFF); return 0; } -static void armada_370_xp_timer_resume(void) +static void armada_370_xp_timer_resume(struct syscore_ops *ops) { writel(0xffffffff, timer_base + TIMER0_VAL_OFF); writel(0xffffffff, timer_base + TIMER0_RELOAD_OFF); diff --git a/drivers/cpuidle/cpuidle-psci.c b/drivers/cpuidle/cpuidle-psci.c index 2562dc001fc1..03408ebb18bd 100644 --- a/drivers/cpuidle/cpuidle-psci.c +++ b/drivers/cpuidle/cpuidle-psci.c @@ -151,13 +151,13 @@ static void psci_idle_syscore_switch(bool suspend) } } -static int psci_idle_syscore_suspend(void) +static int psci_idle_syscore_suspend(struct syscore_ops *ops) { psci_idle_syscore_switch(true); return 0; } -static void psci_idle_syscore_resume(void) +static void psci_idle_syscore_resume(struct syscore_ops *ops) { psci_idle_syscore_switch(false); } diff --git a/drivers/gpio/gpio-mxc.c b/drivers/gpio/gpio-mxc.c index 619b6fb9d833..00c8aa7e8266 100644 --- a/drivers/gpio/gpio-mxc.c +++ b/drivers/gpio/gpio-mxc.c @@ -659,7 +659,7 @@ static const struct dev_pm_ops mxc_gpio_dev_pm_ops = { RUNTIME_PM_OPS(mxc_gpio_runtime_suspend, mxc_gpio_runtime_resume, NULL) }; -static int mxc_gpio_syscore_suspend(void) +static int mxc_gpio_syscore_suspend(struct syscore_ops *ops) { struct mxc_gpio_port *port; int ret; @@ -676,7 +676,7 @@ static int mxc_gpio_syscore_suspend(void) return 0; } -static void mxc_gpio_syscore_resume(void) +static void mxc_gpio_syscore_resume(struct syscore_ops *ops) { struct mxc_gpio_port *port; int ret; diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c index 91cea97255fa..0394f0b1ca25 100644 --- a/drivers/gpio/gpio-pxa.c +++ b/drivers/gpio/gpio-pxa.c @@ -746,7 +746,7 @@ static int __init pxa_gpio_dt_init(void) device_initcall(pxa_gpio_dt_init); #ifdef CONFIG_PM -static int pxa_gpio_suspend(void) +static int pxa_gpio_suspend(struct syscore_ops *ops) { struct pxa_gpio_chip *pchip = pxa_gpio_chip; struct pxa_gpio_bank *c; @@ -767,7 +767,7 @@ static int pxa_gpio_suspend(void) return 0; } -static void pxa_gpio_resume(void) +static void pxa_gpio_resume(struct syscore_ops *ops) { struct pxa_gpio_chip *pchip = pxa_gpio_chip; struct pxa_gpio_bank *c; diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 75eb1390b45c..c816ee45d2fb 100644 --- a/drivers/hv/vmbus_drv.c +++ b/drivers/hv/vmbus_drv.c @@ -2605,7 +2605,7 @@ static void hv_crash_handler(struct pt_regs *regs) hv_synic_disable_regs(cpu); }; -static int hv_synic_suspend(void) +static int hv_synic_suspend(struct syscore_ops *ops) { /* * When we reach here, all the non-boot CPUs have been offlined. @@ -2632,7 +2632,7 @@ static int hv_synic_suspend(void) return 0; } -static void hv_synic_resume(void) +static void hv_synic_resume(struct syscore_ops *ops) { hv_synic_enable_regs(0); diff --git a/drivers/iommu/amd/init.c b/drivers/iommu/amd/init.c index cb536d372b12..3ec029e57da3 100644 --- a/drivers/iommu/amd/init.c +++ b/drivers/iommu/amd/init.c @@ -2910,7 +2910,7 @@ static void disable_iommus(void) * disable suspend until real resume implemented */ -static void amd_iommu_resume(void) +static void amd_iommu_resume(struct syscore_ops *ops) { struct amd_iommu *iommu; @@ -2924,7 +2924,7 @@ static void amd_iommu_resume(void) amd_iommu_enable_interrupts(); } -static int amd_iommu_suspend(void) +static int amd_iommu_suspend(struct syscore_ops *ops) { /* disable IOMMUs to go out of the way for BIOS */ disable_iommus(); diff --git a/drivers/iommu/intel/iommu.c b/drivers/iommu/intel/iommu.c index cc46098f875b..e17b92d50f29 100644 --- a/drivers/iommu/intel/iommu.c +++ b/drivers/iommu/intel/iommu.c @@ -2330,7 +2330,7 @@ static void iommu_flush_all(void) } } -static int iommu_suspend(void) +static int iommu_suspend(struct syscore_ops *ops) { struct dmar_drhd_unit *drhd; struct intel_iommu *iommu = NULL; @@ -2357,7 +2357,7 @@ static int iommu_suspend(void) return 0; } -static void iommu_resume(void) +static void iommu_resume(struct syscore_ops *ops) { struct dmar_drhd_unit *drhd; struct intel_iommu *iommu = NULL; diff --git a/drivers/irqchip/exynos-combiner.c b/drivers/irqchip/exynos-combiner.c index 552aa04ff063..f2783a0d520b 100644 --- a/drivers/irqchip/exynos-combiner.c +++ b/drivers/irqchip/exynos-combiner.c @@ -200,12 +200,13 @@ static void __init combiner_init(void __iomem *combiner_base, /** * combiner_suspend - save interrupt combiner state before suspend + * @ops: syscore context * * Save the interrupt enable set register for all combiner groups since * the state is lost when the system enters into a sleep state. * */ -static int combiner_suspend(void) +static int combiner_suspend(struct syscore_ops *ops) { int i; @@ -218,12 +219,13 @@ static int combiner_suspend(void) /** * combiner_resume - restore interrupt combiner state after resume + * @ops: syscore context * * Restore the interrupt enable set register for all combiner groups since * the state is lost when the system enters into a sleep state on suspend. * */ -static void combiner_resume(void) +static void combiner_resume(struct syscore_ops *ops) { int i; diff --git a/drivers/irqchip/irq-armada-370-xp.c b/drivers/irqchip/irq-armada-370-xp.c index d7c5ef248474..c643b438f35e 100644 --- a/drivers/irqchip/irq-armada-370-xp.c +++ b/drivers/irqchip/irq-armada-370-xp.c @@ -724,7 +724,7 @@ static void __exception_irq_entry mpic_handle_irq(struct pt_regs *regs) } while (1); } -static int mpic_suspend(void) +static int mpic_suspend(struct syscore_ops *ops) { struct mpic *mpic = mpic_data; @@ -733,7 +733,7 @@ static int mpic_suspend(void) return 0; } -static void mpic_resume(void) +static void mpic_resume(struct syscore_ops *ops) { struct mpic *mpic = mpic_data; bool src0, src1; diff --git a/drivers/irqchip/irq-bcm7038-l1.c b/drivers/irqchip/irq-bcm7038-l1.c index 36e71af054e9..1e6576997bc2 100644 --- a/drivers/irqchip/irq-bcm7038-l1.c +++ b/drivers/irqchip/irq-bcm7038-l1.c @@ -292,7 +292,7 @@ static int __init bcm7038_l1_init_one(struct device_node *dn, static LIST_HEAD(bcm7038_l1_intcs_list); static DEFINE_RAW_SPINLOCK(bcm7038_l1_intcs_lock); -static int bcm7038_l1_suspend(void) +static int bcm7038_l1_suspend(struct syscore_ops *ops) { struct bcm7038_l1_chip *intc; int boot_cpu, word; @@ -318,7 +318,7 @@ static int bcm7038_l1_suspend(void) return 0; } -static void bcm7038_l1_resume(void) +static void bcm7038_l1_resume(struct syscore_ops *ops) { struct bcm7038_l1_chip *intc; int boot_cpu, word; diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index 8c3ec5734f1e..7f069522d1d8 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -4969,7 +4969,7 @@ static void its_enable_quirks(struct its_node *its) its_quirks, its); } -static int its_save_disable(void) +static int its_save_disable(struct syscore_ops *ops) { struct its_node *its; int err = 0; @@ -5005,7 +5005,7 @@ static int its_save_disable(void) return err; } -static void its_restore_enable(void) +static void its_restore_enable(struct syscore_ops *ops) { struct its_node *its; int ret; diff --git a/drivers/irqchip/irq-i8259.c b/drivers/irqchip/irq-i8259.c index 115bdcffab24..5b25556569c0 100644 --- a/drivers/irqchip/irq-i8259.c +++ b/drivers/irqchip/irq-i8259.c @@ -202,13 +202,13 @@ static void mask_and_ack_8259A(struct irq_data *d) } } -static void i8259A_resume(void) +static void i8259A_resume(struct syscore_ops *ops) { if (i8259A_auto_eoi >= 0) init_8259A(i8259A_auto_eoi); } -static void i8259A_shutdown(void) +static void i8259A_shutdown(struct syscore_ops *ops) { /* Put the i8259A into a quiescent state that * the kernel initialization code can get it diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv2.c index 8a0e82067924..83b009881e2a 100644 --- a/drivers/irqchip/irq-imx-gpcv2.c +++ b/drivers/irqchip/irq-imx-gpcv2.c @@ -33,7 +33,7 @@ static void __iomem *gpcv2_idx_to_reg(struct gpcv2_irqchip_data *cd, int i) return cd->gpc_base + cd->cpu2wakeup + i * 4; } -static int gpcv2_wakeup_source_save(void) +static int gpcv2_wakeup_source_save(struct syscore_ops *ops) { struct gpcv2_irqchip_data *cd; void __iomem *reg; @@ -52,7 +52,7 @@ static int gpcv2_wakeup_source_save(void) return 0; } -static void gpcv2_wakeup_source_restore(void) +static void gpcv2_wakeup_source_restore(struct syscore_ops *ops) { struct gpcv2_irqchip_data *cd; int i; diff --git a/drivers/irqchip/irq-loongson-eiointc.c b/drivers/irqchip/irq-loongson-eiointc.c index bb79e19dfb59..1b47c5897eba 100644 --- a/drivers/irqchip/irq-loongson-eiointc.c +++ b/drivers/irqchip/irq-loongson-eiointc.c @@ -358,12 +358,12 @@ static struct irq_domain *acpi_get_vec_parent(int node, struct acpi_vector_group return NULL; } -static int eiointc_suspend(void) +static int eiointc_suspend(struct syscore_ops *ops) { return 0; } -static void eiointc_resume(void) +static void eiointc_resume(struct syscore_ops *ops) { eiointc_router_init(0); } diff --git a/drivers/irqchip/irq-loongson-htpic.c b/drivers/irqchip/irq-loongson-htpic.c index f4abdf156de7..723a2a1169c2 100644 --- a/drivers/irqchip/irq-loongson-htpic.c +++ b/drivers/irqchip/irq-loongson-htpic.c @@ -71,7 +71,7 @@ static void htpic_reg_init(void) writel(0xffff, htpic->base + HTINT_EN_OFF); } -static void htpic_resume(void) +static void htpic_resume(struct syscore_ops *ops) { htpic_reg_init(); } diff --git a/drivers/irqchip/irq-loongson-htvec.c b/drivers/irqchip/irq-loongson-htvec.c index 5da02c7ad0b3..7e91f114dd29 100644 --- a/drivers/irqchip/irq-loongson-htvec.c +++ b/drivers/irqchip/irq-loongson-htvec.c @@ -159,7 +159,7 @@ static void htvec_reset(struct htvec *priv) } } -static int htvec_suspend(void) +static int htvec_suspend(struct syscore_ops *ops) { int i; @@ -169,7 +169,7 @@ static int htvec_suspend(void) return 0; } -static void htvec_resume(void) +static void htvec_resume(struct syscore_ops *ops) { int i; diff --git a/drivers/irqchip/irq-loongson-pch-lpc.c b/drivers/irqchip/irq-loongson-pch-lpc.c index 2d4c3ec128b8..ce86bd209a9b 100644 --- a/drivers/irqchip/irq-loongson-pch-lpc.c +++ b/drivers/irqchip/irq-loongson-pch-lpc.c @@ -151,7 +151,7 @@ static int pch_lpc_disabled(struct pch_lpc *priv) (readl(priv->base + LPC_INT_STS) == 0xffffffff); } -static int pch_lpc_suspend(void) +static int pch_lpc_suspend(struct syscore_ops *ops) { pch_lpc_priv->saved_reg_ctl = readl(pch_lpc_priv->base + LPC_INT_CTL); pch_lpc_priv->saved_reg_ena = readl(pch_lpc_priv->base + LPC_INT_ENA); @@ -159,7 +159,7 @@ static int pch_lpc_suspend(void) return 0; } -static void pch_lpc_resume(void) +static void pch_lpc_resume(struct syscore_ops *ops) { writel(pch_lpc_priv->saved_reg_ctl, pch_lpc_priv->base + LPC_INT_CTL); writel(pch_lpc_priv->saved_reg_ena, pch_lpc_priv->base + LPC_INT_ENA); diff --git a/drivers/irqchip/irq-loongson-pch-pic.c b/drivers/irqchip/irq-loongson-pch-pic.c index 69efda35a8e7..769e355eb50c 100644 --- a/drivers/irqchip/irq-loongson-pch-pic.c +++ b/drivers/irqchip/irq-loongson-pch-pic.c @@ -278,7 +278,7 @@ static void pch_pic_reset(struct pch_pic *priv) } } -static int pch_pic_suspend(void) +static int pch_pic_suspend(struct syscore_ops *ops) { int i, j; @@ -296,7 +296,7 @@ static int pch_pic_suspend(void) return 0; } -static void pch_pic_resume(void) +static void pch_pic_resume(struct syscore_ops *ops) { int i, j; diff --git a/drivers/irqchip/irq-mchp-eic.c b/drivers/irqchip/irq-mchp-eic.c index 5dcd94c000a2..96d5234d3720 100644 --- a/drivers/irqchip/irq-mchp-eic.c +++ b/drivers/irqchip/irq-mchp-eic.c @@ -109,7 +109,7 @@ static int mchp_eic_irq_set_wake(struct irq_data *d, unsigned int on) return 0; } -static int mchp_eic_irq_suspend(void) +static int mchp_eic_irq_suspend(struct syscore_ops *ops) { unsigned int hwirq; @@ -123,7 +123,7 @@ static int mchp_eic_irq_suspend(void) return 0; } -static void mchp_eic_irq_resume(void) +static void mchp_eic_irq_resume(struct syscore_ops *ops) { unsigned int hwirq; diff --git a/drivers/irqchip/irq-mst-intc.c b/drivers/irqchip/irq-mst-intc.c index f6133ae28155..734450bca8d4 100644 --- a/drivers/irqchip/irq-mst-intc.c +++ b/drivers/irqchip/irq-mst-intc.c @@ -143,7 +143,7 @@ static void mst_intc_polarity_restore(struct mst_intc_chip_data *cd) writew_relaxed(cd->saved_polarity_conf[i], addr + i * 4); } -static void mst_irq_resume(void) +static void mst_irq_resume(struct syscore_ops *ops) { struct mst_intc_chip_data *cd; @@ -151,7 +151,7 @@ static void mst_irq_resume(void) mst_intc_polarity_restore(cd); } -static int mst_irq_suspend(void) +static int mst_irq_suspend(struct syscore_ops *ops) { struct mst_intc_chip_data *cd; diff --git a/drivers/irqchip/irq-mtk-cirq.c b/drivers/irqchip/irq-mtk-cirq.c index 76bc0283e3b9..bf20052e7a85 100644 --- a/drivers/irqchip/irq-mtk-cirq.c +++ b/drivers/irqchip/irq-mtk-cirq.c @@ -199,7 +199,7 @@ static const struct irq_domain_ops cirq_domain_ops = { }; #ifdef CONFIG_PM_SLEEP -static int mtk_cirq_suspend(void) +static int mtk_cirq_suspend(struct syscore_ops *ops) { void __iomem *reg; u32 value, mask; @@ -257,7 +257,7 @@ static int mtk_cirq_suspend(void) return 0; } -static void mtk_cirq_resume(void) +static void mtk_cirq_resume(struct syscore_ops *ops) { void __iomem *reg = mtk_cirq_reg(cirq_data, CIRQ_CONTROL); u32 value; diff --git a/drivers/irqchip/irq-renesas-rzg2l.c b/drivers/irqchip/irq-renesas-rzg2l.c index 99e27e01b0b1..308aa2800c04 100644 --- a/drivers/irqchip/irq-renesas-rzg2l.c +++ b/drivers/irqchip/irq-renesas-rzg2l.c @@ -399,7 +399,7 @@ static int rzg2l_irqc_set_type(struct irq_data *d, unsigned int type) return irq_chip_set_type_parent(d, IRQ_TYPE_LEVEL_HIGH); } -static int rzg2l_irqc_irq_suspend(void) +static int rzg2l_irqc_irq_suspend(struct syscore_ops *ops) { struct rzg2l_irqc_reg_cache *cache = &rzg2l_irqc_data->cache; void __iomem *base = rzg2l_irqc_data->base; @@ -411,7 +411,7 @@ static int rzg2l_irqc_irq_suspend(void) return 0; } -static void rzg2l_irqc_irq_resume(void) +static void rzg2l_irqc_irq_resume(struct syscore_ops *ops) { struct rzg2l_irqc_reg_cache *cache = &rzg2l_irqc_data->cache; void __iomem *base = rzg2l_irqc_data->base; diff --git a/drivers/irqchip/irq-sa11x0.c b/drivers/irqchip/irq-sa11x0.c index 9d0b80271949..d13a1635723d 100644 --- a/drivers/irqchip/irq-sa11x0.c +++ b/drivers/irqchip/irq-sa11x0.c @@ -85,7 +85,7 @@ static struct sa1100irq_state { unsigned int iccr; } sa1100irq_state; -static int sa1100irq_suspend(void) +static int sa1100irq_suspend(struct syscore_ops *ops) { struct sa1100irq_state *st = &sa1100irq_state; @@ -102,7 +102,7 @@ static int sa1100irq_suspend(void) return 0; } -static void sa1100irq_resume(void) +static void sa1100irq_resume(struct syscore_ops *ops) { struct sa1100irq_state *st = &sa1100irq_state; diff --git a/drivers/irqchip/irq-sifive-plic.c b/drivers/irqchip/irq-sifive-plic.c index bf69a4802b71..7dedfcbe220b 100644 --- a/drivers/irqchip/irq-sifive-plic.c +++ b/drivers/irqchip/irq-sifive-plic.c @@ -243,7 +243,7 @@ static int plic_irq_set_type(struct irq_data *d, unsigned int type) return IRQ_SET_MASK_OK; } -static int plic_irq_suspend(void) +static int plic_irq_suspend(struct syscore_ops *ops) { unsigned int i, cpu; unsigned long flags; @@ -274,7 +274,7 @@ static int plic_irq_suspend(void) return 0; } -static void plic_irq_resume(void) +static void plic_irq_resume(struct syscore_ops *ops) { unsigned int i, index, cpu; unsigned long flags; diff --git a/drivers/irqchip/irq-sun6i-r.c b/drivers/irqchip/irq-sun6i-r.c index 99958d470d62..f9157cf02442 100644 --- a/drivers/irqchip/irq-sun6i-r.c +++ b/drivers/irqchip/irq-sun6i-r.c @@ -268,7 +268,7 @@ static const struct irq_domain_ops sun6i_r_intc_domain_ops = { .free = irq_domain_free_irqs_common, }; -static int sun6i_r_intc_suspend(void) +static int sun6i_r_intc_suspend(struct syscore_ops *ops) { u32 buf[BITS_TO_U32(MAX(SUN6I_NR_TOP_LEVEL_IRQS, SUN6I_NR_MUX_BITS))]; int i; @@ -284,7 +284,7 @@ static int sun6i_r_intc_suspend(void) return 0; } -static void sun6i_r_intc_resume(void) +static void sun6i_r_intc_resume(struct syscore_ops *ops) { int i; @@ -294,9 +294,9 @@ static void sun6i_r_intc_resume(void) writel_relaxed(0, base + SUN6I_IRQ_ENABLE(i)); } -static void sun6i_r_intc_shutdown(void) +static void sun6i_r_intc_shutdown(struct syscore_ops *ops) { - sun6i_r_intc_suspend(); + sun6i_r_intc_suspend(ops); } static struct syscore_ops sun6i_r_intc_syscore_ops = { @@ -349,7 +349,7 @@ static int __init sun6i_r_intc_init(struct device_node *node, register_syscore_ops(&sun6i_r_intc_syscore_ops); sun6i_r_intc_ack_nmi(); - sun6i_r_intc_resume(); + sun6i_r_intc_resume(NULL); return 0; } diff --git a/drivers/irqchip/irq-tegra.c b/drivers/irqchip/irq-tegra.c index ad3e2c1b3c87..24247e8418bb 100644 --- a/drivers/irqchip/irq-tegra.c +++ b/drivers/irqchip/irq-tegra.c @@ -132,7 +132,7 @@ static int tegra_set_wake(struct irq_data *d, unsigned int enable) return 0; } -static int tegra_ictlr_suspend(void) +static int tegra_ictlr_suspend(struct syscore_ops *ops) { unsigned long flags; unsigned int i; @@ -161,7 +161,7 @@ static int tegra_ictlr_suspend(void) return 0; } -static void tegra_ictlr_resume(void) +static void tegra_ictlr_resume(struct syscore_ops *ops) { unsigned long flags; unsigned int i; diff --git a/drivers/irqchip/irq-vic.c b/drivers/irqchip/irq-vic.c index ea93e7236c4a..5f85a9c5a686 100644 --- a/drivers/irqchip/irq-vic.c +++ b/drivers/irqchip/irq-vic.c @@ -120,7 +120,7 @@ static void resume_one_vic(struct vic_device *vic) writel(~vic->soft_int, base + VIC_INT_SOFT_CLEAR); } -static void vic_resume(void) +static void vic_resume(struct syscore_ops *ops) { int id; @@ -146,7 +146,7 @@ static void suspend_one_vic(struct vic_device *vic) writel(~vic->resume_irqs, base + VIC_INT_ENABLE_CLEAR); } -static int vic_suspend(void) +static int vic_suspend(struct syscore_ops *ops) { int id; diff --git a/drivers/leds/trigger/ledtrig-cpu.c b/drivers/leds/trigger/ledtrig-cpu.c index 05848a2fecff..48a99dfa28d8 100644 --- a/drivers/leds/trigger/ledtrig-cpu.c +++ b/drivers/leds/trigger/ledtrig-cpu.c @@ -94,18 +94,18 @@ void ledtrig_cpu(enum cpu_led_event ledevt) } EXPORT_SYMBOL(ledtrig_cpu); -static int ledtrig_cpu_syscore_suspend(void) +static int ledtrig_cpu_syscore_suspend(struct syscore_ops *ops) { ledtrig_cpu(CPU_LED_STOP); return 0; } -static void ledtrig_cpu_syscore_resume(void) +static void ledtrig_cpu_syscore_resume(struct syscore_ops *ops) { ledtrig_cpu(CPU_LED_START); } -static void ledtrig_cpu_syscore_shutdown(void) +static void ledtrig_cpu_syscore_shutdown(struct syscore_ops *ops) { ledtrig_cpu(CPU_LED_HALTED); } diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c index b0f09c70f1ff..36919fae06b8 100644 --- a/drivers/macintosh/via-pmu.c +++ b/drivers/macintosh/via-pmu.c @@ -2600,7 +2600,7 @@ void pmu_blink(int n) #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC32) int pmu_sys_suspended; -static int pmu_syscore_suspend(void) +static int pmu_syscore_suspend(struct syscore_ops *ops) { /* Suspend PMU event interrupts */ pmu_suspend(); @@ -2614,7 +2614,7 @@ static int pmu_syscore_suspend(void) return 0; } -static void pmu_syscore_resume(void) +static void pmu_syscore_resume(struct syscore_ops *ops) { struct adb_request req; diff --git a/drivers/power/reset/sc27xx-poweroff.c b/drivers/power/reset/sc27xx-poweroff.c index 90287c31992c..b1c2d1038a8e 100644 --- a/drivers/power/reset/sc27xx-poweroff.c +++ b/drivers/power/reset/sc27xx-poweroff.c @@ -28,7 +28,7 @@ static struct regmap *regmap; * taking cpus down to avoid racing regmap or spi mutex lock when poweroff * system through PMIC. */ -static void sc27xx_poweroff_shutdown(void) +static void sc27xx_poweroff_shutdown(struct syscore_ops *ops) { #ifdef CONFIG_HOTPLUG_CPU int cpu; diff --git a/drivers/sh/clk/core.c b/drivers/sh/clk/core.c index 7a73f5e4a1fc..b8e2b391acd1 100644 --- a/drivers/sh/clk/core.c +++ b/drivers/sh/clk/core.c @@ -569,7 +569,7 @@ long clk_round_rate(struct clk *clk, unsigned long rate) EXPORT_SYMBOL_GPL(clk_round_rate); #ifdef CONFIG_PM -static void clks_core_resume(void) +static void clks_core_resume(struct syscore_ops *ops) { struct clk *clkp; diff --git a/drivers/sh/intc/core.c b/drivers/sh/intc/core.c index ea571eeb3078..53e468644883 100644 --- a/drivers/sh/intc/core.c +++ b/drivers/sh/intc/core.c @@ -394,7 +394,7 @@ int __init register_intc_controller(struct intc_desc *desc) return -ENOMEM; } -static int intc_suspend(void) +static int intc_suspend(struct syscore_ops *ops) { struct intc_desc_int *d; @@ -420,7 +420,7 @@ static int intc_suspend(void) return 0; } -static void intc_resume(void) +static void intc_resume(struct syscore_ops *ops) { struct intc_desc_int *d; diff --git a/drivers/soc/bcm/brcmstb/biuctrl.c b/drivers/soc/bcm/brcmstb/biuctrl.c index 364ddbe365c2..d8c3aac61886 100644 --- a/drivers/soc/bcm/brcmstb/biuctrl.c +++ b/drivers/soc/bcm/brcmstb/biuctrl.c @@ -298,7 +298,7 @@ static int __init setup_hifcpubiuctrl_regs(struct device_node *np) #ifdef CONFIG_PM_SLEEP static u32 cpubiuctrl_reg_save[NUM_CPU_BIUCTRL_REGS]; -static int brcmstb_cpu_credit_reg_suspend(void) +static int brcmstb_cpu_credit_reg_suspend(struct syscore_ops *ops) { unsigned int i; @@ -311,7 +311,7 @@ static int brcmstb_cpu_credit_reg_suspend(void) return 0; } -static void brcmstb_cpu_credit_reg_resume(void) +static void brcmstb_cpu_credit_reg_resume(struct syscore_ops *ops) { unsigned int i; diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index a08c377933c5..6a3923e1c792 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -3141,7 +3141,7 @@ static void tegra186_pmc_process_wake_events(struct tegra_pmc *pmc, unsigned int } } -static void tegra186_pmc_wake_syscore_resume(void) +static void tegra186_pmc_wake_syscore_resume(struct syscore_ops *ops) { u32 status, mask; unsigned int i; @@ -3154,7 +3154,7 @@ static void tegra186_pmc_wake_syscore_resume(void) } } -static int tegra186_pmc_wake_syscore_suspend(void) +static int tegra186_pmc_wake_syscore_suspend(struct syscore_ops *ops) { wke_read_sw_wake_status(pmc); diff --git a/drivers/thermal/intel/intel_hfi.c b/drivers/thermal/intel/intel_hfi.c index 5b18a46a10b0..cfca65de8cba 100644 --- a/drivers/thermal/intel/intel_hfi.c +++ b/drivers/thermal/intel/intel_hfi.c @@ -592,7 +592,7 @@ static void hfi_disable_instance(void *ptr) hfi_disable(); } -static void hfi_syscore_resume(void) +static void hfi_syscore_resume(struct syscore_ops *ops) { /* This code runs only on the boot CPU. */ struct hfi_cpu_info *info = &per_cpu(hfi_cpu_info, 0); @@ -603,7 +603,7 @@ static void hfi_syscore_resume(void) hfi_enable_instance(hfi_instance); } -static int hfi_syscore_suspend(void) +static int hfi_syscore_suspend(struct syscore_ops *ops) { /* No locking needed. There is no concurrency with CPU offline. */ hfi_disable(); diff --git a/drivers/xen/xen-acpi-processor.c b/drivers/xen/xen-acpi-processor.c index 296703939846..3d7ae6296367 100644 --- a/drivers/xen/xen-acpi-processor.c +++ b/drivers/xen/xen-acpi-processor.c @@ -495,7 +495,7 @@ static void xen_acpi_processor_resume_worker(struct work_struct *dummy) pr_info("ACPI data upload failed, error = %d\n", rc); } -static void xen_acpi_processor_resume(void) +static void xen_acpi_processor_resume(struct syscore_ops *ops) { static DECLARE_WORK(wq, xen_acpi_processor_resume_worker); diff --git a/include/linux/syscore_ops.h b/include/linux/syscore_ops.h index ae4d48e4c970..2bec5eb6f4b4 100644 --- a/include/linux/syscore_ops.h +++ b/include/linux/syscore_ops.h @@ -12,9 +12,9 @@ struct syscore_ops { struct list_head node; - int (*suspend)(void); - void (*resume)(void); - void (*shutdown)(void); + int (*suspend)(struct syscore_ops *ops); + void (*resume)(struct syscore_ops *ops); + void (*shutdown)(struct syscore_ops *ops); }; extern void register_syscore_ops(struct syscore_ops *ops); diff --git a/kernel/cpu_pm.c b/kernel/cpu_pm.c index b0f0d15085db..512efe0f209d 100644 --- a/kernel/cpu_pm.c +++ b/kernel/cpu_pm.c @@ -173,7 +173,7 @@ int cpu_cluster_pm_exit(void) EXPORT_SYMBOL_GPL(cpu_cluster_pm_exit); #ifdef CONFIG_PM -static int cpu_pm_suspend(void) +static int cpu_pm_suspend(struct syscore_ops *ops) { int ret; @@ -185,7 +185,7 @@ static int cpu_pm_suspend(void) return ret; } -static void cpu_pm_resume(void) +static void cpu_pm_resume(struct syscore_ops *ops) { cpu_cluster_pm_exit(); cpu_pm_exit(); diff --git a/kernel/irq/generic-chip.c b/kernel/irq/generic-chip.c index c4a8bca5f2b0..dabf9df9a2cf 100644 --- a/kernel/irq/generic-chip.c +++ b/kernel/irq/generic-chip.c @@ -665,7 +665,7 @@ static struct irq_data *irq_gc_get_irq_data(struct irq_chip_generic *gc) } #ifdef CONFIG_PM -static int irq_gc_suspend(void) +static int irq_gc_suspend(struct syscore_ops *ops) { struct irq_chip_generic *gc; @@ -685,7 +685,7 @@ static int irq_gc_suspend(void) return 0; } -static void irq_gc_resume(void) +static void irq_gc_resume(struct syscore_ops *ops) { struct irq_chip_generic *gc; @@ -708,7 +708,7 @@ static void irq_gc_resume(void) #define irq_gc_resume NULL #endif -static void irq_gc_shutdown(void) +static void irq_gc_shutdown(struct syscore_ops *ops) { struct irq_chip_generic *gc; diff --git a/kernel/irq/pm.c b/kernel/irq/pm.c index c556bc49d213..a3936238f972 100644 --- a/kernel/irq/pm.c +++ b/kernel/irq/pm.c @@ -230,7 +230,7 @@ void rearm_wake_irq(unsigned int irq) * * Enable all interrupt lines with %IRQF_EARLY_RESUME set. */ -static void irq_pm_syscore_resume(void) +static void irq_pm_syscore_resume(struct syscore_ops *ops) { resume_irqs(true); } diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 07668433644b..b32e9a4ea2bc 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -3645,7 +3645,7 @@ static bool legacy_kthread_create(void) * to transition back to atomic printing, thus providing a robust mechanism * for the final shutdown/reboot messages to be output. */ -static void printk_kthreads_shutdown(void) +static void printk_kthreads_shutdown(struct syscore_ops *ops) { struct console *con; diff --git a/kernel/time/sched_clock.c b/kernel/time/sched_clock.c index fcca4e72f1ef..297cd948e50f 100644 --- a/kernel/time/sched_clock.c +++ b/kernel/time/sched_clock.c @@ -297,6 +297,11 @@ int sched_clock_suspend(void) return 0; } +static int sched_clock_syscore_suspend(struct syscore_ops *ops) +{ + return sched_clock_suspend(); +} + void sched_clock_resume(void) { struct clock_read_data *rd = &cd.read_data[0]; @@ -306,9 +311,14 @@ void sched_clock_resume(void) rd->read_sched_clock = cd.actual_read_sched_clock; } +static void sched_clock_syscore_resume(struct syscore_ops *ops) +{ + sched_clock_resume(); +} + static struct syscore_ops sched_clock_ops = { - .suspend = sched_clock_suspend, - .resume = sched_clock_resume, + .suspend = sched_clock_syscore_suspend, + .resume = sched_clock_syscore_resume, }; static int __init sched_clock_syscore_init(void) diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 1e67d076f195..2d611c15d05d 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -1845,6 +1845,11 @@ void timekeeping_resume(void) timerfd_resume(); } +static void timekeeping_syscore_resume(struct syscore_ops *ops) +{ + timekeeping_resume(); +} + int timekeeping_suspend(void) { struct timekeeper *tks = &tk_core.shadow_timekeeper; @@ -1912,10 +1917,15 @@ int timekeeping_suspend(void) return 0; } +static int timekeeping_syscore_suspend(struct syscore_ops *ops) +{ + return timekeeping_suspend(); +} + /* sysfs resume/suspend bits for timekeeping */ static struct syscore_ops timekeeping_syscore_ops = { - .resume = timekeeping_resume, - .suspend = timekeeping_suspend, + .resume = timekeeping_syscore_resume, + .suspend = timekeeping_syscore_suspend, }; static int __init timekeeping_init_ops(void) diff --git a/virt/kvm/kvm_main.c b/virt/kvm/kvm_main.c index 08b34841b834..6f4cef82ed50 100644 --- a/virt/kvm/kvm_main.c +++ b/virt/kvm/kvm_main.c @@ -5533,7 +5533,7 @@ static int kvm_offline_cpu(unsigned int cpu) return 0; } -static void kvm_shutdown(void) +static void kvm_shutdown(struct syscore_ops *ops) { /* * Disable hardware virtualization and set kvm_rebooting to indicate @@ -5551,7 +5551,7 @@ static void kvm_shutdown(void) on_each_cpu(kvm_disable_virtualization_cpu, NULL, 1); } -static int kvm_suspend(void) +static int kvm_suspend(struct syscore_ops *ops) { /* * Secondary CPUs and CPU hotplug are disabled across the suspend/resume @@ -5568,7 +5568,7 @@ static int kvm_suspend(void) return 0; } -static void kvm_resume(void) +static void kvm_resume(struct syscore_ops *ops) { lockdep_assert_not_held(&kvm_usage_lock); lockdep_assert_irqs_disabled(); From patchwork Mon Feb 17 16:37:08 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 13978227 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0C7D6225789; Mon, 17 Feb 2025 16:37:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810249; cv=none; b=XLw5nVBVf9G8bPV0EUX3Dizk5+cA7660uFDIGq26H+eYrLR9kbYyGxQfRQzdmpd06+1O6uc6cZG7peIwPHIAVA4t2DGCwSk5lc1BHHRhYo24UWsMVkVVIKf5S9ZZkY/9hauoOopr8kH2vt7z+ebYsdw0gUzGAKPRoDWcazvR92A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810249; c=relaxed/simple; bh=gGmAUEWaafmCQUQ4+KQkgUfoEYeY+CBLOaPF/qC3m/A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LkJnk0YrrxJKdV6vp2U5XuxJVuJDTPRVEVyuaVexVVx2L+vvNikIM+YDvb7pVCL77jHtAUQpYbp4AZ2zKu/bxMwNLrYNlv203PokompQwx44ok/E2WGqLOLbaN0B5326CRcZVUfYo68q/UaEWU6dTA6rf3blYj99LHMoPwxuHu0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=NaTypaLC; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="NaTypaLC" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-43962f7b0e4so27681855e9.3; Mon, 17 Feb 2025 08:37:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739810245; x=1740415045; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=X/0biRJus/9M4PhuIap27DDVgRLzlMn9BGl57AT63dU=; b=NaTypaLCwi+5LQeQMa5QKEy2srMpKQnQ1kZVln6ywDBBJasPIUlJt9tGYhGOSGXMjb og4MpuIaCsVif7iknSyedDPAt9Dq9IMbNaET+LZF4EmpAzhhs9qHwtGPWL9KxXLnd5XW MBW69rF2yjuvMAWSJpgxQvqby1x3u7vLDCQ53w4MMRy9/hra24406xkcCSl4o5JnF4wQ 5LhKCb5tOAu78t9Qxb7Y/wXG58JZUnY+2al+42ImIq+DpeBShBTQpRIf+EuHLiczEjo3 wHbSDS6MzfZ5nq6Vfn3yyBeglalOHJeACKPmeusDSzdnI+pfYMaz4EMfPqPWMXAtCO1Y 8EdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739810245; x=1740415045; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=X/0biRJus/9M4PhuIap27DDVgRLzlMn9BGl57AT63dU=; b=XjW4/F5YAPYAMcUP/+42c49dalzeHttzhWjuil+hxogKyk3pzI8YZJl8HBK6xU4Yns YNToL2JCH/7W5pMao4LBHoiNYDRVhSII/tCIrIEmJhm+AN/v/o52s0w+p1Jy5IP3O1Ye vwMcW7ly1z6BiKLfB109oor4mF/Ykivt6q2/Vyrp/ELc1165DJ9wx6jNgCgW6X4i6SCl o53EqX1cQ+16UcbGa08rDFsDtDGDXmjEwM4+yemglXpfQ1+ExwI6qXLX/I+3RuDgODLq cxZrj9J+EG1nTB+CUIpkj52KqdMPPrg2tR8BizG6ezP4Kv5zMQ+Il0DqLOEVcwsQjwqG n8kw== X-Forwarded-Encrypted: i=1; AJvYcCU2J5H7abMQsGEkuZIVVUi7lVAhWIWpkk3phdblxh7RsNa7tQse9KF/TLT3BVYuShyIdTE/E6LuDvLi@vger.kernel.org, AJvYcCVO86yWVqB/tnzzqyZlXCEJaB2uq3xEPF1hvXlB+EajJds1GrdP2of5hlbIHU5n3eolKe8bm29XcJQ=@vger.kernel.org, AJvYcCW9HzDN/FJ1HOoA4hDUPfgs0iW6/Vf6suN/5q0/TKckJJgp3GLhaXQIwr/R9KsyEI3B9bHnurk8GZjN@vger.kernel.org, AJvYcCWTr+Y9xq1/w+tcXfYOiR1izDYwo+fm6e59R1zt/m0jmz7wncmzSrIvqJiLSfiSAfpieDc1GRuYHrJs3Ims@vger.kernel.org, AJvYcCX9o6IgU/07B1nkPTxS3iAqudFmuX42HD0ZtDJZO8xqWn8k8BAJCz7d9gLORed+BeHdOFuJib7olBXWwA==@vger.kernel.org X-Gm-Message-State: AOJu0Yx7CN76IAc6pXL3o+Jsa0tDEslxNVq38f/p1Mn5nTIT+8gQlLLc qRR5fwG42+pLvL+eoBX0cOkiHepkPyQ0iRTcwRZmKg0/L0TjmKHf X-Gm-Gg: ASbGncvwMj4BqR0f4QiSpaqMGPLqg+R00l+qk+JjxKcrsHf+6dbjvYP85Be23A1d34B QaKkcJeI6+9jIT0k46HWzyNBnJIyadtM+GomAUvIuIB2APMCyAoQ84Hnt2WPbNWypHyPHLhBj4y Wcpe0Yp0Wdjttz/lbWH1CB9oMxTrRrAAoiOba9anGcI8oJ3BBePPQlfqpQ7lB3AKwI/8Uizxyh7 dkYPTNuRFE0wnymATXJgbeG6NKMqKMcN3drrEHZNoV9TIRzX0nq75KbbtwZgafa6gHhuMBwvjJj 6C4TkuSQ0Ufk/nmrzDUwd0AJ7Z+BYTN8Yh0wBoOXwh4GqyCNufykUG8dS2svpsMZ+F94MdRPKa4 PzgXef0A= X-Google-Smtp-Source: AGHT+IGnpGd1arKCvdVh8OB0EDoGo4KblVvIlIVVW7BFnKV8rTfrkS3K0VNVohWAHieTwgBwEJe4Nw== X-Received: by 2002:a05:600c:4688:b0:439:89e9:4eff with SMTP id 5b1f17b1804b1-43989e951bbmr25428885e9.10.1739810245015; Mon, 17 Feb 2025 08:37:25 -0800 (PST) Received: from localhost (p200300e41f22a600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f22:a600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-4398872fa85sm24012905e9.28.2025.02.17.08.37.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 08:37:23 -0800 (PST) From: Thierry Reding To: Greg Kroah-Hartman Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/7] MIPS: Embed syscore_ops in PCI context Date: Mon, 17 Feb 2025 17:37:08 +0100 Message-ID: <20250217163713.211949-3-thierry.reding@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217163713.211949-1-thierry.reding@gmail.com> References: <20250217163713.211949-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Thierry Reding This enables the syscore callbacks to obtain the PCI context without relying on a separate global variable. Signed-off-by: Thierry Reding --- arch/mips/pci/pci-alchemy.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/arch/mips/pci/pci-alchemy.c b/arch/mips/pci/pci-alchemy.c index a20de7160b6b..02f0616518e1 100644 --- a/arch/mips/pci/pci-alchemy.c +++ b/arch/mips/pci/pci-alchemy.c @@ -33,6 +33,7 @@ struct alchemy_pci_context { struct pci_controller alchemy_pci_ctrl; /* leave as first member! */ + struct syscore_ops pmops; void __iomem *regs; /* ctrl base */ /* tools for wired entry for config space access */ unsigned long last_elo0; @@ -46,6 +47,12 @@ struct alchemy_pci_context { int (*board_pci_idsel)(unsigned int devsel, int assert); }; +static inline struct alchemy_pci_context * +syscore_to_pci_context(struct syscore_ops *ops) +{ + return container_of(ops, struct alchemy_pci_context, pmops); +} + /* for syscore_ops. There's only one PCI controller on Alchemy chips, so this * should suffice for now. */ @@ -306,9 +313,7 @@ static int alchemy_pci_def_idsel(unsigned int devsel, int assert) /* save PCI controller register contents. */ static int alchemy_pci_suspend(struct syscore_ops *ops) { - struct alchemy_pci_context *ctx = __alchemy_pci_ctx; - if (!ctx) - return 0; + struct alchemy_pci_context *ctx = syscore_to_pci_context(ops); ctx->pm[0] = __raw_readl(ctx->regs + PCI_REG_CMEM); ctx->pm[1] = __raw_readl(ctx->regs + PCI_REG_CONFIG) & 0x0009ffff; @@ -328,9 +333,7 @@ static int alchemy_pci_suspend(struct syscore_ops *ops) static void alchemy_pci_resume(struct syscore_ops *ops) { - struct alchemy_pci_context *ctx = __alchemy_pci_ctx; - if (!ctx) - return; + struct alchemy_pci_context *ctx = syscore_to_pci_context(ops); __raw_writel(ctx->pm[0], ctx->regs + PCI_REG_CMEM); __raw_writel(ctx->pm[2], ctx->regs + PCI_REG_B2BMASK_CCH); @@ -354,11 +357,6 @@ static void alchemy_pci_resume(struct syscore_ops *ops) alchemy_pci_wired_entry(ctx); /* install it */ } -static struct syscore_ops alchemy_pci_pmops = { - .suspend = alchemy_pci_suspend, - .resume = alchemy_pci_resume, -}; - static int alchemy_pci_probe(struct platform_device *pdev) { struct alchemy_pci_platdata *pd = pdev->dev.platform_data; @@ -478,7 +476,9 @@ static int alchemy_pci_probe(struct platform_device *pdev) __alchemy_pci_ctx = ctx; platform_set_drvdata(pdev, ctx); - register_syscore_ops(&alchemy_pci_pmops); + ctx->pmops.suspend = alchemy_pci_suspend; + ctx->pmops.resume = alchemy_pci_resume; + register_syscore_ops(&ctx->pmops); register_pci_controller(&ctx->alchemy_pci_ctrl); dev_info(&pdev->dev, "PCI controller at %ld MHz\n", From patchwork Mon Feb 17 16:37:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 13978229 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 13F0422578A; Mon, 17 Feb 2025 16:37:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810250; cv=none; b=cmY+VhzMR5o2yyEiqISTgqYrui9KIfZkEYWMiTueYzpPft6gUoM9rWNwVlgYsI8kkxaB5avtnTwF+BpRP2CgfbDR4Cp7TTMsdni3f7tpK1TLQwmye3Nh2cRLp/a86gssAMNoLd03eXzVfNHMmNViZTLbLjyk2oFzAkb/sBgO+xI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810250; c=relaxed/simple; bh=IanXyIVqTh9J6eeN5W1FxKF9ROn0I3ECBY3aYf1iB4k=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RSXCsuM+mDkD+FBsj/wR7W35gA6qOGUHxMZaRs9HsfDIjPk986I7+6H7ZeePJczzi/2hVms9LdEmAeJtjGNbFrlQa1QZVf/5iaO2zPlC4xBEuFgU6Mv1TQ+ucLt6i4UhIoGRjA0uOWzTL1UdPU/F9AntYvCghdE1lCGSoEUWEHk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=k73Kuf4x; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="k73Kuf4x" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-43962f7b0e4so27681985e9.3; Mon, 17 Feb 2025 08:37:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739810247; x=1740415047; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hZ36QZVLWFwcj8T2KkUEKH5QEwqEfUJk7NDzYKKZiQU=; b=k73Kuf4xKVjR6d5H0J25/FMEMOGSnm2oRpMvCDCKddgxjfE78hQh3mHP+eZtUvasBr MDdpYtp/uMS4cGMrhpEXyYw7gMyIzUUZLVKLXpPuwjzt4RQNCRw/VEBBbaUDLaNn4KSl 3B5Yzfjg5pwif6KKGApYFGa7Au5/evJXpT7qYk8bQceMko8mWQY1MpoIVDcTg5kg4c2h GUBfuuVexW+ajIvi5PYFOZFWnx8It/1HyqaLq1rRT4wWss5edVMv9P5fg49Z84UfSoms eOdFfFNHkQc/BaG7+UCjz80QDbUd+WU6t3c901iYJI7e/1/+kMU8fAbUfX1i2TPXQF2v MMrw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739810247; x=1740415047; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hZ36QZVLWFwcj8T2KkUEKH5QEwqEfUJk7NDzYKKZiQU=; b=aKRB8OnsEHrTEhgsad3yYxA29ppudkwc6UliEYvkk6MiOQcZY1nSSvk4FbFtj4ZCqc 3D1Sveu2yP+ZzQu9yhYByJ1k7cQLAF3+AUVzWPyCAcS73DT/eqe2T4Zk71S9othg/kkm /a/nlGyHdvwkRZNBnOFdXPfZ/nkToaDVFINKzN7lCuMqy3EVRrpopqjR610kbo0CwpFy 7SxlXwr1L0+4uMsbiXJMo6Mq7nZYgPe7FUve+RUQfEUz4LiFVfCZ37+PYcig6wzcAMle WnhlT9BkGF2mE25XKp8DOXfVlCHImqlXHN8rSbasxyncWLM5Q9Gu+C2DAIpaXrxkBULt rTpg== X-Forwarded-Encrypted: i=1; AJvYcCUKkltFNg1jIiajf3zb8OVV4Dhr+hpjfTO0dRu1I1xa5ejAo/oCA+7ysnjARplcmNpoMEwb0WHtQJpk@vger.kernel.org, AJvYcCVK27wucPTjxFVHfZMuEDQpT2dkjt4ChezJF2KzBcgCSsjiY/DWXp8T7Yb/dFKUPJyx2tg+Pnwh4Mc=@vger.kernel.org, AJvYcCVTHdTDy+QWstaUM4EjmdfDbWlmDA4mRkwi4sQx6+Gld6lD/rHvfkaeGEPGXoU/XOiG8gR79ivo89NcCg==@vger.kernel.org, AJvYcCW9SZZChRA4ibB2VK6P6RInQ6rU6NsQ9fuouxyXLySeIGPUykLPcUC7vJGT6tt+x2yS1g3TF/kT8BaI0Za8@vger.kernel.org, AJvYcCWcQUFNEmLJCo5bwTGarIiO3xo4XCYybiYTHAoiHu1bIW9HX+MVRa30q9X8csUv8RCHJWiIvTTAFxV0@vger.kernel.org X-Gm-Message-State: AOJu0YwS0gGSsn79JaJfIr+paucJJSUbTgdOV1vjvafQLlNTtIVlmCaI ENzw3wnOYeW+EWpwUkWCKlP0q7Dy/HekRb4OQu2wWSYp+jCrfphb X-Gm-Gg: ASbGncvJbyys8kUGS4EhitxwaZIBzZCtw1j6klVZJ3xykOaegw9EJFwYP0DeDaBJRxJ w7Vt1ydEgVJm0wY0IGG3IOkMgRSzIOqyojyB2+ZuUN7Ml2jIrRujlqa8cTk895xAwD88hL6/R4s vggVcL4LUre45Bl0UQFqSi+/nljaiX2KzA15tPhBcayg75//08asKgvunC1B8j03KnDZ5PMngYk HkPBCWqyA+4qBaDwYoEE8iP7XPcLXZmxoldWWY52jjlzWn4yDDqVSED4eqymftrxa/1btR+DV5I CswalMTDRc37Yf+m2Edb/axva9WmX4pyavCwEu5thOZoM3b6IUWwCzzHcAgOJsUxTHRNYy0aiiH RoCO5BYM= X-Google-Smtp-Source: AGHT+IEy54knXhOWSdtV9GyJZiVARzLmEOfX1F7j3ZG37VozHahpHs0vmYGUgUyc0AkFNGY48X3mRg== X-Received: by 2002:a05:600c:3585:b0:439:5b36:b4e3 with SMTP id 5b1f17b1804b1-4396e6e19abmr89349955e9.12.1739810247218; Mon, 17 Feb 2025 08:37:27 -0800 (PST) Received: from localhost (p200300e41f22a600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f22:a600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-439618a9ab0sm125047905e9.35.2025.02.17.08.37.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 08:37:25 -0800 (PST) From: Thierry Reding To: Greg Kroah-Hartman Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/7] bus: mvebu-mbus: Embed syscore_ops in mbus context Date: Mon, 17 Feb 2025 17:37:09 +0100 Message-ID: <20250217163713.211949-4-thierry.reding@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217163713.211949-1-thierry.reding@gmail.com> References: <20250217163713.211949-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Thierry Reding This enables the syscore callbacks to obtain the mbus context without relying on a separate global variable. Signed-off-by: Thierry Reding --- drivers/bus/mvebu-mbus.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/drivers/bus/mvebu-mbus.c b/drivers/bus/mvebu-mbus.c index 92daa45cc844..1f22bff0773c 100644 --- a/drivers/bus/mvebu-mbus.c +++ b/drivers/bus/mvebu-mbus.c @@ -130,6 +130,7 @@ struct mvebu_mbus_win_data { }; struct mvebu_mbus_state { + struct syscore_ops syscore; void __iomem *mbuswins_base; void __iomem *sdramwins_base; void __iomem *mbusbridge_base; @@ -148,6 +149,12 @@ struct mvebu_mbus_state { struct mvebu_mbus_win_data wins[MBUS_WINS_MAX]; }; +static inline struct mvebu_mbus_state * +syscore_to_mbus(struct syscore_ops *ops) +{ + return container_of(ops, struct mvebu_mbus_state, syscore); +} + static struct mvebu_mbus_state mbus_state; /* @@ -1008,7 +1015,7 @@ fs_initcall(mvebu_mbus_debugfs_init); static int mvebu_mbus_suspend(struct syscore_ops *ops) { - struct mvebu_mbus_state *s = &mbus_state; + struct mvebu_mbus_state *s = syscore_to_mbus(ops); int win; if (!s->mbusbridge_base) @@ -1042,7 +1049,7 @@ static int mvebu_mbus_suspend(struct syscore_ops *ops) static void mvebu_mbus_resume(struct syscore_ops *ops) { - struct mvebu_mbus_state *s = &mbus_state; + struct mvebu_mbus_state *s = syscore_to_mbus(ops); int win; writel(s->mbus_bridge_ctrl, @@ -1069,11 +1076,6 @@ static void mvebu_mbus_resume(struct syscore_ops *ops) } } -static struct syscore_ops mvebu_mbus_syscore_ops = { - .suspend = mvebu_mbus_suspend, - .resume = mvebu_mbus_resume, -}; - static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus, phys_addr_t mbuswins_phys_base, size_t mbuswins_size, @@ -1118,7 +1120,9 @@ static int __init mvebu_mbus_common_init(struct mvebu_mbus_state *mbus, writel(UNIT_SYNC_BARRIER_ALL, mbus->mbuswins_base + UNIT_SYNC_BARRIER_OFF); - register_syscore_ops(&mvebu_mbus_syscore_ops); + mbus->syscore.suspend = mvebu_mbus_suspend; + mbus->syscore.resume = mvebu_mbus_resume; + register_syscore_ops(&mbus->syscore); return 0; } From patchwork Mon Feb 17 16:37:10 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 13978230 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36E99225A4E; Mon, 17 Feb 2025 16:37:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810254; cv=none; b=DB/FdG5xUFbpUqGEIbvNmvXVFxUIIILPw73MATqE72QEgG4xTzkWc33n/wqRFCIYEtxAixtUiy/9G8xu20W3QfxzEf4A4nsNarjuEncMzGRMp30O4ieOtg2+uT46+N9M6hg4FyCisvJo34AP+pw3xy5S7H0x+eZk+FNzvGuhcZ8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810254; c=relaxed/simple; bh=zE3UeHdwgOpQSnjKFq4GICu7rZN5tRJ5Y9xFvM16G0g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ieeo32d5dMGbtAcD4g2Z8YE1RxhKJZewafaM1/3ysfIO4/AKMen72ugOJAiuKdcqSCHr7Q79X03M55xQ2WNdoWVq27goI0P1fFV7ecvVP/D2mlAw1OQbUDvJ160JYy1O+AhRRfs8sZr9l4aL7EJrODy+Ojxr1ZLmeeESU/NP4Dk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mhkip5dm; arc=none smtp.client-ip=209.85.221.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mhkip5dm" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-38f504f087eso844f8f.1; Mon, 17 Feb 2025 08:37:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739810249; x=1740415049; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=z/Pliae2eQBpyDaB/rhM+Xrce+n5H7ftTZ7yML/5v4Q=; b=mhkip5dmbbsCjESZaRdP1N1oEic1bND9ecebVAzEgrkp0Vav8eQf0TMjvQh76vrCa4 QAB7rXYnPiW7WnHcnoxjgpZPWILiv4O5LkmtoucWrQQQ/hb4orbPegSBngkMw9aojsWR 80sr/E0vjbG5SWLl7Acc1oGILrX9WvnFubCT3d8uQ0wx5ZCKibdi43ndiSHdc8x0D2K/ wLFPdY/cFHCEWDHG5vm69txxKw06AbuyLLiIr1WFwcVn7aQ9EKT/HL8YXAku6xbOJLJR 4dbjEy5t62MQuYNja8K4MVMy7I+DRFQIBGOklendJtgSvHjviG8EWO2dbhqLIu8NchXf X19w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739810249; x=1740415049; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=z/Pliae2eQBpyDaB/rhM+Xrce+n5H7ftTZ7yML/5v4Q=; b=WmTglVqVt+nsArPllXrtB7FGoHLtjdviK13WvQRhvONY88zPtpI0+B/I5j/iuHdM+x eIuVWx8nCn3g+w9S0SyKlzOdOcF5X93rT5ilgNg47h2oGA5+JYfos32BBzywB0PYTn3o Mt+7Aef6tkvLeo9/jLfoseO3sRS4mYJxH6Xb3uMxNEIHtRJuTzVX8WGian5lSYlINgcM Du56Er0Q0PPDeTb0RiF1FyYEzPic6ndGkZTGU5/JhCZYO/IjraFtsUUkwlm5rmr3gdQh IhkB46JvzA7W7nTweaubKjb50Cyld0gfyXj6k3dOPWJpeVJH+REn8QzkY20DsiyQJrMj FTBA== X-Forwarded-Encrypted: i=1; AJvYcCUp5BPWExB60JS/FLVI+9W4TQYFY2AtgEBgk/Z5Zsu30ioECY3qudey2ccXz09W41CAajxDdbwBJIFzRQ==@vger.kernel.org, AJvYcCVOatbdctZwf1F9XcQ/5K0Zt1j1vlCJMnJ28AHMWBtvGaMpKVQiniDI2EEJKM4WhU4gR7x2CMjfsOs=@vger.kernel.org, AJvYcCWSlB5dpH9tUkM46Gl0zXf45wQlGC8WhaYLqAPIt9zgMdn1zb9Yek8T3uKBVa18XuzODYgxsGzDvqyy@vger.kernel.org, AJvYcCX9SHs9NVTynY/ZOFybn8Mi4sPBFJs2PUKopsOeyoHqhSTCspOeIcTQv5VJKf1SbA32OKvu97wdFKkOeV4P@vger.kernel.org, AJvYcCXbXpPfyrn76cSuFZPZ2oqJve+rS8+nq1VcBm2LcIfzdHaIPsvvWzR85srIPQ6cXsmsZg2K3FT2nzZD@vger.kernel.org X-Gm-Message-State: AOJu0YwJyOnEsFgV2eGKUbfCCeb4G40FnKlpDqEVysUVmm/bKej+AIQi JgcdNGK/c7M0ffAczR8zX8OzyRiVlJ+hzAbRi1J6P/O79TdmogJy X-Gm-Gg: ASbGncvfNjDKaqCA3Hl4RK8NuxtF0szZ/NzZ5OgHWXtQDnFcp24dM436C//WLkr2TNo ctLqwwNXTQC0LiqbZGaU0VZKvs6AmuVCJWODjAXoQrITuOLasKQvnrxwv/rhCprQimcg1qLDO0H yCnm6OJHxrLqSKWF6PXaxyt4MzyAF3EfkyCE317ORidrNFLBd8w2lbPXEnhCuUXwnmiLNV1/aYW fY0IWSCTL4bk6BU6/mKouA4EQn+gxUOfYwKhMTSj6AkkP7KDx8Sg0mx2722xWNCcuSfmgQiJFdk MuvUzd504J9RZFIpUgWoCdTwJXF0p7s7kUxNDS6M3j+qtQQ7o31rOS67AQgVHobRyhI39nCzh0t Y9QAtdMM= X-Google-Smtp-Source: AGHT+IEcmZoV9E3nZ+6g02c1M8tS19/XgVVrKGZ1S0RbQ0hvdrhxp+y24wkbvweGnlTFrgLbDmIhiQ== X-Received: by 2002:a5d:6a0a:0:b0:38f:2e78:450c with SMTP id ffacd0b85a97d-38f33f2961cmr6950160f8f.19.1739810249186; Mon, 17 Feb 2025 08:37:29 -0800 (PST) Received: from localhost (p200300e41f22a600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f22:a600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38f259fe1efsm12791371f8f.97.2025.02.17.08.37.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 08:37:28 -0800 (PST) From: Thierry Reding To: Greg Kroah-Hartman Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/7] clk: ingenic: tcu: Embed syscore_ops in TCU context Date: Mon, 17 Feb 2025 17:37:10 +0100 Message-ID: <20250217163713.211949-5-thierry.reding@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217163713.211949-1-thierry.reding@gmail.com> References: <20250217163713.211949-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Thierry Reding This enables the syscore callbacks to obtain the TCU context without relying on a separate global variable. Signed-off-by: Thierry Reding --- drivers/clk/ingenic/tcu.c | 54 ++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 29 deletions(-) diff --git a/drivers/clk/ingenic/tcu.c b/drivers/clk/ingenic/tcu.c index 85bd4bc73c1b..503a58d08224 100644 --- a/drivers/clk/ingenic/tcu.c +++ b/drivers/clk/ingenic/tcu.c @@ -53,9 +53,9 @@ struct ingenic_tcu { struct clk *clk; struct clk_hw_onecell_data *clocks; -}; -static struct ingenic_tcu *ingenic_tcu; + struct syscore_ops syscore; +}; static inline struct ingenic_tcu_clk *to_tcu_clk(struct clk_hw *hw) { @@ -332,6 +332,24 @@ static const struct of_device_id __maybe_unused ingenic_tcu_of_match[] __initcon { /* sentinel */ } }; +static int __maybe_unused tcu_pm_suspend(struct syscore_ops *ops) +{ + struct ingenic_tcu *tcu = container_of(ops, typeof(*tcu), syscore); + + if (tcu->clk) + clk_disable(tcu->clk); + + return 0; +} + +static void __maybe_unused tcu_pm_resume(struct syscore_ops *ops) +{ + struct ingenic_tcu *tcu = container_of(ops, typeof(*tcu), syscore); + + if (tcu->clk) + clk_enable(tcu->clk); +} + static int __init ingenic_tcu_probe(struct device_node *np) { const struct of_device_id *id = of_match_node(ingenic_tcu_of_match, np); @@ -430,7 +448,11 @@ static int __init ingenic_tcu_probe(struct device_node *np) goto err_unregister_ost_clock; } - ingenic_tcu = tcu; + if (IS_ENABLED(CONFIG_PM_SLEEP)) { + tcu->syscore.suspend = tcu_pm_suspend; + tcu->syscore.resume = tcu_pm_resume; + register_syscore_ops(&tcu->syscore); + } return 0; @@ -455,38 +477,12 @@ static int __init ingenic_tcu_probe(struct device_node *np) return ret; } -static int __maybe_unused tcu_pm_suspend(struct syscore_ops *ops) -{ - struct ingenic_tcu *tcu = ingenic_tcu; - - if (tcu->clk) - clk_disable(tcu->clk); - - return 0; -} - -static void __maybe_unused tcu_pm_resume(struct syscore_ops *ops) -{ - struct ingenic_tcu *tcu = ingenic_tcu; - - if (tcu->clk) - clk_enable(tcu->clk); -} - -static struct syscore_ops __maybe_unused tcu_pm_ops = { - .suspend = tcu_pm_suspend, - .resume = tcu_pm_resume, -}; - static void __init ingenic_tcu_init(struct device_node *np) { int ret = ingenic_tcu_probe(np); if (ret) pr_crit("Failed to initialize TCU clocks: %d\n", ret); - - if (IS_ENABLED(CONFIG_PM_SLEEP)) - register_syscore_ops(&tcu_pm_ops); } CLK_OF_DECLARE_DRIVER(jz4740_cgu, "ingenic,jz4740-tcu", ingenic_tcu_init); From patchwork Mon Feb 17 16:37:11 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 13978231 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 18379226176; Mon, 17 Feb 2025 16:37:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810254; cv=none; b=WnnzJhNfQ71kPU+yRx5EsrAQK0Tu8epcvaOSL90VpcF/546xN/TripbHp8hz7hEPrHx6PsFz160e7myD/BRQjK6n/kaU9Q74ZB2dNYCxT5CRuFQdEWb1vQ7BjkpssOj8ZTOCgZxzaC4nf1cIvivAb91gY1Gc0KIQB6F2qLTwcLI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810254; c=relaxed/simple; bh=DuPHIcrT6Z5/GlVXfn7nt7Gawv/AJP9WOltQ42MmeC8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=apQmSkDsf3zblBZ48d1DlSJkALm5eem9za7EmZtk2zC3/GohLuTrK7uCKX4xomDHEaCzE2ovFss7/GKNvEWPFefvHeApDF88a6CIguaqYtMC8/OCQfVPbivfGnvpBK9nGd1fdzl3lhPHV5MAyNOmTZpy0VqFsvdo/AdClsiptHg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=jNmRLxlb; arc=none smtp.client-ip=209.85.221.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="jNmRLxlb" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-38f3913569fso1072170f8f.1; Mon, 17 Feb 2025 08:37:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739810251; x=1740415051; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YX3Bs3MZrgBGo5LMWaEIe0GFuG33MQ381ctUNe/mVnI=; b=jNmRLxlb0rkZICLY+y5RxaeDJkeYR38znxIyxyh2/lE8j3OgbVt0Uq9/RU3KjufrsN bneLXYkMxv5GhjlUTqaA51yvIa6wdP6ZYwQl16zjr6cVGMpACl8FErVZsLLAXjw5LB5K vTdRPqKCIR5X3QOXo/gK2C9HqTKfZe//a5siHFEqw/1e7mJmOEyJTwR1qwDZo3kJTN7a fDBrlk1Z6lcp27UPoseoyNbSUV1heAAUDcKE+Ov0+DNQT9/PEJWXLBGjsJDLVTbDlkuQ f9AMvpUittFSYrC9mtRRtQwGy3CTYYGo1M/Y6IRSJxMUOACTpi8RzLFfpM5CpaHY+L1B xv9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739810251; x=1740415051; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YX3Bs3MZrgBGo5LMWaEIe0GFuG33MQ381ctUNe/mVnI=; b=ewsZcErsZCWIR08c0bPe5xYtrSb5jQZ7JmgQcUywpa5J69ScO4ILJIlkLPRFk82NJ/ IsmBNHVvXDu2Ick1Y7grlyGU+y8xbKLRk0ANr00SQTTH6R/wbBvRu+HyerXqLT064P74 6Jc3MC7chrjo0KgyyeGGL+r236zhcUTBpGyY5Fgg8cyfpfiyBxXDjuiop8xLxq7WHVrc reU4azjfKMAoZHPiNhf1HVy6V1YpVbnQM9ooEGbfkoJW2g5hjTc54J7+RoS4KbIY4jE8 QPSy91E6k+V2495pTqQHJJxTRUUDWgpggNsE2dyEaPFKwL08SHvvrUAUivsjTLfqwVU7 VK3g== X-Forwarded-Encrypted: i=1; AJvYcCUMkG0qxlxyCgSHgs4FllWxC9SAqyCQOMfHkf5SOO3cyiB+2yDR0oP4zxh3E+yQti052HB1MPaVvsA63YYn@vger.kernel.org, AJvYcCUg/LPsTBIWK6ZPatdFxh2LQbtUPhRI//zF47qhDDpY4Kbl1xYQFFDB0lL3iRP9S2UwZTB6Du2H+D4/@vger.kernel.org, AJvYcCWC8wKTSukGSMU8fLK5x9Ieogq4SoW4ZgY+hFidznYzz+jCz1z7wwyX8MEymufSlUseqORvXR9vqbw=@vger.kernel.org, AJvYcCWqwj0I5YrbinOZrlaw1hp4+3wwa1zOJO1VvSJ4UC3xIGVDuXmRk25OEWTrRv/sNmx5es9IAzirH9/nBA==@vger.kernel.org, AJvYcCXRBvfauaBhTIyabkGFL10zpIO9BJr7DxBcU9UETUCcYt0tyLoLmGIk+yVZYVsOCCJGyTuh30qZFiLy@vger.kernel.org X-Gm-Message-State: AOJu0YwaqYcTuTCEgFBg89ed7LLsfbihZ46BZynv8On08Fn4nHcZYocZ 6SDU3s8uTyPXJgSbwdHNDeo4gZTvcuL8DcYhbbF08DcR/8fA9UUNHEfhVA== X-Gm-Gg: ASbGncsU4AdyfXOO3EWkljV5kiRiDuwmikRmRDNqWqE4WLAsKT8F8+7LuXDbP2gZcZ4 WCnRU50JzdjRS+a8hftLvQxX2BR9CEeoRtuoSNyGnreEnmpGOb4hh/TXk8CvJbjuo4nBxYJ+JNj OLJ6i44XXC/LBFmQlUqHZcMuZ9rBwtqff9LJp16DmdWFIAVKO5Oafgsx8a34vmlRpmlfjUzYZj9 52Vdx45uwdE/pvm6DKKeuSc9fUQ3jxJmGBqrbNVikDwSYgApTUK5+NDZ4UDHEdKS8pi5v2LJsvT 2RQQMDHwKCUxcQzWCqGoWLwIXB12GMgEKaENsG6qvWECkHHlF5c9COePk2Yz7d8Djp0wHQOawif f0Uw7keQ= X-Google-Smtp-Source: AGHT+IGKeFn1JZI+61Y36W80rkeFL6tO0xV+0w/zCm2hwXiflv2MWSmUK04720sV0csGUnPk6PUGmQ== X-Received: by 2002:adf:9bdd:0:b0:38d:dffc:c14f with SMTP id ffacd0b85a97d-38f24ce77dcmr14937408f8f.1.1739810251284; Mon, 17 Feb 2025 08:37:31 -0800 (PST) Received: from localhost (p200300e41f22a600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f22:a600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38f259d5d8bsm12702877f8f.70.2025.02.17.08.37.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 08:37:30 -0800 (PST) From: Thierry Reding To: Greg Kroah-Hartman Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/7] clk: mvebu: Embed syscore_ops in clock context Date: Mon, 17 Feb 2025 17:37:11 +0100 Message-ID: <20250217163713.211949-6-thierry.reding@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217163713.211949-1-thierry.reding@gmail.com> References: <20250217163713.211949-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Thierry Reding This enables the syscore callbacks to obtain the clock context without relying on a separate global variable. Signed-off-by: Thierry Reding --- drivers/clk/mvebu/common.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/drivers/clk/mvebu/common.c b/drivers/clk/mvebu/common.c index ee77d307efe0..53712c3e5087 100644 --- a/drivers/clk/mvebu/common.c +++ b/drivers/clk/mvebu/common.c @@ -189,6 +189,7 @@ void __init mvebu_coreclk_setup(struct device_node *np, DEFINE_SPINLOCK(ctrl_gating_lock); struct clk_gating_ctrl { + struct syscore_ops syscore; spinlock_t *lock; struct clk **gates; int num_gates; @@ -196,11 +197,15 @@ struct clk_gating_ctrl { u32 saved_reg; }; -static struct clk_gating_ctrl *ctrl; +static inline struct clk_gating_ctrl *from_syscore(struct syscore_ops *ops) +{ + return container_of(ops, struct clk_gating_ctrl, syscore); +} static struct clk *clk_gating_get_src( struct of_phandle_args *clkspec, void *data) { + struct clk_gating_ctrl *ctrl = data; int n; if (clkspec->args_count < 1) @@ -217,23 +222,23 @@ static struct clk *clk_gating_get_src( static int mvebu_clk_gating_suspend(struct syscore_ops *ops) { + struct clk_gating_ctrl *ctrl = from_syscore(ops); + ctrl->saved_reg = readl(ctrl->base); return 0; } static void mvebu_clk_gating_resume(struct syscore_ops *ops) { + struct clk_gating_ctrl *ctrl = from_syscore(ops); + writel(ctrl->saved_reg, ctrl->base); } -static struct syscore_ops clk_gate_syscore_ops = { - .suspend = mvebu_clk_gating_suspend, - .resume = mvebu_clk_gating_resume, -}; - void __init mvebu_clk_gating_setup(struct device_node *np, const struct clk_gating_soc_desc *desc) { + static struct clk_gating_ctrl *ctrl; struct clk *clk; void __iomem *base; const char *default_parent = NULL; @@ -284,7 +289,9 @@ void __init mvebu_clk_gating_setup(struct device_node *np, of_clk_add_provider(np, clk_gating_get_src, ctrl); - register_syscore_ops(&clk_gate_syscore_ops); + ctrl->syscore.suspend = mvebu_clk_gating_suspend; + ctrl->syscore.resume = mvebu_clk_gating_resume; + register_syscore_ops(&ctrl->syscore); return; gates_out: From patchwork Mon Feb 17 16:37:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 13978232 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1DEFA22619D; Mon, 17 Feb 2025 16:37:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810256; cv=none; b=R3VB/4zuZfUd4LiAMvxYTK3VPQY1Y9kFlrGxSlM3fB61lxtuHRtfzuNH46Y8xaFT1PTlWpmnlunU553sLSnnH4ELmXmosbnTR/g8+GGVdN9GioLDQCyGnAtSzV3hkw4RcmiLpqh14bPob7vZYqLE+stlICAgFYHKRLcYVnBNzuY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810256; c=relaxed/simple; bh=+eCE6Ql4+07nFG1qzGBgKrmMRBOoz2T/3CMljW1oR6c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=q9iUQpyFnRbjEudtLohhO01dQHlCGBcTXDpRpyt+/aTnYKl59tNJsS3r4g7LjE9KrUFfTMe4xqGhBoJjhV9AF3zHGVfhV/dEhOPPhJy9zBrozV0oHRDYotvLqf8oEZ7euueWTp8Gas4o0GYtBuDBv7rbJcq8fo1x1huG/MMbJyE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=BHxgniGX; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="BHxgniGX" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-38f378498c9so1884621f8f.1; Mon, 17 Feb 2025 08:37:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739810253; x=1740415053; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TKpi0u6vaUnsrplCnc00ydxIjOGnOYCvPvGm+BeJUhk=; b=BHxgniGXL2Nw5cYGXH/j1SFrO+OQzNIu4o+spSU15RpmUe3fhsb5wAdoJMBq07GlYb VFksLhiBC8fkPej0eGBqUxAwQOubCTLEiui2MhSR/W3KfRGrwuA+NXhXwpUBUuTusUF9 tBJeEch4iekcTfee5YFE+j5xtk9VAQ2LMnDkQdfw9jOuAav9P72/jcXhAWKgSLi2RNh3 vZwt/+8x9hrn77+6xDfsM+SkY+MB06ZUQZ5zBDszeu9FJKsfBVsDVlIGBRIFOw1OmW68 qzwxE4gy04Xogzqr9+ejYeeIi6YjughF1NyAHmyWJyzg0lM56Zg3tLgci6tJZ6Kcv2ye 2JIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739810253; x=1740415053; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TKpi0u6vaUnsrplCnc00ydxIjOGnOYCvPvGm+BeJUhk=; b=DHa2nMlylGTCVzY5t2NGrYAlLmTWfCqbcYwJ5OhFGgCWwaw3uwmfdC8EB+EuEC937x NJ+32XlgUK+wx1NFXHXxbcJaD3xnD/kYpVLmTcw8U9orAkPgz1i2ppcAdtsZkpSyqVIE eLfv4QRG/MH1Mn9zGMZ23ZPHhq/b0XOAHmlobVRurf4ld3HJI8ewcD6yjTW+qdI5HAJN 6IQtqgBIplJyrtKa6kCuRe8ZN3jWaftpZuZQKjASExrUGWvQQ7OK3SLmAl6GLpmWr9B0 56okPimQDGDXIpIgscJQps32hjr4YcmBHThYJHp7J22ybGfaczd0KHQmSKu5SBTQA3EJ l3ug== X-Forwarded-Encrypted: i=1; AJvYcCU0B0zEHixDRJQHp/pKM29o3rjjrA94FcS2AQS2gIJVbx8xL7A17zHZkN2rm5ddyHyEZCMCYwbWzxvhHQ==@vger.kernel.org, AJvYcCV6kin3tVBpr5Fyq5PAFMhLbBid3b7TQ+HfSUSdMm1J4zK2I4YtHZ+svdvlefW7/3aTaNSqs7Ex9OEa/F/U@vger.kernel.org, AJvYcCVAfLPN9T6qWOJHFKh8hy3Cv83RO7L/E3HBjvL5rXYMwRs66x2jQPW2WOnWlFj3OCrvA3JAH70TxPFW@vger.kernel.org, AJvYcCVvVSnO+JJD77kzmmO5mWGXTJFw7kERBi3XmF7y2TkR6884Fv7qlD84nYQJq85NX2VMFUheNH89AYg=@vger.kernel.org, AJvYcCXP8QOLnXI7i4un5aIraAeC/fyN9BuNUcDenkTjQpHMEiDMoKgXtdGaLQ8VY4esh6pjG7u8qiCSJwBQ@vger.kernel.org X-Gm-Message-State: AOJu0YxqF44o3pZCM+O0pbmubu2xwznlpNfN503aZdgRrcs9SwkTLxO+ LuiNjlytvYuV7HbLFlCnNu77kUQzdLN/awXjZ+c2fVNZmPJWzCV8g+gcpg== X-Gm-Gg: ASbGnctx5EPfVAi/gVNwx9xAqT6OwD/2a8WpUNeIkqIIw+n6d2jwqg96trTsUiSNzM9 8deeGtWQI8CubOizeSLH9OuRiMJcf3MpGNr4ILc+cSJxNumIDDXguGDA7MAmHxjdWv/Ig74bLe9 4JX8QgCIXUiROS4SBqdAa6o2B5lkkhwC8E3/vWpnDDi4ACIDbwRktzKhUpRCWKCtMb49THR+yFg se0opeJnYCvKsAdQe5qnoDy85UgBVyiEVf8k4fq7WE1alEJtmR3RbgOSi34kdR0EWkkryFtMlmm VVS7eV7/kGeH+lOaMSlp6on0ui1Wew/lWxClQgT56Fx8Ex51f+v3xFa++byX94U3r1t+o5UIdko MPrnvQMw= X-Google-Smtp-Source: AGHT+IGTsVCL+NTHpDgAjbfPGCf82Ky2fpMBBCHIOPIzC5FN2MM8zcjn3L7PrIBL8Fr/RKV6YFjIXQ== X-Received: by 2002:a5d:64c6:0:b0:38d:cab2:921a with SMTP id ffacd0b85a97d-38f33f1249bmr8380187f8f.1.1739810253132; Mon, 17 Feb 2025 08:37:33 -0800 (PST) Received: from localhost (p200300e41f22a600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f22:a600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38f259f7979sm12509797f8f.83.2025.02.17.08.37.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 08:37:32 -0800 (PST) From: Thierry Reding To: Greg Kroah-Hartman Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 6/7] irqchip/irq-imx-gpcv2: Embed syscore_ops in chip context Date: Mon, 17 Feb 2025 17:37:12 +0100 Message-ID: <20250217163713.211949-7-thierry.reding@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217163713.211949-1-thierry.reding@gmail.com> References: <20250217163713.211949-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Thierry Reding This enables the syscore callbacks to obtain the IRQ chip context without relying on a separate global variable. Signed-off-by: Thierry Reding --- drivers/irqchip/irq-imx-gpcv2.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/drivers/irqchip/irq-imx-gpcv2.c b/drivers/irqchip/irq-imx-gpcv2.c index 83b009881e2a..61ba06a28fc4 100644 --- a/drivers/irqchip/irq-imx-gpcv2.c +++ b/drivers/irqchip/irq-imx-gpcv2.c @@ -19,6 +19,7 @@ struct gpcv2_irqchip_data { + struct syscore_ops syscore; struct raw_spinlock rlock; void __iomem *gpc_base; u32 wakeup_sources[IMR_NUM]; @@ -26,7 +27,11 @@ struct gpcv2_irqchip_data { u32 cpu2wakeup; }; -static struct gpcv2_irqchip_data *imx_gpcv2_instance __ro_after_init; +static inline struct gpcv2_irqchip_data * +from_syscore(struct syscore_ops *ops) +{ + return container_of(ops, struct gpcv2_irqchip_data, syscore); +} static void __iomem *gpcv2_idx_to_reg(struct gpcv2_irqchip_data *cd, int i) { @@ -35,14 +40,10 @@ static void __iomem *gpcv2_idx_to_reg(struct gpcv2_irqchip_data *cd, int i) static int gpcv2_wakeup_source_save(struct syscore_ops *ops) { - struct gpcv2_irqchip_data *cd; + struct gpcv2_irqchip_data *cd = from_syscore(ops); void __iomem *reg; int i; - cd = imx_gpcv2_instance; - if (!cd) - return 0; - for (i = 0; i < IMR_NUM; i++) { reg = gpcv2_idx_to_reg(cd, i); cd->saved_irq_mask[i] = readl_relaxed(reg); @@ -54,22 +55,13 @@ static int gpcv2_wakeup_source_save(struct syscore_ops *ops) static void gpcv2_wakeup_source_restore(struct syscore_ops *ops) { - struct gpcv2_irqchip_data *cd; + struct gpcv2_irqchip_data *cd = from_syscore(ops); int i; - cd = imx_gpcv2_instance; - if (!cd) - return; - for (i = 0; i < IMR_NUM; i++) writel_relaxed(cd->saved_irq_mask[i], gpcv2_idx_to_reg(cd, i)); } -static struct syscore_ops imx_gpcv2_syscore_ops = { - .suspend = gpcv2_wakeup_source_save, - .resume = gpcv2_wakeup_source_restore, -}; - static int imx_gpcv2_irq_set_wake(struct irq_data *d, unsigned int on) { struct gpcv2_irqchip_data *cd = d->chip_data; @@ -275,8 +267,9 @@ static int __init imx_gpcv2_irqchip_init(struct device_node *node, */ writel_relaxed(~0x1, cd->gpc_base + cd->cpu2wakeup); - imx_gpcv2_instance = cd; - register_syscore_ops(&imx_gpcv2_syscore_ops); + cd->syscore.suspend = gpcv2_wakeup_source_save; + cd->syscore.resume = gpcv2_wakeup_source_restore; + register_syscore_ops(&cd->syscore); /* * Clear the OF_POPULATED flag set in of_irq_init so that From patchwork Mon Feb 17 16:37:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Thierry Reding X-Patchwork-Id: 13978233 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1356C226547; Mon, 17 Feb 2025 16:37:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810258; cv=none; b=GRs1erigjBGdO1SdbGi3hAdeLJq6Y7+4I4U70X2cGcgUXYsPOSUazfPjxSxvL/R5GKoio3sJPWwCnhFKlbRNMt9y2vfgaJaqFXDoHwnwn7XzHLCzIg0NT8MHPI4pHalrpDpzNi2PaozWE3pQjRhmpHvdUklsYhyBymwrqBceKUs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1739810258; c=relaxed/simple; bh=u6waITdVDCY6g9EHT0QMDOQubhyZX/Ph56utqfGWkrA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BgEd7FiOp0Sm3cGLME8WpBNSqMtEufWJJwI7C00jnfGnSkBQzjPiAqlmV6iIcErSI337mOaKxpgMtD9CzsYLgC515CzNKNgDLXUghELAzi2IU4zhlka6cML99f1T0Svo3l6Zpht1vEH9fdsXVO7YmRnlAyc1vwrCCK3Pv+jZzqk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=TpP6C3zL; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="TpP6C3zL" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-38f3ea6207cso1241590f8f.3; Mon, 17 Feb 2025 08:37:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1739810255; x=1740415055; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VcpOOuxQgTIkODYzKhCUSbyWoJK/c0mt1V0DRu+9cfQ=; b=TpP6C3zL40Z9c7wbtwZ0BgCY7UQC5tp0M715oHQ2/3BSD9/jgcIFtZp/uDusy+B8RM /TtnEMXxvDrTO5hLoAwX/39g2tuSg7RwWocmLizu9QRiIkumeaZ04XzG6AW/GciNc9rC hqMeLlRJsQJA1F78xXK73KQqkUHMJWt+3PGv7RhgHcvW67X4GJvvkWalOxiVhmay4jtt 1xMKhjkXcJaC+kfX/7u6FzFqeb3fX1kg4beqRlAUKVrjFd8YGWwZ1UYClKMwZpUiM8xA kJGoaBRoJdJDvP9H+McbKaxb6bj4AkfUsv/qyOyzVNpSfA//gWQIvWDa1VifeWALGKiE iKRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739810255; x=1740415055; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VcpOOuxQgTIkODYzKhCUSbyWoJK/c0mt1V0DRu+9cfQ=; b=A1LiEYK8hUwObgGRhHrumFJLGnjBjWf3jI7baLLJISD82ZRUrZRx29a43FsIaVCMK6 nQfhh9A/mlc6FEpOGSfkxVF75X7eUFzbtQa2IXMDFcS3glSt0zdaLxfXPHCwYYZb3xkV 6PGo+cRcYwnFmWqQedbtRz6k11EjBnpciIcm0Bpgl3fDwUn2ldnnT5MvLqNcJaKzd2u8 aAIyBag4ISmNjvb57tdjL02YVPBK19mA+Mawn0E7X2JrlOKtgbmGIGWUGN8LUs9H4smC OU4yhAylSDqWodwhstH7CKZGgIRwLgecDO9JNKIMH57H0dBdLKS5iLeesb+XY3jo+Q0x sZ+g== X-Forwarded-Encrypted: i=1; AJvYcCUJiuP4dAXBx8qH5jDNsTsieHQ6HyLomNevVgXz3G6TlN50uJNViNEU7H5RjuAFjBbGAHik3F1+tXe4@vger.kernel.org, AJvYcCUiidFw8Wzq0sv42P2aGhRafYPGEEPEnvtYdq3Yw96hFKE77hnNZOY2254Nqey7ukK9zo1oDqS2yHLWLGEg@vger.kernel.org, AJvYcCVJM4iKdxXB2n58tNkiL9K1ugLeb3rjpfsy/dwyC7uBZ+ByAY7DJNGC+pwf2wxZKaQ6JzhegpaDoKY=@vger.kernel.org, AJvYcCX05ntAfarKdAHldLT/6pcpPmlGxCfitBL1LVTDn952qHf8KfXrUxYUUgqYi1/W5cTBCbt3EZSi5CCt@vger.kernel.org, AJvYcCXwYp8prhNTSzuqspm6QDQE2j3/8NtmexyOkZGTU2ByoeLuQknoCmEyxn99u/Sh8Ee9aD7EllueAl+/hg==@vger.kernel.org X-Gm-Message-State: AOJu0YwkXGHrMnjXEDoctuV3cZW0roRyTkld0Iu6WDuSLedP4pHAXzaH KA4mI7LnbUAARyG4xQREtZroqdSP/7HwuDug88GeHzGnz6B/Vn/DvEblxA== X-Gm-Gg: ASbGnct4MHVCA+M5ECfETK6JXxzmIDDS9rwo/Ty3FeSfg3ryWeThyo0Auw7WVrcbSEX tQqA09QTs1FBobLeOFCU1CZXVkGddXSRcaVPJV4OTpB6oPY88ASf4mt4MSEPw+Cfb+Md/Yhyr8C Q+KretuIiWfypdZLkUjREfGu51FMbrhCI4aoa4m0MspKQHU70a0YJKt3Av45EUJc3J5TVPOmdFl +aogFXcwVl2KtnXwdF1pQE1WqOHeOqwHxbqxxAUfCLvGoU99k3pq7KcEqI2pQJJlEKixiIItfwY ip8ZyvcToA1RjA9De4lTE7fhx+ZHxwKpsnfiBBG8gshK+q23VmB5v6yBmkiwkbUkZ5+jUam3sr7 Oz/vwV60= X-Google-Smtp-Source: AGHT+IHfk4fhCYlLR37pJBvXWtv75DWNoeEDbdc68Ccdk3uRnLzXu0R2uoxz3Sfrv9nYBkbSbSFitQ== X-Received: by 2002:a05:6000:4007:b0:38f:2b59:b550 with SMTP id ffacd0b85a97d-38f34167df2mr8240262f8f.50.1739810255313; Mon, 17 Feb 2025 08:37:35 -0800 (PST) Received: from localhost (p200300e41f22a600f22f74fffe1f3a53.dip0.t-ipconnect.de. [2003:e4:1f22:a600:f22f:74ff:fe1f:3a53]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38f2591570esm12881221f8f.59.2025.02.17.08.37.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 17 Feb 2025 08:37:34 -0800 (PST) From: Thierry Reding To: Greg Kroah-Hartman Cc: x86@kernel.org, linux-arm-kernel@lists.infradead.org, linux-riscv@lists.infradead.org, linux-mips@vger.kernel.org, loongarch@lists.linux.dev, linuxppc-dev@lists.ozlabs.org, linux-sh@vger.kernel.org, linux-pci@vger.kernel.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 7/7] soc/tegra: pmc: Derive PMC context from syscore ops Date: Mon, 17 Feb 2025 17:37:13 +0100 Message-ID: <20250217163713.211949-8-thierry.reding@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250217163713.211949-1-thierry.reding@gmail.com> References: <20250217163713.211949-1-thierry.reding@gmail.com> Precedence: bulk X-Mailing-List: linux-mips@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 From: Thierry Reding Rather than relying on a global variable, make use of the fact that the syscore ops are embedded in the PMC context and can be obtained via container_of(). Signed-off-by: Thierry Reding --- drivers/soc/tegra/pmc.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/soc/tegra/pmc.c b/drivers/soc/tegra/pmc.c index 6a3923e1c792..ea26c2651497 100644 --- a/drivers/soc/tegra/pmc.c +++ b/drivers/soc/tegra/pmc.c @@ -3143,6 +3143,7 @@ static void tegra186_pmc_process_wake_events(struct tegra_pmc *pmc, unsigned int static void tegra186_pmc_wake_syscore_resume(struct syscore_ops *ops) { + struct tegra_pmc *pmc = container_of(ops, struct tegra_pmc, syscore); u32 status, mask; unsigned int i; @@ -3156,6 +3157,8 @@ static void tegra186_pmc_wake_syscore_resume(struct syscore_ops *ops) static int tegra186_pmc_wake_syscore_suspend(struct syscore_ops *ops) { + struct tegra_pmc *pmc = container_of(ops, struct tegra_pmc, syscore); + wke_read_sw_wake_status(pmc); /* flip the wakeup trigger for dual-edge triggered pads