From nobody Mon Sep 28 21:53:46 2026 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A98F63C3449; Mon, 17 Aug 2026 08:37:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=193.142.43.55 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786955875; cv=none; b=IdvSd3lNM2ojPowD1avE9tVS7ShEFiYZ6xSK+UCv2AIdTy2xEng6n+0M7XwDvzTq4T78aSXd5chKxlSFn3Ua/hOLpzwbZ9APQ64JFGtvr1Q4Jl0mFZZB1A6l4TQfC34auzi7u9un7IXaOjULTfRqj6VSl/X4xG6C1verzLjwk5U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786955875; c=relaxed/simple; bh=18ylhyEQy9YSD7xcv8ML3JVkpA5sdfYXNgS4ezxvBSE=; h=Date:From:To:Subject:Cc:In-Reply-To:References:MIME-Version: Message-ID:Content-Type; b=RGiGgDtxD2Y5Bws7VXE0eZtIZoNF9bNFmXnydxj24i9unL4u9xpl3BqhT8CUyqZD8XW6mWhi/UTiIvq58O4Ap9d81btS5XSHbJDt8teEMSEnh/WhPFLE3zNbSF/7QFAYnQtvJVOFTpB+lBqBNd4tVJbJgw7abn/TGAzDNznF/NY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de; spf=pass smtp.mailfrom=linutronix.de; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=eiJVZDof; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b=o+WDa5pG; arc=none smtp.client-ip=193.142.43.55 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linutronix.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="eiJVZDof"; dkim=permerror (0-bit key) header.d=linutronix.de header.i=@linutronix.de header.b="o+WDa5pG" Date: Mon, 17 Aug 2026 08:37:49 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1786955871; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sLQdoIctBQSA1maV5dJrqJKrXNGnEYZNPJXQzSqGFDY=; b=eiJVZDofrugqjv7RpEwCYZbcfc7vOObVbwlYP9ei3kpHYQxLATi5cCr3UAF2ysb3s1bXFb JMQge/Dwj9oxEm3/7zRZONc7VlhwASLDOv1gaUX4xbQ17RnaPM7K+vJD2Hy4Q+9AkZh2W8 yHPZklMXB5fhbc1BX4We6yB744jyT9F3s3TkOtz/tJ3OwNQ3IhHS/V/gObbgY/DMyrodHt GheKyVr20gfFs6VDQkVuGduEUT72/TpCl7JYmYnWdzKfhWLTzLRnaMxaz3knh29AX78Bmv SrDurd7K1NLTj7aUBoWMXCjJUIyiKdVeCJgE7AP9ZSsp1QGX+NAYvH6fUY8clQ== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1786955871; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=sLQdoIctBQSA1maV5dJrqJKrXNGnEYZNPJXQzSqGFDY=; b=o+WDa5pG2zG43tLPc/odKd6cVulgyCClgx2JNexoRp8KA+YWi0iI+89u3NuSX8799MMzFB 9WfUwFlZIDrTitCQ== From: "tip-bot2 for Marek Szyprowski" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: timers/clocksource] clocksource/drivers/samsung_pwm: Switch to raw_spinlock_t type Cc: Marek Szyprowski , Daniel Lezcano , Krzysztof Kozlowski , Sebastian Andrzej Siewior , ukleinek@kernel.org, x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20260713085653.1145015-1-m.szyprowski@samsung.com> References: <20260713085653.1145015-1-m.szyprowski@samsung.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Message-ID: <178695586950.1542179.9706976681335987109.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Precedence: bulk Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The following commit has been merged into the timers/clocksource branch of = tip: Commit-ID: 3b212f9d70805d91febae01d618868f4860e267c Gitweb: https://git.kernel.org/tip/3b212f9d70805d91febae01d618868f48= 60e267c Author: Marek Szyprowski AuthorDate: Mon, 13 Jul 2026 10:56:53 +02:00 Committer: Daniel Lezcano CommitterDate: Thu, 13 Aug 2026 18:13:15 +02:00 clocksource/drivers/samsung_pwm: Switch to raw_spinlock_t type Samsung PWM timer might be used as a clock source on some legacy systems. When PREEMPT_RT is enabled on ARM, regular spinlock is converted to a sleeping lock (mutex-based), which must not be used in atomic context such as hard interrupt handlers. Switch the samsung_pwm_lock to the raw_spinlock, which remains a true non-sleeping spinlock even under PREEMPT_RT. Fixes: 7aac482e6290 ("clocksource: samsung_pwm_timer: Make PWM spinlock glo= bal") Fixes: f11899894c0a ("clocksource: add samsung pwm timer driver") Signed-off-by: Marek Szyprowski Signed-off-by: Daniel Lezcano Reviewed-by: Krzysztof Kozlowski Reviewed-by: Sebastian Andrzej Siewior Acked-by: Uwe Kleine-K=C3=B6nig Link: https://patch.msgid.link/20260713085653.1145015-1-m.szyprowski@samsun= g.com --- drivers/clocksource/samsung_pwm_timer.c | 22 +++++++++++----------- drivers/pwm/pwm-samsung.c | 22 +++++++++++----------- include/clocksource/samsung_pwm.h | 2 +- 3 files changed, 23 insertions(+), 23 deletions(-) diff --git a/drivers/clocksource/samsung_pwm_timer.c b/drivers/clocksource/= samsung_pwm_timer.c index b9561e3..0544124 100644 --- a/drivers/clocksource/samsung_pwm_timer.c +++ b/drivers/clocksource/samsung_pwm_timer.c @@ -56,7 +56,7 @@ #define TCON_AUTORELOAD(chan) \ ((chan < 5) ? _TCON_AUTORELOAD(chan) : _TCON_AUTORELOAD4(chan)) =20 -DEFINE_SPINLOCK(samsung_pwm_lock); +DEFINE_RAW_SPINLOCK(samsung_pwm_lock); EXPORT_SYMBOL(samsung_pwm_lock); =20 struct samsung_pwm_clocksource { @@ -87,14 +87,14 @@ static void samsung_timer_set_prescale(unsigned int cha= nnel, u16 prescale) if (channel >=3D 2) shift =3D TCFG0_PRESCALER1_SHIFT; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 reg =3D readl(pwm.base + REG_TCFG0); reg &=3D ~(TCFG0_PRESCALER_MASK << shift); reg |=3D (prescale - 1) << shift; writel(reg, pwm.base + REG_TCFG0); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); } =20 static void samsung_timer_set_divisor(unsigned int channel, u8 divisor) @@ -106,14 +106,14 @@ static void samsung_timer_set_divisor(unsigned int ch= annel, u8 divisor) =20 bits =3D (fls(divisor) - 1) - pwm.variant.div_base; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 reg =3D readl(pwm.base + REG_TCFG1); reg &=3D ~(TCFG1_MUX_MASK << shift); reg |=3D bits << shift; writel(reg, pwm.base + REG_TCFG1); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); } =20 static void samsung_time_stop(unsigned int channel) @@ -124,13 +124,13 @@ static void samsung_time_stop(unsigned int channel) if (channel > 0) ++channel; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 tcon =3D readl_relaxed(pwm.base + REG_TCON); tcon &=3D ~TCON_START(channel); writel_relaxed(tcon, pwm.base + REG_TCON); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); } =20 static void samsung_time_setup(unsigned int channel, unsigned long tcnt) @@ -142,7 +142,7 @@ static void samsung_time_setup(unsigned int channel, un= signed long tcnt) if (tcon_chan > 0) ++tcon_chan; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 tcon =3D readl_relaxed(pwm.base + REG_TCON); =20 @@ -153,7 +153,7 @@ static void samsung_time_setup(unsigned int channel, un= signed long tcnt) writel_relaxed(tcnt, pwm.base + REG_TCMPB(channel)); writel_relaxed(tcon, pwm.base + REG_TCON); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); } =20 static void samsung_time_start(unsigned int channel, bool periodic) @@ -164,7 +164,7 @@ static void samsung_time_start(unsigned int channel, bo= ol periodic) if (channel > 0) ++channel; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 tcon =3D readl_relaxed(pwm.base + REG_TCON); =20 @@ -178,7 +178,7 @@ static void samsung_time_start(unsigned int channel, bo= ol periodic) =20 writel_relaxed(tcon, pwm.base + REG_TCON); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); } =20 static int samsung_set_next_event(unsigned long cycles, diff --git a/drivers/pwm/pwm-samsung.c b/drivers/pwm/pwm-samsung.c index 951b38f..14fb460 100644 --- a/drivers/pwm/pwm-samsung.c +++ b/drivers/pwm/pwm-samsung.c @@ -102,7 +102,7 @@ struct samsung_pwm_chip { * IP. Should this change, both drivers will need to be modified to * properly synchronize accesses to particular instances. */ -static DEFINE_SPINLOCK(samsung_pwm_lock); +static DEFINE_RAW_SPINLOCK(samsung_pwm_lock); #endif =20 static inline @@ -141,14 +141,14 @@ static void pwm_samsung_set_divisor(struct samsung_pw= m_chip *our_chip, =20 bits =3D (fls(divisor) - 1) - our_chip->variant.div_base; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 reg =3D readl(our_chip->base + REG_TCFG1); reg &=3D ~(TCFG1_MUX_MASK << shift); reg |=3D bits << shift; writel(reg, our_chip->base + REG_TCFG1); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); } =20 static int pwm_samsung_is_tdiv(struct samsung_pwm_chip *our_chip, unsigned= int chan) @@ -249,7 +249,7 @@ static int pwm_samsung_enable(struct pwm_chip *chip, st= ruct pwm_device *pwm) unsigned long flags; u32 tcon; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 tcon =3D readl(our_chip->base + REG_TCON); =20 @@ -263,7 +263,7 @@ static int pwm_samsung_enable(struct pwm_chip *chip, st= ruct pwm_device *pwm) =20 our_chip->disabled_mask &=3D ~BIT(pwm->hwpwm); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); =20 return 0; } @@ -275,7 +275,7 @@ static void pwm_samsung_disable(struct pwm_chip *chip, = struct pwm_device *pwm) unsigned long flags; u32 tcon; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 tcon =3D readl(our_chip->base + REG_TCON); tcon &=3D ~TCON_AUTORELOAD(tcon_chan); @@ -290,7 +290,7 @@ static void pwm_samsung_disable(struct pwm_chip *chip, = struct pwm_device *pwm) =20 our_chip->disabled_mask |=3D BIT(pwm->hwpwm); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); } =20 static void pwm_samsung_manual_update(struct samsung_pwm_chip *our_chip, @@ -298,11 +298,11 @@ static void pwm_samsung_manual_update(struct samsung_= pwm_chip *our_chip, { unsigned long flags; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 __pwm_samsung_manual_update(our_chip, pwm); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); } =20 static int __pwm_samsung_config(struct pwm_chip *chip, struct pwm_device *= pwm, @@ -390,7 +390,7 @@ static void pwm_samsung_set_invert(struct samsung_pwm_c= hip *our_chip, unsigned long flags; u32 tcon; =20 - spin_lock_irqsave(&samsung_pwm_lock, flags); + raw_spin_lock_irqsave(&samsung_pwm_lock, flags); =20 tcon =3D readl(our_chip->base + REG_TCON); =20 @@ -404,7 +404,7 @@ static void pwm_samsung_set_invert(struct samsung_pwm_c= hip *our_chip, =20 writel(tcon, our_chip->base + REG_TCON); =20 - spin_unlock_irqrestore(&samsung_pwm_lock, flags); + raw_spin_unlock_irqrestore(&samsung_pwm_lock, flags); } =20 static int pwm_samsung_set_polarity(struct pwm_chip *chip, diff --git a/include/clocksource/samsung_pwm.h b/include/clocksource/samsun= g_pwm.h index 9b435ca..36f6f24 100644 --- a/include/clocksource/samsung_pwm.h +++ b/include/clocksource/samsung_pwm.h @@ -15,7 +15,7 @@ * spinlock is not shared between both drivers. */ #ifdef CONFIG_CLKSRC_SAMSUNG_PWM -extern spinlock_t samsung_pwm_lock; +extern raw_spinlock_t samsung_pwm_lock; #endif =20 struct samsung_pwm_variant {