From nobody Tue Dec 16 21:29:24 2025 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (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 34BB72E1743 for ; Mon, 8 Dec 2025 15:21:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765207305; cv=none; b=uRedHa/KK1sFy0uXLXG1XLOfibtuwWH2g7Bl/0yjRE5Vu4RxxmIhjRenUD9jhaGIPrvuOKXrOGoxCMM/b3SUQyDiX8atxhJ1o419lEIwanFBnca3H44zvPBDuheMM9zXr0WDGsFPCtXSaCHj8fHFoDo6VX8s931vjhCaskhb5SI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765207305; c=relaxed/simple; bh=yXm/4YmON4ItbMvKkw1/c75Q/GHmL5fbLtW/K6gDKN8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JP07QPcJ+HMVNovpeT38/XPq1uozQHhsIZZM5nuActdgJSj4swtArvle/r+pPJducR0NaYOpdY6OpmiyRxwyB7dEQL/gU4C8S7/M2oEP2B5RHBP2Tr4m3tdtGd+ywoSX4+6EX60+Z3iePJfVagBXZFD0/eo4F7I1RYZcGtJMXb0= 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=FBadctRM; arc=none smtp.client-ip=209.85.208.45 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="FBadctRM" Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-64312565c10so7413259a12.2 for ; Mon, 08 Dec 2025 07:21:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1765207300; x=1765812100; 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=yUOaOBzmat1IrbxWeXGOKr8YdTjnocfw3KD45UqcxkA=; b=FBadctRM14nBQGcblkvIPtIWHpdGYXRmAR8WhHzRJP81Ev3CFcFfmBc37sQW4Zo+hr MrIGL3vdtiFX/6bPeW4LuZayerU36JuzAEh5sdcTX8hsm53wFUwLeREXTvo4bMaexKBc NGjoP2JJL0/0dL82k48DtUOYPZfi7abQOacMJO4qf/7YA8vg7yE7p7IaQ4kHZBaVDO8y 0SOr8NXmU5Qjp6uG3QS6ZpXNS2HZ3zL/oEREDUhVrXIF9hNqps/t9OHMWJY/CAMmJkru 6zpLvAXkrIQx6FWQ7M9DqJMkvEjHpclvq/L1iJjADmE+3KiqYRD1IFvAA1U0/zV7nWPT UwWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1765207300; x=1765812100; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yUOaOBzmat1IrbxWeXGOKr8YdTjnocfw3KD45UqcxkA=; b=ZWClcLzawiu3LqDZhDGB3VU0dHGbUV+gyMW9Cagz2fvGNBmfE5XLMXyzoYCmmF8vIv xrPkxNt2UKJKf6opewsAP9FaO5w5mWCzBQ7OuicWJpQkf9Q3RXIpeX+yQNCNLaUe4lyP +gLdUURX5yDejXTtDv2mP9J9ZOlI3CLsAb/emm6k1GfJB40NyGiHNYnmy4mgMO7aotIY VGxknU9bD+qJjHOHNgP1uhRM9MLdykECnGNOgNCMSi1UUG21pI9+SJs54hvOsQ1bRmfw aOQTl1SQiqbgwkWEios53ws0sjLCjJ0HdK+lDRlZnbOtKBfwlSvIJ74Jdq8EF5GXcibK 6QIQ== X-Forwarded-Encrypted: i=1; AJvYcCUxzTkmtDy/PvtVC7lflQ+I8FsAOvsLelmwKI42TQi/gCDaIDn8DQ1H4YtcdTW7luBZa1+6TY6yIXI0Mw4=@vger.kernel.org X-Gm-Message-State: AOJu0Yz7aCpJO0L5cJwwsmOoGcSyHoPEX/99lTaS1eIKFeXR3FkAxPEF A2th6JmdIsxqnx7pEfvz9R5m3VMSL+stIEZDppO/yP8WvAfqVhUxPPWv X-Gm-Gg: ASbGncuEWKAJZds0Zi6iGkFIbyrec96wDaCWpHUzqha6IAvJ02V49NL02PcfuCbHLGp 7MbGHjC7fDa37goR8xusyuZYOJtnC8Gn8VrD+jNivLtcG3OYvhOqti0ueYBZ7CLahtW7V6w1MAU WBNjQe0v2VDenj9kCVlFhGda3SLUS3spOe15pP+L5gu0f8Ku5wOohYN6wWLyVRW+BCwQ8VmX69O Yo2Bq8EjZHDhmr6GcTcph1kpVbKen+eFlyWviZnXDiem+yso9QLJhWrh7EW1kIUXYwkYyHOb7Et eXk5FkfQZKrU1ELW792YdmXkd7qIOTAdpzTjAwQvlkcFUF+Vk3uGV/rIAF4b7eiCnfOVwsFgyG5 fRjjd+MD5DavQXhTEnYWYpVeCfjb+9ITXh7dGengeKQurXMzOuZGZnnryr8mboqeEUepsLDFb1m UHptAtof4ADao8kiL0CK4mL1BX2M7n7Hjp/7WWoD+wJquHJaJ9XyritrTl/Fe2p6jFa0szBsbAK bsjAQafWlBd1cmT X-Google-Smtp-Source: AGHT+IHEk7KHXPUAwS4Qo1SgQkiwq/e6w1gAGwCl62JsI2TcE4euezbVC0dRrZ8dqKv0mZlj5bm1CQ== X-Received: by 2002:a05:6402:2809:b0:641:1d64:8dce with SMTP id 4fb4d7f45d1cf-6491a43297dmr7011492a12.17.1765207300101; Mon, 08 Dec 2025 07:21:40 -0800 (PST) Received: from localhost.localdomain (host86-162-200-138.range86-162.btcentralplus.com. [86.162.200.138]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-647b412deddsm11547484a12.31.2025.12.08.07.21.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Dec 2025 07:21:39 -0800 (PST) From: Biju X-Google-Original-From: Biju To: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , Geert Uytterhoeven , Magnus Damm Cc: Biju Das , linux-pwm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-renesas-soc@vger.kernel.org, Prabhakar Mahadev Lad , Biju Das , Tommaso Merciai Subject: [PATCH v4 6/9] pwm: rzg2l-gpt: Add RZ/G3E support Date: Mon, 8 Dec 2025 15:21:23 +0000 Message-ID: <20251208152133.269316-7-biju.das.jz@bp.renesas.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20251208152133.269316-1-biju.das.jz@bp.renesas.com> References: <20251208152133.269316-1-biju.das.jz@bp.renesas.com> 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" From: Biju Das Add RZ/G3E GPT support. It has multiple clocks and resets compared to RZ/G2L. Also prescale field width and factor for calculating prescale are different. Reviewed-by: Tommaso Merciai Signed-off-by: Biju Das --- v3->v4: * Added RZG3E_GTCR_TPCS bit definition for RZ/G3E and added to rzg3e_data. v2->v3: * No change. v1->v2: * Added link to hardware manual * Updated limitation section * Collected tag=20 --- drivers/pwm/pwm-rzg2l-gpt.c | 47 +++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/drivers/pwm/pwm-rzg2l-gpt.c b/drivers/pwm/pwm-rzg2l-gpt.c index 791900f6de3d..79ee59271d24 100644 --- a/drivers/pwm/pwm-rzg2l-gpt.c +++ b/drivers/pwm/pwm-rzg2l-gpt.c @@ -6,15 +6,21 @@ * * Hardware manual for this IP can be found here * https://www.renesas.com/eu/en/document/mah/rzg2l-group-rzg2lc-group-use= rs-manual-hardware-0?language=3Den + * https://www.renesas.com/en/document/mah/rzg3e-group-users-manual-hardwa= re * * Limitations: * - Counter must be stopped before modifying Mode and Prescaler. * - When PWM is disabled, the output is driven to inactive. * - While the hardware supports both polarities, the driver (for now) * only handles normal polarity. - * - General PWM Timer (GPT) has 8 HW channels for PWM operations and - * each HW channel have 2 IOs. + * - For RZ/G2L, the General PWM Timer (GPT) has 8 HW channels for PWM + operations and each HW channel have 2 IOs (GTIOCn{A, B}). * - Each IO is modelled as an independent PWM channel. + * - For RZ/G3E, the General PWM Timer (GPT) has 16 HW channels for PWM + operations (GPT0: 8 channels, GPT1: 8 Channels) and each HW channel + have 4 IOs (GTIOCn{A,AN,B,BN}). The 2 extra IOs GTIOCnAN and GTIOCnBN + in RZ/G3E are anti-phase signals of GTIOCnA and GTIOCnB. The + anti-phase signals of RZ/G3E are not modelled as PWM channel. * - When both channels are used, disabling the channel on one stops the * other. * - When both channels are used, the period of both IOs in the HW channel @@ -47,6 +53,7 @@ #define RZG2L_GTCR_CST BIT(0) #define RZG2L_GTCR_MD GENMASK(18, 16) #define RZG2L_GTCR_TPCS GENMASK(26, 24) +#define RZG3E_GTCR_TPCS GENMASK(26, 23) =20 #define RZG2L_GTCR_MD_SAW_WAVE_PWM_MODE FIELD_PREP(RZG2L_GTCR_MD, 0) =20 @@ -146,6 +153,27 @@ static u8 rzg2l_gpt_calculate_prescale(u64 period_tick= s) return prescale; } =20 +static u8 rzg3e_gpt_calculate_prescale(u64 period_ticks) +{ + u32 prescaled_period_ticks; + u8 prescale; + + prescaled_period_ticks =3D period_ticks >> 32; + if (prescaled_period_ticks >=3D 64 && prescaled_period_ticks < 256) { + prescale =3D 6; + } else if (prescaled_period_ticks >=3D 256 && prescaled_period_ticks < 10= 24) { + prescale =3D 8; + } else if (prescaled_period_ticks >=3D 1024) { + prescale =3D 10; + } else { + prescale =3D fls(prescaled_period_ticks); + if (prescale > 1) + prescale -=3D 1; + } + + return prescale; +} + static int rzg2l_gpt_request(struct pwm_chip *chip, struct pwm_device *pwm) { struct rzg2l_gpt_chip *rzg2l_gpt =3D to_rzg2l_gpt_chip(chip); @@ -455,6 +483,14 @@ static int rzg2l_gpt_probe(struct platform_device *pde= v) if (IS_ERR(rstc)) return dev_err_probe(dev, PTR_ERR(rstc), "Cannot deassert reset control\= n"); =20 + rstc =3D devm_reset_control_get_optional_exclusive_deasserted(dev, "rst_s= "); + if (IS_ERR(rstc)) + return dev_err_probe(dev, PTR_ERR(rstc), "Cannot deassert rst_s reset\n"= ); + + clk =3D devm_clk_get_optional_enabled(dev, "bus"); + if (IS_ERR(clk)) + return dev_err_probe(dev, PTR_ERR(clk), "Cannot get bus clock\n"); + clk =3D devm_clk_get_enabled(dev, NULL); if (IS_ERR(clk)) return dev_err_probe(dev, PTR_ERR(clk), "Cannot get clock\n"); @@ -493,6 +529,12 @@ static int rzg2l_gpt_probe(struct platform_device *pde= v) return 0; } =20 +static const struct rzg2l_gpt_info rzg3e_data =3D { + .calculate_prescale =3D rzg3e_gpt_calculate_prescale, + .gtcr_tpcs =3D RZG3E_GTCR_TPCS, + .prescale_mult =3D 1, +}; + static const struct rzg2l_gpt_info rzg2l_data =3D { .calculate_prescale =3D rzg2l_gpt_calculate_prescale, .gtcr_tpcs =3D RZG2L_GTCR_TPCS, @@ -500,6 +542,7 @@ static const struct rzg2l_gpt_info rzg2l_data =3D { }; =20 static const struct of_device_id rzg2l_gpt_of_table[] =3D { + { .compatible =3D "renesas,r9a09g047-gpt", .data =3D &rzg3e_data }, { .compatible =3D "renesas,rzg2l-gpt", .data =3D &rzg2l_data }, { /* Sentinel */ } }; --=20 2.43.0