[PATCH v4 1/5] can: flexcan: add platform data header
Subsystems:
can network drivers , the rest
STALE1902d
17 messages,
4 authors,
2021-07-02 · open the first message on its own page
Add platform data header for flexcan.
Signed-off-by: Angelo Dureghello <redacted>
---
Changes for v2:
- move header file in more proper location
- remove irq defines
- change variable types to match driver types
Changes for v3:
- rename to more generic flexcan.h
- reorder struct fields to avoid paddings
- remove unused big_endian
Changes for v4:
- rename structure to flexcan_platform_data
---
include/linux/can/platform/flexcan.h | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
create mode 100644 include/linux/can/platform/flexcan.h
diff --git a/include/linux/can/platform/flexcan.h b/include/linux/can/platform/flexcan.h
new file mode 100644
index 000000000000..533dbe39c659
--- /dev/null
+++ b/include/linux/can/platform/flexcan.h @@ -0,0 +1,25 @@
+ /* SPDX-License-Identifier: GPL-2.0-only */
+ /*
+ * Copyright ( C ) 2021 Angelo Dureghello < angelo @ kernel - space . org >
+ *
+ * This program is free software ; you can redistribute it and / or
+ * modify it under the terms of the GNU General Public License
+ * version 2 as published by the Free Software Foundation .
+ *
+ * This program is distributed in the hope that it will be useful ,
+ * but WITHOUT ANY WARRANTY ; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
+ * GNU General Public License for more details .
+ */
+
+ #ifndef _PLAT_FLEXCAN_H
+ #define _PLAT_FLEXCAN_H
+
+ struct flexcan_platform_data {
+ u32 clock_frequency ;
+ u8 clk_src ;
+ };
+
+ #define FLEXCAN_MCF5411X_MB_CNT_MCF 16
+
+ #endif /* _PLAT_FLEXCAN_H */ --
2.31.1
Add configuration for flexcan pads.
Signed-off-by: Angelo Dureghello <redacted>
---
Changes for v2:
none
Changes for v3:
none
Changes for v4:
none
---
arch/m68k/coldfire/stmark2.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/m68k/coldfire/stmark2.c b/arch/m68k/coldfire/stmark2.c
index 8b5af9c83244..036a6ae5f599 100644
--- a/arch/m68k/coldfire/stmark2.c
+++ b/arch/m68k/coldfire/stmark2.c @@ -111,7 +111,9 @@ static int __init init_stmark2(void)
__raw_writeb ( 0x00 , MCFGPIO_PAR_BE );
__raw_writeb ( 0x00 , MCFGPIO_PAR_FBCTL );
__raw_writeb ( 0x00 , MCFGPIO_PAR_CS );
- __raw_writeb ( 0x00 , MCFGPIO_PAR_CANI2C );
+
+ /* CAN pads */
+ __raw_writeb ( 0x50 , MCFGPIO_PAR_CANI2C );
platform_add_devices ( stmark2_devices , ARRAY_SIZE ( stmark2_devices ));
@@ -121,4 +123,4 @@ static int __init init_stmark2(void)
return 0 ;
}
- late_initcall ( init_stmark2 );
+ device_initcall ( init_stmark2 ); --
2.31.1
Update flexcan to support coldfire architecture.
Any new platform should use OF, but coldfire architecture is
actually not supporting devicetrees.
Signed-off-by: Angelo Dureghello <redacted>
---
Changes for v2:
none
Changes for v3:
- change to just remove OF
Changes for v4:
- readjust options with coldfire and compile test additions
---
drivers/net/can/Kconfig | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
index e355d3974977..3d6f319f6c91 100644
--- a/drivers/net/can/Kconfig
+++ b/drivers/net/can/Kconfig @@ -97,7 +97,8 @@ config CAN_AT91
config CAN_FLEXCAN
tristate "Support for Freescale FLEXCAN based chips"
- depends on OF && HAS_IOMEM
+ depends on OF || COLDFIRE || COMPILE_TEST
+ depends on HAS_IOMEM
help
Say Y here if you want to support for Freescale FlexCAN.
--
2.31.1
Add flexcan support.
Signed-off-by: Angelo Dureghello <redacted>
---
Changes for v2:
- add irq resources for ERR and BOFF interrutps
Changes for v3:
- differentiate device name, for future variants addition
Changes for v4:
- change platform data structure name to flexcan_platform_data
---
arch/m68k/coldfire/device.c | 42 +++++++++++++++++++++++++++++++
arch/m68k/coldfire/m5441x.c | 8 +++---
arch/m68k/include/asm/m5441xsim.h | 19 ++++++++++++++
3 files changed, 65 insertions(+), 4 deletions(-)
diff --git a/arch/m68k/coldfire/device.c b/arch/m68k/coldfire/device.c
index 59f7dfe50a4d..5f7effbf7c60 100644
--- a/arch/m68k/coldfire/device.c
+++ b/arch/m68k/coldfire/device.c @@ -23,6 +23,7 @@
#include <linux/platform_data/edma.h>
#include <linux/platform_data/dma-mcf-edma.h>
#include <linux/platform_data/mmc-esdhc-mcf.h>
+ #include <linux/can/platform/flexcan.h>
/*
* All current ColdFire parts contain from 2 , 3 , 4 or 10 UARTS . @@ -581,6 +582,44 @@ static struct platform_device mcf_esdhc = {
};
#endif /* MCFSDHC_BASE */
+ #if IS_ENABLED(CONFIG_CAN)
+ static struct flexcan_platform_data mcf5441x_flexcan_info = {
+ . clk_src = 1 ,
+ . clock_frequency = 120000000 ,
+ };
+
+ static struct resource mcf5441x_flexcan0_resource [] = {
+ {
+ . start = MCFFLEXCAN_BASE0 ,
+ . end = MCFFLEXCAN_BASE0 + MCFFLEXCAN_SIZE ,
+ . flags = IORESOURCE_MEM ,
+ },
+ {
+ . start = MCF_IRQ_IFL0 ,
+ . end = MCF_IRQ_IFL0 ,
+ . flags = IORESOURCE_IRQ ,
+ },
+ {
+ . start = MCF_IRQ_BOFF0 ,
+ . end = MCF_IRQ_BOFF0 ,
+ . flags = IORESOURCE_IRQ ,
+ },
+ {
+ . start = MCF_IRQ_ERR0 ,
+ . end = MCF_IRQ_ERR0 ,
+ . flags = IORESOURCE_IRQ ,
+ },
+ };
+
+ static struct platform_device mcf_flexcan0 = {
+ . name = "flexcan-mcf5441x" ,
+ . id = 0 ,
+ . num_resources = ARRAY_SIZE ( mcf5441x_flexcan0_resource ),
+ . resource = mcf5441x_flexcan0_resource ,
+ . dev . platform_data = & mcf5441x_flexcan_info ,
+ };
+ #endif /* IS_ENABLED(CONFIG_CAN) */
+
static struct platform_device * mcf_devices [] __initdata = {
& mcf_uart ,
#if IS_ENABLED(CONFIG_FEC) @@ -616,6 +655,9 @@ static struct platform_device *mcf_devices[] __initdata = {
#ifdef MCFSDHC_BASE
& mcf_esdhc ,
#endif
+ #if IS_ENABLED(CONFIG_CAN)
+ & mcf_flexcan0 ,
+ #endif
};
/* diff --git a/arch/m68k/coldfire/m5441x.c b/arch/m68k/coldfire/m5441x.c
index 1e5259a652d1..18b152edb69c 100644
--- a/arch/m68k/coldfire/m5441x.c
+++ b/arch/m68k/coldfire/m5441x.c @@ -18,8 +18,8 @@
#include <asm/mcfclk.h>
DEFINE_CLK ( 0 , "flexbus" , 2 , MCF_CLK );
- DEFINE_CLK ( 0 , "mcfcan.0" , 8 , MCF_CLK );
- DEFINE_CLK ( 0 , "mcfcan.1" , 9 , MCF_CLK );
+ DEFINE_CLK ( 0 , "flexcan.0" , 8 , MCF_CLK );
+ DEFINE_CLK ( 0 , "flexcan.1" , 9 , MCF_CLK );
DEFINE_CLK ( 0 , "imx1-i2c.1" , 14 , MCF_CLK );
DEFINE_CLK ( 0 , "mcfdspi.1" , 15 , MCF_CLK );
DEFINE_CLK ( 0 , "edma" , 17 , MCF_CLK ); @@ -146,6 +146,8 @@ struct clk *mcf_clks[] = {
static struct clk * const enable_clks [] __initconst = {
/* make sure these clocks are enabled */
+ & __clk_0_8 , /* flexcan.0 */
+ & __clk_0_9 , /* flexcan.1 */
& __clk_0_15 , /* dspi.1 */
& __clk_0_17 , /* eDMA */
& __clk_0_18 , /* intc0 */ @@ -166,8 +168,6 @@ static struct clk * const enable_clks[] __initconst = {
& __clk_1_37 , /* gpio */
};
static struct clk * const disable_clks [] __initconst = {
- & __clk_0_8 , /* can.0 */
- & __clk_0_9 , /* can.1 */
& __clk_0_14 , /* i2c.1 */
& __clk_0_22 , /* i2c.0 */
& __clk_0_23 , /* dspi.0 */ diff --git a/arch/m68k/include/asm/m5441xsim.h b/arch/m68k/include/asm/m5441xsim.h
index e091e36d3464..f48cf63bd782 100644
--- a/arch/m68k/include/asm/m5441xsim.h
+++ b/arch/m68k/include/asm/m5441xsim.h @@ -73,6 +73,12 @@
#define MCFINT0_FECENTC1 55
/* on interrupt controller 1 */
+ #define MCFINT1_FLEXCAN0_IFL 0
+ #define MCFINT1_FLEXCAN0_BOFF 1
+ #define MCFINT1_FLEXCAN0_ERR 3
+ #define MCFINT1_FLEXCAN1_IFL 4
+ #define MCFINT1_FLEXCAN1_BOFF 5
+ #define MCFINT1_FLEXCAN1_ERR 7
#define MCFINT1_UART4 48
#define MCFINT1_UART5 49
#define MCFINT1_UART6 50 @@ -314,4 +320,17 @@
#define MCF_IRQ_SDHC (MCFINT2_VECBASE + MCFINT2_SDHC)
#define MCFSDHC_CLK (MCFSDHC_BASE + 0x2c)
+ /*
+ * Flexcan module
+ */
+ #define MCFFLEXCAN_BASE0 0xfc020000
+ #define MCFFLEXCAN_BASE1 0xfc024000
+ #define MCFFLEXCAN_SIZE 0x4000
+ #define MCF_IRQ_IFL0 (MCFINT1_VECBASE + MCFINT1_FLEXCAN0_IFL)
+ #define MCF_IRQ_BOFF0 (MCFINT1_VECBASE + MCFINT1_FLEXCAN0_BOFF)
+ #define MCF_IRQ_ERR0 (MCFINT1_VECBASE + MCFINT1_FLEXCAN0_ERR)
+ #define MCF_IRQ_IFL1 (MCFINT1_VECBASE + MCFINT1_FLEXCAN1_IFL)
+ #define MCF_IRQ_BOFF1 (MCFINT1_VECBASE + MCFINT1_FLEXCAN1_BOFF)
+ #define MCF_IRQ_ERR1 (MCFINT1_VECBASE + MCFINT1_FLEXCAN1_ERR)
+
#endif /* m5441xsim_h */ --
2.31.1
Add flexcan support for NXP ColdFire mcf5441x family.
This flexcan module is quite similar to imx6 flexcan module, but
with some exceptions:
- 3 separate interrupt sources, MB, BOFF and ERR,
- implements 16 mb only,
- m68k architecture is not supporting devicetrees, so a
platform data check/case has been added,
- ColdFire is m68k, so big-endian cpu, with a little-endian flexcan
module.
Signed-off-by: Angelo Dureghello <redacted>
---
Changes for v2:
- re-add platform data handling restarting from 2c0ac9208135
- re-add flexcan_id_table, as from 2c0ac9208135
- usinig irq resources for ERR and BOFF interrupts
- add missing free_irq() for interrupts
- minor syntax fixes
Changes for v3:
- change platform data include name
- add mcf5441x to hw feature flags
- add mb column to hw feature flags
- fix irq free order
- add proper error handlings
- remove unrelated changes
- split quirk in mb_n and irq_n quirks
Changes for v4:
- platform data structure name changed to flexcan_platform_data
- rename irq request error handlers
- move err and boff platform_get_irq
- fix wrong free_irq
---
drivers/net/can/flexcan.c | 119 +++++++++++++++++++++++++++++++-------
1 file changed, 99 insertions(+), 20 deletions(-)
diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c
index 57f3635ad8d7..891baf2c1e22 100644
--- a/drivers/net/can/flexcan.c
+++ b/drivers/net/can/flexcan.c @@ -28,6 +28,7 @@
#include <linux/of_device.h>
#include <linux/pinctrl/consumer.h>
#include <linux/platform_device.h>
+ #include <linux/can/platform/flexcan.h>
#include <linux/pm_runtime.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h> @@ -208,18 +209,19 @@
/* FLEXCAN hardware feature flags
*
* Below is some version info we got :
- * SOC Version IP - Version Glitch - [ TR ] WRN_INT IRQ Err Memory err RTR rece - FD Mode
+ * SOC Version IP - Version Glitch - [ TR ] WRN_INT IRQ Err Memory err RTR rece - FD Mode MB
* Filter ? connected ? Passive detection ption in MB Supported ?
- * MX25 FlexCAN2 03.00.00.00 no no no no no no
- * MX28 FlexCAN2 03.00.04.00 yes yes no no no no
- * MX35 FlexCAN2 03.00.00.00 no no no no no no
- * MX53 FlexCAN2 03.00.00.00 yes no no no no no
- * MX6s FlexCAN3 10.00.12.00 yes yes no no yes no
- * MX8QM FlexCAN3 03.00.23.00 yes yes no no yes yes
- * MX8MP FlexCAN3 03.00.17.01 yes yes no yes yes yes
- * VF610 FlexCAN3 ? no yes no yes yes ? no
- * LS1021A FlexCAN2 03.00.04.00 no yes no no yes no
- * LX2160A FlexCAN3 03.00.23.00 no yes no yes yes yes
+ * MX25 FlexCAN2 03.00.00.00 no no no no no no 64
+ * MX28 FlexCAN2 03.00.04.00 yes yes no no no no 64
+ * MX35 FlexCAN2 03.00.00.00 no no no no no no 64
+ * MX53 FlexCAN2 03.00.00.00 yes no no no no no 64
+ * MX6s FlexCAN3 10.00.12.00 yes yes no no yes no 64
+ * MX8QM FlexCAN3 03.00.23.00 yes yes no no yes yes 64
+ * MX8MP FlexCAN3 03.00.17.01 yes yes no yes yes yes 64
+ * VF610 FlexCAN3 ? no yes no yes yes ? no 64
+ * LS1021A FlexCAN2 03.00.04.00 no yes no no yes no 64
+ * LX2160A FlexCAN3 03.00.23.00 no yes no yes yes yes 64
+ * MCF5441X FlexCAN2 ? no yes no no yes no 16
*
* Some SOCs do not have the RX_WARN & TX_WARN interrupt line connected .
*/ @@ -246,6 +248,10 @@
#define FLEXCAN_QUIRK_SUPPORT_ECC BIT(10)
/* Setup stop mode with SCU firmware to support wakeup */
#define FLEXCAN_QUIRK_SETUP_STOP_MODE_SCFW BIT(11)
+ /* Setup 3 separate interrupts, main, boff and err */
+ #define FLEXCAN_QUIRK_NR_IRQ_3 BIT(12)
+ /* Setup 16 mailboxes */
+ #define FLEXCAN_QUIRK_NR_MB_16 BIT(13)
/* Structure of the message buffer */
struct flexcan_mb { @@ -363,6 +369,9 @@ struct flexcan_priv {
struct regulator * reg_xceiver ;
struct flexcan_stop_mode stm ;
+ int irq_boff ;
+ int irq_err ;
+
/* IPC handle when setup stop mode by System Controller firmware(scfw) */
struct imx_sc_ipc * sc_ipc_handle ;
@@ -371,6 +380,11 @@ struct flexcan_priv {
void ( * write )( u32 val , void __iomem * addr );
};
+ static const struct flexcan_devtype_data fsl_mcf5441x_devtype_data = {
+ . quirks = FLEXCAN_QUIRK_BROKEN_PERR_STATE |
+ FLEXCAN_QUIRK_NR_IRQ_3 | FLEXCAN_QUIRK_NR_MB_16 ,
+ };
+
static const struct flexcan_devtype_data fsl_p1010_devtype_data = {
. quirks = FLEXCAN_QUIRK_BROKEN_WERR_STATE |
FLEXCAN_QUIRK_BROKEN_PERR_STATE | @@ -637,13 +651,17 @@ static int flexcan_clks_enable(const struct flexcan_priv *priv)
{
int err ;
- err = clk_prepare_enable ( priv -> clk_ipg );
- if ( err )
- return err ;
+ if ( priv -> clk_ipg ) {
+ err = clk_prepare_enable ( priv -> clk_ipg );
+ if ( err )
+ return err ;
+ }
- err = clk_prepare_enable ( priv -> clk_per );
- if ( err )
- clk_disable_unprepare ( priv -> clk_ipg );
+ if ( priv -> clk_per ) {
+ err = clk_prepare_enable ( priv -> clk_per );
+ if ( err )
+ clk_disable_unprepare ( priv -> clk_ipg );
+ }
return err ;
} @@ -1401,8 +1419,12 @@ static int flexcan_rx_offload_setup(struct net_device *dev)
priv -> mb_size = sizeof ( struct flexcan_mb ) + CANFD_MAX_DLEN ;
else
priv -> mb_size = sizeof ( struct flexcan_mb ) + CAN_MAX_DLEN ;
- priv -> mb_count = ( sizeof ( priv -> regs -> mb [ 0 ]) / priv -> mb_size ) +
- ( sizeof ( priv -> regs -> mb [ 1 ]) / priv -> mb_size );
+
+ if ( priv -> devtype_data -> quirks & FLEXCAN_QUIRK_NR_MB_16 )
+ priv -> mb_count = FLEXCAN_MCF5411X_MB_CNT_MCF ;
+ else
+ priv -> mb_count = ( sizeof ( priv -> regs -> mb [ 0 ]) / priv -> mb_size ) +
+ ( sizeof ( priv -> regs -> mb [ 1 ]) / priv -> mb_size );
if ( priv -> devtype_data -> quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP )
priv -> tx_mb_reserved = @@ -1774,6 +1796,18 @@ static int flexcan_open(struct net_device *dev)
if ( err )
goto out_can_rx_offload_disable ;
+ if ( priv -> devtype_data -> quirks & FLEXCAN_QUIRK_NR_IRQ_3 ) {
+ err = request_irq ( priv -> irq_boff ,
+ flexcan_irq , IRQF_SHARED , dev -> name , dev );
+ if ( err )
+ goto out_free_irq ;
+
+ err = request_irq ( priv -> irq_err ,
+ flexcan_irq , IRQF_SHARED , dev -> name , dev );
+ if ( err )
+ goto out_free_irq_boff ;
+ }
+
flexcan_chip_interrupts_enable ( dev );
can_led_event ( dev , CAN_LED_EVENT_OPEN ); @@ -1782,6 +1816,10 @@ static int flexcan_open(struct net_device *dev)
return 0 ;
+ out_free_irq_boff :
+ free_irq ( priv -> irq_boff , dev );
+ out_free_irq :
+ free_irq ( dev -> irq , dev );
out_can_rx_offload_disable :
can_rx_offload_disable ( & priv -> offload );
flexcan_chip_stop ( dev ); @@ -1803,6 +1841,12 @@ static int flexcan_close(struct net_device *dev)
netif_stop_queue ( dev );
flexcan_chip_interrupts_disable ( dev );
+
+ if ( priv -> devtype_data -> quirks & FLEXCAN_QUIRK_NR_IRQ_3 ) {
+ free_irq ( priv -> irq_err , dev );
+ free_irq ( priv -> irq_boff , dev );
+ }
+
free_irq ( dev -> irq , dev );
can_rx_offload_disable ( & priv -> offload );
flexcan_chip_stop_disable_on_error ( dev ); @@ -2039,14 +2083,26 @@ static const struct of_device_id flexcan_of_match[] = {
};
MODULE_DEVICE_TABLE ( of , flexcan_of_match );
+ static const struct platform_device_id flexcan_id_table [] = {
+ {
+ . name = "flexcan-mcf5441x" ,
+ . driver_data = ( kernel_ulong_t ) & fsl_mcf5441x_devtype_data ,
+ }, {
+ /* sentinel */
+ },
+ };
+ MODULE_DEVICE_TABLE ( platform , flexcan_id_table );
+
static int flexcan_probe ( struct platform_device * pdev )
{
+ const struct of_device_id * of_id ;
const struct flexcan_devtype_data * devtype_data ;
struct net_device * dev ;
struct flexcan_priv * priv ;
struct regulator * reg_xceiver ;
struct clk * clk_ipg = NULL , * clk_per = NULL ;
struct flexcan_regs __iomem * regs ;
+ struct flexcan_platform_data * pdata ;
int err , irq ;
u8 clk_src = 1 ;
u32 clock_freq = 0 ; @@ -2064,6 +2120,12 @@ static int flexcan_probe(struct platform_device *pdev)
"clock-frequency" , & clock_freq );
of_property_read_u8 ( pdev -> dev . of_node ,
"fsl,clk-source" , & clk_src );
+ } else {
+ pdata = dev_get_platdata ( & pdev -> dev );
+ if ( pdata ) {
+ clock_freq = pdata -> clock_frequency ;
+ clk_src = pdata -> clk_src ;
+ }
}
if ( ! clock_freq ) { @@ -2089,7 +2151,14 @@ static int flexcan_probe(struct platform_device *pdev)
if ( IS_ERR ( regs ))
return PTR_ERR ( regs );
- devtype_data = of_device_get_match_data ( & pdev -> dev );
+ of_id = of_match_device ( flexcan_of_match , & pdev -> dev );
+ if ( of_id )
+ devtype_data = of_id -> data ;
+ else if ( platform_get_device_id ( pdev ) -> driver_data )
+ devtype_data = ( struct flexcan_devtype_data * )
+ platform_get_device_id ( pdev ) -> driver_data ;
+ else
+ return - ENODEV ;
if (( devtype_data -> quirks & FLEXCAN_QUIRK_SUPPORT_FD ) &&
! ( devtype_data -> quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP )) { @@ -2133,6 +2202,15 @@ static int flexcan_probe(struct platform_device *pdev)
priv -> devtype_data = devtype_data ;
priv -> reg_xceiver = reg_xceiver ;
+ if ( devtype_data -> quirks & FLEXCAN_QUIRK_NR_IRQ_3 ) {
+ priv -> irq_boff = platform_get_irq ( pdev , 1 );
+ if ( priv -> irq_boff <= 0 )
+ return - ENODEV ;
+ priv -> irq_err = platform_get_irq ( pdev , 2 );
+ if ( priv -> irq_err <= 0 )
+ return - ENODEV ;
+ }
+
if ( priv -> devtype_data -> quirks & FLEXCAN_QUIRK_SUPPORT_FD ) {
priv -> can . ctrlmode_supported |= CAN_CTRLMODE_FD |
CAN_CTRLMODE_FD_NON_ISO ; @@ -2322,6 +2400,7 @@ static struct platform_driver flexcan_driver = {
},
. probe = flexcan_probe ,
. remove = flexcan_remove ,
+ . id_table = flexcan_id_table ,
};
module_platform_driver ( flexcan_driver ); --
2.31.1
On 01.07.2021 01:00:16, Angelo Dureghello wrote:
[...] quoted hunk @@ -2089,7 +2151,14 @@ static int flexcan_probe(struct platform_device *pdev)
if (IS_ERR(regs))
return PTR_ERR(regs);
- devtype_data = of_device_get_match_data(&pdev->dev);
+ of_id = of_match_device(flexcan_of_match, &pdev->dev);
+ if (of_id)
+ devtype_data = of_id->data;
+ else if (platform_get_device_id(pdev)->driver_data)
+ devtype_data = (struct flexcan_devtype_data *)
+ platform_get_device_id(pdev)->driver_data;
+ else
+ return -ENODEV;
if ((devtype_data->quirks & FLEXCAN_QUIRK_SUPPORT_FD) &&
!(devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP)) { @@ -2133,6 +2202,15 @@ static int flexcan_probe(struct platform_device *pdev)
priv->devtype_data = devtype_data;
priv->reg_xceiver = reg_xceiver;
+ if (devtype_data->quirks & FLEXCAN_QUIRK_NR_IRQ_3) {
+ priv->irq_boff = platform_get_irq(pdev, 1);
+ if (priv->irq_boff <= 0)
+ return -ENODEV;I'm missing error handling here. + priv->irq_err = platform_get_irq(pdev, 2);
+ if (priv->irq_err <= 0)
+ return -ENODEV; I'm missing error handling here. quoted hunk + }
+
if (priv->devtype_data->quirks & FLEXCAN_QUIRK_SUPPORT_FD) {
priv->can.ctrlmode_supported |= CAN_CTRLMODE_FD |
CAN_CTRLMODE_FD_NON_ISO; @@ -2322,6 +2400,7 @@ static struct platform_driver flexcan_driver = {
},
.probe = flexcan_probe,
.remove = flexcan_remove,
+ .id_table = flexcan_id_table,
};
module_platform_driver(flexcan_driver);
Please add error handling then I think the patch can be merged.
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
On 01.07.2021 01:00:13, Angelo Dureghello wrote: Add configuration for flexcan pads.
Signed-off-by: Angelo Dureghello <redacted>
How do we upstream the m68k changes? Should we split this series into
m68k and CAN?
regards,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
On 1/7/21 4:53 pm, Marc Kleine-Budde wrote: On 01.07.2021 01:00:13, Angelo Dureghello wrote: quoted Add configuration for flexcan pads.
Signed-off-by: Angelo Dureghello <redacted>
How do we upstream the m68k changes? Should we split this series into
m68k and CAN?
I am happy to take the m68k specific changes (patches 2 and 3)
through the m68knommu git tree.
Regards
Greg
On 01.07.2021 17:41:04, Greg Ungerer wrote:
On 1/7/21 4:53 pm, Marc Kleine-Budde wrote: quoted On 01.07.2021 01:00:13, Angelo Dureghello wrote: quoted Add configuration for flexcan pads.
Signed-off-by: Angelo Dureghello <redacted>
How do we upstream the m68k changes? Should we split this series into
m68k and CAN?
I am happy to take the m68k specific changes (patches 2 and 3)
through the m68knommu git tree.
Make it so. \o/ I'll take the rest.
Thanks,
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
On 1/7/21 5:42 pm, Marc Kleine-Budde wrote: On 01.07.2021 17:41:04, Greg Ungerer wrote: quoted
On 1/7/21 4:53 pm, Marc Kleine-Budde wrote: quoted On 01.07.2021 01:00:13, Angelo Dureghello wrote: quoted Add configuration for flexcan pads.
Signed-off-by: Angelo Dureghello <redacted>
How do we upstream the m68k changes? Should we split this series into
m68k and CAN?
I am happy to take the m68k specific changes (patches 2 and 3)
through the m68knommu git tree.
Make it so. \o/ I'll take the rest.
As soon as the current merge window closes I will pull them in.
Regards
Greg
On 01.07.2021 01:00:15, Angelo Dureghello wrote: quoted hunk Update flexcan to support coldfire architecture.
Any new platform should use OF, but coldfire architecture is
actually not supporting devicetrees.
Signed-off-by: Angelo Dureghello <redacted>
---
Changes for v2:
none
Changes for v3:
- change to just remove OF
Changes for v4:
- readjust options with coldfire and compile test additions
---
drivers/net/can/Kconfig | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/Kconfig b/drivers/net/can/Kconfig
index e355d3974977..3d6f319f6c91 100644
--- a/drivers/net/can/Kconfig
+++ b/drivers/net/can/Kconfig @@ -97,7 +97,8 @@ config CAN_AT91
config CAN_FLEXCAN
tristate "Support for Freescale FLEXCAN based chips"
- depends on OF && HAS_IOMEM
+ depends on OF || COLDFIRE || COMPILE_TEST
This adds a trailing whitespace, fixed while applying.
+ depends on HAS_IOMEM
help
Say Y here if you want to support for Freescale FlexCAN.
--
2.31.1
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Hi Greg,
On Thu, Jul 1, 2021 at 10:02 AM Greg Ungerer [off-list ref] wrote: On 1/7/21 5:42 pm, Marc Kleine-Budde wrote: quoted On 01.07.2021 17:41:04, Greg Ungerer wrote: quoted
On 1/7/21 4:53 pm, Marc Kleine-Budde wrote: quoted On 01.07.2021 01:00:13, Angelo Dureghello wrote: quoted Add configuration for flexcan pads.
Signed-off-by: Angelo Dureghello <redacted>
How do we upstream the m68k changes? Should we split this series into
m68k and CAN?
I am happy to take the m68k specific changes (patches 2 and 3)
through the m68knommu git tree.
Make it so. \o/ I'll take the rest.
As soon as the current merge window closes I will pull them in.
Patch 3 depends on patch 1 through <linux/can/platform/flexcan.h>.
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
On 01.07.2021 01:00:12, Angelo Dureghello wrote: Add platform data header for flexcan.
BTW: the DKIM signatures on your mails are invalid:
| ✗ [PATCH v4 1/5] can: flexcan: add platform data header
| + Link: https://lore.kernel.org/r/20210630230016.4099050-1-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ✗ [PATCH v4 4/5] can: flexcan: update Kconfig to enable coldfire
| + Link: https://lore.kernel.org/r/20210630230016.4099050-4-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ✗ [PATCH v4 5/5] can: flexcan: add mcf5441x support
| + Link: https://lore.kernel.org/r/20210630230016.4099050-5-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ---
| Attestation is available, but did not succeed:
| ✗ Failed DKIM/kernel-space.org attestation
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
On 01.07.2021 11:10:21, Geert Uytterhoeven wrote: quoted quoted quoted I am happy to take the m68k specific changes (patches 2 and 3)
through the m68knommu git tree.
Make it so. \o/ I'll take the rest.
As soon as the current merge window closes I will pull them in.
Patch 3 depends on patch 1 through <linux/can/platform/flexcan.h>.
I'll take the other patches via net-next, so it might take a while until
they git mainline.
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
Hi Marc,
On 01/07/21 11:27 AM, Marc Kleine-Budde wrote: On 01.07.2021 01:00:12, Angelo Dureghello wrote: quoted Add platform data header for flexcan.
BTW: the DKIM signatures on your mails are invalid:
| ✗ [PATCH v4 1/5] can: flexcan: add platform data header
| + Link: https://lore.kernel.org/r/20210630230016.4099050-1-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ✗ [PATCH v4 4/5] can: flexcan: update Kconfig to enable coldfire
| + Link: https://lore.kernel.org/r/20210630230016.4099050-4-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ✗ [PATCH v4 5/5] can: flexcan: add mcf5441x support
| + Link: https://lore.kernel.org/r/20210630230016.4099050-5-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ---
| Attestation is available, but did not succeed:
| ✗ Failed DKIM/kernel-space.org attestation
thanks for catching this, fixed, now dkim tests are passing.
Marc
Regards,
angelo
Hi Marc, Geert, Greg,
thanks a lot, really happy.
Sending v5 in short.
On 01/07/21 11:37 AM, Marc Kleine-Budde wrote: On 01.07.2021 11:10:21, Geert Uytterhoeven wrote: quoted quoted quoted quoted I am happy to take the m68k specific changes (patches 2 and 3)
through the m68knommu git tree.
Make it so. \o/ I'll take the rest.
As soon as the current merge window closes I will pull them in.
Patch 3 depends on patch 1 through <linux/can/platform/flexcan.h>.
I'll take the other patches via net-next, so it might take a while until
they git mainline.
Marc
Regards,
angelo
On 02.07.2021 11:21:40, Angelo Dureghello wrote: Hi Marc,
On 01/07/21 11:27 AM, Marc Kleine-Budde wrote: quoted On 01.07.2021 01:00:12, Angelo Dureghello wrote: quoted Add platform data header for flexcan.
BTW: the DKIM signatures on your mails are invalid:
| ✗ [PATCH v4 1/5] can: flexcan: add platform data header
| + Link: https://lore.kernel.org/r/20210630230016.4099050-1-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ✗ [PATCH v4 4/5] can: flexcan: update Kconfig to enable coldfire
| + Link: https://lore.kernel.org/r/20210630230016.4099050-4-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ✗ [PATCH v4 5/5] can: flexcan: add mcf5441x support
| + Link: https://lore.kernel.org/r/20210630230016.4099050-5-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ---
| Attestation is available, but did not succeed:
| ✗ Failed DKIM/kernel-space.org attestation
thanks for catching this, fixed, now dkim tests are passing.
It still fails with the new series:
| ✗ [PATCH v5 1/5] can: flexcan: add platform data header
| + Link: https://lore.kernel.org/r/20210702094841.327679-1-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ✗ [PATCH v5 4/5] can: flexcan: update Kconfig to enable coldfire
| + Link: https://lore.kernel.org/r/20210702094841.327679-4-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ✗ [PATCH v5 5/5] can: flexcan: add mcf5441x support
| + Link: https://lore.kernel.org/r/20210702094841.327679-5-angelo@kernel-space.org
| + Signed-off-by: Marc Kleine-Budde [off-list ref]
| ---
| Attestation is available, but did not succeed:
| ✗ Failed DKIM/kernel-space.org attestation
Marc
--
Pengutronix e.K. | Marc Kleine-Budde |
Embedded Linux | https://www.pengutronix.de |
Vertretung West/Dortmund | Phone: +49-231-2826-924 |
Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |