From d976c66edfbcb26312ea8a841f4ffa191f53d769 Mon Sep 17 00:00:00 2001 From: Carlos Sanchez Date: Wed, 16 Apr 2025 10:24:04 +0200 Subject: [PATCH] net: use bps units for bitrate in SocketCAN interfaces. This makes units compatible with what Linux uses for SocketCAN bitrate and allows representing usual Single Wire Can (SAE J2411) usual bitrates of 33333 and 83333 bps. Signed-off-by: Carlos Sanchez --- arch/arm/src/imx9/imx9_flexcan.c | 8 ++++---- arch/arm/src/imxrt/imxrt_flexcan.c | 8 ++++---- arch/arm/src/kinetis/kinetis_flexcan.c | 8 ++++---- arch/arm/src/s32k1xx/s32k1xx_flexcan.c | 8 ++++---- arch/arm/src/s32k3xx/s32k3xx_flexcan.c | 8 ++++---- arch/arm/src/stm32h7/stm32_fdcan_sock.c | 8 ++++---- arch/arm64/src/imx9/imx9_flexcan.c | 8 ++++---- include/net/if.h | 4 ++-- 8 files changed, 30 insertions(+), 30 deletions(-) diff --git a/arch/arm/src/imx9/imx9_flexcan.c b/arch/arm/src/imx9/imx9_flexcan.c index 9c5146eadfa..5936b65d4ad 100644 --- a/arch/arm/src/imx9/imx9_flexcan.c +++ b/arch/arm/src/imx9/imx9_flexcan.c @@ -1549,11 +1549,11 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, { struct can_ioctl_data_s *req = (struct can_ioctl_data_s *)((uintptr_t)arg); - req->arbi_bitrate = priv->arbi_timing.bitrate / 1000; /* kbit/s */ + req->arbi_bitrate = priv->arbi_timing.bitrate; req->arbi_samplep = priv->arbi_timing.samplep; if (priv->canfd_capable) { - req->data_bitrate = priv->data_timing.bitrate / 1000; /* kbit/s */ + req->data_bitrate = priv->data_timing.bitrate; req->data_samplep = priv->data_timing.samplep; } else @@ -1572,7 +1572,7 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, (struct can_ioctl_data_s *)((uintptr_t)arg); struct flexcan_timeseg arbi_timing; - arbi_timing.bitrate = req->arbi_bitrate * 1000; + arbi_timing.bitrate = req->arbi_bitrate; arbi_timing.samplep = req->arbi_samplep; if (imx9_bitratetotimeseg(&arbi_timing, 10, 0)) @@ -1586,7 +1586,7 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, if (priv->canfd_capable) { - data_timing.bitrate = req->data_bitrate * 1000; + data_timing.bitrate = req->data_bitrate; data_timing.samplep = req->data_samplep; if (ret == OK && imx9_bitratetotimeseg(&data_timing, 10, 1)) diff --git a/arch/arm/src/imxrt/imxrt_flexcan.c b/arch/arm/src/imxrt/imxrt_flexcan.c index bd7a230dcad..530e58b63ef 100644 --- a/arch/arm/src/imxrt/imxrt_flexcan.c +++ b/arch/arm/src/imxrt/imxrt_flexcan.c @@ -1517,11 +1517,11 @@ static int imxrt_ioctl(struct net_driver_s *dev, int cmd, { struct can_ioctl_data_s *req = (struct can_ioctl_data_s *)((uintptr_t)arg); - req->arbi_bitrate = priv->arbi_timing.bitrate / 1000; /* kbit/s */ + req->arbi_bitrate = priv->arbi_timing.bitrate; req->arbi_samplep = priv->arbi_timing.samplep; if (priv->canfd_capable) { - req->data_bitrate = priv->data_timing.bitrate / 1000; /* kbit/s */ + req->data_bitrate = priv->data_timing.bitrate; req->data_samplep = priv->data_timing.samplep; } else @@ -1540,7 +1540,7 @@ static int imxrt_ioctl(struct net_driver_s *dev, int cmd, (struct can_ioctl_data_s *)((uintptr_t)arg); struct flexcan_timeseg arbi_timing; - arbi_timing.bitrate = req->arbi_bitrate * 1000; + arbi_timing.bitrate = req->arbi_bitrate; arbi_timing.samplep = req->arbi_samplep; if (imxrt_bitratetotimeseg(&arbi_timing, 10, 0)) @@ -1554,7 +1554,7 @@ static int imxrt_ioctl(struct net_driver_s *dev, int cmd, if (priv->canfd_capable) { - data_timing.bitrate = req->data_bitrate * 1000; + data_timing.bitrate = req->data_bitrate; data_timing.samplep = req->data_samplep; if (ret == OK && imxrt_bitratetotimeseg(&data_timing, 10, 1)) diff --git a/arch/arm/src/kinetis/kinetis_flexcan.c b/arch/arm/src/kinetis/kinetis_flexcan.c index a1a824b217e..ccc3d98b591 100644 --- a/arch/arm/src/kinetis/kinetis_flexcan.c +++ b/arch/arm/src/kinetis/kinetis_flexcan.c @@ -1485,10 +1485,10 @@ static int kinetis_ioctl(struct net_driver_s *dev, int cmd, { struct can_ioctl_data_s *req = (struct can_ioctl_data_s *)((uintptr_t)arg); - req->arbi_bitrate = priv->arbi_timing.bitrate / 1000; /* kbit/s */ + req->arbi_bitrate = priv->arbi_timing.bitrate; req->arbi_samplep = priv->arbi_timing.samplep; #ifdef CONFIG_NET_CAN_CANFD - req->data_bitrate = priv->data_timing.bitrate / 1000; /* kbit/s */ + req->data_bitrate = priv->data_timing.bitrate; req->data_samplep = priv->data_timing.samplep; #else req->data_bitrate = 0; @@ -1504,7 +1504,7 @@ static int kinetis_ioctl(struct net_driver_s *dev, int cmd, (struct can_ioctl_data_s *)((uintptr_t)arg); struct flexcan_timeseg arbi_timing; - arbi_timing.bitrate = req->arbi_bitrate * 1000; + arbi_timing.bitrate = req->arbi_bitrate; arbi_timing.samplep = req->arbi_samplep; if (kinetis_bitratetotimeseg(&arbi_timing, 10, 0)) @@ -1518,7 +1518,7 @@ static int kinetis_ioctl(struct net_driver_s *dev, int cmd, #ifdef CONFIG_NET_CAN_CANFD struct flexcan_timeseg data_timing; - data_timing.bitrate = req->data_bitrate * 1000; + data_timing.bitrate = req->data_bitrate; data_timing.samplep = req->data_samplep; if (ret == OK && kinetis_bitratetotimeseg(&data_timing, 10, 1)) diff --git a/arch/arm/src/s32k1xx/s32k1xx_flexcan.c b/arch/arm/src/s32k1xx/s32k1xx_flexcan.c index aa998eca3bd..c9439f4bb46 100644 --- a/arch/arm/src/s32k1xx/s32k1xx_flexcan.c +++ b/arch/arm/src/s32k1xx/s32k1xx_flexcan.c @@ -1468,10 +1468,10 @@ static int s32k1xx_ioctl(struct net_driver_s *dev, int cmd, { struct can_ioctl_data_s *req = (struct can_ioctl_data_s *)((uintptr_t)arg); - req->arbi_bitrate = priv->arbi_timing.bitrate / 1000; /* kbit/s */ + req->arbi_bitrate = priv->arbi_timing.bitrate; req->arbi_samplep = priv->arbi_timing.samplep; #ifdef CONFIG_NET_CAN_CANFD - req->data_bitrate = priv->data_timing.bitrate / 1000; /* kbit/s */ + req->data_bitrate = priv->data_timing.bitrate; req->data_samplep = priv->data_timing.samplep; #else req->data_bitrate = 0; @@ -1487,7 +1487,7 @@ static int s32k1xx_ioctl(struct net_driver_s *dev, int cmd, (struct can_ioctl_data_s *)((uintptr_t)arg); struct flexcan_timeseg arbi_timing; - arbi_timing.bitrate = req->arbi_bitrate * 1000; + arbi_timing.bitrate = req->arbi_bitrate; arbi_timing.samplep = req->arbi_samplep; if (s32k1xx_bitratetotimeseg(&arbi_timing, 10, 0)) @@ -1501,7 +1501,7 @@ static int s32k1xx_ioctl(struct net_driver_s *dev, int cmd, #ifdef CONFIG_NET_CAN_CANFD struct flexcan_timeseg data_timing; - data_timing.bitrate = req->data_bitrate * 1000; + data_timing.bitrate = req->data_bitrate; data_timing.samplep = req->data_samplep; if (ret == OK && s32k1xx_bitratetotimeseg(&data_timing, 10, 1)) diff --git a/arch/arm/src/s32k3xx/s32k3xx_flexcan.c b/arch/arm/src/s32k3xx/s32k3xx_flexcan.c index a5472a1339d..49a978ad2a7 100644 --- a/arch/arm/src/s32k3xx/s32k3xx_flexcan.c +++ b/arch/arm/src/s32k3xx/s32k3xx_flexcan.c @@ -1657,10 +1657,10 @@ static int s32k3xx_ioctl(struct net_driver_s *dev, int cmd, { struct can_ioctl_data_s *req = (struct can_ioctl_data_s *)((uintptr_t)arg); - req->arbi_bitrate = priv->arbi_timing.bitrate / 1000; /* kbit/s */ + req->arbi_bitrate = priv->arbi_timing.bitrate; req->arbi_samplep = priv->arbi_timing.samplep; #ifdef CONFIG_NET_CAN_CANFD - req->data_bitrate = priv->data_timing.bitrate / 1000; /* kbit/s */ + req->data_bitrate = priv->data_timing.bitrate; req->data_samplep = priv->data_timing.samplep; #else req->data_bitrate = 0; @@ -1676,7 +1676,7 @@ static int s32k3xx_ioctl(struct net_driver_s *dev, int cmd, (struct can_ioctl_data_s *)((uintptr_t)arg); struct flexcan_timeseg arbi_timing; - arbi_timing.bitrate = req->arbi_bitrate * 1000; + arbi_timing.bitrate = req->arbi_bitrate; arbi_timing.samplep = req->arbi_samplep; if (s32k3xx_bitratetotimeseg(&arbi_timing, 10, 0, @@ -1691,7 +1691,7 @@ static int s32k3xx_ioctl(struct net_driver_s *dev, int cmd, #ifdef CONFIG_NET_CAN_CANFD struct flexcan_timeseg data_timing; - data_timing.bitrate = req->data_bitrate * 1000; + data_timing.bitrate = req->data_bitrate; data_timing.samplep = req->data_samplep; if (ret == OK && s32k3xx_bitratetotimeseg(&data_timing, 10, 1, diff --git a/arch/arm/src/stm32h7/stm32_fdcan_sock.c b/arch/arm/src/stm32h7/stm32_fdcan_sock.c index 268fa18dfbe..f5455829da4 100644 --- a/arch/arm/src/stm32h7/stm32_fdcan_sock.c +++ b/arch/arm/src/stm32h7/stm32_fdcan_sock.c @@ -1951,9 +1951,9 @@ static int fdcan_netdev_ioctl(struct net_driver_s *dev, int cmd, { struct can_ioctl_data_s *req = (struct can_ioctl_data_s *)((uintptr_t)arg); - req->arbi_bitrate = priv->arbi_timing.bitrate / 1000; /* kbit/s */ + req->arbi_bitrate = priv->arbi_timing.bitrate; #ifdef CONFIG_NET_CAN_CANFD - req->data_bitrate = priv->data_timing.bitrate / 1000; /* kbit/s */ + req->data_bitrate = priv->data_timing.bitrate; #else req->data_bitrate = 0; #endif @@ -1968,9 +1968,9 @@ static int fdcan_netdev_ioctl(struct net_driver_s *dev, int cmd, /* Apply the new timings (interface is guaranteed to be down) */ - priv->arbi_timing.bitrate = req->arbi_bitrate * 1000; + priv->arbi_timing.bitrate = req->arbi_bitrate; #ifdef CONFIG_NET_CAN_CANFD - priv->data_timing.bitrate = req->data_bitrate * 1000; + priv->data_timing.bitrate = req->data_bitrate; #endif ret = OK; } diff --git a/arch/arm64/src/imx9/imx9_flexcan.c b/arch/arm64/src/imx9/imx9_flexcan.c index 7f22b699b68..4d603a005a3 100644 --- a/arch/arm64/src/imx9/imx9_flexcan.c +++ b/arch/arm64/src/imx9/imx9_flexcan.c @@ -1597,11 +1597,11 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, struct imx9_driver_s *priv = (struct imx9_driver_s *)dev; struct can_ioctl_data_s *req = (struct can_ioctl_data_s *)((uintptr_t)arg); - req->arbi_bitrate = priv->arbi_timing.bitrate / 1000; /* kbit/s */ + req->arbi_bitrate = priv->arbi_timing.bitrate; req->arbi_samplep = priv->arbi_timing.samplep; if (priv->canfd_capable) { - req->data_bitrate = priv->data_timing.bitrate / 1000; /* kbit/s */ + req->data_bitrate = priv->data_timing.bitrate; req->data_samplep = priv->data_timing.samplep; } else @@ -1622,12 +1622,12 @@ static int imx9_ioctl(struct net_driver_s *dev, int cmd, struct flexcan_timeseg arbi_timing; struct flexcan_timeseg data_timing; - arbi_timing.bitrate = req->arbi_bitrate * 1000; + arbi_timing.bitrate = req->arbi_bitrate; arbi_timing.samplep = req->arbi_samplep; ret = imx9_bitratetotimeseg(priv, &arbi_timing, false); if (ret == OK && priv->canfd_capable) { - data_timing.bitrate = req->data_bitrate * 1000; + data_timing.bitrate = req->data_bitrate; data_timing.samplep = req->data_samplep; ret = imx9_bitratetotimeseg(priv, &data_timing, true); } diff --git a/include/net/if.h b/include/net/if.h index 1992c08ed49..7afcc2d15a3 100644 --- a/include/net/if.h +++ b/include/net/if.h @@ -178,9 +178,9 @@ struct mii_ioctl_data_s struct can_ioctl_data_s { - uint16_t arbi_bitrate; /* Classic CAN / Arbitration phase bitrate kbit/s */ + uint32_t arbi_bitrate; /* Classic CAN / Arbitration phase bitrate bit/s */ uint16_t arbi_samplep; /* Classic CAN / Arbitration phase input % */ - uint16_t data_bitrate; /* Data phase bitrate kbit/s */ + uint32_t data_bitrate; /* Data phase bitrate bit/s */ uint16_t data_samplep; /* Data phase sample point % */ };