From nobody Sun May 24 22:35:55 2026 Received: from mail-vk1-f170.google.com (mail-vk1-f170.google.com [209.85.221.170]) (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 108B13451B3 for ; Fri, 22 May 2026 19:14:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779477263; cv=none; b=dK6VGiFs1b5Tg6BxSiDc9yzROM3PVFS7e2MefCvairk7C8dRExHr/YusK+oQO8Bft2jgLzeFhkqiyqxmrgzch30hyAdcaclg/JN+M6lajZFSIS+Nm5AiVe4e9qbhtQnjt6Jhwh14AlWe9GeHbmaNo1RlKCHh0Bbq4eWyqB+tPYs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779477263; c=relaxed/simple; bh=W95e8kqy+EUnTLn7yhNEZxHMkbNjEJlRwwDjiQMwjXk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=WfeQbn9KKpY7/zsRSwmKWukKFw4O3ezNOCPReNjWb7Zis4iBOhH7uLS2aEZVIYbGBjjcrLdrX/5aVUnTmcPPjT3B9OSClKLfbkmHUWk+27p8DRNJun9NaAi6fTSoHdcqU5aqWZFPLJ+iuWde1W924fIguTqAVj6UI/HJOVT1dnE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b=LU7WccnZ; arc=none smtp.client-ip=209.85.221.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre.com header.i=@baylibre.com header.b="LU7WccnZ" Received: by mail-vk1-f170.google.com with SMTP id 71dfb90a1353d-57513a91514so2575221e0c.2 for ; Fri, 22 May 2026 12:14:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre.com; s=google; t=1779477259; x=1780082059; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=bcQfxlYT0WdkNlclpO13skLK1pFgoPq0lf6iXLyTJ4A=; b=LU7WccnZN/e8j78afIIJ2gmr2De8Zy50nyQQbiRzS1qnNe0Pulb/HMmrwk1pXT2Mr3 RTqAxn8guYYqNY+ahaMfcM89VhGqjvVfeqSF8NNGV1PDawy2qxLglR/BR1v4FbWmZxsd TCCFwGdcM5lva3hyD2beNxMp/JVNmWt5p+D0chQ/HvhcBMl8fTCnwfgBT+7jdbxnm/eP SdIyLaUuUMyu/8GWE/2xsqVj4kuVg7cQT3ouo2g64ngYHtruvagoQ9dAuhgV1qWpP/w2 GsRosVnqwVktP3pfkNvbxCzaj8G1XxMja/Ybzz9pk7SDAqswGH9PtyNhmBCjI4AbkUoy +w+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779477259; x=1780082059; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=bcQfxlYT0WdkNlclpO13skLK1pFgoPq0lf6iXLyTJ4A=; b=tTOYGgSzDR4lte8tHdANdYmNnbllSiBkzOu9UeBrXFbjiwPo1SX8PoG4nDHvKQahjm 12xOodIWGxWswSRO4aBB9fzla37oEvUAWFwDSuWe/5SGCA+DtDRv5xxEmwyq4oRbZ/wt Bo2tZP6Ux4b77pGDrbjF/4tH5n9liT2FQ5Y5X9lnzthzBaGLno7P6MXGTCOMjm46UbUJ 6Q36VbV6hmT6JwOsXmJHmMe8j2nWw+DNW3EFvbDF9FMq6viO9qGmd91b7s+gdlAj3uu2 RV7/Xp9/n1/oOmLFXcYIZFvho4nZfqfu88HDq60Se84y1RqBEHanOnxuv0ytIU52zy30 tRWA== X-Forwarded-Encrypted: i=1; AFNElJ9z8Atbs7E4Nqa6q/cIpQpIfZYG3yNiA0KXBrSYdsP4Bm9Pk62Tx462FGLcP8eQtrIiJ04HgC5eFCkomsE=@vger.kernel.org X-Gm-Message-State: AOJu0YwaL/xz9KX78lnw5pEDVOmWnvg2gE6XC5T5G0OXcte023movCwC 4+dc3EsP/kYSzl95CTBxJpRviOQ3Ut4GkXxZri07QsaxVyEBBq6o/YFeB0sP7r64B5/FZwTWhO7 NMYjlap4MNQ== X-Gm-Gg: Acq92OHI5aXqhc85swIXJEErosv6aZjD8t2VshFqB5gqhHouCwk8SXdYwFFkTY+TIhH y0KIIwZbQM3aGxnpPKRvCp7Zs+/c/z0fIkDpxQOpgxjQ9qfmKmQqq0RZdqou9wAsq1eLdvmekNE IXPQLLlEkwWDtR+nrfscgi1iKiKfRHXVXkfsBnPebn2VWeArKcO1KiyOsATVrtxrW3Q59bqT8xm n4GnWiQqjoBCb3u6Uj64Uew2dypjTMThFERvF27CeizpNFqnKYhm1FqNmXQJIpOrWskaP3McLo2 51q3M5CIZc4nyFQLBF8d2LtDeIaR7cQG2UBCMnmBkC5angNuyaFssI8Rs7fWdAu+c4vOaoGUX+K Sf6V9OvMbOFksrD55wE0rFQMGobt/caG6R3bFw6TfJaBkkGb2oGby/mpnBk9xQ/Gd9eTBLr9dhu DYicg0YW8vPDSDh6pG0KXVOgOuPUhQuLBEXwgX8fvrPQ== X-Received: by 2002:a05:6122:330a:b0:56f:adb8:7c54 with SMTP id 71dfb90a1353d-5865e3aff5emr3335785e0c.3.1779477259066; Fri, 22 May 2026 12:14:19 -0700 (PDT) Received: from acer-e1.tail6c460f.ts.net ([2804:7f0:7542:7b16:2880:ed6d:f5c:8b9e]) by smtp.gmail.com with ESMTPSA id a1e0cc1a2514c-96173af3e82sm2741013241.10.2026.05.22.12.14.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 12:14:18 -0700 (PDT) From: Ronaldo Nunez To: linux-pwm@vger.kernel.org Cc: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , Frank Li , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Ronaldo Nunez Subject: [PATCH v2] pwm: imx27: Fix variable truncation in .apply() Date: Fri, 22 May 2026 16:13:48 -0300 Message-ID: <20260522191348.6227-1-rnunez@baylibre.com> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Fix a variable truncation when calculating period in microseconds as part of the solution for the ERR051198 in .apply() callback. Example scenario: - Period of 3us (PWMPR =3D 196 and prescaler =3D 1) - Expected value in tmp: 198000000000 (NSEC_PER_SEC * (196 + 2) * 1) - Actual value is 431504384 (truncation to u32) Signed-off-by: Ronaldo Nunez Reviewed-by: Frank Li --- Changes in v2: - Added example with actual PWMPR/prescaler values per Frank Li's feedback - Dropped testing section --- drivers/pwm/pwm-imx27.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/pwm/pwm-imx27.c b/drivers/pwm/pwm-imx27.c index 3d34cdc4a3a5..c8b801fcb525 100644 --- a/drivers/pwm/pwm-imx27.c +++ b/drivers/pwm/pwm-imx27.c @@ -200,7 +200,7 @@ static void pwm_imx27_wait_fifo_slot(struct pwm_chip *c= hip, static int pwm_imx27_apply(struct pwm_chip *chip, struct pwm_device *pwm, const struct pwm_state *state) { - unsigned long period_cycles, duty_cycles, prescale, period_us, tmp; + unsigned long period_cycles, duty_cycles, prescale, period_us; struct pwm_imx27_chip *imx =3D to_pwm_imx27_chip(chip); unsigned long long c; unsigned long long clkrate; @@ -208,6 +208,7 @@ static int pwm_imx27_apply(struct pwm_chip *chip, struc= t pwm_device *pwm, int val; int ret; u32 cr; + u64 tmp; =20 clkrate =3D clk_get_rate(imx->clks[PWM_IMX27_PER].clk); c =3D clkrate * state->period; @@ -249,6 +250,11 @@ static int pwm_imx27_apply(struct pwm_chip *chip, stru= ct pwm_device *pwm, val =3D readl(imx->mmio_base + MX3_PWMPR); val =3D val >=3D MX3_PWMPR_MAX ? MX3_PWMPR_MAX : val; cr =3D readl(imx->mmio_base + MX3_PWMCR); + + /* + * tmp stores period in nanoseconds. Result fits in u64 since + * val <=3D 0xfffe and prescaler in [1, 0x1000]. + */ tmp =3D NSEC_PER_SEC * (u64)(val + 2) * MX3_PWMCR_PRESCALER_GET(cr); tmp =3D DIV_ROUND_UP_ULL(tmp, clkrate); period_us =3D DIV_ROUND_UP_ULL(tmp, 1000); --=20 2.53.0