Skip to content

Commit be53aa0

Browse files
bijudasmarckleinebudde
authored andcommitted
can: rcar_canfd: Add RZ/G3E support
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 <[email protected]> Reviewed-by: Vincent Mailhol <[email protected]> Signed-off-by: Biju Das <[email protected]> Link: https://patch.msgid.link/[email protected] Signed-off-by: Marc Kleine-Budde <[email protected]>
1 parent 0853b7e commit be53aa0

File tree

1 file changed

+23
-0
lines changed

1 file changed

+23
-0
lines changed

drivers/net/can/rcar/rcar_canfd.c

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -726,6 +726,22 @@ static const struct rcar_canfd_hw_info rzg2l_hw_info = {
726726
.external_clk = 1,
727727
};
728728

729+
static const struct rcar_canfd_hw_info r9a09g047_hw_info = {
730+
.nom_bittiming = &rcar_canfd_gen4_nom_bittiming_const,
731+
.data_bittiming = &rcar_canfd_gen4_data_bittiming_const,
732+
.regs = &rcar_gen4_regs,
733+
.sh = &rcar_gen4_shift_data,
734+
.rnc_field_width = 16,
735+
.max_aflpn = 63,
736+
.max_cftml = 31,
737+
.max_channels = 6,
738+
.postdiv = 1,
739+
.multi_channel_irqs = 1,
740+
.ch_interface_mode = 1,
741+
.shared_can_regs = 1,
742+
.external_clk = 0,
743+
};
744+
729745
/* Helper functions */
730746
static inline void rcar_canfd_update(u32 mask, u32 val, u32 __iomem *reg)
731747
{
@@ -1969,6 +1985,7 @@ static int rcar_canfd_probe(struct platform_device *pdev)
19691985
u32 rule_entry = 0;
19701986
bool fdmode = true; /* CAN FD only mode - default */
19711987
char name[9] = "channelX";
1988+
struct clk *clk_ram;
19721989
int i;
19731990

19741991
info = of_device_get_match_data(dev);
@@ -2058,6 +2075,11 @@ static int rcar_canfd_probe(struct platform_device *pdev)
20582075
gpriv->extclk = gpriv->info->external_clk;
20592076
}
20602077

2078+
clk_ram = devm_clk_get_optional_enabled(dev, "ram_clk");
2079+
if (IS_ERR(clk_ram))
2080+
return dev_err_probe(dev, PTR_ERR(clk_ram),
2081+
"cannot get enabled ram clock\n");
2082+
20612083
addr = devm_platform_ioremap_resource(pdev, 0);
20622084
if (IS_ERR(addr)) {
20632085
err = PTR_ERR(addr);
@@ -2220,6 +2242,7 @@ static SIMPLE_DEV_PM_OPS(rcar_canfd_pm_ops, rcar_canfd_suspend,
22202242

22212243
static const __maybe_unused struct of_device_id rcar_canfd_of_table[] = {
22222244
{ .compatible = "renesas,r8a779a0-canfd", .data = &rcar_gen4_hw_info },
2245+
{ .compatible = "renesas,r9a09g047-canfd", .data = &r9a09g047_hw_info },
22232246
{ .compatible = "renesas,rcar-gen3-canfd", .data = &rcar_gen3_hw_info },
22242247
{ .compatible = "renesas,rcar-gen4-canfd", .data = &rcar_gen4_hw_info },
22252248
{ .compatible = "renesas,rzg2l-canfd", .data = &rzg2l_hw_info },

0 commit comments

Comments
 (0)