On 23.04.2023 19:25:28, Dario Binacchi wrote: > Add support for bxCAN controller in single peripheral configuration: > - primary bxCAN > - dedicated Memory Access Controller unit > - 512-byte SRAM memory > - 14 fiter banks > > Signed-off-by: Dario Binacchi <dario.binacchi@xxxxxxxxxxxxxxxxxxxx> > > --- > > drivers/net/can/bxcan.c | 20 +++++++++++++++++--- > 1 file changed, 17 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/can/bxcan.c b/drivers/net/can/bxcan.c > index e26ccd41e3cb..9bcbbb85da6e 100644 > --- a/drivers/net/can/bxcan.c > +++ b/drivers/net/can/bxcan.c > @@ -155,6 +155,7 @@ struct bxcan_regs { > u32 reserved0[88]; /* 0x20 */ > struct bxcan_mb tx_mb[BXCAN_TX_MB_NUM]; /* 0x180 - tx mailbox */ > struct bxcan_mb rx_mb[BXCAN_RX_MB_NUM]; /* 0x1b0 - rx mailbox */ > + u32 reserved1[12]; /* 0x1d0 */ > }; > > struct bxcan_priv { > @@ -922,6 +923,12 @@ static int bxcan_get_berr_counter(const struct net_device *ndev, > return 0; > } > > +static const struct regmap_config bxcan_gcan_regmap_config = { > + .reg_bits = 32, > + .val_bits = 32, > + .reg_stride = 4, > +}; > + > static int bxcan_probe(struct platform_device *pdev) > { > struct device_node *np = pdev->dev.of_node; > @@ -942,11 +949,18 @@ static int bxcan_probe(struct platform_device *pdev) > > gcan = syscon_regmap_lookup_by_phandle(np, "st,gcan"); > if (IS_ERR(gcan)) { > - dev_err(dev, "failed to get shared memory base address\n"); > - return PTR_ERR(gcan); > + primary = true; > + gcan = devm_regmap_init_mmio(dev, > + regs + sizeof(struct bxcan_regs), > + &bxcan_gcan_regmap_config); > + if (IS_ERR(gcan)) { > + dev_err(dev, "failed to get filter base address\n"); > + return PTR_ERR(gcan); > + } This probably works. Can we do better, i.e. without this additional code? If you add a syscon node for the single instance CAN, too, you don't need a code change here, right? > + } else { > + primary = of_property_read_bool(np, "st,can-primary"); > } > > - primary = of_property_read_bool(np, "st,can-primary"); > clk = devm_clk_get(dev, NULL); > if (IS_ERR(clk)) { > dev_err(dev, "failed to get clock\n"); Marc -- Pengutronix e.K. | Marc Kleine-Budde | Embedded Linux | https://www.pengutronix.de | Vertretung Nürnberg | Phone: +49-5121-206917-129 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-9 |
Attachment:
signature.asc
Description: PGP signature