* [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support
@ 2025-07-14 10:16 Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 01/36] clk: renesas: rzv2h: Adjust for CPG_BUS_m_MSTOP starting from m = 1 Biju Das
` (37 more replies)
0 siblings, 38 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
This series adds support for the RZ/G3E CANFD driver into 6.12.y-cip.
All the patches in the series are cherry-picked from mainline.
Biju Das (25):
clk: renesas: rzv2h: Adjust for CPG_BUS_m_MSTOP starting from m = 1
clk: renesas: rzv2h: Fix a typo
clk: renesas: rzv2h: Support static dividers without RMW
dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema
dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
can: rcar_canfd: Use of_get_available_child_by_name()
can: rcar_canfd: Drop RCANFD_GAFLCFG_GETRNC macro
can: rcar_canfd: Update RCANFD_GERFL_ERR macro
can: rcar_canfd: Drop the mask operation in RCANFD_GAFLCFG_SETRNC
macro
can: rcar_canfd: Add rcar_canfd_setrnc()
can: rcar_canfd: Update RCANFD_GAFLCFG macro
can: rcar_canfd: Add rnc_field_width variable to struct
rcar_canfd_hw_info
can: rcar_canfd: Add max_aflpn variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add max_cftml variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add {nom,data}_bittiming variables to struct
rcar_canfd_hw_info
can: rcar_canfd: Add ch_interface_mode variable to struct
rcar_canfd_hw_info
can: rcar_canfd: Add shared_can_regs variable to struct
rcar_canfd_hw_info
can: rcar_canfd: Add struct rcanfd_regs variable to struct
rcar_canfd_hw_info
can: rcar_canfd: Add sh variable to struct rcar_canfd_hw_info
can: rcar_canfd: Add external_clk variable to struct
rcar_canfd_hw_info
can: rcar_canfd: Enhance multi_channel_irqs handling
can: rcar_canfd: Add RZ/G3E support
arm64: dts: renesas: r9a09g047: Add CANFD node
arm64: dts: renesas: r9a09g047e57-smarc: Enable CANFD
arm64: dts: renesas: r9a09g047e57-smarc: Enable CAN Transceiver
Lad Prabhakar (9):
clk: renesas: rzv2h: Update error message
clk: renesas: rzv2h: Remove unused `type` field from `struct pll_clk`
clk: renesas: rzv2h: Add support for enabling PLLs
clk: renesas: rzv2h: Rename PLL field macros for consistency
clk: renesas: rzv2h: Sort compatible list based on SoC part number
clk: renesas: rzv2h: Add support for static mux clocks
clk: renesas: rzv2h: Add macro for defining static dividers
clk: renesas: rzv2h: Use str_on_off() helper in
rzv2h_mod_clock_endisable()
clk: renesas: rzv2h: Use both CLK_ON and CLK_MON bits for clock state
validation
Tommaso Merciai (2):
clk: renesas: rzv2h: Improve rzv2h_ddiv_set_rate()
clk: renesas: rzv2h: Simplify rzv2h_cpg_assert()/rzv2h_cpg_deassert()
.../bindings/net/can/renesas,rcar-canfd.yaml | 171 ++++++++---
arch/arm64/boot/dts/renesas/r9a09g047.dtsi | 60 ++++
.../boot/dts/renesas/r9a09g047e57-smarc.dts | 53 ++++
.../boot/dts/renesas/renesas-smarc2.dtsi | 29 ++
.../boot/dts/renesas/rzg3e-smarc-som.dtsi | 14 +-
drivers/clk/renesas/rzv2h-cpg.c | 183 ++++++++----
drivers/clk/renesas/rzv2h-cpg.h | 54 ++++
drivers/net/can/rcar/rcar_canfd.c | 278 +++++++++++++-----
8 files changed, 676 insertions(+), 166 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 01/36] clk: renesas: rzv2h: Adjust for CPG_BUS_m_MSTOP starting from m = 1
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 02/36] clk: renesas: rzv2h: Update error message Biju Das
` (36 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 69ac2acd209a15bd7a61a15c9532a5b505252e1c upstream.
Avoid using the "- 1" for finding mstop_index in all functions accessing
priv->mstop_count, by adjusting its pointer in rzv2h_cpg_probe().
While at it, drop the intermediate local variable index.
Reported-by: Geert Uytterhoeven <geert+renesas@glider.be>
Closes: https://lore.kernel.org/all/CAMuHMdX1gPNCFddg_DyK7Bv0BeFLOLi=5eteT_HhMH=Ph2wVvA@mail.gmail.com/
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250222142009.41324-1-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 54ed7a75be6e9..7e85bfde46dcd 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -450,8 +450,7 @@ static void rzv2h_mod_clock_mstop_enable(struct rzv2h_cpg_priv *priv,
{
unsigned long mstop_mask = FIELD_GET(BUS_MSTOP_BITS_MASK, mstop_data);
u16 mstop_index = FIELD_GET(BUS_MSTOP_IDX_MASK, mstop_data);
- unsigned int index = (mstop_index - 1) * 16;
- atomic_t *mstop = &priv->mstop_count[index];
+ atomic_t *mstop = &priv->mstop_count[mstop_index * 16];
unsigned long flags;
unsigned int i;
u32 val = 0;
@@ -472,8 +471,7 @@ static void rzv2h_mod_clock_mstop_disable(struct rzv2h_cpg_priv *priv,
{
unsigned long mstop_mask = FIELD_GET(BUS_MSTOP_BITS_MASK, mstop_data);
u16 mstop_index = FIELD_GET(BUS_MSTOP_IDX_MASK, mstop_data);
- unsigned int index = (mstop_index - 1) * 16;
- atomic_t *mstop = &priv->mstop_count[index];
+ atomic_t *mstop = &priv->mstop_count[mstop_index * 16];
unsigned long flags;
unsigned int i;
u32 val = 0;
@@ -633,8 +631,7 @@ rzv2h_cpg_register_mod_clk(const struct rzv2h_mod_clk *mod,
} else if (clock->mstop_data != BUS_MSTOP_NONE && mod->critical) {
unsigned long mstop_mask = FIELD_GET(BUS_MSTOP_BITS_MASK, clock->mstop_data);
u16 mstop_index = FIELD_GET(BUS_MSTOP_IDX_MASK, clock->mstop_data);
- unsigned int index = (mstop_index - 1) * 16;
- atomic_t *mstop = &priv->mstop_count[index];
+ atomic_t *mstop = &priv->mstop_count[mstop_index * 16];
unsigned long flags;
unsigned int i;
u32 val = 0;
@@ -929,6 +926,9 @@ static int __init rzv2h_cpg_probe(struct platform_device *pdev)
if (!priv->mstop_count)
return -ENOMEM;
+ /* Adjust for CPG_BUS_m_MSTOP starting from m = 1 */
+ priv->mstop_count -= 16;
+
priv->resets = devm_kmemdup(dev, info->resets, sizeof(*info->resets) *
info->num_resets, GFP_KERNEL);
if (!priv->resets)
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 02/36] clk: renesas: rzv2h: Update error message
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 01/36] clk: renesas: rzv2h: Adjust for CPG_BUS_m_MSTOP starting from m = 1 Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 03/36] clk: renesas: rzv2h: Remove unused `type` field from `struct pll_clk` Biju Das
` (35 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
commit 43961f7ee3f31c97209157bd19420ea8a65b1181 upstream.
Update the error message in `rzv2h_mod_clock_endisable()` to provide
clearer debugging information. Instead of printing only the register
address, include both the `GET_CLK_ON_OFFSET(reg)` offset and the
corresponding `clk` name (`%pC`). This enhances readability and aids
in debugging clock enable failures.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250211105603.195905-2-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 7e85bfde46dcd..227a30d592fdd 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -542,8 +542,8 @@ static int rzv2h_mod_clock_endisable(struct clk_hw *hw, bool enable)
error = readl_poll_timeout_atomic(priv->base + reg, value,
value & bitmask, 0, 10);
if (error)
- dev_err(dev, "Failed to enable CLK_ON %p\n",
- priv->base + reg);
+ dev_err(dev, "Failed to enable CLK_ON 0x%x/%pC\n",
+ GET_CLK_ON_OFFSET(clock->on_index), hw->clk);
return error;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 03/36] clk: renesas: rzv2h: Remove unused `type` field from `struct pll_clk`
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 01/36] clk: renesas: rzv2h: Adjust for CPG_BUS_m_MSTOP starting from m = 1 Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 02/36] clk: renesas: rzv2h: Update error message Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 04/36] clk: renesas: rzv2h: Add support for enabling PLLs Biju Das
` (34 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
commit 18510fd7bfe66218a07024fb9f2a204e0f623794 upstream.
Remove the redundant `type` field from `struct pll_clk`, as it is not used
in the PLL clock handling logic.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250309211402.80886-3-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 227a30d592fdd..5713805cac13e 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -97,7 +97,6 @@ struct pll_clk {
void __iomem *base;
struct clk_hw hw;
struct pll pll;
- unsigned int type;
};
#define to_pll(_hw) container_of(_hw, struct pll_clk, hw)
@@ -199,7 +198,6 @@ rzv2h_cpg_pll_clk_register(const struct cpg_core_clk *core,
pll_clk->pll = core->cfg.pll;
pll_clk->base = base;
pll_clk->priv = priv;
- pll_clk->type = core->type;
ret = devm_clk_hw_register(dev, &pll_clk->hw);
if (ret)
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 04/36] clk: renesas: rzv2h: Add support for enabling PLLs
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (2 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 03/36] clk: renesas: rzv2h: Remove unused `type` field from `struct pll_clk` Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 05/36] clk: renesas: rzv2h: Rename PLL field macros for consistency Biju Das
` (33 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
commit fea942bc15135e065b456421f7a163df036242c5 upstream.
Some RZ/V2H(P) SoC variants do not have a GPU, resulting in PLLGPU being
disabled by default in TF-A. Add support for enabling PLL clocks in the
RZ/V2H(P) CPG driver to manage this.
Introduce `is_enabled` and `enable` callbacks to handle PLL state
transitions. With the `enable` callback, PLLGPU will be turned ON only
when the GPU node is enabled; otherwise, it will remain off. Define new
macros for PLL standby and monitor registers to facilitate this process.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250309211402.80886-4-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 56 +++++++++++++++++++++++++++++++++
1 file changed, 56 insertions(+)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 5713805cac13e..fd9d401d184fe 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -44,12 +44,18 @@
#define CPG_BUS_1_MSTOP (0xd00)
#define CPG_BUS_MSTOP(m) (CPG_BUS_1_MSTOP + ((m) - 1) * 4)
+#define CPG_PLL_STBY(x) ((x))
+#define CPG_PLL_STBY_RESETB BIT(0)
+#define CPG_PLL_STBY_RESETB_WEN BIT(16)
#define CPG_PLL_CLK1(x) ((x) + 0x004)
#define KDIV(val) ((s16)FIELD_GET(GENMASK(31, 16), (val)))
#define MDIV(val) FIELD_GET(GENMASK(15, 6), (val))
#define PDIV(val) FIELD_GET(GENMASK(5, 0), (val))
#define CPG_PLL_CLK2(x) ((x) + 0x008)
#define SDIV(val) FIELD_GET(GENMASK(2, 0), (val))
+#define CPG_PLL_MON(x) ((x) + 0x010)
+#define CPG_PLL_MON_RESETB BIT(0)
+#define CPG_PLL_MON_LOCK BIT(4)
#define DDIV_DIVCTL_WEN(shift) BIT((shift) + 16)
@@ -141,6 +147,54 @@ struct ddiv_clk {
#define to_ddiv_clock(_div) container_of(_div, struct ddiv_clk, div)
+static int rzv2h_cpg_pll_clk_is_enabled(struct clk_hw *hw)
+{
+ struct pll_clk *pll_clk = to_pll(hw);
+ struct rzv2h_cpg_priv *priv = pll_clk->priv;
+ u32 val = readl(priv->base + CPG_PLL_MON(pll_clk->pll.offset));
+
+ /* Ensure both RESETB and LOCK bits are set */
+ return (val & (CPG_PLL_MON_RESETB | CPG_PLL_MON_LOCK)) ==
+ (CPG_PLL_MON_RESETB | CPG_PLL_MON_LOCK);
+}
+
+static int rzv2h_cpg_pll_clk_enable(struct clk_hw *hw)
+{
+ struct pll_clk *pll_clk = to_pll(hw);
+ struct rzv2h_cpg_priv *priv = pll_clk->priv;
+ struct pll pll = pll_clk->pll;
+ u32 stby_offset;
+ u32 mon_offset;
+ u32 val;
+ int ret;
+
+ if (rzv2h_cpg_pll_clk_is_enabled(hw))
+ return 0;
+
+ stby_offset = CPG_PLL_STBY(pll.offset);
+ mon_offset = CPG_PLL_MON(pll.offset);
+
+ writel(CPG_PLL_STBY_RESETB_WEN | CPG_PLL_STBY_RESETB,
+ priv->base + stby_offset);
+
+ /*
+ * Ensure PLL enters into normal mode
+ *
+ * Note: There is no HW information about the worst case latency.
+ *
+ * Since this latency might depend on external crystal or PLL rate,
+ * use a "super" safe timeout value.
+ */
+ ret = readl_poll_timeout_atomic(priv->base + mon_offset, val,
+ (val & (CPG_PLL_MON_RESETB | CPG_PLL_MON_LOCK)) ==
+ (CPG_PLL_MON_RESETB | CPG_PLL_MON_LOCK), 200, 2000);
+ if (ret)
+ dev_err(priv->dev, "Failed to enable PLL 0x%x/%pC\n",
+ stby_offset, hw->clk);
+
+ return ret;
+}
+
static unsigned long rzv2h_cpg_pll_clk_recalc_rate(struct clk_hw *hw,
unsigned long parent_rate)
{
@@ -163,6 +217,8 @@ static unsigned long rzv2h_cpg_pll_clk_recalc_rate(struct clk_hw *hw,
}
static const struct clk_ops rzv2h_cpg_pll_ops = {
+ .is_enabled = rzv2h_cpg_pll_clk_is_enabled,
+ .enable = rzv2h_cpg_pll_clk_enable,
.recalc_rate = rzv2h_cpg_pll_clk_recalc_rate,
};
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 05/36] clk: renesas: rzv2h: Rename PLL field macros for consistency
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (3 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 04/36] clk: renesas: rzv2h: Add support for enabling PLLs Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 06/36] clk: renesas: rzv2h: Improve rzv2h_ddiv_set_rate() Biju Das
` (32 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
commit 360387a8f17d2cf7afd894c318df959112f377c7 upstream.
Rename PLL field extraction macros to include the associated register name
(`CPG_PLL_CLK1` or `CPG_PLL_CLK2`) to maintain consistency with other PLL
register macros. Update all corresponding macro references accordingly.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250309211402.80886-5-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index fd9d401d184fe..b8bed0c1d9186 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -48,11 +48,11 @@
#define CPG_PLL_STBY_RESETB BIT(0)
#define CPG_PLL_STBY_RESETB_WEN BIT(16)
#define CPG_PLL_CLK1(x) ((x) + 0x004)
-#define KDIV(val) ((s16)FIELD_GET(GENMASK(31, 16), (val)))
-#define MDIV(val) FIELD_GET(GENMASK(15, 6), (val))
-#define PDIV(val) FIELD_GET(GENMASK(5, 0), (val))
+#define CPG_PLL_CLK1_KDIV(x) ((s16)FIELD_GET(GENMASK(31, 16), (x)))
+#define CPG_PLL_CLK1_MDIV(x) FIELD_GET(GENMASK(15, 6), (x))
+#define CPG_PLL_CLK1_PDIV(x) FIELD_GET(GENMASK(5, 0), (x))
#define CPG_PLL_CLK2(x) ((x) + 0x008)
-#define SDIV(val) FIELD_GET(GENMASK(2, 0), (val))
+#define CPG_PLL_CLK2_SDIV(x) FIELD_GET(GENMASK(2, 0), (x))
#define CPG_PLL_MON(x) ((x) + 0x010)
#define CPG_PLL_MON_RESETB BIT(0)
#define CPG_PLL_MON_LOCK BIT(4)
@@ -210,10 +210,10 @@ static unsigned long rzv2h_cpg_pll_clk_recalc_rate(struct clk_hw *hw,
clk1 = readl(priv->base + CPG_PLL_CLK1(pll.offset));
clk2 = readl(priv->base + CPG_PLL_CLK2(pll.offset));
- rate = mul_u64_u32_shr(parent_rate, (MDIV(clk1) << 16) + KDIV(clk1),
- 16 + SDIV(clk2));
+ rate = mul_u64_u32_shr(parent_rate, (CPG_PLL_CLK1_MDIV(clk1) << 16) +
+ CPG_PLL_CLK1_KDIV(clk1), 16 + CPG_PLL_CLK2_SDIV(clk2));
- return DIV_ROUND_CLOSEST_ULL(rate, PDIV(clk1));
+ return DIV_ROUND_CLOSEST_ULL(rate, CPG_PLL_CLK1_PDIV(clk1));
}
static const struct clk_ops rzv2h_cpg_pll_ops = {
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 06/36] clk: renesas: rzv2h: Improve rzv2h_ddiv_set_rate()
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (4 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 05/36] clk: renesas: rzv2h: Rename PLL field macros for consistency Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 07/36] clk: renesas: rzv2h: Simplify rzv2h_cpg_assert()/rzv2h_cpg_deassert() Biju Das
` (31 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
commit ce0a97ff7127312aaee137fcdb159d8ddd14ede4 upstream.
Remove duplicate code into rzv2h_ddiv_set_rate().
Reported-by: Pavel Machek <pavel@denx.de>
Closes: https://lore.kernel.org/cip-dev/Z9QBZo4GgtMjid0v@duo.ucw.cz/
Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250317083213.371614-3-tommaso.merciai.xr@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 6 ------
1 file changed, 6 deletions(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index b8bed0c1d9186..1c09b92981ff4 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -329,12 +329,6 @@ static int rzv2h_ddiv_set_rate(struct clk_hw *hw, unsigned long rate,
writel(val, divider->reg);
ret = rzv2h_cpg_wait_ddiv_clk_update_done(priv->base, ddiv->mon);
- if (ret)
- goto ddiv_timeout;
-
- spin_unlock_irqrestore(divider->lock, flags);
-
- return 0;
ddiv_timeout:
spin_unlock_irqrestore(divider->lock, flags);
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 07/36] clk: renesas: rzv2h: Simplify rzv2h_cpg_assert()/rzv2h_cpg_deassert()
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (5 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 06/36] clk: renesas: rzv2h: Improve rzv2h_ddiv_set_rate() Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 08/36] clk: renesas: rzv2h: Sort compatible list based on SoC part number Biju Das
` (30 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
commit b224c42568bc4e0d99bb4735c66123202e8b0e7f upstream.
rzv2h_cpg_assert() and rzv2h_cpg_deassert() functions are similar. Share
this code via __rzv2h_cpg_assert(). This avoid code duplication.
Reported-by: Pavel Machek <pavel@denx.de>
Closes: https://lore.kernel.org/cip-dev/Z9QA9rwuXCuVbOXp@duo.ucw.cz/
Signed-off-by: Tommaso Merciai <tommaso.merciai.xr@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250317083213.371614-4-tommaso.merciai.xr@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 34 +++++++++++++++------------------
1 file changed, 15 insertions(+), 19 deletions(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 1c09b92981ff4..81aed6ba76372 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -709,8 +709,8 @@ rzv2h_cpg_register_mod_clk(const struct rzv2h_mod_clk *mod,
mod->name, PTR_ERR(clk));
}
-static int rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
- unsigned long id)
+static int __rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
+ unsigned long id, bool assert)
{
struct rzv2h_cpg_priv *priv = rcdev_to_priv(rcdev);
unsigned int reg = GET_RST_OFFSET(priv->resets[id].reset_index);
@@ -718,35 +718,31 @@ static int rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
u8 monbit = priv->resets[id].mon_bit;
u32 value = mask << 16;
- dev_dbg(rcdev->dev, "assert id:%ld offset:0x%x\n", id, reg);
+ dev_dbg(rcdev->dev, "%s id:%ld offset:0x%x\n",
+ assert ? "assert" : "deassert", id, reg);
+ if (!assert)
+ value |= mask;
writel(value, priv->base + reg);
reg = GET_RST_MON_OFFSET(priv->resets[id].mon_index);
mask = BIT(monbit);
return readl_poll_timeout_atomic(priv->base + reg, value,
- value & mask, 10, 200);
+ assert ? (value & mask) : !(value & mask),
+ 10, 200);
+}
+
+static int rzv2h_cpg_assert(struct reset_controller_dev *rcdev,
+ unsigned long id)
+{
+ return __rzv2h_cpg_assert(rcdev, id, true);
}
static int rzv2h_cpg_deassert(struct reset_controller_dev *rcdev,
unsigned long id)
{
- struct rzv2h_cpg_priv *priv = rcdev_to_priv(rcdev);
- unsigned int reg = GET_RST_OFFSET(priv->resets[id].reset_index);
- u32 mask = BIT(priv->resets[id].reset_bit);
- u8 monbit = priv->resets[id].mon_bit;
- u32 value = (mask << 16) | mask;
-
- dev_dbg(rcdev->dev, "deassert id:%ld offset:0x%x\n", id, reg);
-
- writel(value, priv->base + reg);
-
- reg = GET_RST_MON_OFFSET(priv->resets[id].mon_index);
- mask = BIT(monbit);
-
- return readl_poll_timeout_atomic(priv->base + reg, value,
- !(value & mask), 10, 200);
+ return __rzv2h_cpg_assert(rcdev, id, false);
}
static int rzv2h_cpg_reset(struct reset_controller_dev *rcdev,
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 08/36] clk: renesas: rzv2h: Sort compatible list based on SoC part number
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (6 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 07/36] clk: renesas: rzv2h: Simplify rzv2h_cpg_assert()/rzv2h_cpg_deassert() Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 09/36] clk: renesas: rzv2h: Fix a typo Biju Das
` (29 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
commit c3400fd7c717e752701e6832175f86ff935b812b upstream.
Reorder the compatible entries in `rzv2h_cpg_match[]` to follow a
numerical sequence based on the SoC part numbers.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250407191628.323613-8-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 81aed6ba76372..7962466cd51ba 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -1014,17 +1014,17 @@ static int __init rzv2h_cpg_probe(struct platform_device *pdev)
}
static const struct of_device_id rzv2h_cpg_match[] = {
-#ifdef CONFIG_CLK_R9A09G057
- {
- .compatible = "renesas,r9a09g057-cpg",
- .data = &r9a09g057_cpg_info,
- },
-#endif
#ifdef CONFIG_CLK_R9A09G047
{
.compatible = "renesas,r9a09g047-cpg",
.data = &r9a09g047_cpg_info,
},
+#endif
+#ifdef CONFIG_CLK_R9A09G057
+ {
+ .compatible = "renesas,r9a09g057-cpg",
+ .data = &r9a09g057_cpg_info,
+ },
#endif
{ /* sentinel */ }
};
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 09/36] clk: renesas: rzv2h: Fix a typo
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (7 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 08/36] clk: renesas: rzv2h: Sort compatible list based on SoC part number Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 10/36] clk: renesas: rzv2h: Add support for static mux clocks Biju Das
` (28 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 506f96095ec2d7d1279fb49e78ae27b2abd915de upstream.
Fix a typo montor->monitor in kernel-doc comment.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250320093107.36784-1-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 7962466cd51ba..83175c3269647 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -117,7 +117,7 @@ struct pll_clk {
* @on_index: register offset
* @on_bit: ON/MON bit
* @mon_index: monitor register offset
- * @mon_bit: montor bit
+ * @mon_bit: monitor bit
*/
struct mod_clock {
struct rzv2h_cpg_priv *priv;
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 10/36] clk: renesas: rzv2h: Add support for static mux clocks
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (8 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 09/36] clk: renesas: rzv2h: Fix a typo Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 11/36] clk: renesas: rzv2h: Add macro for defining static dividers Biju Das
` (27 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
commit c1d6f686e5cb2530e1d04a4c994c3085c00e644c upstream.
Add support for `CLK_TYPE_SMUX` to register static muxed clocks on the
Renesas RZ/V2H(P) SoC. Extend `cpg_core_clk` to include parent names,
mux flags, and a new `smuxed` struct. Update clock registration to
handle static mux clocks.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250407165202.197570-2-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 21 +++++++++++++++++++++
drivers/clk/renesas/rzv2h-cpg.h | 32 ++++++++++++++++++++++++++++++++
2 files changed, 53 insertions(+)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 83175c3269647..7b797668b65c9 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -393,6 +393,24 @@ rzv2h_cpg_ddiv_clk_register(const struct cpg_core_clk *core,
return div->hw.clk;
}
+static struct clk * __init
+rzv2h_cpg_mux_clk_register(const struct cpg_core_clk *core,
+ struct rzv2h_cpg_priv *priv)
+{
+ struct smuxed mux = core->cfg.smux;
+ const struct clk_hw *clk_hw;
+
+ clk_hw = devm_clk_hw_register_mux(priv->dev, core->name,
+ core->parent_names, core->num_parents,
+ core->flag, priv->base + mux.offset,
+ mux.shift, mux.width,
+ core->mux_flags, &priv->rmw_lock);
+ if (IS_ERR(clk_hw))
+ return ERR_CAST(clk_hw);
+
+ return clk_hw->clk;
+}
+
static struct clk
*rzv2h_cpg_clk_src_twocell_get(struct of_phandle_args *clkspec,
void *data)
@@ -477,6 +495,9 @@ rzv2h_cpg_register_core_clk(const struct cpg_core_clk *core,
case CLK_TYPE_DDIV:
clk = rzv2h_cpg_ddiv_clk_register(core, priv);
break;
+ case CLK_TYPE_SMUX:
+ clk = rzv2h_cpg_mux_clk_register(core, priv);
+ break;
default:
goto fail;
}
diff --git a/drivers/clk/renesas/rzv2h-cpg.h b/drivers/clk/renesas/rzv2h-cpg.h
index 59f72fbed1337..03e602d70f692 100644
--- a/drivers/clk/renesas/rzv2h-cpg.h
+++ b/drivers/clk/renesas/rzv2h-cpg.h
@@ -53,6 +53,26 @@ struct ddiv {
.monbit = _monbit \
})
+/**
+ * struct smuxed - Structure for static muxed clocks
+ *
+ * @offset: register offset
+ * @shift: position of the divider field
+ * @width: width of the divider field
+ */
+struct smuxed {
+ unsigned int offset:11;
+ unsigned int shift:4;
+ unsigned int width:4;
+};
+
+#define SMUX_PACK(_offset, _shift, _width) \
+ ((struct smuxed){ \
+ .offset = (_offset), \
+ .shift = (_shift), \
+ .width = (_width), \
+ })
+
#define CPG_CDDIV0 (0x400)
#define CPG_CDDIV1 (0x404)
#define CPG_CDDIV3 (0x40C)
@@ -96,8 +116,12 @@ struct cpg_core_clk {
unsigned int conf;
struct ddiv ddiv;
struct pll pll;
+ struct smuxed smux;
} cfg;
const struct clk_div_table *dtable;
+ const char * const *parent_names;
+ unsigned int num_parents;
+ u8 mux_flags;
u32 flag;
};
@@ -107,6 +131,7 @@ enum clk_types {
CLK_TYPE_FF, /* Fixed Factor Clock */
CLK_TYPE_PLL,
CLK_TYPE_DDIV, /* Dynamic Switching Divider */
+ CLK_TYPE_SMUX, /* Static Mux */
};
#define DEF_TYPE(_name, _id, _type...) \
@@ -125,6 +150,13 @@ enum clk_types {
.parent = _parent, \
.dtable = _dtable, \
.flag = CLK_DIVIDER_HIWORD_MASK)
+#define DEF_SMUX(_name, _id, _smux_packed, _parent_names) \
+ DEF_TYPE(_name, _id, CLK_TYPE_SMUX, \
+ .cfg.smux = _smux_packed, \
+ .parent_names = _parent_names, \
+ .num_parents = ARRAY_SIZE(_parent_names), \
+ .flag = CLK_SET_RATE_PARENT, \
+ .mux_flags = CLK_MUX_HIWORD_MASK)
/**
* struct rzv2h_mod_clk - Module Clocks definitions
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 11/36] clk: renesas: rzv2h: Add macro for defining static dividers
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (9 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 10/36] clk: renesas: rzv2h: Add support for static mux clocks Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 12/36] clk: renesas: rzv2h: Support static dividers without RMW Biju Das
` (26 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
commit 6e1c795071359dc36e26ed96a271e06687d84f74 upstream.
Unlike dynamic dividers, static dividers do not have a monitor bit.
Introduce the `DEF_CSDIV()` macro for defining static dividers, ensuring
consistency with existing dynamic divider macros.
Additionally, introduce the `CSDIV_NO_MON` macro to indicate the absence
of a monitor bit, allowing the monitoring step to be skipped when `mon`
is set to `CSDIV_NO_MON`.
Note, `rzv2h_cpg_ddiv_clk_register()` will be re-used instead of generic
`clk_hw_register_divider_table()` for registering satic dividers as some
of the static dividers require RMW operations.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250407165202.197570-3-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 3 +++
drivers/clk/renesas/rzv2h-cpg.h | 10 ++++++++++
2 files changed, 13 insertions(+)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 7b797668b65c9..e3867ba7cc95a 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -298,6 +298,9 @@ static inline int rzv2h_cpg_wait_ddiv_clk_update_done(void __iomem *base, u8 mon
u32 bitmask = BIT(mon);
u32 val;
+ if (mon == CSDIV_NO_MON)
+ return 0;
+
return readl_poll_timeout_atomic(base + CPG_CLKSTATUS0, val, !(val & bitmask), 10, 200);
}
diff --git a/drivers/clk/renesas/rzv2h-cpg.h b/drivers/clk/renesas/rzv2h-cpg.h
index 03e602d70f692..00b52b459aadc 100644
--- a/drivers/clk/renesas/rzv2h-cpg.h
+++ b/drivers/clk/renesas/rzv2h-cpg.h
@@ -45,6 +45,14 @@ struct ddiv {
unsigned int monbit:5;
};
+/*
+ * On RZ/V2H(P), the dynamic divider clock supports up to 19 monitor bits,
+ * while on RZ/G3E, it supports up to 16 monitor bits. Use the maximum value
+ * `0x1f` to indicate that monitor bits are not supported for static divider
+ * clocks.
+ */
+#define CSDIV_NO_MON (0x1f)
+
#define DDIV_PACK(_offset, _shift, _width, _monbit) \
((struct ddiv){ \
.offset = _offset, \
@@ -150,6 +158,8 @@ enum clk_types {
.parent = _parent, \
.dtable = _dtable, \
.flag = CLK_DIVIDER_HIWORD_MASK)
+#define DEF_CSDIV(_name, _id, _parent, _ddiv_packed, _dtable) \
+ DEF_DDIV(_name, _id, _parent, _ddiv_packed, _dtable)
#define DEF_SMUX(_name, _id, _smux_packed, _parent_names) \
DEF_TYPE(_name, _id, CLK_TYPE_SMUX, \
.cfg.smux = _smux_packed, \
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 12/36] clk: renesas: rzv2h: Support static dividers without RMW
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (10 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 11/36] clk: renesas: rzv2h: Add macro for defining static dividers Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 11:54 ` Pavel Machek
2025-07-14 10:16 ` [PATCH 6.12.y-cip 13/36] clk: renesas: rzv2h: Use str_on_off() helper in rzv2h_mod_clock_endisable() Biju Das
` (25 subsequent siblings)
37 siblings, 1 reply; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 52239ebe624016d01b3bf8a3a8510dfd57f56b21 upstream.
Add support for static dividers that do not require read-modify-write
(RMW) operations. This enables the use of the generic clk_divider_ops
instead of the custom RMW-based implementation.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Co-developed-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250407165202.197570-4-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 5 ++++-
drivers/clk/renesas/rzv2h-cpg.h | 12 ++++++++++++
2 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index e3867ba7cc95a..4a003a1ed8ec7 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -374,7 +374,10 @@ rzv2h_cpg_ddiv_clk_register(const struct cpg_core_clk *core,
return ERR_PTR(-ENOMEM);
init.name = core->name;
- init.ops = &rzv2h_ddiv_clk_divider_ops;
+ if (cfg_ddiv.no_rmw)
+ init.ops = &clk_divider_ops;
+ else
+ init.ops = &rzv2h_ddiv_clk_divider_ops;
init.parent_names = &parent_name;
init.num_parents = 1;
diff --git a/drivers/clk/renesas/rzv2h-cpg.h b/drivers/clk/renesas/rzv2h-cpg.h
index 00b52b459aadc..97054f2071131 100644
--- a/drivers/clk/renesas/rzv2h-cpg.h
+++ b/drivers/clk/renesas/rzv2h-cpg.h
@@ -37,12 +37,15 @@ struct pll {
* @shift: position of the divider bit
* @width: width of the divider
* @monbit: monitor bit in CPG_CLKSTATUS0 register
+ * @no_rmw: flag to indicate if the register is read-modify-write
+ * (1: no RMW, 0: RMW)
*/
struct ddiv {
unsigned int offset:11;
unsigned int shift:4;
unsigned int width:4;
unsigned int monbit:5;
+ unsigned int no_rmw:1;
};
/*
@@ -61,6 +64,15 @@ struct ddiv {
.monbit = _monbit \
})
+#define DDIV_PACK_NO_RMW(_offset, _shift, _width, _monbit) \
+ ((struct ddiv){ \
+ .offset = (_offset), \
+ .shift = (_shift), \
+ .width = (_width), \
+ .monbit = (_monbit), \
+ .no_rmw = 1 \
+ })
+
/**
* struct smuxed - Structure for static muxed clocks
*
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 13/36] clk: renesas: rzv2h: Use str_on_off() helper in rzv2h_mod_clock_endisable()
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (11 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 12/36] clk: renesas: rzv2h: Support static dividers without RMW Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 14/36] clk: renesas: rzv2h: Use both CLK_ON and CLK_MON bits for clock state validation Biju Das
` (24 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
commit e6c2b4ed4906c9be9d522af75690dc570fdde5d4 upstream.
Replace hard-coded "ON"/"OFF" strings with the `str_on_off()` helper in
`rzv2h_mod_clock_endisable()`.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250407165202.197570-5-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 4a003a1ed8ec7..7e7cb16646e06 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -25,6 +25,7 @@
#include <linux/pm_domain.h>
#include <linux/refcount.h>
#include <linux/reset-controller.h>
+#include <linux/string_choices.h>
#include <dt-bindings/clock/renesas-cpg-mssr.h>
@@ -592,7 +593,7 @@ static int rzv2h_mod_clock_endisable(struct clk_hw *hw, bool enable)
int error;
dev_dbg(dev, "CLK_ON 0x%x/%pC %s\n", reg, hw->clk,
- enable ? "ON" : "OFF");
+ str_on_off(enable));
if (enabled == enable)
return 0;
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 14/36] clk: renesas: rzv2h: Use both CLK_ON and CLK_MON bits for clock state validation
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (12 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 13/36] clk: renesas: rzv2h: Use str_on_off() helper in rzv2h_mod_clock_endisable() Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 15/36] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema Biju Das
` (23 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
From: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
commit ef224dd26ca3554ba810996710bcf671bc1c6be9 upstream.
Update the clock enable/disable logic to follow the latest hardware
manual's guidelines, ensuring that both CLK_ON and CLK_MON bits are used
to confirm the clock state.
According to the manual, enabling a clock requires setting the
CPG_CLK_ON bit and verifying the clock has started using the CPG_CLK_MON
bit. Similarly, disabling a clock requires clearing the CPG_CLK_ON bit
and confirming the clock has stopped via the CPG_CLK_MON bit.
Modify `rzv2h_mod_clock_is_enabled()` to check CLK_MON first and then
validate CLK_ON for a more accurate clock status evaluation.
Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250407165202.197570-6-prabhakar.mahadev-lad.rj@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/clk/renesas/rzv2h-cpg.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/clk/renesas/rzv2h-cpg.c b/drivers/clk/renesas/rzv2h-cpg.c
index 7e7cb16646e06..34278c273505d 100644
--- a/drivers/clk/renesas/rzv2h-cpg.c
+++ b/drivers/clk/renesas/rzv2h-cpg.c
@@ -573,11 +573,14 @@ static int rzv2h_mod_clock_is_enabled(struct clk_hw *hw)
if (clock->mon_index >= 0) {
offset = GET_CLK_MON_OFFSET(clock->mon_index);
bitmask = BIT(clock->mon_bit);
- } else {
- offset = GET_CLK_ON_OFFSET(clock->on_index);
- bitmask = BIT(clock->on_bit);
+
+ if (!(readl(priv->base + offset) & bitmask))
+ return 0;
}
+ offset = GET_CLK_ON_OFFSET(clock->on_index);
+ bitmask = BIT(clock->on_bit);
+
return readl(priv->base + offset) & bitmask;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 15/36] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (13 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 14/36] clk: renesas: rzv2h: Use both CLK_ON and CLK_MON bits for clock state validation Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 16/36] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support Biju Das
` (22 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 466c8ef7b66bf4595537333e96c7334e1ceb454a upstream.
RZ/G3E SoC has 20 interrupts, 2 resets and 6 channels that need more
branching with conditional schema. Simplify the conditional schema with
if statements rather than the complex if-else statements to prepare for
supporting RZ/G3E SoC.
Acked-by: Conor Dooley <conor.dooley@microchip.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-2-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
.../bindings/net/can/renesas,rcar-canfd.yaml | 99 +++++++++++--------
1 file changed, 60 insertions(+), 39 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
index f6884f6e59e74..4a83498b2a8b1 100644
--- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
+++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
@@ -45,7 +45,35 @@ properties:
reg:
maxItems: 1
- interrupts: true
+ interrupts:
+ oneOf:
+ - items:
+ - description: Channel interrupt
+ - description: Global interrupt
+ - items:
+ - description: CAN global error interrupt
+ - description: CAN receive FIFO interrupt
+ - description: CAN0 error interrupt
+ - description: CAN0 transmit interrupt
+ - description: CAN0 transmit/receive FIFO receive completion interrupt
+ - description: CAN1 error interrupt
+ - description: CAN1 transmit interrupt
+ - description: CAN1 transmit/receive FIFO receive completion interrupt
+
+ interrupt-names:
+ oneOf:
+ - items:
+ - const: ch_int
+ - const: g_int
+ - items:
+ - const: g_err
+ - const: g_recc
+ - const: ch0_err
+ - const: ch0_rec
+ - const: ch0_trx
+ - const: ch1_err
+ - const: ch1_rec
+ - const: ch1_trx
clocks:
maxItems: 3
@@ -117,52 +145,55 @@ allOf:
then:
properties:
interrupts:
- items:
- - description: CAN global error interrupt
- - description: CAN receive FIFO interrupt
- - description: CAN0 error interrupt
- - description: CAN0 transmit interrupt
- - description: CAN0 transmit/receive FIFO receive completion interrupt
- - description: CAN1 error interrupt
- - description: CAN1 transmit interrupt
- - description: CAN1 transmit/receive FIFO receive completion interrupt
+ minItems: 8
+ maxItems: 8
interrupt-names:
- items:
- - const: g_err
- - const: g_recc
- - const: ch0_err
- - const: ch0_rec
- - const: ch0_trx
- - const: ch1_err
- - const: ch1_rec
- - const: ch1_trx
+ minItems: 8
+ maxItems: 8
resets:
+ minItems: 2
maxItems: 2
reset-names:
- items:
- - const: rstp_n
- - const: rstc_n
+ minItems: 2
+ maxItems: 2
required:
- reset-names
- else:
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - renesas,rcar-gen3-canfd
+ - renesas,rcar-gen4-canfd
+ then:
properties:
interrupts:
- items:
- - description: Channel interrupt
- - description: Global interrupt
+ minItems: 2
+ maxItems: 2
interrupt-names:
- items:
- - const: ch_int
- - const: g_int
+ minItems: 2
+ maxItems: 2
resets:
maxItems: 1
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - renesas,rcar-gen3-canfd
+ - renesas,rzg2l-canfd
+ then:
+ patternProperties:
+ "^channel[2-7]$": false
+
- if:
properties:
compatible:
@@ -171,16 +202,6 @@ allOf:
then:
patternProperties:
"^channel[4-7]$": false
- else:
- if:
- not:
- properties:
- compatible:
- contains:
- const: renesas,rcar-gen4-canfd
- then:
- patternProperties:
- "^channel[2-7]$": false
unevaluatedProperties: false
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 16/36] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (14 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 15/36] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 17/36] can: rcar_canfd: Use of_get_available_child_by_name() Biju Das
` (21 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit e623c6e56bdf776b001313934709f9ff38b7dda6 upstream.
Document support for the CAN-FD Interface on the RZ/G3E (R9A09G047) SoC,
which supports up to six channels.
The CAN-FD module on RZ/G3E is very similar to the one on both R-Car V4H
and RZ/G2L, but differs in some hardware parameters:
* No external clock, but instead has ram clock.
* Support up to 6 channels.
* 20 interrupts.
Reviewed-by: "Rob Herring (Arm)" <robh@kernel.org>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-3-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
.../bindings/net/can/renesas,rcar-canfd.yaml | 76 +++++++++++++++++--
1 file changed, 70 insertions(+), 6 deletions(-)
diff --git a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
index 4a83498b2a8b1..f4ac21c684278 100644
--- a/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
+++ b/Documentation/devicetree/bindings/net/can/renesas,rcar-canfd.yaml
@@ -42,6 +42,8 @@ properties:
- renesas,r9a07g054-canfd # RZ/V2L
- const: renesas,rzg2l-canfd # RZ/G2L family
+ - const: renesas,r9a09g047-canfd # RZ/G3E
+
reg:
maxItems: 1
@@ -59,6 +61,19 @@ properties:
- description: CAN1 error interrupt
- description: CAN1 transmit interrupt
- description: CAN1 transmit/receive FIFO receive completion interrupt
+ - description: CAN2 error interrupt
+ - description: CAN2 transmit interrupt
+ - description: CAN2 transmit/receive FIFO receive completion interrupt
+ - description: CAN3 error interrupt
+ - description: CAN3 transmit interrupt
+ - description: CAN3 transmit/receive FIFO receive completion interrupt
+ - description: CAN4 error interrupt
+ - description: CAN4 transmit interrupt
+ - description: CAN4 transmit/receive FIFO receive completion interrupt
+ - description: CAN5 error interrupt
+ - description: CAN5 transmit interrupt
+ - description: CAN5 transmit/receive FIFO receive completion interrupt
+ minItems: 8
interrupt-names:
oneOf:
@@ -74,15 +89,33 @@ properties:
- const: ch1_err
- const: ch1_rec
- const: ch1_trx
+ - const: ch2_err
+ - const: ch2_rec
+ - const: ch2_trx
+ - const: ch3_err
+ - const: ch3_rec
+ - const: ch3_trx
+ - const: ch4_err
+ - const: ch4_rec
+ - const: ch4_trx
+ - const: ch5_err
+ - const: ch5_rec
+ - const: ch5_trx
+ minItems: 8
clocks:
maxItems: 3
clock-names:
- items:
- - const: fck
- - const: canfd
- - const: can_clk
+ oneOf:
+ - items:
+ - const: fck
+ - const: canfd
+ - const: can_clk
+ - items:
+ - const: fck
+ - const: ram_clk
+ - const: can_clk
power-domains:
maxItems: 1
@@ -145,11 +178,9 @@ allOf:
then:
properties:
interrupts:
- minItems: 8
maxItems: 8
interrupt-names:
- minItems: 8
maxItems: 8
resets:
@@ -183,6 +214,30 @@ allOf:
resets:
maxItems: 1
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a09g047-canfd
+ then:
+ properties:
+ interrupts:
+ minItems: 20
+
+ interrupt-names:
+ minItems: 20
+
+ resets:
+ minItems: 2
+ maxItems: 2
+
+ reset-names:
+ minItems: 2
+ maxItems: 2
+
+ required:
+ - reset-names
+
- if:
properties:
compatible:
@@ -203,6 +258,15 @@ allOf:
patternProperties:
"^channel[4-7]$": false
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: renesas,r9a09g047-canfd
+ then:
+ patternProperties:
+ "^channel[6-7]$": false
+
unevaluatedProperties: false
examples:
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 17/36] can: rcar_canfd: Use of_get_available_child_by_name()
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (15 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 16/36] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 18/36] can: rcar_canfd: Drop RCANFD_GAFLCFG_GETRNC macro Biju Das
` (20 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 56f3dc3ea4ab0c495bbdb402f2a9a12850a5e077 upstream.
Simplify rcar_canfd_probe() using of_get_available_child_by_name().
While at it, move of_node_put(child) inside the if block to avoid
additional check if of_child is NULL.
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-4-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index aa3df0d05b853..2d9569fd0e0b6 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -1855,13 +1855,13 @@ static int rcar_canfd_probe(struct platform_device *pdev)
for (i = 0; i < info->max_channels; ++i) {
name[7] = '0' + i;
- of_child = of_get_child_by_name(dev->of_node, name);
- if (of_child && of_device_is_available(of_child)) {
+ of_child = of_get_available_child_by_name(dev->of_node, name);
+ if (of_child) {
channels_mask |= BIT(i);
transceivers[i] = devm_of_phy_optional_get(dev,
of_child, NULL);
+ of_node_put(of_child);
}
- of_node_put(of_child);
if (IS_ERR(transceivers[i]))
return PTR_ERR(transceivers[i]);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 18/36] can: rcar_canfd: Drop RCANFD_GAFLCFG_GETRNC macro
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (16 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 17/36] can: rcar_canfd: Use of_get_available_child_by_name() Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 19/36] can: rcar_canfd: Update RCANFD_GERFL_ERR macro Biju Das
` (19 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 05e7f5a90c306dd1b94d3f15ab084755c03f1202 upstream.
Drop the unused macro RCANFD_GAFLCFG_GETRNC.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-5-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 4 ----
1 file changed, 4 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 2d9569fd0e0b6..565a91c2ca83d 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -94,10 +94,6 @@
(((x) & reg_gen4(gpriv, 0x1ff, 0xff)) << \
(reg_gen4(gpriv, 16, 24) - ((n) & 1) * reg_gen4(gpriv, 16, 8)))
-#define RCANFD_GAFLCFG_GETRNC(gpriv, n, x) \
- (((x) >> (reg_gen4(gpriv, 16, 24) - ((n) & 1) * reg_gen4(gpriv, 16, 8))) & \
- reg_gen4(gpriv, 0x1ff, 0xff))
-
/* RSCFDnCFDGAFLECTR / RSCFDnGAFLECTR */
#define RCANFD_GAFLECTR_AFLDAE BIT(8)
#define RCANFD_GAFLECTR_AFLPN(gpriv, x) ((x) & reg_gen4(gpriv, 0x7f, 0x1f))
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 19/36] can: rcar_canfd: Update RCANFD_GERFL_ERR macro
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (17 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 18/36] can: rcar_canfd: Drop RCANFD_GAFLCFG_GETRNC macro Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 20/36] can: rcar_canfd: Drop the mask operation in RCANFD_GAFLCFG_SETRNC macro Biju Das
` (18 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit b75fcf2af2dbbc5f913cf1b9194ed01ce9c068b6 upstream.
Replace the macro RCANFD_GERFL_EEF0_7->RCANFD_GERFL_EEF. The macros
RCANFD_GERFL_EEF* in RCANFD_GERFL_ERR can be replaced by FIELD_PREP() and
drop the redundant macro RCANFD_GERFL_EEF(ch).
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://patch.msgid.link/20250417054320.14100-6-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 15 ++++++++-------
1 file changed, 8 insertions(+), 7 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 565a91c2ca83d..d53aa71f11c4b 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -21,6 +21,7 @@
* wherever it is modified to a readable name.
*/
+#include <linux/bitfield.h>
#include <linux/bitmap.h>
#include <linux/bitops.h>
#include <linux/can/dev.h>
@@ -74,18 +75,18 @@
#define RCANFD_GSTS_GNOPM (BIT(0) | BIT(1) | BIT(2) | BIT(3))
/* RSCFDnCFDGERFL / RSCFDnGERFL */
-#define RCANFD_GERFL_EEF0_7 GENMASK(23, 16)
-#define RCANFD_GERFL_EEF(ch) BIT(16 + (ch))
+#define RCANFD_GERFL_EEF GENMASK(23, 16)
#define RCANFD_GERFL_CMPOF BIT(3) /* CAN FD only */
#define RCANFD_GERFL_THLES BIT(2)
#define RCANFD_GERFL_MES BIT(1)
#define RCANFD_GERFL_DEF BIT(0)
#define RCANFD_GERFL_ERR(gpriv, x) \
- ((x) & (reg_gen4(gpriv, RCANFD_GERFL_EEF0_7, \
- RCANFD_GERFL_EEF(0) | RCANFD_GERFL_EEF(1)) | \
- RCANFD_GERFL_MES | \
- ((gpriv)->fdmode ? RCANFD_GERFL_CMPOF : 0)))
+({\
+ typeof(gpriv) (_gpriv) = (gpriv); \
+ ((x) & ((FIELD_PREP(RCANFD_GERFL_EEF, (_gpriv)->channels_mask)) | \
+ RCANFD_GERFL_MES | ((_gpriv)->fdmode ? RCANFD_GERFL_CMPOF : 0))); \
+})
/* AFL Rx rules registers */
@@ -938,7 +939,7 @@ static void rcar_canfd_global_error(struct net_device *ndev)
u32 ridx = ch + RCANFD_RFFIFO_IDX;
gerfl = rcar_canfd_read(priv->base, RCANFD_GERFL);
- if (gerfl & RCANFD_GERFL_EEF(ch)) {
+ if (gerfl & FIELD_PREP(RCANFD_GERFL_EEF, BIT(ch))) {
netdev_dbg(ndev, "Ch%u: ECC Error flag\n", ch);
stats->tx_dropped++;
}
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 20/36] can: rcar_canfd: Drop the mask operation in RCANFD_GAFLCFG_SETRNC macro
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (18 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 19/36] can: rcar_canfd: Update RCANFD_GERFL_ERR macro Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 21/36] can: rcar_canfd: Add rcar_canfd_setrnc() Biju Das
` (17 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit c9e17c91f1656f90b06e5cd2f39dfaab08de9611 upstream.
Drop the mask operation in RCANFD_GAFLCFG_SETRNC macro as the num_rules
can never be larger than number of supported rules.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-7-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index d53aa71f11c4b..45d0c34f64f69 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -92,8 +92,7 @@
/* RSCFDnCFDGAFLCFG0 / RSCFDnGAFLCFG0 */
#define RCANFD_GAFLCFG_SETRNC(gpriv, n, x) \
- (((x) & reg_gen4(gpriv, 0x1ff, 0xff)) << \
- (reg_gen4(gpriv, 16, 24) - ((n) & 1) * reg_gen4(gpriv, 16, 8)))
+ ((x) << (reg_gen4(gpriv, 16, 24) - ((n) & 1) * reg_gen4(gpriv, 16, 8)))
/* RSCFDnCFDGAFLECTR / RSCFDnGAFLECTR */
#define RCANFD_GAFLECTR_AFLDAE BIT(8)
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 21/36] can: rcar_canfd: Add rcar_canfd_setrnc()
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (19 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 20/36] can: rcar_canfd: Drop the mask operation in RCANFD_GAFLCFG_SETRNC macro Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 22/36] can: rcar_canfd: Update RCANFD_GAFLCFG macro Biju Das
` (16 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 6b9f8b53a1f3ad8e7880e3ad0e08074f5d7fd404 upstream.
Add rcar_canfd_setrnc() to replace the macro RCANFD_GAFLCFG_SETRNC.
While at it, replace int->unsigned int for local variables offset, page
and num_rules in rcar_canfd_configure_afl_rules().
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-8-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 18 +++++++++++-------
1 file changed, 11 insertions(+), 7 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 45d0c34f64f69..6b87c1548f684 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -90,10 +90,6 @@
/* AFL Rx rules registers */
-/* RSCFDnCFDGAFLCFG0 / RSCFDnGAFLCFG0 */
-#define RCANFD_GAFLCFG_SETRNC(gpriv, n, x) \
- ((x) << (reg_gen4(gpriv, 16, 24) - ((n) & 1) * reg_gen4(gpriv, 16, 8)))
-
/* RSCFDnCFDGAFLECTR / RSCFDnGAFLECTR */
#define RCANFD_GAFLECTR_AFLDAE BIT(8)
#define RCANFD_GAFLECTR_AFLPN(gpriv, x) ((x) & reg_gen4(gpriv, 0x7f, 0x1f))
@@ -677,6 +673,15 @@ static void rcar_canfd_tx_failure_cleanup(struct net_device *ndev)
can_free_echo_skb(ndev, i, NULL);
}
+static void rcar_canfd_setrnc(struct rcar_canfd_global *gpriv, unsigned int ch,
+ unsigned int num_rules)
+{
+ unsigned int shift = reg_gen4(gpriv, 16, 24) - (ch & 1) * reg_gen4(gpriv, 16, 8);
+ u32 rnc = num_rules << shift;
+
+ rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLCFG(ch), rnc);
+}
+
static void rcar_canfd_set_mode(struct rcar_canfd_global *gpriv)
{
if (is_gen4(gpriv)) {
@@ -785,7 +790,7 @@ static void rcar_canfd_configure_controller(struct rcar_canfd_global *gpriv)
static void rcar_canfd_configure_afl_rules(struct rcar_canfd_global *gpriv,
u32 ch, u32 rule_entry)
{
- int offset, page, num_rules = RCANFD_CHANNEL_NUMRULES;
+ unsigned int offset, page, num_rules = RCANFD_CHANNEL_NUMRULES;
u32 rule_entry_index = rule_entry % 16;
u32 ridx = ch + RCANFD_RFFIFO_IDX;
@@ -796,8 +801,7 @@ static void rcar_canfd_configure_afl_rules(struct rcar_canfd_global *gpriv,
RCANFD_GAFLECTR_AFLDAE));
/* Write number of rules for channel */
- rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLCFG(ch),
- RCANFD_GAFLCFG_SETRNC(gpriv, ch, num_rules));
+ rcar_canfd_setrnc(gpriv, ch, num_rules);
if (is_gen4(gpriv))
offset = RCANFD_GEN4_GAFL_OFFSET;
else if (gpriv->fdmode)
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 22/36] can: rcar_canfd: Update RCANFD_GAFLCFG macro
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (20 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 21/36] can: rcar_canfd: Add rcar_canfd_setrnc() Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 23/36] can: rcar_canfd: Add rnc_field_width variable to struct rcar_canfd_hw_info Biju Das
` (15 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit a2427e44942bb772cf4e416df45b569a0e35b1cb upstream.
Update RCANFD_GAFLCFG macro by replacing the parameter ch->w, where w is
the GAFLCFG index used in the hardware manual.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-9-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 6b87c1548f684..fded4da501031 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -290,7 +290,7 @@
/* RSCFDnCFDGAFLECTR / RSCFDnGAFLECTR */
#define RCANFD_GAFLECTR (0x0098)
/* RSCFDnCFDGAFLCFG / RSCFDnGAFLCFG */
-#define RCANFD_GAFLCFG(ch) (0x009c + (0x04 * ((ch) / 2)))
+#define RCANFD_GAFLCFG(w) (0x009c + (0x04 * (w)))
/* RSCFDnCFDRMNB / RSCFDnRMNB */
#define RCANFD_RMNB (0x00a4)
/* RSCFDnCFDRMND / RSCFDnRMND */
@@ -678,8 +678,9 @@ static void rcar_canfd_setrnc(struct rcar_canfd_global *gpriv, unsigned int ch,
{
unsigned int shift = reg_gen4(gpriv, 16, 24) - (ch & 1) * reg_gen4(gpriv, 16, 8);
u32 rnc = num_rules << shift;
+ unsigned int w = ch / 2;
- rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLCFG(ch), rnc);
+ rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLCFG(w), rnc);
}
static void rcar_canfd_set_mode(struct rcar_canfd_global *gpriv)
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 23/36] can: rcar_canfd: Add rnc_field_width variable to struct rcar_canfd_hw_info
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (21 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 22/36] can: rcar_canfd: Update RCANFD_GAFLCFG macro Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 24/36] can: rcar_canfd: Add max_aflpn " Biju Das
` (14 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit e9ffa12e02e193395e594df8977157121b107c21 upstream.
The shift and w value in rcar_canfd_setrnc() are dictated by the
field width:
- R-Car Gen4 packs 2 values in a 32-bit word, using a field width
of 16 bits,
- R-Car Gen3 packs up to 4 values in a 32-bit word, using a field
width of 8 bits.
Add rnc_field_width variable to struct rcar_canfd_hw_info to handle this
difference. The rnc_stride is 32 / rnc_field_width and the index parameter
w is calculated by ch / rnc_stride. The shift value in rcar_canfd_setrnc()
is computed by using (32 - (ch % rnc_stride + 1) * rnc_field_width).
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-10-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index fded4da501031..558291a360433 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -503,6 +503,7 @@
struct rcar_canfd_global;
struct rcar_canfd_hw_info {
+ u8 rnc_field_width;
u8 max_channels;
u8 postdiv;
/* hardware features */
@@ -579,18 +580,21 @@ static const struct can_bittiming_const rcar_canfd_bittiming_const = {
};
static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
+ .rnc_field_width = 8,
.max_channels = 2,
.postdiv = 2,
.shared_global_irqs = 1,
};
static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
+ .rnc_field_width = 16,
.max_channels = 8,
.postdiv = 2,
.shared_global_irqs = 1,
};
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
+ .rnc_field_width = 8,
.max_channels = 2,
.postdiv = 1,
.multi_channel_irqs = 1,
@@ -676,9 +680,10 @@ static void rcar_canfd_tx_failure_cleanup(struct net_device *ndev)
static void rcar_canfd_setrnc(struct rcar_canfd_global *gpriv, unsigned int ch,
unsigned int num_rules)
{
- unsigned int shift = reg_gen4(gpriv, 16, 24) - (ch & 1) * reg_gen4(gpriv, 16, 8);
+ unsigned int rnc_stride = 32 / gpriv->info->rnc_field_width;
+ unsigned int shift = 32 - (ch % rnc_stride + 1) * gpriv->info->rnc_field_width;
+ unsigned int w = ch / rnc_stride;
u32 rnc = num_rules << shift;
- unsigned int w = ch / 2;
rcar_canfd_set_bit(gpriv->base, RCANFD_GAFLCFG(w), rnc);
}
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 24/36] can: rcar_canfd: Add max_aflpn variable to struct rcar_canfd_hw_info
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (22 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 23/36] can: rcar_canfd: Add rnc_field_width variable to struct rcar_canfd_hw_info Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 25/36] can: rcar_canfd: Add max_cftml " Biju Das
` (13 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 2d6cb8ff94166f3965b3fc3637faecf295a8c708 upstream.
R-Car Gen3 has maximum acceptance filter list page number of 31 whereas on
R-Car Gen4 it is 127. Add max_aflpn variable to struct rcar_canfd_hw_info
in order to support RZ/G3E that has max AFLPN of 63.
While at it, rename the parameter x->page_num in RCANFD_GAFLECTR_AFLPN
macro to make it clear.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-11-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 558291a360433..322d72df10edc 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -92,7 +92,7 @@
/* RSCFDnCFDGAFLECTR / RSCFDnGAFLECTR */
#define RCANFD_GAFLECTR_AFLDAE BIT(8)
-#define RCANFD_GAFLECTR_AFLPN(gpriv, x) ((x) & reg_gen4(gpriv, 0x7f, 0x1f))
+#define RCANFD_GAFLECTR_AFLPN(gpriv, page_num) ((page_num) & (gpriv)->info->max_aflpn)
/* RSCFDnCFDGAFLIDj / RSCFDnGAFLIDj */
#define RCANFD_GAFLID_GAFLLB BIT(29)
@@ -504,6 +504,7 @@ struct rcar_canfd_global;
struct rcar_canfd_hw_info {
u8 rnc_field_width;
+ u8 max_aflpn;
u8 max_channels;
u8 postdiv;
/* hardware features */
@@ -581,6 +582,7 @@ static const struct can_bittiming_const rcar_canfd_bittiming_const = {
static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
.rnc_field_width = 8,
+ .max_aflpn = 31,
.max_channels = 2,
.postdiv = 2,
.shared_global_irqs = 1,
@@ -588,6 +590,7 @@ static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
.rnc_field_width = 16,
+ .max_aflpn = 127,
.max_channels = 8,
.postdiv = 2,
.shared_global_irqs = 1,
@@ -595,6 +598,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
.rnc_field_width = 8,
+ .max_aflpn = 31,
.max_channels = 2,
.postdiv = 1,
.multi_channel_irqs = 1,
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 25/36] can: rcar_canfd: Add max_cftml variable to struct rcar_canfd_hw_info
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (23 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 24/36] can: rcar_canfd: Add max_aflpn " Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 26/36] can: rcar_canfd: Add {nom,data}_bittiming variables " Biju Das
` (12 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 04d7a3a4660fb94b1398027a9089af95014115f1 upstream.
R-Car Gen3 has CFTML max positional value is 15 whereas on R-Car Gen4 it
is 31. Add a max_cftml variable to struct rcar_canfd_hw_info to handle
this difference.
While at it, rename the parameter x->cftml in RCANFD_CFCC_CFTML macro to
make it clear.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-12-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 322d72df10edc..5465fa8972230 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -225,8 +225,11 @@
/* Common FIFO bits */
/* RSCFDnCFDCFCCk */
-#define RCANFD_CFCC_CFTML(gpriv, x) \
- (((x) & reg_gen4(gpriv, 0x1f, 0xf)) << reg_gen4(gpriv, 16, 20))
+#define RCANFD_CFCC_CFTML(gpriv, cftml) \
+({\
+ typeof(gpriv) (_gpriv) = (gpriv); \
+ (((cftml) & (_gpriv)->info->max_cftml) << reg_gen4(_gpriv, 16, 20)); \
+})
#define RCANFD_CFCC_CFM(gpriv, x) (((x) & 0x3) << reg_gen4(gpriv, 8, 16))
#define RCANFD_CFCC_CFIM BIT(12)
#define RCANFD_CFCC_CFDC(gpriv, x) (((x) & 0x7) << reg_gen4(gpriv, 21, 8))
@@ -505,6 +508,7 @@ struct rcar_canfd_global;
struct rcar_canfd_hw_info {
u8 rnc_field_width;
u8 max_aflpn;
+ u8 max_cftml;
u8 max_channels;
u8 postdiv;
/* hardware features */
@@ -583,6 +587,7 @@ static const struct can_bittiming_const rcar_canfd_bittiming_const = {
static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
.rnc_field_width = 8,
.max_aflpn = 31,
+ .max_cftml = 15,
.max_channels = 2,
.postdiv = 2,
.shared_global_irqs = 1,
@@ -591,6 +596,7 @@ static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
.rnc_field_width = 16,
.max_aflpn = 127,
+ .max_cftml = 31,
.max_channels = 8,
.postdiv = 2,
.shared_global_irqs = 1,
@@ -599,6 +605,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
.rnc_field_width = 8,
.max_aflpn = 31,
+ .max_cftml = 15,
.max_channels = 2,
.postdiv = 1,
.multi_channel_irqs = 1,
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 26/36] can: rcar_canfd: Add {nom,data}_bittiming variables to struct rcar_canfd_hw_info
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (24 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 25/36] can: rcar_canfd: Add max_cftml " Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 27/36] can: rcar_canfd: Add ch_interface_mode variable " Biju Das
` (11 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit b5a9f2ec427cbdfe915c377fdd61812636b2cdc2 upstream.
Both R-Car Gen4 and R-Car Gen3 have different bit timing parameters
Add {nom,data}_bittiming variables to struct rcar_canfd_hw_info to
handle this difference.
Since the mask used in the macros are max value - 1, replace that
as well.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-13-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 53 ++++++++++++++++++++++++-------
1 file changed, 42 insertions(+), 11 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 5465fa8972230..d8380f38cddea 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -110,13 +110,13 @@
/* RSCFDnCFDCmNCFG - CAN FD only */
#define RCANFD_NCFG_NTSEG2(gpriv, x) \
- (((x) & reg_gen4(gpriv, 0x7f, 0x1f)) << reg_gen4(gpriv, 25, 24))
+ (((x) & ((gpriv)->info->nom_bittiming->tseg2_max - 1)) << reg_gen4(gpriv, 25, 24))
#define RCANFD_NCFG_NTSEG1(gpriv, x) \
- (((x) & reg_gen4(gpriv, 0xff, 0x7f)) << reg_gen4(gpriv, 17, 16))
+ (((x) & ((gpriv)->info->nom_bittiming->tseg1_max - 1)) << reg_gen4(gpriv, 17, 16))
#define RCANFD_NCFG_NSJW(gpriv, x) \
- (((x) & reg_gen4(gpriv, 0x7f, 0x1f)) << reg_gen4(gpriv, 10, 11))
+ (((x) & ((gpriv)->info->nom_bittiming->sjw_max - 1)) << reg_gen4(gpriv, 10, 11))
#define RCANFD_NCFG_NBRP(x) (((x) & 0x3ff) << 0)
@@ -178,13 +178,13 @@
#define RCANFD_CERFL_ERR(x) ((x) & (0x7fff)) /* above bits 14:0 */
/* RSCFDnCFDCmDCFG */
-#define RCANFD_DCFG_DSJW(gpriv, x) (((x) & reg_gen4(gpriv, 0xf, 0x7)) << 24)
+#define RCANFD_DCFG_DSJW(gpriv, x) (((x) & ((gpriv)->info->data_bittiming->sjw_max - 1)) << 24)
#define RCANFD_DCFG_DTSEG2(gpriv, x) \
- (((x) & reg_gen4(gpriv, 0x0f, 0x7)) << reg_gen4(gpriv, 16, 20))
+ (((x) & ((gpriv)->info->data_bittiming->tseg2_max - 1)) << reg_gen4(gpriv, 16, 20))
#define RCANFD_DCFG_DTSEG1(gpriv, x) \
- (((x) & reg_gen4(gpriv, 0x1f, 0xf)) << reg_gen4(gpriv, 8, 16))
+ (((x) & ((gpriv)->info->data_bittiming->tseg1_max - 1)) << reg_gen4(gpriv, 8, 16))
#define RCANFD_DCFG_DBRP(x) (((x) & 0xff) << 0)
@@ -506,6 +506,8 @@
struct rcar_canfd_global;
struct rcar_canfd_hw_info {
+ const struct can_bittiming_const *nom_bittiming;
+ const struct can_bittiming_const *data_bittiming;
u8 rnc_field_width;
u8 max_aflpn;
u8 max_cftml;
@@ -546,7 +548,7 @@ struct rcar_canfd_global {
};
/* CAN FD mode nominal rate constants */
-static const struct can_bittiming_const rcar_canfd_nom_bittiming_const = {
+static const struct can_bittiming_const rcar_canfd_gen3_nom_bittiming_const = {
.name = RCANFD_DRV_NAME,
.tseg1_min = 2,
.tseg1_max = 128,
@@ -558,8 +560,20 @@ static const struct can_bittiming_const rcar_canfd_nom_bittiming_const = {
.brp_inc = 1,
};
+static const struct can_bittiming_const rcar_canfd_gen4_nom_bittiming_const = {
+ .name = RCANFD_DRV_NAME,
+ .tseg1_min = 2,
+ .tseg1_max = 256,
+ .tseg2_min = 2,
+ .tseg2_max = 128,
+ .sjw_max = 128,
+ .brp_min = 1,
+ .brp_max = 1024,
+ .brp_inc = 1,
+};
+
/* CAN FD mode data rate constants */
-static const struct can_bittiming_const rcar_canfd_data_bittiming_const = {
+static const struct can_bittiming_const rcar_canfd_gen3_data_bittiming_const = {
.name = RCANFD_DRV_NAME,
.tseg1_min = 2,
.tseg1_max = 16,
@@ -571,6 +585,18 @@ static const struct can_bittiming_const rcar_canfd_data_bittiming_const = {
.brp_inc = 1,
};
+static const struct can_bittiming_const rcar_canfd_gen4_data_bittiming_const = {
+ .name = RCANFD_DRV_NAME,
+ .tseg1_min = 2,
+ .tseg1_max = 32,
+ .tseg2_min = 2,
+ .tseg2_max = 16,
+ .sjw_max = 16,
+ .brp_min = 1,
+ .brp_max = 256,
+ .brp_inc = 1,
+};
+
/* Classical CAN mode bitrate constants */
static const struct can_bittiming_const rcar_canfd_bittiming_const = {
.name = RCANFD_DRV_NAME,
@@ -585,6 +611,8 @@ static const struct can_bittiming_const rcar_canfd_bittiming_const = {
};
static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
+ .nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const,
+ .data_bittiming = &rcar_canfd_gen3_data_bittiming_const,
.rnc_field_width = 8,
.max_aflpn = 31,
.max_cftml = 15,
@@ -594,6 +622,8 @@ static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
};
static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
+ .nom_bittiming = &rcar_canfd_gen4_nom_bittiming_const,
+ .data_bittiming = &rcar_canfd_gen4_data_bittiming_const,
.rnc_field_width = 16,
.max_aflpn = 127,
.max_cftml = 31,
@@ -603,6 +633,8 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
};
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
+ .nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const,
+ .data_bittiming = &rcar_canfd_gen3_data_bittiming_const,
.rnc_field_width = 8,
.max_aflpn = 31,
.max_cftml = 15,
@@ -1799,9 +1831,8 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
}
if (gpriv->fdmode) {
- priv->can.bittiming_const = &rcar_canfd_nom_bittiming_const;
- priv->can.data_bittiming_const =
- &rcar_canfd_data_bittiming_const;
+ priv->can.bittiming_const = gpriv->info->nom_bittiming;
+ priv->can.data_bittiming_const = gpriv->info->data_bittiming;
/* Controller starts in CAN FD only mode */
err = can_set_static_ctrlmode(ndev, CAN_CTRLMODE_FD);
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 27/36] can: rcar_canfd: Add ch_interface_mode variable to struct rcar_canfd_hw_info
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (25 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 26/36] can: rcar_canfd: Add {nom,data}_bittiming variables " Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 28/36] can: rcar_canfd: Add shared_can_regs " Biju Das
` (10 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit c10e5510101112932fc2955a5ff97ecf8448a9d1 upstream.
R-Car Gen4 has channel specific interface mode bit for setting CAN-FD or
Classical CAN mode whereas on R-Car Gen3 it is global. Add a
ch_interface_mode variable to struct rcar_canfd_hw_info to handle this
difference.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-14-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index d8380f38cddea..25c00abee9ccf 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -516,6 +516,7 @@ struct rcar_canfd_hw_info {
/* hardware features */
unsigned shared_global_irqs:1; /* Has shared global irqs */
unsigned multi_channel_irqs:1; /* Has multiple channel irqs */
+ unsigned ch_interface_mode:1; /* Has channel interface mode */
};
/* Channel priv data */
@@ -619,6 +620,7 @@ static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
.max_channels = 2,
.postdiv = 2,
.shared_global_irqs = 1,
+ .ch_interface_mode = 0,
};
static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
@@ -630,6 +632,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
.max_channels = 8,
.postdiv = 2,
.shared_global_irqs = 1,
+ .ch_interface_mode = 1,
};
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
@@ -641,6 +644,7 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
.max_channels = 2,
.postdiv = 1,
.multi_channel_irqs = 1,
+ .ch_interface_mode = 0,
};
/* Helper functions */
@@ -733,7 +737,7 @@ static void rcar_canfd_setrnc(struct rcar_canfd_global *gpriv, unsigned int ch,
static void rcar_canfd_set_mode(struct rcar_canfd_global *gpriv)
{
- if (is_gen4(gpriv)) {
+ if (gpriv->info->ch_interface_mode) {
u32 ch, val = gpriv->fdmode ? RCANFD_GEN4_FDCFG_FDOE
: RCANFD_GEN4_FDCFG_CLOE;
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 28/36] can: rcar_canfd: Add shared_can_regs variable to struct rcar_canfd_hw_info
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (26 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 27/36] can: rcar_canfd: Add ch_interface_mode variable " Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 29/36] can: rcar_canfd: Add struct rcanfd_regs " Biju Das
` (9 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 836cc711fc18747fc936ac62abd61a64465f00cc upstream.
R-Car Gen4 has shared regs for both CAN-FD and Classical CAN operations.
Add shared_can_regs variable to struct rcar_canfd_hw_info to handle this
difference.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-15-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 14 +++++++++-----
1 file changed, 9 insertions(+), 5 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 25c00abee9ccf..7e0f84596807d 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -517,6 +517,7 @@ struct rcar_canfd_hw_info {
unsigned shared_global_irqs:1; /* Has shared global irqs */
unsigned multi_channel_irqs:1; /* Has multiple channel irqs */
unsigned ch_interface_mode:1; /* Has channel interface mode */
+ unsigned shared_can_regs:1; /* Has shared classical can registers */
};
/* Channel priv data */
@@ -621,6 +622,7 @@ static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
.postdiv = 2,
.shared_global_irqs = 1,
.ch_interface_mode = 0,
+ .shared_can_regs = 0,
};
static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
@@ -633,6 +635,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
.postdiv = 2,
.shared_global_irqs = 1,
.ch_interface_mode = 1,
+ .shared_can_regs = 1,
};
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
@@ -645,6 +648,7 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
.postdiv = 1,
.multi_channel_irqs = 1,
.ch_interface_mode = 0,
+ .shared_can_regs = 0,
};
/* Helper functions */
@@ -855,7 +859,7 @@ static void rcar_canfd_configure_afl_rules(struct rcar_canfd_global *gpriv,
/* Write number of rules for channel */
rcar_canfd_setrnc(gpriv, ch, num_rules);
- if (is_gen4(gpriv))
+ if (gpriv->info->shared_can_regs)
offset = RCANFD_GEN4_GAFL_OFFSET;
else if (gpriv->fdmode)
offset = RCANFD_F_GAFL_OFFSET;
@@ -1391,7 +1395,7 @@ static void rcar_canfd_set_bittiming(struct net_device *dev)
brp, sjw, tseg1, tseg2);
} else {
/* Classical CAN only mode */
- if (is_gen4(gpriv)) {
+ if (gpriv->info->shared_can_regs) {
cfg = (RCANFD_NCFG_NTSEG1(gpriv, tseg1) |
RCANFD_NCFG_NBRP(brp) |
RCANFD_NCFG_NSJW(gpriv, sjw) |
@@ -1556,7 +1560,7 @@ static netdev_tx_t rcar_canfd_start_xmit(struct sk_buff *skb,
dlc = RCANFD_CFPTR_CFDLC(can_fd_len2dlc(cf->len));
- if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) || is_gen4(gpriv)) {
+ if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) || gpriv->info->shared_can_regs) {
rcar_canfd_write(priv->base,
RCANFD_F_CFID(gpriv, ch, RCANFD_CFFIFO_IDX), id);
rcar_canfd_write(priv->base,
@@ -1615,7 +1619,7 @@ static void rcar_canfd_rx_pkt(struct rcar_canfd_channel *priv)
u32 ch = priv->channel;
u32 ridx = ch + RCANFD_RFFIFO_IDX;
- if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) || is_gen4(gpriv)) {
+ if ((priv->can.ctrlmode & CAN_CTRLMODE_FD) || gpriv->info->shared_can_regs) {
id = rcar_canfd_read(priv->base, RCANFD_F_RFID(gpriv, ridx));
dlc = rcar_canfd_read(priv->base, RCANFD_F_RFPTR(gpriv, ridx));
@@ -1666,7 +1670,7 @@ static void rcar_canfd_rx_pkt(struct rcar_canfd_channel *priv)
cf->len = can_cc_dlc2len(RCANFD_RFPTR_RFDLC(dlc));
if (id & RCANFD_RFID_RFRTR)
cf->can_id |= CAN_RTR_FLAG;
- else if (is_gen4(gpriv))
+ else if (gpriv->info->shared_can_regs)
rcar_canfd_get_data(priv, cf, RCANFD_F_RFDF(gpriv, ridx, 0));
else
rcar_canfd_get_data(priv, cf, RCANFD_C_RFDF(ridx, 0));
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 29/36] can: rcar_canfd: Add struct rcanfd_regs variable to struct rcar_canfd_hw_info
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (27 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 28/36] can: rcar_canfd: Add shared_can_regs " Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 30/36] can: rcar_canfd: Add sh " Biju Das
` (8 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 5026d2acaefab81857390c00c771ee6a2fa65461 upstream.
R-Car Gen3 and Gen4 have some differences in the register offsets. Add
struct rcanfd_regs variable regs to the struct rcar_canfd_hw_info to
handle these differences.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-16-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 48 ++++++++++++++++++++++++++-----
1 file changed, 41 insertions(+), 7 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 7e0f84596807d..fbfe2d6484f1e 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -300,7 +300,7 @@
#define RCANFD_RMND(y) (0x00a8 + (0x04 * (y)))
/* RSCFDnCFDRFCCx / RSCFDnRFCCx */
-#define RCANFD_RFCC(gpriv, x) (reg_gen4(gpriv, 0x00c0, 0x00b8) + (0x04 * (x)))
+#define RCANFD_RFCC(gpriv, x) ((gpriv)->info->regs->rfcc + (0x04 * (x)))
/* RSCFDnCFDRFSTSx / RSCFDnRFSTSx */
#define RCANFD_RFSTS(gpriv, x) (RCANFD_RFCC(gpriv, x) + 0x20)
/* RSCFDnCFDRFPCTRx / RSCFDnRFPCTRx */
@@ -310,13 +310,13 @@
/* RSCFDnCFDCFCCx / RSCFDnCFCCx */
#define RCANFD_CFCC(gpriv, ch, idx) \
- (reg_gen4(gpriv, 0x0120, 0x0118) + (0x0c * (ch)) + (0x04 * (idx)))
+ ((gpriv)->info->regs->cfcc + (0x0c * (ch)) + (0x04 * (idx)))
/* RSCFDnCFDCFSTSx / RSCFDnCFSTSx */
#define RCANFD_CFSTS(gpriv, ch, idx) \
- (reg_gen4(gpriv, 0x01e0, 0x0178) + (0x0c * (ch)) + (0x04 * (idx)))
+ ((gpriv)->info->regs->cfsts + (0x0c * (ch)) + (0x04 * (idx)))
/* RSCFDnCFDCFPCTRx / RSCFDnCFPCTRx */
#define RCANFD_CFPCTR(gpriv, ch, idx) \
- (reg_gen4(gpriv, 0x0240, 0x01d8) + (0x0c * (ch)) + (0x04 * (idx)))
+ ((gpriv)->info->regs->cfpctr + (0x0c * (ch)) + (0x04 * (idx)))
/* RSCFDnCFDFESTS / RSCFDnFESTS */
#define RCANFD_FESTS (0x0238)
@@ -432,7 +432,7 @@
/* CAN FD mode specific register map */
/* RSCFDnCFDCmXXX -> RCANFD_F_XXX(m) */
-#define RCANFD_F_DCFG(gpriv, m) (reg_gen4(gpriv, 0x1400, 0x0500) + (0x20 * (m)))
+#define RCANFD_F_DCFG(gpriv, m) ((gpriv)->info->regs->f_dcfg + (0x20 * (m)))
#define RCANFD_F_CFDCFG(m) (0x0504 + (0x20 * (m)))
#define RCANFD_F_CFDCTR(m) (0x0508 + (0x20 * (m)))
#define RCANFD_F_CFDSTS(m) (0x050c + (0x20 * (m)))
@@ -448,7 +448,7 @@
#define RCANFD_F_RMDF(q, b) (0x200c + (0x04 * (b)) + (0x20 * (q)))
/* RSCFDnCFDRFXXx -> RCANFD_F_RFXX(x) */
-#define RCANFD_F_RFOFFSET(gpriv) reg_gen4(gpriv, 0x6000, 0x3000)
+#define RCANFD_F_RFOFFSET(gpriv) ((gpriv)->info->regs->rfoffset)
#define RCANFD_F_RFID(gpriv, x) (RCANFD_F_RFOFFSET(gpriv) + (0x80 * (x)))
#define RCANFD_F_RFPTR(gpriv, x) (RCANFD_F_RFOFFSET(gpriv) + 0x04 + (0x80 * (x)))
#define RCANFD_F_RFFDSTS(gpriv, x) (RCANFD_F_RFOFFSET(gpriv) + 0x08 + (0x80 * (x)))
@@ -456,7 +456,7 @@
(RCANFD_F_RFOFFSET(gpriv) + 0x0c + (0x80 * (x)) + (0x04 * (df)))
/* RSCFDnCFDCFXXk -> RCANFD_F_CFXX(ch, k) */
-#define RCANFD_F_CFOFFSET(gpriv) reg_gen4(gpriv, 0x6400, 0x3400)
+#define RCANFD_F_CFOFFSET(gpriv) ((gpriv)->info->regs->cfoffset)
#define RCANFD_F_CFID(gpriv, ch, idx) \
(RCANFD_F_CFOFFSET(gpriv) + (0x180 * (ch)) + (0x80 * (idx)))
@@ -505,9 +505,20 @@
struct rcar_canfd_global;
+struct rcar_canfd_regs {
+ u16 rfcc; /* RX FIFO Configuration/Control Register */
+ u16 cfcc; /* Common FIFO Configuration/Control Register */
+ u16 cfsts; /* Common FIFO Status Register */
+ u16 cfpctr; /* Common FIFO Pointer Control Register */
+ u16 f_dcfg; /* Global FD Configuration Register */
+ u16 rfoffset; /* Receive FIFO buffer access ID register */
+ u16 cfoffset; /* Transmit/receive FIFO buffer access ID register */
+};
+
struct rcar_canfd_hw_info {
const struct can_bittiming_const *nom_bittiming;
const struct can_bittiming_const *data_bittiming;
+ const struct rcar_canfd_regs *regs;
u8 rnc_field_width;
u8 max_aflpn;
u8 max_cftml;
@@ -612,9 +623,30 @@ static const struct can_bittiming_const rcar_canfd_bittiming_const = {
.brp_inc = 1,
};
+static const struct rcar_canfd_regs rcar_gen3_regs = {
+ .rfcc = 0x00b8,
+ .cfcc = 0x0118,
+ .cfsts = 0x0178,
+ .cfpctr = 0x01d8,
+ .f_dcfg = 0x0500,
+ .rfoffset = 0x3000,
+ .cfoffset = 0x3400,
+};
+
+static const struct rcar_canfd_regs rcar_gen4_regs = {
+ .rfcc = 0x00c0,
+ .cfcc = 0x0120,
+ .cfsts = 0x01e0,
+ .cfpctr = 0x0240,
+ .f_dcfg = 0x1400,
+ .rfoffset = 0x6000,
+ .cfoffset = 0x6400,
+};
+
static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
.nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const,
.data_bittiming = &rcar_canfd_gen3_data_bittiming_const,
+ .regs = &rcar_gen3_regs,
.rnc_field_width = 8,
.max_aflpn = 31,
.max_cftml = 15,
@@ -628,6 +660,7 @@ static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
.nom_bittiming = &rcar_canfd_gen4_nom_bittiming_const,
.data_bittiming = &rcar_canfd_gen4_data_bittiming_const,
+ .regs = &rcar_gen4_regs,
.rnc_field_width = 16,
.max_aflpn = 127,
.max_cftml = 31,
@@ -641,6 +674,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
.nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const,
.data_bittiming = &rcar_canfd_gen3_data_bittiming_const,
+ .regs = &rcar_gen3_regs,
.rnc_field_width = 8,
.max_aflpn = 31,
.max_cftml = 15,
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 30/36] can: rcar_canfd: Add sh variable to struct rcar_canfd_hw_info
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (28 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 29/36] can: rcar_canfd: Add struct rcanfd_regs " Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 31/36] can: rcar_canfd: Add external_clk " Biju Das
` (7 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit c5670c23d67dd81e71262bb7c5942502cd9df62e upstream.
R-Car Gen3 and Gen4 have some differences in the shift bits. Introduce a
struct rcar_canfd_shift_data to hold these values and add the struct
rcar_canfd_shift_data variable sh to struct rcar_canfd_hw_info to handle
these differences. After this, drop the unused functions reg_gen4() and
is_gen4().
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-17-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 64 ++++++++++++++++++++++---------
1 file changed, 45 insertions(+), 19 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index fbfe2d6484f1e..67f7b5f6376c4 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -110,13 +110,13 @@
/* RSCFDnCFDCmNCFG - CAN FD only */
#define RCANFD_NCFG_NTSEG2(gpriv, x) \
- (((x) & ((gpriv)->info->nom_bittiming->tseg2_max - 1)) << reg_gen4(gpriv, 25, 24))
+ (((x) & ((gpriv)->info->nom_bittiming->tseg2_max - 1)) << (gpriv)->info->sh->ntseg2)
#define RCANFD_NCFG_NTSEG1(gpriv, x) \
- (((x) & ((gpriv)->info->nom_bittiming->tseg1_max - 1)) << reg_gen4(gpriv, 17, 16))
+ (((x) & ((gpriv)->info->nom_bittiming->tseg1_max - 1)) << (gpriv)->info->sh->ntseg1)
#define RCANFD_NCFG_NSJW(gpriv, x) \
- (((x) & ((gpriv)->info->nom_bittiming->sjw_max - 1)) << reg_gen4(gpriv, 10, 11))
+ (((x) & ((gpriv)->info->nom_bittiming->sjw_max - 1)) << (gpriv)->info->sh->nsjw)
#define RCANFD_NCFG_NBRP(x) (((x) & 0x3ff) << 0)
@@ -181,10 +181,10 @@
#define RCANFD_DCFG_DSJW(gpriv, x) (((x) & ((gpriv)->info->data_bittiming->sjw_max - 1)) << 24)
#define RCANFD_DCFG_DTSEG2(gpriv, x) \
- (((x) & ((gpriv)->info->data_bittiming->tseg2_max - 1)) << reg_gen4(gpriv, 16, 20))
+ (((x) & ((gpriv)->info->data_bittiming->tseg2_max - 1)) << (gpriv)->info->sh->dtseg2)
#define RCANFD_DCFG_DTSEG1(gpriv, x) \
- (((x) & ((gpriv)->info->data_bittiming->tseg1_max - 1)) << reg_gen4(gpriv, 8, 16))
+ (((x) & ((gpriv)->info->data_bittiming->tseg1_max - 1)) << (gpriv)->info->sh->dtseg1)
#define RCANFD_DCFG_DBRP(x) (((x) & 0xff) << 0)
@@ -228,11 +228,11 @@
#define RCANFD_CFCC_CFTML(gpriv, cftml) \
({\
typeof(gpriv) (_gpriv) = (gpriv); \
- (((cftml) & (_gpriv)->info->max_cftml) << reg_gen4(_gpriv, 16, 20)); \
+ (((cftml) & (_gpriv)->info->max_cftml) << (_gpriv)->info->sh->cftml); \
})
-#define RCANFD_CFCC_CFM(gpriv, x) (((x) & 0x3) << reg_gen4(gpriv, 8, 16))
+#define RCANFD_CFCC_CFM(gpriv, x) (((x) & 0x3) << (gpriv)->info->sh->cfm)
#define RCANFD_CFCC_CFIM BIT(12)
-#define RCANFD_CFCC_CFDC(gpriv, x) (((x) & 0x7) << reg_gen4(gpriv, 21, 8))
+#define RCANFD_CFCC_CFDC(gpriv, x) (((x) & 0x7) << (gpriv)->info->sh->cfdc)
#define RCANFD_CFCC_CFPLS(x) (((x) & 0x7) << 4)
#define RCANFD_CFCC_CFTXIE BIT(2)
#define RCANFD_CFCC_CFE BIT(0)
@@ -515,10 +515,22 @@ struct rcar_canfd_regs {
u16 cfoffset; /* Transmit/receive FIFO buffer access ID register */
};
+struct rcar_canfd_shift_data {
+ u8 ntseg2; /* Nominal Bit Rate Time Segment 2 Control */
+ u8 ntseg1; /* Nominal Bit Rate Time Segment 1 Control */
+ u8 nsjw; /* Nominal Bit Rate Resynchronization Jump Width Control */
+ u8 dtseg2; /* Data Bit Rate Time Segment 2 Control */
+ u8 dtseg1; /* Data Bit Rate Time Segment 1 Control */
+ u8 cftml; /* Common FIFO TX Message Buffer Link */
+ u8 cfm; /* Common FIFO Mode */
+ u8 cfdc; /* Common FIFO Depth Configuration */
+};
+
struct rcar_canfd_hw_info {
const struct can_bittiming_const *nom_bittiming;
const struct can_bittiming_const *data_bittiming;
const struct rcar_canfd_regs *regs;
+ const struct rcar_canfd_shift_data *sh;
u8 rnc_field_width;
u8 max_aflpn;
u8 max_cftml;
@@ -643,10 +655,33 @@ static const struct rcar_canfd_regs rcar_gen4_regs = {
.cfoffset = 0x6400,
};
+static const struct rcar_canfd_shift_data rcar_gen3_shift_data = {
+ .ntseg2 = 24,
+ .ntseg1 = 16,
+ .nsjw = 11,
+ .dtseg2 = 20,
+ .dtseg1 = 16,
+ .cftml = 20,
+ .cfm = 16,
+ .cfdc = 8,
+};
+
+static const struct rcar_canfd_shift_data rcar_gen4_shift_data = {
+ .ntseg2 = 25,
+ .ntseg1 = 17,
+ .nsjw = 10,
+ .dtseg2 = 16,
+ .dtseg1 = 8,
+ .cftml = 16,
+ .cfm = 8,
+ .cfdc = 21,
+};
+
static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
.nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const,
.data_bittiming = &rcar_canfd_gen3_data_bittiming_const,
.regs = &rcar_gen3_regs,
+ .sh = &rcar_gen3_shift_data,
.rnc_field_width = 8,
.max_aflpn = 31,
.max_cftml = 15,
@@ -661,6 +696,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
.nom_bittiming = &rcar_canfd_gen4_nom_bittiming_const,
.data_bittiming = &rcar_canfd_gen4_data_bittiming_const,
.regs = &rcar_gen4_regs,
+ .sh = &rcar_gen4_shift_data,
.rnc_field_width = 16,
.max_aflpn = 127,
.max_cftml = 31,
@@ -675,6 +711,7 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
.nom_bittiming = &rcar_canfd_gen3_nom_bittiming_const,
.data_bittiming = &rcar_canfd_gen3_data_bittiming_const,
.regs = &rcar_gen3_regs,
+ .sh = &rcar_gen3_shift_data,
.rnc_field_width = 8,
.max_aflpn = 31,
.max_cftml = 15,
@@ -686,17 +723,6 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
};
/* Helper functions */
-static inline bool is_gen4(struct rcar_canfd_global *gpriv)
-{
- return gpriv->info == &rcar_gen4_hw_info;
-}
-
-static inline u32 reg_gen4(struct rcar_canfd_global *gpriv,
- u32 gen4, u32 not_gen4)
-{
- return is_gen4(gpriv) ? gen4 : not_gen4;
-}
-
static inline void rcar_canfd_update(u32 mask, u32 val, u32 __iomem *reg)
{
u32 data = readl(reg);
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 31/36] can: rcar_canfd: Add external_clk variable to struct rcar_canfd_hw_info
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (29 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 30/36] can: rcar_canfd: Add sh " Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 32/36] can: rcar_canfd: Enhance multi_channel_irqs handling Biju Das
` (6 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit e5258b337de26c97cf210858407e0fc881bc0e3d upstream.
All existing SoCs support an external clock, but RZ/G3E has only internal
clocks. Add external_clk variable to struct rcar_canfd_hw_info to handle
this difference.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-18-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 67f7b5f6376c4..0bf0e88dfe257 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -541,6 +541,7 @@ struct rcar_canfd_hw_info {
unsigned multi_channel_irqs:1; /* Has multiple channel irqs */
unsigned ch_interface_mode:1; /* Has channel interface mode */
unsigned shared_can_regs:1; /* Has shared classical can registers */
+ unsigned external_clk:1; /* Has external clock */
};
/* Channel priv data */
@@ -690,6 +691,7 @@ static const struct rcar_canfd_hw_info rcar_gen3_hw_info = {
.shared_global_irqs = 1,
.ch_interface_mode = 0,
.shared_can_regs = 0,
+ .external_clk = 1,
};
static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
@@ -705,6 +707,7 @@ static const struct rcar_canfd_hw_info rcar_gen4_hw_info = {
.shared_global_irqs = 1,
.ch_interface_mode = 1,
.shared_can_regs = 1,
+ .external_clk = 1,
};
static const struct rcar_canfd_hw_info rzg2l_hw_info = {
@@ -720,6 +723,7 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
.multi_channel_irqs = 1,
.ch_interface_mode = 0,
.shared_can_regs = 0,
+ .external_clk = 1,
};
/* Helper functions */
@@ -2048,7 +2052,7 @@ static int rcar_canfd_probe(struct platform_device *pdev)
fcan_freq = clk_get_rate(gpriv->can_clk) / info->postdiv;
} else {
fcan_freq = clk_get_rate(gpriv->can_clk);
- gpriv->extclk = true;
+ gpriv->extclk = gpriv->info->external_clk;
}
addr = devm_platform_ioremap_resource(pdev, 0);
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 32/36] can: rcar_canfd: Enhance multi_channel_irqs handling
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (30 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 31/36] can: rcar_canfd: Add external_clk " Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 33/36] can: rcar_canfd: Add RZ/G3E support Biju Das
` (5 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 0853b7e479a69d1e335665ceec9898c5b9ecc810 upstream.
Currently multi_channel_irqs has only 2 channels. But RZ/G3E has six
channels. Enhance multi_channel_irqs handling to support more than two
channels.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-19-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 0bf0e88dfe257..6a9c970364cb0 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -1857,16 +1857,19 @@ static int rcar_canfd_channel_probe(struct rcar_canfd_global *gpriv, u32 ch,
if (info->multi_channel_irqs) {
char *irq_name;
+ char name[10];
int err_irq;
int tx_irq;
- err_irq = platform_get_irq_byname(pdev, ch == 0 ? "ch0_err" : "ch1_err");
+ scnprintf(name, sizeof(name), "ch%u_err", ch);
+ err_irq = platform_get_irq_byname(pdev, name);
if (err_irq < 0) {
err = err_irq;
goto fail;
}
- tx_irq = platform_get_irq_byname(pdev, ch == 0 ? "ch0_trx" : "ch1_trx");
+ scnprintf(name, sizeof(name), "ch%u_trx", ch);
+ tx_irq = platform_get_irq_byname(pdev, name);
if (tx_irq < 0) {
err = tx_irq;
goto fail;
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 33/36] can: rcar_canfd: Add RZ/G3E support
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (31 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 32/36] can: rcar_canfd: Enhance multi_channel_irqs handling Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 34/36] arm64: dts: renesas: r9a09g047: Add CANFD node Biju Das
` (4 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit be53aa052008538d67d9ad23f6f8160df390e1d6 upstream.
The CAN-FD IP found on the RZ/G3E SoC is similar to R-Car Gen4, but
it has no external clock instead it has clk_ram, it has 6 channels
and supports 20 interrupts. Add support for RZ/G3E CAN-FD driver.
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Link: https://patch.msgid.link/20250417054320.14100-20-biju.das.jz@bp.renesas.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
drivers/net/can/rcar/rcar_canfd.c | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/drivers/net/can/rcar/rcar_canfd.c b/drivers/net/can/rcar/rcar_canfd.c
index 6a9c970364cb0..27d503ac87dcd 100644
--- a/drivers/net/can/rcar/rcar_canfd.c
+++ b/drivers/net/can/rcar/rcar_canfd.c
@@ -726,6 +726,22 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
.external_clk = 1,
};
+static const struct rcar_canfd_hw_info r9a09g047_hw_info = {
+ .nom_bittiming = &rcar_canfd_gen4_nom_bittiming_const,
+ .data_bittiming = &rcar_canfd_gen4_data_bittiming_const,
+ .regs = &rcar_gen4_regs,
+ .sh = &rcar_gen4_shift_data,
+ .rnc_field_width = 16,
+ .max_aflpn = 63,
+ .max_cftml = 31,
+ .max_channels = 6,
+ .postdiv = 1,
+ .multi_channel_irqs = 1,
+ .ch_interface_mode = 1,
+ .shared_can_regs = 1,
+ .external_clk = 0,
+};
+
/* Helper functions */
static inline void rcar_canfd_update(u32 mask, u32 val, u32 __iomem *reg)
{
@@ -1969,6 +1985,7 @@ static int rcar_canfd_probe(struct platform_device *pdev)
u32 rule_entry = 0;
bool fdmode = true; /* CAN FD only mode - default */
char name[9] = "channelX";
+ struct clk *clk_ram;
int i;
info = of_device_get_match_data(dev);
@@ -2058,6 +2075,11 @@ static int rcar_canfd_probe(struct platform_device *pdev)
gpriv->extclk = gpriv->info->external_clk;
}
+ clk_ram = devm_clk_get_optional_enabled(dev, "ram_clk");
+ if (IS_ERR(clk_ram))
+ return dev_err_probe(dev, PTR_ERR(clk_ram),
+ "cannot get enabled ram clock\n");
+
addr = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(addr)) {
err = PTR_ERR(addr);
@@ -2220,6 +2242,7 @@ static SIMPLE_DEV_PM_OPS(rcar_canfd_pm_ops, rcar_canfd_suspend,
static const __maybe_unused struct of_device_id rcar_canfd_of_table[] = {
{ .compatible = "renesas,r8a779a0-canfd", .data = &rcar_gen4_hw_info },
+ { .compatible = "renesas,r9a09g047-canfd", .data = &r9a09g047_hw_info },
{ .compatible = "renesas,rcar-gen3-canfd", .data = &rcar_gen3_hw_info },
{ .compatible = "renesas,rcar-gen4-canfd", .data = &rcar_gen4_hw_info },
{ .compatible = "renesas,rzg2l-canfd", .data = &rzg2l_hw_info },
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 34/36] arm64: dts: renesas: r9a09g047: Add CANFD node
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (32 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 33/36] can: rcar_canfd: Add RZ/G3E support Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 35/36] arm64: dts: renesas: r9a09g047e57-smarc: Enable CANFD Biju Das
` (3 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 9c1d49dd0975cd91529417a70a34817e489d954b upstream.
Add CANFD node to RZ/G3E ("R9A09G047") SoC DTSI.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250320164121.193857-2-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
arch/arm64/boot/dts/renesas/r9a09g047.dtsi | 60 ++++++++++++++++++++++
1 file changed, 60 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g047.dtsi b/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
index 5b413d31b8cd9..bfdb03e69540b 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
+++ b/arch/arm64/boot/dts/renesas/r9a09g047.dtsi
@@ -294,6 +294,66 @@ scif0: serial@11c01400 {
status = "disabled";
};
+ canfd: can@12440000 {
+ compatible = "renesas,r9a09g047-canfd";
+ reg = <0 0x12440000 0 0x40000>;
+ interrupts = <GIC_SPI 709 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 710 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 697 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 703 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 711 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 698 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 704 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 712 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 699 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 705 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 713 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 700 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 706 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 714 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 701 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 707 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 715 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 702 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 708 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 716 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "g_err", "g_recc",
+ "ch0_err", "ch0_rec", "ch0_trx",
+ "ch1_err", "ch1_rec", "ch1_trx",
+ "ch2_err", "ch2_rec", "ch2_trx",
+ "ch3_err", "ch3_rec", "ch3_trx",
+ "ch4_err", "ch4_rec", "ch4_trx",
+ "ch5_err", "ch5_rec", "ch5_trx";
+ clocks = <&cpg CPG_MOD 0x9c>, <&cpg CPG_MOD 0x9d>,
+ <&cpg CPG_MOD 0x9e>;
+ clock-names = "fck", "ram_clk", "can_clk";
+ assigned-clocks = <&cpg CPG_MOD 0x9e>;
+ assigned-clock-rates = <80000000>;
+ resets = <&cpg 0xa1>, <&cpg 0xa2>;
+ reset-names = "rstp_n", "rstc_n";
+ power-domains = <&cpg>;
+ status = "disabled";
+
+ channel0 {
+ status = "disabled";
+ };
+ channel1 {
+ status = "disabled";
+ };
+ channel2 {
+ status = "disabled";
+ };
+ channel3 {
+ status = "disabled";
+ };
+ channel4 {
+ status = "disabled";
+ };
+ channel5 {
+ status = "disabled";
+ };
+ };
+
wdt1: watchdog@14400000 {
compatible = "renesas,r9a09g047-wdt", "renesas,r9a09g057-wdt";
reg = <0 0x14400000 0 0x400>;
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 35/36] arm64: dts: renesas: r9a09g047e57-smarc: Enable CANFD
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (33 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 34/36] arm64: dts: renesas: r9a09g047: Add CANFD node Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 36/36] arm64: dts: renesas: r9a09g047e57-smarc: Enable CAN Transceiver Biju Das
` (2 subsequent siblings)
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit f2858ea240d35ed35dc87108cf8b06685e89a421 upstream.
Enable CANFD on the RZ/G3E SMARC EVK platform.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250320164121.193857-3-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
.../boot/dts/renesas/r9a09g047e57-smarc.dts | 31 +++++++++++++++++++
.../boot/dts/renesas/renesas-smarc2.dtsi | 4 +++
.../boot/dts/renesas/rzg3e-smarc-som.dtsi | 14 +++++++--
3 files changed, 46 insertions(+), 3 deletions(-)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
index 5d7983812c701..7e1daaabce8a9 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
+++ b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
@@ -8,6 +8,8 @@
/dts-v1/;
/* Switch selection settings */
+#define SW_LCD_EN 0
+#define SW_PDM_EN 0
#define SW_SD0_DEV_SEL 0
#define SW_SDIO_M2E 0
@@ -33,7 +35,36 @@ vqmmc_sd1_pvdd: regulator-vqmmc-sd1-pvdd {
};
};
+&canfd {
+ pinctrl-0 = <&canfd_pins>;
+ pinctrl-names = "default";
+
+#if (!SW_PDM_EN)
+ channel1 {
+ status = "okay";
+ };
+#endif
+
+#if (!SW_LCD_EN)
+ channel4 {
+ status = "okay";
+ };
+#endif
+};
+
&pinctrl {
+ canfd_pins: canfd {
+ can1_pins: can1 {
+ pinmux = <RZG3E_PORT_PINMUX(L, 2, 3)>, /* RX */
+ <RZG3E_PORT_PINMUX(L, 3, 3)>; /* TX */
+ };
+
+ can4_pins: can4 {
+ pinmux = <RZG3E_PORT_PINMUX(5, 2, 3)>, /* RX */
+ <RZG3E_PORT_PINMUX(5, 3, 3)>; /* TX */
+ };
+ };
+
scif_pins: scif {
pins = "SCIF_TXD", "SCIF_RXD";
renesas,output-impedance = <1>;
diff --git a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
index fd82df8adc1ec..1d3a844174b37 100644
--- a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
+++ b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
@@ -29,6 +29,10 @@ aliases {
};
};
+&canfd {
+ status = "okay";
+};
+
&scif0 {
status = "okay";
};
diff --git a/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi b/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi
index 051a43a7e2f0e..e9327cf9077f2 100644
--- a/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi
+++ b/arch/arm64/boot/dts/renesas/rzg3e-smarc-som.dtsi
@@ -6,12 +6,20 @@
*/
/*
- * Please set the switch position SYS.1 on the SoM and the corresponding macro
- * SW_SD0_DEV_SEL on the board DTS:
+ * Please set the below switch position on the SoM and the corresponding macro
+ * on the board DTS:
*
- * SW_SD0_DEV_SEL:
+ * Switch position SYS.1, Macro SW_SD0_DEV_SEL:
* 0 - SD0 is connected to eMMC (default)
* 1 - SD0 is connected to uSD0 card
+ *
+ * Switch position SYS.5, Macro SW_LCD_EN:
+ * 0 - Select Misc. Signals routing
+ * 1 - Select LCD
+ *
+ * Switch position BOOT.6, Macro SW_PDM_EN:
+ * 0 - Select CAN routing
+ * 1 - Select PDM
*/
/ {
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* [PATCH 6.12.y-cip 36/36] arm64: dts: renesas: r9a09g047e57-smarc: Enable CAN Transceiver
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (34 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 35/36] arm64: dts: renesas: r9a09g047e57-smarc: Enable CANFD Biju Das
@ 2025-07-14 10:16 ` Biju Das
2025-07-14 11:55 ` [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Pavel Machek
2025-07-15 2:24 ` nobuhiro1.iwamatsu
37 siblings, 0 replies; 41+ messages in thread
From: Biju Das @ 2025-07-14 10:16 UTC (permalink / raw)
To: Pavel Machek; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, Biju Das, cip-dev
commit 99256644c8c9523e27312f6318058481943281ab upstream.
Enable TCAN1046V-Q1 CAN Transceiver populated on RZ/G3E SMARC EVK by
modelling it as two instances of tcan1042.
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250320164121.193857-4-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
---
.../boot/dts/renesas/r9a09g047e57-smarc.dts | 22 ++++++++++++++++
.../boot/dts/renesas/renesas-smarc2.dtsi | 25 +++++++++++++++++++
2 files changed, 47 insertions(+)
diff --git a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
index 7e1daaabce8a9..1f5e61a73c35b 100644
--- a/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
+++ b/arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
@@ -8,6 +8,8 @@
/dts-v1/;
/* Switch selection settings */
+#define SW_GPIO8_CAN0_STB 0
+#define SW_GPIO9_CAN1_STB 0
#define SW_LCD_EN 0
#define SW_PDM_EN 0
#define SW_SD0_DEV_SEL 0
@@ -42,16 +44,36 @@ &canfd {
#if (!SW_PDM_EN)
channel1 {
status = "okay";
+#if (!SW_LCD_EN) && (SW_GPIO9_CAN1_STB)
+ phys = <&can_transceiver1>;
+#endif
};
#endif
#if (!SW_LCD_EN)
channel4 {
status = "okay";
+#if (SW_GPIO8_CAN0_STB)
+ phys = <&can_transceiver0>;
+#endif
};
#endif
};
+#if (!SW_LCD_EN) && (SW_GPIO8_CAN0_STB)
+&can_transceiver0 {
+ standby-gpios = <&pinctrl RZG3E_GPIO(5, 4) GPIO_ACTIVE_HIGH>;
+ status = "okay";
+};
+#endif
+
+#if (!SW_LCD_EN) && (SW_GPIO9_CAN1_STB)
+&can_transceiver1 {
+ standby-gpios = <&pinctrl RZG3E_GPIO(5, 5) GPIO_ACTIVE_HIGH>;
+ status = "okay";
+};
+#endif
+
&pinctrl {
canfd_pins: canfd {
can1_pins: can1 {
diff --git a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
index 1d3a844174b37..afdc1940e24ab 100644
--- a/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
+++ b/arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi
@@ -12,6 +12,17 @@
* SW_SDIO_M2E:
* 0 - SMARC SDIO signal is connected to uSD1
* 1 - SMARC SDIO signal is connected to M.2 Key E connector
+ *
+ * Please set the switch position SW_GPIO_CAN_PMOD on the carrier board and the
+ * corresponding macro SW_GPIO8_CAN0_STB/SW_GPIO8_CAN0_STB on the board DTS:
+ *
+ * SW_GPIO8_CAN0_STB:
+ * 0 - Connect to GPIO8 PMOD (default)
+ * 1 - Connect to CAN0 transceiver STB pin
+ *
+ * SW_GPIO9_CAN1_STB:
+ * 0 - Connect to GPIO9 PMOD (default)
+ * 1 - Connect to CAN1 transceiver STB pin
*/
/ {
@@ -27,6 +38,20 @@ aliases {
serial3 = &scif0;
mmc1 = &sdhi1;
};
+
+ can_transceiver0: can-phy0 {
+ compatible = "ti,tcan1042";
+ #phy-cells = <0>;
+ max-bitrate = <8000000>;
+ status = "disabled";
+ };
+
+ can_transceiver1: can-phy1 {
+ compatible = "ti,tcan1042";
+ #phy-cells = <0>;
+ max-bitrate = <8000000>;
+ status = "disabled";
+ };
};
&canfd {
--
2.43.0
^ permalink raw reply related [flat|nested] 41+ messages in thread
* Re: [PATCH 6.12.y-cip 12/36] clk: renesas: rzv2h: Support static dividers without RMW
2025-07-14 10:16 ` [PATCH 6.12.y-cip 12/36] clk: renesas: rzv2h: Support static dividers without RMW Biju Das
@ 2025-07-14 11:54 ` Pavel Machek
0 siblings, 0 replies; 41+ messages in thread
From: Pavel Machek @ 2025-07-14 11:54 UTC (permalink / raw)
To: Biju Das; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, cip-dev
[-- Attachment #1: Type: text/plain, Size: 463 bytes --]
Hi!
> * @width: width of the divider
> * @monbit: monitor bit in CPG_CLKSTATUS0 register
> + * @no_rmw: flag to indicate if the register is read-modify-write
> + * (1: no RMW, 0: RMW)
> */
For the record, I'm not pleased with flag doing what feels like double
negation, but...
Best regards,
Pavel
--
In cooperation with DENX Software Engineering GmbH, HRB 165235 Munich,
Office: Kirchenstr.5, D-82194 Groebenzell, Germany
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (35 preceding siblings ...)
2025-07-14 10:16 ` [PATCH 6.12.y-cip 36/36] arm64: dts: renesas: r9a09g047e57-smarc: Enable CAN Transceiver Biju Das
@ 2025-07-14 11:55 ` Pavel Machek
2025-07-15 2:24 ` nobuhiro1.iwamatsu
37 siblings, 0 replies; 41+ messages in thread
From: Pavel Machek @ 2025-07-14 11:55 UTC (permalink / raw)
To: Biju Das; +Cc: nobuhiro1.iwamatsu, Lad Prabhakar, cip-dev
[-- Attachment #1: Type: text/plain, Size: 477 bytes --]
Hi!
> This series adds support for the RZ/G3E CANFD driver into 6.12.y-cip.
> All the patches in the series are cherry-picked from mainline.
First, this series is a bit long (and 6.1 even more so).
Anyway patches look reasonable and I can apply them if they pass
testing and there are no other comments.
Best regards,
Pavel
--
In cooperation with DENX Software Engineering GmbH, HRB 165235 Munich,
Office: Kirchenstr.5, D-82194 Groebenzell, Germany
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
* RE: [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
` (36 preceding siblings ...)
2025-07-14 11:55 ` [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Pavel Machek
@ 2025-07-15 2:24 ` nobuhiro1.iwamatsu
2025-07-15 8:36 ` Pavel Machek
37 siblings, 1 reply; 41+ messages in thread
From: nobuhiro1.iwamatsu @ 2025-07-15 2:24 UTC (permalink / raw)
To: biju.das.jz, pavel; +Cc: prabhakar.mahadev-lad.rj, cip-dev
Hi all,
> -----Original Message-----
> From: Biju Das <biju.das.jz@bp.renesas.com>
> Sent: Monday, July 14, 2025 7:16 PM
> To: Pavel Machek <pavel@denx.de>
> Cc: iwamatsu nobuhiro(岩松 信洋 □DITC○CPT)
> <nobuhiro1.iwamatsu@toshiba.co.jp>; Lad Prabhakar
> <prabhakar.mahadev-lad.rj@bp.renesas.com>; Biju Das
> <biju.das.jz@bp.renesas.com>; cip-dev@lists.cip-project.org
> Subject: [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support
>
> This series adds support for the RZ/G3E CANFD driver into 6.12.y-cip.
> All the patches in the series are cherry-picked from mainline.
>
> Biju Das (25):
> clk: renesas: rzv2h: Adjust for CPG_BUS_m_MSTOP starting from m = 1
> clk: renesas: rzv2h: Fix a typo
> clk: renesas: rzv2h: Support static dividers without RMW
> dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema
> dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support
> can: rcar_canfd: Use of_get_available_child_by_name()
> can: rcar_canfd: Drop RCANFD_GAFLCFG_GETRNC macro
> can: rcar_canfd: Update RCANFD_GERFL_ERR macro
> can: rcar_canfd: Drop the mask operation in RCANFD_GAFLCFG_SETRNC
> macro
> can: rcar_canfd: Add rcar_canfd_setrnc()
> can: rcar_canfd: Update RCANFD_GAFLCFG macro
> can: rcar_canfd: Add rnc_field_width variable to struct
> rcar_canfd_hw_info
> can: rcar_canfd: Add max_aflpn variable to struct rcar_canfd_hw_info
> can: rcar_canfd: Add max_cftml variable to struct rcar_canfd_hw_info
> can: rcar_canfd: Add {nom,data}_bittiming variables to struct
> rcar_canfd_hw_info
> can: rcar_canfd: Add ch_interface_mode variable to struct
> rcar_canfd_hw_info
> can: rcar_canfd: Add shared_can_regs variable to struct
> rcar_canfd_hw_info
> can: rcar_canfd: Add struct rcanfd_regs variable to struct
> rcar_canfd_hw_info
> can: rcar_canfd: Add sh variable to struct rcar_canfd_hw_info
> can: rcar_canfd: Add external_clk variable to struct
> rcar_canfd_hw_info
> can: rcar_canfd: Enhance multi_channel_irqs handling
> can: rcar_canfd: Add RZ/G3E support
> arm64: dts: renesas: r9a09g047: Add CANFD node
> arm64: dts: renesas: r9a09g047e57-smarc: Enable CANFD
> arm64: dts: renesas: r9a09g047e57-smarc: Enable CAN Transceiver
>
> Lad Prabhakar (9):
> clk: renesas: rzv2h: Update error message
> clk: renesas: rzv2h: Remove unused `type` field from `struct pll_clk`
> clk: renesas: rzv2h: Add support for enabling PLLs
> clk: renesas: rzv2h: Rename PLL field macros for consistency
> clk: renesas: rzv2h: Sort compatible list based on SoC part number
> clk: renesas: rzv2h: Add support for static mux clocks
> clk: renesas: rzv2h: Add macro for defining static dividers
> clk: renesas: rzv2h: Use str_on_off() helper in
> rzv2h_mod_clock_endisable()
> clk: renesas: rzv2h: Use both CLK_ON and CLK_MON bits for clock state
> validation
>
> Tommaso Merciai (2):
> clk: renesas: rzv2h: Improve rzv2h_ddiv_set_rate()
> clk: renesas: rzv2h: Simplify rzv2h_cpg_assert()/rzv2h_cpg_deassert()
>
> .../bindings/net/can/renesas,rcar-canfd.yaml | 171 ++++++++---
> arch/arm64/boot/dts/renesas/r9a09g047.dtsi | 60 ++++
> .../boot/dts/renesas/r9a09g047e57-smarc.dts | 53 ++++
> .../boot/dts/renesas/renesas-smarc2.dtsi | 29 ++
> .../boot/dts/renesas/rzg3e-smarc-som.dtsi | 14 +-
> drivers/clk/renesas/rzv2h-cpg.c | 183 ++++++++----
> drivers/clk/renesas/rzv2h-cpg.h | 54 ++++
> drivers/net/can/rcar/rcar_canfd.c | 278
> +++++++++++++-----
> 8 files changed, 676 insertions(+), 166 deletions(-)
>
I reviewed this series, looks good to me.
I can apply, if there are no other comments and test was OK.
Test: https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/1926889907
Reviewed-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
Best regards,
Nobuhiro
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support
2025-07-15 2:24 ` nobuhiro1.iwamatsu
@ 2025-07-15 8:36 ` Pavel Machek
0 siblings, 0 replies; 41+ messages in thread
From: Pavel Machek @ 2025-07-15 8:36 UTC (permalink / raw)
To: nobuhiro1.iwamatsu; +Cc: biju.das.jz, prabhakar.mahadev-lad.rj, cip-dev
[-- Attachment #1: Type: text/plain, Size: 502 bytes --]
Hi!
> I reviewed this series, looks good to me.
> I can apply, if there are no other comments and test was OK.
> Test: https://gitlab.com/cip-project/cip-kernel/linux-cip/-/pipelines/1926889907
>
> Reviewed-by: Nobuhiro Iwamatsu <nobuhiro1.iwamatsu@toshiba.co.jp>
Thank you, I added "Reviewed-by:" tag and pushed the series.
Best regards,
Pavel
--
In cooperation with DENX Software Engineering GmbH, HRB 165235 Munich,
Office: Kirchenstr.5, D-82194 Groebenzell, Germany
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
end of thread, other threads:[~2025-07-15 8:36 UTC | newest]
Thread overview: 41+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-07-14 10:16 [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 01/36] clk: renesas: rzv2h: Adjust for CPG_BUS_m_MSTOP starting from m = 1 Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 02/36] clk: renesas: rzv2h: Update error message Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 03/36] clk: renesas: rzv2h: Remove unused `type` field from `struct pll_clk` Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 04/36] clk: renesas: rzv2h: Add support for enabling PLLs Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 05/36] clk: renesas: rzv2h: Rename PLL field macros for consistency Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 06/36] clk: renesas: rzv2h: Improve rzv2h_ddiv_set_rate() Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 07/36] clk: renesas: rzv2h: Simplify rzv2h_cpg_assert()/rzv2h_cpg_deassert() Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 08/36] clk: renesas: rzv2h: Sort compatible list based on SoC part number Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 09/36] clk: renesas: rzv2h: Fix a typo Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 10/36] clk: renesas: rzv2h: Add support for static mux clocks Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 11/36] clk: renesas: rzv2h: Add macro for defining static dividers Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 12/36] clk: renesas: rzv2h: Support static dividers without RMW Biju Das
2025-07-14 11:54 ` Pavel Machek
2025-07-14 10:16 ` [PATCH 6.12.y-cip 13/36] clk: renesas: rzv2h: Use str_on_off() helper in rzv2h_mod_clock_endisable() Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 14/36] clk: renesas: rzv2h: Use both CLK_ON and CLK_MON bits for clock state validation Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 15/36] dt-bindings: can: renesas,rcar-canfd: Simplify the conditional schema Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 16/36] dt-bindings: can: renesas,rcar-canfd: Document RZ/G3E support Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 17/36] can: rcar_canfd: Use of_get_available_child_by_name() Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 18/36] can: rcar_canfd: Drop RCANFD_GAFLCFG_GETRNC macro Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 19/36] can: rcar_canfd: Update RCANFD_GERFL_ERR macro Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 20/36] can: rcar_canfd: Drop the mask operation in RCANFD_GAFLCFG_SETRNC macro Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 21/36] can: rcar_canfd: Add rcar_canfd_setrnc() Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 22/36] can: rcar_canfd: Update RCANFD_GAFLCFG macro Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 23/36] can: rcar_canfd: Add rnc_field_width variable to struct rcar_canfd_hw_info Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 24/36] can: rcar_canfd: Add max_aflpn " Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 25/36] can: rcar_canfd: Add max_cftml " Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 26/36] can: rcar_canfd: Add {nom,data}_bittiming variables " Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 27/36] can: rcar_canfd: Add ch_interface_mode variable " Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 28/36] can: rcar_canfd: Add shared_can_regs " Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 29/36] can: rcar_canfd: Add struct rcanfd_regs " Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 30/36] can: rcar_canfd: Add sh " Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 31/36] can: rcar_canfd: Add external_clk " Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 32/36] can: rcar_canfd: Enhance multi_channel_irqs handling Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 33/36] can: rcar_canfd: Add RZ/G3E support Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 34/36] arm64: dts: renesas: r9a09g047: Add CANFD node Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 35/36] arm64: dts: renesas: r9a09g047e57-smarc: Enable CANFD Biju Das
2025-07-14 10:16 ` [PATCH 6.12.y-cip 36/36] arm64: dts: renesas: r9a09g047e57-smarc: Enable CAN Transceiver Biju Das
2025-07-14 11:55 ` [PATCH 6.12.y-cip 00/36] Add RZ/G3E CANFD support Pavel Machek
2025-07-15 2:24 ` nobuhiro1.iwamatsu
2025-07-15 8:36 ` Pavel Machek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).