* [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V5 @ 2011-08-06 4:05 Robin Holt 2011-08-06 4:05 ` [RFC 3/4] [flexcan] Add support for FLEXCAN_DEBUG Robin Holt [not found] ` <1312603504-30282-1-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> 0 siblings, 2 replies; 21+ messages in thread From: Robin Holt @ 2011-08-06 4:05 UTC (permalink / raw) To: Robin Holt, Marc Kleine-Budde, Wolfgang Grandegger, U Bhaskar-B22300 Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, netdev-u79uwXL29TY76Z2rM5mHXA Marc, Wolfgang or U Bhaskar, This patch set should have all your comments included. I did implement a very simple clock source in the p1010rdb.c file, which, unfortunately, your tree will not have so please do not apply the last patch in the series. That will need to go to the powerpc folks and follow the p1010rdb patch from freescale. Could you please apply the first three patches to a test branch, compile and test them on an arm based system? I would like to at least feel comfortable that I have not broken anything there. I have tested the full set on a p1010rdb with an external PSOC based can communicator. That PSOC code has a bunch of erroneous can comms it can generate, but I do not know how the developer of that code injects those errors. As a result, no error handling from the can input has been tested. I have tested both flexcan interfaces on the board and both work with these patches in addition to the other p1010rdb patches not included. Thanks, Robin Holt ^ permalink raw reply [flat|nested] 21+ messages in thread
* [RFC 3/4] [flexcan] Add support for FLEXCAN_DEBUG 2011-08-06 4:05 [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V5 Robin Holt @ 2011-08-06 4:05 ` Robin Holt [not found] ` <1312603504-30282-1-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> 1 sibling, 0 replies; 21+ messages in thread From: Robin Holt @ 2011-08-06 4:05 UTC (permalink / raw) To: Robin Holt, Marc Kleine-Budde, Wolfgang Grandegger, U Bhaskar-B22300 Cc: Robin Holt, socketcan-core, netdev Add a wrapper function for a register dump when a developer defines FLEXCAN_DEBUG. Signed-off-by: Robin Holt <holt@sgi.com> To: Marc Kleine-Budde <mkl@pengutronix.de> To: Wolfgang Grandegger <wg@grandegger.com> To: U Bhaskar-B22300 <B22300@freescale.com> Cc: socketcan-core@lists.berlios.de Cc: netdev@vger.kernel.org --- drivers/net/can/flexcan.c | 37 +++++++++++++++++++++++++++++++++++++ 1 files changed, 37 insertions(+), 0 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index c20d673..941b99e 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -220,6 +220,35 @@ static inline void flexcan_write(u32 val, void __iomem *addr) } #endif +#if defined(FLEXCAN_DEBUG) +void _flexcan_reg_dump(struct net_device *dev, const char *file, int line, + const char *func) +{ + const struct flexcan_priv *priv = netdev_priv(dev); + struct flexcan_regs __iomem *regs = priv->base; + + netdev_info("flexcan_reg_dump:%s:%d:%s()\n", file, line, func); + netdev_info("\t mcr 0x%08x ctrl 0x%08x timer 0x%08x rxg 0x%08x", + flexcan_read(®s->mcr), + flexcan_read(®s->ctrl), + flexcan_read(®s->timer), + flexcan_read(®s->rxgmask)); + netdev_info("\t rx14 0x%08x rx15 0x%08x ecr 0x%08x esr 0x%08x", + flexcan_read(®s->rx14mask), + flexcan_read(®s->rx15mask), + flexcan_read(®s->ecr), + flexcan_read(®s->esr)); + netdev_info("\timsk2 0x%08x imsk1 0x%08x iflg2 0x%08x iflg1 0x%08x", + flexcan_read(®s->imask2), + flexcan_read(®s->imask1), + flexcan_read(®s->iflag2), + flexcan_read(®s->iflag1)); +} +#define flexcan_reg_dump(_d) _flexcan_reg_dump(_d, __FILE__, __LINE__, __func__) +#else +#define flexcan_reg_dump(_d) +#endif + /* * Swtich transceiver on or off */ @@ -280,6 +309,8 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) u32 can_id; u32 ctrl = FLEXCAN_MB_CNT_CODE(0xc) | (cf->can_dlc << 16); + flexcan_reg_dump(dev); + if (can_dropped_invalid_skb(dev, skb)) return NETDEV_TX_OK; @@ -312,6 +343,8 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) /* tx_packets is incremented in flexcan_irq */ stats->tx_bytes += cf->can_dlc; + flexcan_reg_dump(dev); + return NETDEV_TX_OK; } @@ -580,6 +613,8 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) struct flexcan_regs __iomem *regs = priv->base; u32 reg_iflag1, reg_esr; + flexcan_reg_dump(dev); + reg_iflag1 = flexcan_read(®s->iflag1); reg_esr = flexcan_read(®s->esr); flexcan_write(FLEXCAN_ESR_ERR_INT, ®s->esr); /* ACK err IRQ */ @@ -620,6 +655,8 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) netif_wake_queue(dev); } + flexcan_reg_dump(dev); + return IRQ_HANDLED; } -- 1.7.2.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
[parent not found: <1312603504-30282-1-git-send-email-holt-sJ/iWh9BUns@public.gmane.org>]
* [RFC 1/4] [flexcan] Abstract off read/write for big/little endian. [not found] ` <1312603504-30282-1-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> @ 2011-08-06 4:05 ` Robin Holt 2011-08-06 4:05 ` [RFC 2/4] [flexcan] Add of_match to platform_device definition Robin Holt ` (2 subsequent siblings) 3 siblings, 0 replies; 21+ messages in thread From: Robin Holt @ 2011-08-06 4:05 UTC (permalink / raw) To: Robin Holt, Marc Kleine-Budde, Wolfgang Grandegger, U Bhaskar-B22300 Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, netdev-u79uwXL29TY76Z2rM5mHXA, Marc Kleine-Budde First step in converting the flexcan driver from supporting just arm to supporting both arm and powerpc architectures. Signed-off-by: Robin Holt <holt-sJ/iWh9BUns@public.gmane.org> Acked-by: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> To: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> To: U Bhaskar-B22300 <B22300-KZfg59tc24xl57MIdRCFDg@public.gmane.org> Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org --- drivers/net/can/flexcan.c | 140 ++++++++++++++++++++++++++------------------ 1 files changed, 83 insertions(+), 57 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 67d9fc0..74b1706 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -196,6 +196,31 @@ static struct can_bittiming_const flexcan_bittiming_const = { }; /* + * Abstract off the read/write for arm versus ppc. + */ +#if defined(__BIG_ENDIAN) +static inline u32 flexcan_read(void __iomem *addr) +{ + return in_be32(addr); +} + +static inline void flexcan_write(u32 val, void __iomem *addr) +{ + out_be32(addr, val); +} +#else +static inline u32 flexcan_read(void __iomem *addr) +{ + return readl(addr); +} + +static inline void flexcan_write(u32 val, void __iomem *addr) +{ + writel(val, addr); +} +#endif + +/* * Swtich transceiver on or off */ static void flexcan_transceiver_switch(const struct flexcan_priv *priv, int on) @@ -216,9 +241,9 @@ static inline void flexcan_chip_enable(struct flexcan_priv *priv) struct flexcan_regs __iomem *regs = priv->base; u32 reg; - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); reg &= ~FLEXCAN_MCR_MDIS; - writel(reg, ®s->mcr); + flexcan_write(reg, ®s->mcr); udelay(10); } @@ -228,9 +253,9 @@ static inline void flexcan_chip_disable(struct flexcan_priv *priv) struct flexcan_regs __iomem *regs = priv->base; u32 reg; - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); reg |= FLEXCAN_MCR_MDIS; - writel(reg, ®s->mcr); + flexcan_write(reg, ®s->mcr); } static int flexcan_get_berr_counter(const struct net_device *dev, @@ -238,7 +263,7 @@ static int flexcan_get_berr_counter(const struct net_device *dev, { const struct flexcan_priv *priv = netdev_priv(dev); struct flexcan_regs __iomem *regs = priv->base; - u32 reg = readl(®s->ecr); + u32 reg = flexcan_read(®s->ecr); bec->txerr = (reg >> 0) & 0xff; bec->rxerr = (reg >> 8) & 0xff; @@ -272,15 +297,15 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) if (cf->can_dlc > 0) { u32 data = be32_to_cpup((__be32 *)&cf->data[0]); - writel(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[0]); + flexcan_write(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[0]); } if (cf->can_dlc > 3) { u32 data = be32_to_cpup((__be32 *)&cf->data[4]); - writel(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[1]); + flexcan_write(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[1]); } - writel(can_id, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_id); - writel(ctrl, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); + flexcan_write(can_id, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_id); + flexcan_write(ctrl, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); kfree_skb(skb); @@ -468,8 +493,8 @@ static void flexcan_read_fifo(const struct net_device *dev, struct flexcan_mb __iomem *mb = ®s->cantxfg[0]; u32 reg_ctrl, reg_id; - reg_ctrl = readl(&mb->can_ctrl); - reg_id = readl(&mb->can_id); + reg_ctrl = flexcan_read(&mb->can_ctrl); + reg_id = flexcan_read(&mb->can_id); if (reg_ctrl & FLEXCAN_MB_CNT_IDE) cf->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG; else @@ -479,12 +504,12 @@ static void flexcan_read_fifo(const struct net_device *dev, cf->can_id |= CAN_RTR_FLAG; cf->can_dlc = get_can_dlc((reg_ctrl >> 16) & 0xf); - *(__be32 *)(cf->data + 0) = cpu_to_be32(readl(&mb->data[0])); - *(__be32 *)(cf->data + 4) = cpu_to_be32(readl(&mb->data[1])); + *(__be32 *)(cf->data + 0) = cpu_to_be32(flexcan_read(&mb->data[0])); + *(__be32 *)(cf->data + 4) = cpu_to_be32(flexcan_read(&mb->data[1])); /* mark as read */ - writel(FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, ®s->iflag1); - readl(®s->timer); + flexcan_write(FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, ®s->iflag1); + flexcan_read(®s->timer); } static int flexcan_read_frame(struct net_device *dev) @@ -520,17 +545,17 @@ static int flexcan_poll(struct napi_struct *napi, int quota) * The error bits are cleared on read, * use saved value from irq handler. */ - reg_esr = readl(®s->esr) | priv->reg_esr; + reg_esr = flexcan_read(®s->esr) | priv->reg_esr; /* handle state changes */ work_done += flexcan_poll_state(dev, reg_esr); /* handle RX-FIFO */ - reg_iflag1 = readl(®s->iflag1); + reg_iflag1 = flexcan_read(®s->iflag1); while (reg_iflag1 & FLEXCAN_IFLAG_RX_FIFO_AVAILABLE && work_done < quota) { work_done += flexcan_read_frame(dev); - reg_iflag1 = readl(®s->iflag1); + reg_iflag1 = flexcan_read(®s->iflag1); } /* report bus errors */ @@ -540,8 +565,8 @@ static int flexcan_poll(struct napi_struct *napi, int quota) if (work_done < quota) { napi_complete(napi); /* enable IRQs */ - writel(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); - writel(priv->reg_ctrl_default, ®s->ctrl); + flexcan_write(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); + flexcan_write(priv->reg_ctrl_default, ®s->ctrl); } return work_done; @@ -555,9 +580,9 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) struct flexcan_regs __iomem *regs = priv->base; u32 reg_iflag1, reg_esr; - reg_iflag1 = readl(®s->iflag1); - reg_esr = readl(®s->esr); - writel(FLEXCAN_ESR_ERR_INT, ®s->esr); /* ACK err IRQ */ + reg_iflag1 = flexcan_read(®s->iflag1); + reg_esr = flexcan_read(®s->esr); + flexcan_write(FLEXCAN_ESR_ERR_INT, ®s->esr); /* ACK err IRQ */ /* * schedule NAPI in case of: @@ -573,16 +598,16 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) * save them for later use. */ priv->reg_esr = reg_esr & FLEXCAN_ESR_ERR_BUS; - writel(FLEXCAN_IFLAG_DEFAULT & ~FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, - ®s->imask1); - writel(priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_ALL, + flexcan_write(FLEXCAN_IFLAG_DEFAULT & + ~FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, ®s->imask1); + flexcan_write(priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_ALL, ®s->ctrl); napi_schedule(&priv->napi); } /* FIFO overflow */ if (reg_iflag1 & FLEXCAN_IFLAG_RX_FIFO_OVERFLOW) { - writel(FLEXCAN_IFLAG_RX_FIFO_OVERFLOW, ®s->iflag1); + flexcan_write(FLEXCAN_IFLAG_RX_FIFO_OVERFLOW, ®s->iflag1); dev->stats.rx_over_errors++; dev->stats.rx_errors++; } @@ -591,7 +616,7 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) if (reg_iflag1 & (1 << FLEXCAN_TX_BUF_ID)) { /* tx_bytes is incremented in flexcan_start_xmit */ stats->tx_packets++; - writel((1 << FLEXCAN_TX_BUF_ID), ®s->iflag1); + flexcan_write((1 << FLEXCAN_TX_BUF_ID), ®s->iflag1); netif_wake_queue(dev); } @@ -605,7 +630,7 @@ static void flexcan_set_bittiming(struct net_device *dev) struct flexcan_regs __iomem *regs = priv->base; u32 reg; - reg = readl(®s->ctrl); + reg = flexcan_read(®s->ctrl); reg &= ~(FLEXCAN_CTRL_PRESDIV(0xff) | FLEXCAN_CTRL_RJW(0x3) | FLEXCAN_CTRL_PSEG1(0x7) | @@ -629,11 +654,11 @@ static void flexcan_set_bittiming(struct net_device *dev) reg |= FLEXCAN_CTRL_SMP; dev_info(dev->dev.parent, "writing ctrl=0x%08x\n", reg); - writel(reg, ®s->ctrl); + flexcan_write(reg, ®s->ctrl); /* print chip status */ dev_dbg(dev->dev.parent, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, - readl(®s->mcr), readl(®s->ctrl)); + flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); } /* @@ -654,10 +679,10 @@ static int flexcan_chip_start(struct net_device *dev) flexcan_chip_enable(priv); /* soft reset */ - writel(FLEXCAN_MCR_SOFTRST, ®s->mcr); + flexcan_write(FLEXCAN_MCR_SOFTRST, ®s->mcr); udelay(10); - reg_mcr = readl(®s->mcr); + reg_mcr = flexcan_read(®s->mcr); if (reg_mcr & FLEXCAN_MCR_SOFTRST) { dev_err(dev->dev.parent, "Failed to softreset can module (mcr=0x%08x)\n", @@ -679,12 +704,12 @@ static int flexcan_chip_start(struct net_device *dev) * choose format C * */ - reg_mcr = readl(®s->mcr); + reg_mcr = flexcan_read(®s->mcr); reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT | FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN | FLEXCAN_MCR_IDAM_C; dev_dbg(dev->dev.parent, "%s: writing mcr=0x%08x", __func__, reg_mcr); - writel(reg_mcr, ®s->mcr); + flexcan_write(reg_mcr, ®s->mcr); /* * CTRL @@ -702,7 +727,7 @@ static int flexcan_chip_start(struct net_device *dev) * (FLEXCAN_CTRL_ERR_MSK), too. Otherwise we don't get any * warning or bus passive interrupts. */ - reg_ctrl = readl(®s->ctrl); + reg_ctrl = flexcan_read(®s->ctrl); reg_ctrl &= ~FLEXCAN_CTRL_TSYN; reg_ctrl |= FLEXCAN_CTRL_BOFF_REC | FLEXCAN_CTRL_LBUF | FLEXCAN_CTRL_ERR_STATE | FLEXCAN_CTRL_ERR_MSK; @@ -710,38 +735,39 @@ static int flexcan_chip_start(struct net_device *dev) /* save for later use */ priv->reg_ctrl_default = reg_ctrl; dev_dbg(dev->dev.parent, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); - writel(reg_ctrl, ®s->ctrl); + flexcan_write(reg_ctrl, ®s->ctrl); for (i = 0; i < ARRAY_SIZE(regs->cantxfg); i++) { - writel(0, ®s->cantxfg[i].can_ctrl); - writel(0, ®s->cantxfg[i].can_id); - writel(0, ®s->cantxfg[i].data[0]); - writel(0, ®s->cantxfg[i].data[1]); + flexcan_write(0, ®s->cantxfg[i].can_ctrl); + flexcan_write(0, ®s->cantxfg[i].can_id); + flexcan_write(0, ®s->cantxfg[i].data[0]); + flexcan_write(0, ®s->cantxfg[i].data[1]); /* put MB into rx queue */ - writel(FLEXCAN_MB_CNT_CODE(0x4), ®s->cantxfg[i].can_ctrl); + flexcan_write(FLEXCAN_MB_CNT_CODE(0x4), + ®s->cantxfg[i].can_ctrl); } /* acceptance mask/acceptance code (accept everything) */ - writel(0x0, ®s->rxgmask); - writel(0x0, ®s->rx14mask); - writel(0x0, ®s->rx15mask); + flexcan_write(0x0, ®s->rxgmask); + flexcan_write(0x0, ®s->rx14mask); + flexcan_write(0x0, ®s->rx15mask); flexcan_transceiver_switch(priv, 1); /* synchronize with the can bus */ - reg_mcr = readl(®s->mcr); + reg_mcr = flexcan_read(®s->mcr); reg_mcr &= ~FLEXCAN_MCR_HALT; - writel(reg_mcr, ®s->mcr); + flexcan_write(reg_mcr, ®s->mcr); priv->can.state = CAN_STATE_ERROR_ACTIVE; /* enable FIFO interrupts */ - writel(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); + flexcan_write(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); /* print chip status */ dev_dbg(dev->dev.parent, "%s: reading mcr=0x%08x ctrl=0x%08x\n", - __func__, readl(®s->mcr), readl(®s->ctrl)); + __func__, flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); return 0; @@ -763,12 +789,12 @@ static void flexcan_chip_stop(struct net_device *dev) u32 reg; /* Disable all interrupts */ - writel(0, ®s->imask1); + flexcan_write(0, ®s->imask1); /* Disable + halt module */ - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); reg |= FLEXCAN_MCR_MDIS | FLEXCAN_MCR_HALT; - writel(reg, ®s->mcr); + flexcan_write(reg, ®s->mcr); flexcan_transceiver_switch(priv, 0); priv->can.state = CAN_STATE_STOPPED; @@ -860,24 +886,24 @@ static int __devinit register_flexcandev(struct net_device *dev) /* select "bus clock", chip must be disabled */ flexcan_chip_disable(priv); - reg = readl(®s->ctrl); + reg = flexcan_read(®s->ctrl); reg |= FLEXCAN_CTRL_CLK_SRC; - writel(reg, ®s->ctrl); + flexcan_write(reg, ®s->ctrl); flexcan_chip_enable(priv); /* set freeze, halt and activate FIFO, restrict register access */ - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); reg |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_HALT | FLEXCAN_MCR_FEN | FLEXCAN_MCR_SUPV; - writel(reg, ®s->mcr); + flexcan_write(reg, ®s->mcr); /* * Currently we only support newer versions of this core * featuring a RX FIFO. Older cores found on some Coldfire * derivates are not yet supported. */ - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); if (!(reg & FLEXCAN_MCR_FEN)) { dev_err(dev->dev.parent, "Could not enable RX FIFO, unsupported core\n"); -- 1.7.2.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [RFC 2/4] [flexcan] Add of_match to platform_device definition. [not found] ` <1312603504-30282-1-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> 2011-08-06 4:05 ` [RFC 1/4] [flexcan] Abstract off read/write for big/little endian Robin Holt @ 2011-08-06 4:05 ` Robin Holt 2011-08-06 4:05 ` [RFC 4/4] [powerpc] Implement a p1010rdb clock source Robin Holt 2011-08-06 11:06 ` [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V5 Robin Holt 3 siblings, 0 replies; 21+ messages in thread From: Robin Holt @ 2011-08-06 4:05 UTC (permalink / raw) To: Robin Holt, Marc Kleine-Budde, Wolfgang Grandegger, U Bhaskar-B22300 Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, netdev-u79uwXL29TY76Z2rM5mHXA The OpenFirmware devices are not matched without specifying an of_match array. Introduce that array as that is used for matching on the Freescale P1010 processor. Signed-off-by: Robin Holt <holt-sJ/iWh9BUns@public.gmane.org> To: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> To: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> To: U Bhaskar-B22300 <B22300-KZfg59tc24xl57MIdRCFDg@public.gmane.org> Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org --- drivers/net/can/flexcan.c | 16 +++++++++++++++- 1 files changed, 15 insertions(+), 1 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 74b1706..c20d673 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -1033,8 +1033,22 @@ static int __devexit flexcan_remove(struct platform_device *pdev) return 0; } +static struct of_device_id flexcan_of_match[] = { + { + .compatible = "fsl,flexcan-v1.0", + }, + { + .compatible = "fsl,flexcan", + }, + {}, +}; + static struct platform_driver flexcan_driver = { - .driver.name = DRV_NAME, + .driver = { + .name = DRV_NAME, + .owner = THIS_MODULE, + .of_match_table = flexcan_of_match, + }, .probe = flexcan_probe, .remove = __devexit_p(flexcan_remove), }; -- 1.7.2.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* [RFC 4/4] [powerpc] Implement a p1010rdb clock source. [not found] ` <1312603504-30282-1-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> 2011-08-06 4:05 ` [RFC 1/4] [flexcan] Abstract off read/write for big/little endian Robin Holt 2011-08-06 4:05 ` [RFC 2/4] [flexcan] Add of_match to platform_device definition Robin Holt @ 2011-08-06 4:05 ` Robin Holt [not found] ` <1312603504-30282-5-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> 2011-08-06 11:06 ` [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V5 Robin Holt 3 siblings, 1 reply; 21+ messages in thread From: Robin Holt @ 2011-08-06 4:05 UTC (permalink / raw) To: Robin Holt, Marc Kleine-Budde, Wolfgang Grandegger, U Bhaskar-B22300 Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, netdev-u79uwXL29TY76Z2rM5mHXA flexcan driver needs the clk_get, clk_get_rate, etc functions to work. This patch provides the minimum functionality. Signed-off-by: Robin Holt <holt-sJ/iWh9BUns@public.gmane.org> To: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> To: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> To: U Bhaskar-B22300 <B22300-KZfg59tc24xl57MIdRCFDg@public.gmane.org> Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org --- arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ 1 files changed, 78 insertions(+), 0 deletions(-) diff --git a/arch/powerpc/platforms/85xx/p1010rdb.c b/arch/powerpc/platforms/85xx/p1010rdb.c index 3540a88..8f78ddd 100644 --- a/arch/powerpc/platforms/85xx/p1010rdb.c +++ b/arch/powerpc/platforms/85xx/p1010rdb.c @@ -28,6 +28,7 @@ #include <asm/udbg.h> #include <asm/mpic.h> #include <asm/swiotlb.h> +#include <asm/clk_interface.h> #include <sysdev/fsl_soc.h> #include <sysdev/fsl_pci.h> @@ -164,6 +165,82 @@ static void __init p1010_rdb_setup_arch(void) printk(KERN_INFO "P1010 RDB board from Freescale Semiconductor\n"); } +/* + * p1010rdb needs to provide a clock source for the flexcan driver. + */ +struct clk { + unsigned long rate; +} p1010rdb_system_clk; + +static struct clk *p1010_rdb_clk_get(struct device *dev, const char *id) +{ + struct clk *clk; + u32 *of_property; + unsigned long clock_freq, clock_divider; + const char *dev_init_name; + + if (!dev) + return ERR_PTR(-ENOENT); + + /* + * The can devices are named ffe1c000.can0 and ffe1d000.can1 on + * the p1010rdb. Check for the "can" portion of that name before + * returning a clock source. + */ + dev_init_name = dev_name(dev); + if (strlen(dev_init_name) != 13) + return ERR_PTR(-ENOENT); + dev_init_name += 9; + if (strncmp(dev_init_name, "can", 3)) + return ERR_PTR(-ENOENT); + + of_property = (u32 *)of_get_property(dev->of_node, "clock_freq", NULL); + if (!of_property) + return ERR_PTR(-ENOENT); + clock_freq = *of_property; + + of_property = (u32 *)of_get_property(dev->of_node, + "fsl,flexcan-clock-divider", NULL); + if (!of_property) + return ERR_PTR(-ENOENT); + clock_divider = *of_property; + + clk = kmalloc(sizeof(struct clk), GFP_KERNEL); + if (!clk) + return ERR_PTR(-ENOMEM); + + clk->rate = DIV_ROUND_CLOSEST(clock_freq / clock_divider, 1000); + clk->rate *= 1000; + + return clk; +} + +static void p1010_rdb_clk_put(struct clk *clk) +{ + kfree(clk); +} + +static unsigned long p1010_rdb_clk_get_rate(struct clk *clk) +{ + return clk->rate; +} + +static struct clk_interface p1010_rdb_clk_functions = { + .clk_get = p1010_rdb_clk_get, + .clk_get_rate = p1010_rdb_clk_get_rate, + .clk_put = p1010_rdb_clk_put, +}; + +static void __init p1010_rdb_clk_init(void) +{ + clk_functions = p1010_rdb_clk_functions; +} + +static void __init p1010_rdb_init(void) +{ + p1010_rdb_clk_init(); +} + static struct of_device_id __initdata p1010rdb_ids[] = { { .type = "soc", }, { .compatible = "soc", }, @@ -195,6 +272,7 @@ define_machine(p1010_rdb) { .name = "P1010 RDB", .probe = p1010_rdb_probe, .setup_arch = p1010_rdb_setup_arch, + .init = p1010_rdb_init, .init_IRQ = p1010_rdb_pic_init, #ifdef CONFIG_PCI .pcibios_fixup_bus = fsl_pcibios_fixup_bus, -- 1.7.2.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
[parent not found: <1312603504-30282-5-git-send-email-holt-sJ/iWh9BUns@public.gmane.org>]
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. 2011-08-06 4:05 ` [RFC 4/4] [powerpc] Implement a p1010rdb clock source Robin Holt @ 2011-08-06 13:58 ` Marc Kleine-Budde 0 siblings, 0 replies; 21+ messages in thread From: Marc Kleine-Budde @ 2011-08-06 13:58 UTC (permalink / raw) To: Robin Holt Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, netdev-u79uwXL29TY76Z2rM5mHXA, U Bhaskar-B22300, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ, Wolfgang Grandegger [-- Attachment #1.1: Type: text/plain, Size: 4113 bytes --] On 08/06/2011 06:05 AM, Robin Holt wrote: > flexcan driver needs the clk_get, clk_get_rate, etc functions > to work. This patch provides the minimum functionality. This patch has to go via the powerpc git tree. Added linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org on CC. > Signed-off-by: Robin Holt <holt-sJ/iWh9BUns@public.gmane.org> > To: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> > To: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> > To: U Bhaskar-B22300 <B22300-KZfg59tc24xl57MIdRCFDg@public.gmane.org> > Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org > Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > --- > arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ > 1 files changed, 78 insertions(+), 0 deletions(-) > > diff --git a/arch/powerpc/platforms/85xx/p1010rdb.c b/arch/powerpc/platforms/85xx/p1010rdb.c > index 3540a88..8f78ddd 100644 > --- a/arch/powerpc/platforms/85xx/p1010rdb.c > +++ b/arch/powerpc/platforms/85xx/p1010rdb.c > @@ -28,6 +28,7 @@ > #include <asm/udbg.h> > #include <asm/mpic.h> > #include <asm/swiotlb.h> > +#include <asm/clk_interface.h> > > #include <sysdev/fsl_soc.h> > #include <sysdev/fsl_pci.h> > @@ -164,6 +165,82 @@ static void __init p1010_rdb_setup_arch(void) > printk(KERN_INFO "P1010 RDB board from Freescale Semiconductor\n"); > } > > +/* > + * p1010rdb needs to provide a clock source for the flexcan driver. > + */ > +struct clk { > + unsigned long rate; > +} p1010rdb_system_clk; > + > +static struct clk *p1010_rdb_clk_get(struct device *dev, const char *id) > +{ > + struct clk *clk; > + u32 *of_property; > + unsigned long clock_freq, clock_divider; > + const char *dev_init_name; > + > + if (!dev) > + return ERR_PTR(-ENOENT); > + > + /* > + * The can devices are named ffe1c000.can0 and ffe1d000.can1 on > + * the p1010rdb. Check for the "can" portion of that name before > + * returning a clock source. > + */ > + dev_init_name = dev_name(dev); > + if (strlen(dev_init_name) != 13) > + return ERR_PTR(-ENOENT); > + dev_init_name += 9; > + if (strncmp(dev_init_name, "can", 3)) > + return ERR_PTR(-ENOENT); > + > + of_property = (u32 *)of_get_property(dev->of_node, "clock_freq", NULL); > + if (!of_property) > + return ERR_PTR(-ENOENT); > + clock_freq = *of_property; > + > + of_property = (u32 *)of_get_property(dev->of_node, > + "fsl,flexcan-clock-divider", NULL); > + if (!of_property) > + return ERR_PTR(-ENOENT); > + clock_divider = *of_property; > + > + clk = kmalloc(sizeof(struct clk), GFP_KERNEL); > + if (!clk) > + return ERR_PTR(-ENOMEM); > + > + clk->rate = DIV_ROUND_CLOSEST(clock_freq / clock_divider, 1000); > + clk->rate *= 1000; > + > + return clk; > +} > + > +static void p1010_rdb_clk_put(struct clk *clk) > +{ > + kfree(clk); > +} > + > +static unsigned long p1010_rdb_clk_get_rate(struct clk *clk) > +{ > + return clk->rate; > +} > + > +static struct clk_interface p1010_rdb_clk_functions = { > + .clk_get = p1010_rdb_clk_get, > + .clk_get_rate = p1010_rdb_clk_get_rate, > + .clk_put = p1010_rdb_clk_put, > +}; > + > +static void __init p1010_rdb_clk_init(void) > +{ > + clk_functions = p1010_rdb_clk_functions; > +} > + > +static void __init p1010_rdb_init(void) > +{ > + p1010_rdb_clk_init(); > +} > + > static struct of_device_id __initdata p1010rdb_ids[] = { > { .type = "soc", }, > { .compatible = "soc", }, > @@ -195,6 +272,7 @@ define_machine(p1010_rdb) { > .name = "P1010 RDB", > .probe = p1010_rdb_probe, > .setup_arch = p1010_rdb_setup_arch, > + .init = p1010_rdb_init, > .init_IRQ = p1010_rdb_pic_init, > #ifdef CONFIG_PCI > .pcibios_fixup_bus = fsl_pcibios_fixup_bus, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 262 bytes --] [-- Attachment #2: Type: text/plain, Size: 188 bytes --] _______________________________________________ Socketcan-core mailing list Socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org https://lists.berlios.de/mailman/listinfo/socketcan-core ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. @ 2011-08-06 13:58 ` Marc Kleine-Budde 0 siblings, 0 replies; 21+ messages in thread From: Marc Kleine-Budde @ 2011-08-06 13:58 UTC (permalink / raw) To: Robin Holt; +Cc: socketcan-core, netdev, U Bhaskar-B22300, linuxppc-dev [-- Attachment #1: Type: text/plain, Size: 3946 bytes --] On 08/06/2011 06:05 AM, Robin Holt wrote: > flexcan driver needs the clk_get, clk_get_rate, etc functions > to work. This patch provides the minimum functionality. This patch has to go via the powerpc git tree. Added linuxppc-dev@lists.ozlabs.org on CC. > Signed-off-by: Robin Holt <holt@sgi.com> > To: Marc Kleine-Budde <mkl@pengutronix.de> > To: Wolfgang Grandegger <wg@grandegger.com> > To: U Bhaskar-B22300 <B22300@freescale.com> > Cc: socketcan-core@lists.berlios.de > Cc: netdev@vger.kernel.org > --- > arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ > 1 files changed, 78 insertions(+), 0 deletions(-) > > diff --git a/arch/powerpc/platforms/85xx/p1010rdb.c b/arch/powerpc/platforms/85xx/p1010rdb.c > index 3540a88..8f78ddd 100644 > --- a/arch/powerpc/platforms/85xx/p1010rdb.c > +++ b/arch/powerpc/platforms/85xx/p1010rdb.c > @@ -28,6 +28,7 @@ > #include <asm/udbg.h> > #include <asm/mpic.h> > #include <asm/swiotlb.h> > +#include <asm/clk_interface.h> > > #include <sysdev/fsl_soc.h> > #include <sysdev/fsl_pci.h> > @@ -164,6 +165,82 @@ static void __init p1010_rdb_setup_arch(void) > printk(KERN_INFO "P1010 RDB board from Freescale Semiconductor\n"); > } > > +/* > + * p1010rdb needs to provide a clock source for the flexcan driver. > + */ > +struct clk { > + unsigned long rate; > +} p1010rdb_system_clk; > + > +static struct clk *p1010_rdb_clk_get(struct device *dev, const char *id) > +{ > + struct clk *clk; > + u32 *of_property; > + unsigned long clock_freq, clock_divider; > + const char *dev_init_name; > + > + if (!dev) > + return ERR_PTR(-ENOENT); > + > + /* > + * The can devices are named ffe1c000.can0 and ffe1d000.can1 on > + * the p1010rdb. Check for the "can" portion of that name before > + * returning a clock source. > + */ > + dev_init_name = dev_name(dev); > + if (strlen(dev_init_name) != 13) > + return ERR_PTR(-ENOENT); > + dev_init_name += 9; > + if (strncmp(dev_init_name, "can", 3)) > + return ERR_PTR(-ENOENT); > + > + of_property = (u32 *)of_get_property(dev->of_node, "clock_freq", NULL); > + if (!of_property) > + return ERR_PTR(-ENOENT); > + clock_freq = *of_property; > + > + of_property = (u32 *)of_get_property(dev->of_node, > + "fsl,flexcan-clock-divider", NULL); > + if (!of_property) > + return ERR_PTR(-ENOENT); > + clock_divider = *of_property; > + > + clk = kmalloc(sizeof(struct clk), GFP_KERNEL); > + if (!clk) > + return ERR_PTR(-ENOMEM); > + > + clk->rate = DIV_ROUND_CLOSEST(clock_freq / clock_divider, 1000); > + clk->rate *= 1000; > + > + return clk; > +} > + > +static void p1010_rdb_clk_put(struct clk *clk) > +{ > + kfree(clk); > +} > + > +static unsigned long p1010_rdb_clk_get_rate(struct clk *clk) > +{ > + return clk->rate; > +} > + > +static struct clk_interface p1010_rdb_clk_functions = { > + .clk_get = p1010_rdb_clk_get, > + .clk_get_rate = p1010_rdb_clk_get_rate, > + .clk_put = p1010_rdb_clk_put, > +}; > + > +static void __init p1010_rdb_clk_init(void) > +{ > + clk_functions = p1010_rdb_clk_functions; > +} > + > +static void __init p1010_rdb_init(void) > +{ > + p1010_rdb_clk_init(); > +} > + > static struct of_device_id __initdata p1010rdb_ids[] = { > { .type = "soc", }, > { .compatible = "soc", }, > @@ -195,6 +272,7 @@ define_machine(p1010_rdb) { > .name = "P1010 RDB", > .probe = p1010_rdb_probe, > .setup_arch = p1010_rdb_setup_arch, > + .init = p1010_rdb_init, > .init_IRQ = p1010_rdb_pic_init, > #ifdef CONFIG_PCI > .pcibios_fixup_bus = fsl_pcibios_fixup_bus, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 262 bytes --] ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. 2011-08-06 13:58 ` Marc Kleine-Budde @ 2011-08-06 16:52 ` Kumar Gala -1 siblings, 0 replies; 21+ messages in thread From: Kumar Gala @ 2011-08-06 16:52 UTC (permalink / raw) To: Marc Kleine-Budde Cc: Robin Holt, Wolfgang Grandegger, U Bhaskar-B22300, socketcan-core, Netdev, linuxppc-dev@lists.ozlabs.org Development On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: > On 08/06/2011 06:05 AM, Robin Holt wrote: >> flexcan driver needs the clk_get, clk_get_rate, etc functions >> to work. This patch provides the minimum functionality. > > This patch has to go via the powerpc git tree. Added > linuxppc-dev@lists.ozlabs.org on CC. > >> Signed-off-by: Robin Holt <holt@sgi.com> >> To: Marc Kleine-Budde <mkl@pengutronix.de> >> To: Wolfgang Grandegger <wg@grandegger.com> >> To: U Bhaskar-B22300 <B22300@freescale.com> >> Cc: socketcan-core@lists.berlios.de >> Cc: netdev@vger.kernel.org >> --- >> arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ >> 1 files changed, 78 insertions(+), 0 deletions(-) NAK. This doesn't look right at all. We should be doing something based on the device tree node that isn't board specific. I believe Bhaskar has a version of flexcan support that he's been working on cleanup up for upstream. - k ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. @ 2011-08-06 16:52 ` Kumar Gala 0 siblings, 0 replies; 21+ messages in thread From: Kumar Gala @ 2011-08-06 16:52 UTC (permalink / raw) To: Marc Kleine-Budde Cc: Netdev, U Bhaskar-B22300, socketcan-core, Robin Holt, linuxppc-dev@lists.ozlabs.org Development On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: > On 08/06/2011 06:05 AM, Robin Holt wrote: >> flexcan driver needs the clk_get, clk_get_rate, etc functions >> to work. This patch provides the minimum functionality. >=20 > This patch has to go via the powerpc git tree. Added > linuxppc-dev@lists.ozlabs.org on CC. >=20 >> Signed-off-by: Robin Holt <holt@sgi.com> >> To: Marc Kleine-Budde <mkl@pengutronix.de> >> To: Wolfgang Grandegger <wg@grandegger.com> >> To: U Bhaskar-B22300 <B22300@freescale.com> >> Cc: socketcan-core@lists.berlios.de >> Cc: netdev@vger.kernel.org >> --- >> arch/powerpc/platforms/85xx/p1010rdb.c | 78 = ++++++++++++++++++++++++++++++++ >> 1 files changed, 78 insertions(+), 0 deletions(-) NAK. This doesn't look right at all. We should be doing something based on = the device tree node that isn't board specific. I believe Bhaskar has a version of flexcan support that he's been = working on cleanup up for upstream. - k= ^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <39414D86-7822-4B92-B005-351890A2A167-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org>]
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. 2011-08-06 16:52 ` Kumar Gala @ 2011-08-06 20:50 ` Robin Holt -1 siblings, 0 replies; 21+ messages in thread From: Robin Holt @ 2011-08-06 20:50 UTC (permalink / raw) To: Kumar Gala Cc: Netdev, U Bhaskar-B22300, socketcan-core-0fE9KPoRgkgATYTw5x5z8w, Marc Kleine-Budde, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org Development, Wolfgang Grandegger On Sat, Aug 06, 2011 at 11:52:45AM -0500, Kumar Gala wrote: > > On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: > > > On 08/06/2011 06:05 AM, Robin Holt wrote: > >> flexcan driver needs the clk_get, clk_get_rate, etc functions > >> to work. This patch provides the minimum functionality. > > > > This patch has to go via the powerpc git tree. Added > > linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org on CC. > > > >> Signed-off-by: Robin Holt <holt-sJ/iWh9BUns@public.gmane.org> > >> To: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> > >> To: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> > >> To: U Bhaskar-B22300 <B22300-KZfg59tc24xl57MIdRCFDg@public.gmane.org> > >> Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org > >> Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org > >> --- > >> arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ > >> 1 files changed, 78 insertions(+), 0 deletions(-) > > NAK. > > This doesn't look right at all. We should be doing something based on the device tree node that isn't board specific. > > I believe Bhaskar has a version of flexcan support that he's been working on cleanup up for upstream. That version may be similar to what is in the freescale BSP which puts the clock functions inside flexcan.c The powerpc arch already provides a means for individual boards to provide the clock functions. I am not posting this patch here for acceptance for powerpc and I am sure I will get feedback there when I post to their mailing list. I am posting it here only to show that the flexcan developers earlier assertion that this can and should be done in the arch tree is correct and will work for the p1010 assuming we can get changes into the arch/powerpc directory to implement these clk_* functions. Thanks, Robin ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. @ 2011-08-06 20:50 ` Robin Holt 0 siblings, 0 replies; 21+ messages in thread From: Robin Holt @ 2011-08-06 20:50 UTC (permalink / raw) To: Kumar Gala Cc: Netdev, U Bhaskar-B22300, socketcan-core, Robin Holt, linuxppc-dev@lists.ozlabs.org Development On Sat, Aug 06, 2011 at 11:52:45AM -0500, Kumar Gala wrote: > > On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: > > > On 08/06/2011 06:05 AM, Robin Holt wrote: > >> flexcan driver needs the clk_get, clk_get_rate, etc functions > >> to work. This patch provides the minimum functionality. > > > > This patch has to go via the powerpc git tree. Added > > linuxppc-dev@lists.ozlabs.org on CC. > > > >> Signed-off-by: Robin Holt <holt@sgi.com> > >> To: Marc Kleine-Budde <mkl@pengutronix.de> > >> To: Wolfgang Grandegger <wg@grandegger.com> > >> To: U Bhaskar-B22300 <B22300@freescale.com> > >> Cc: socketcan-core@lists.berlios.de > >> Cc: netdev@vger.kernel.org > >> --- > >> arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ > >> 1 files changed, 78 insertions(+), 0 deletions(-) > > NAK. > > This doesn't look right at all. We should be doing something based on the device tree node that isn't board specific. > > I believe Bhaskar has a version of flexcan support that he's been working on cleanup up for upstream. That version may be similar to what is in the freescale BSP which puts the clock functions inside flexcan.c The powerpc arch already provides a means for individual boards to provide the clock functions. I am not posting this patch here for acceptance for powerpc and I am sure I will get feedback there when I post to their mailing list. I am posting it here only to show that the flexcan developers earlier assertion that this can and should be done in the arch tree is correct and will work for the p1010 assuming we can get changes into the arch/powerpc directory to implement these clk_* functions. Thanks, Robin ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. 2011-08-06 20:50 ` Robin Holt @ 2011-08-06 20:59 ` Kumar Gala -1 siblings, 0 replies; 21+ messages in thread From: Kumar Gala @ 2011-08-06 20:59 UTC (permalink / raw) To: Robin Holt Cc: Netdev, U Bhaskar-B22300, socketcan-core, linuxppc-dev@lists.ozlabs.org Development On Aug 6, 2011, at 3:50 PM, Robin Holt wrote: > On Sat, Aug 06, 2011 at 11:52:45AM -0500, Kumar Gala wrote: >> >> On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: >> >>> On 08/06/2011 06:05 AM, Robin Holt wrote: >>>> flexcan driver needs the clk_get, clk_get_rate, etc functions >>>> to work. This patch provides the minimum functionality. >>> >>> This patch has to go via the powerpc git tree. Added >>> linuxppc-dev@lists.ozlabs.org on CC. >>> >>>> Signed-off-by: Robin Holt <holt@sgi.com> >>>> To: Marc Kleine-Budde <mkl@pengutronix.de> >>>> To: Wolfgang Grandegger <wg@grandegger.com> >>>> To: U Bhaskar-B22300 <B22300@freescale.com> >>>> Cc: socketcan-core@lists.berlios.de >>>> Cc: netdev@vger.kernel.org >>>> --- >>>> arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ >>>> 1 files changed, 78 insertions(+), 0 deletions(-) >> >> NAK. >> >> This doesn't look right at all. We should be doing something based on the device tree node that isn't board specific. >> >> I believe Bhaskar has a version of flexcan support that he's been working on cleanup up for upstream. > > That version may be similar to what is in the freescale BSP which puts > the clock functions inside flexcan.c > > The powerpc arch already provides a means for individual boards to provide > the clock functions. I am not posting this patch here for acceptance > for powerpc and I am sure I will get feedback there when I post to > their mailing list. I am posting it here only to show that the flexcan > developers earlier assertion that this can and should be done in the arch > tree is correct and will work for the p1010 assuming we can get changes > into the arch/powerpc directory to implement these clk_* functions. My point is that I don't think they should live in the arch code. The clk_* functions you want to implement are tied more the FlexCAN IP than anything arch specific. As such I believe they should be in the driver. For example when FSL has a P9999 with FlexCAN on it, we should NOT have to add any arch code to support it. - k ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. @ 2011-08-06 20:59 ` Kumar Gala 0 siblings, 0 replies; 21+ messages in thread From: Kumar Gala @ 2011-08-06 20:59 UTC (permalink / raw) To: Robin Holt Cc: Netdev, U Bhaskar-B22300, socketcan-core, linuxppc-dev@lists.ozlabs.org Development On Aug 6, 2011, at 3:50 PM, Robin Holt wrote: > On Sat, Aug 06, 2011 at 11:52:45AM -0500, Kumar Gala wrote: >>=20 >> On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: >>=20 >>> On 08/06/2011 06:05 AM, Robin Holt wrote: >>>> flexcan driver needs the clk_get, clk_get_rate, etc functions >>>> to work. This patch provides the minimum functionality. >>>=20 >>> This patch has to go via the powerpc git tree. Added >>> linuxppc-dev@lists.ozlabs.org on CC. >>>=20 >>>> Signed-off-by: Robin Holt <holt@sgi.com> >>>> To: Marc Kleine-Budde <mkl@pengutronix.de> >>>> To: Wolfgang Grandegger <wg@grandegger.com> >>>> To: U Bhaskar-B22300 <B22300@freescale.com> >>>> Cc: socketcan-core@lists.berlios.de >>>> Cc: netdev@vger.kernel.org >>>> --- >>>> arch/powerpc/platforms/85xx/p1010rdb.c | 78 = ++++++++++++++++++++++++++++++++ >>>> 1 files changed, 78 insertions(+), 0 deletions(-) >>=20 >> NAK. >>=20 >> This doesn't look right at all. We should be doing something based = on the device tree node that isn't board specific. >>=20 >> I believe Bhaskar has a version of flexcan support that he's been = working on cleanup up for upstream. >=20 > That version may be similar to what is in the freescale BSP which puts > the clock functions inside flexcan.c >=20 > The powerpc arch already provides a means for individual boards to = provide > the clock functions. I am not posting this patch here for acceptance > for powerpc and I am sure I will get feedback there when I post to > their mailing list. I am posting it here only to show that the = flexcan > developers earlier assertion that this can and should be done in the = arch > tree is correct and will work for the p1010 assuming we can get = changes > into the arch/powerpc directory to implement these clk_* functions. My point is that I don't think they should live in the arch code. The = clk_* functions you want to implement are tied more the FlexCAN IP than = anything arch specific. As such I believe they should be in the driver. For example when FSL has a P9999 with FlexCAN on it, we should NOT have = to add any arch code to support it. - k= ^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <3C4B6145-5C75-4A3C-B504-DA32E0D2EC8A-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org>]
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. 2011-08-06 20:59 ` Kumar Gala @ 2011-08-08 8:49 ` Wolfgang Grandegger -1 siblings, 0 replies; 21+ messages in thread From: Wolfgang Grandegger @ 2011-08-08 8:49 UTC (permalink / raw) To: Kumar Gala Cc: Netdev, U Bhaskar-B22300, socketcan-core-0fE9KPoRgkgATYTw5x5z8w, Marc Kleine-Budde, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org Development On 08/06/2011 10:59 PM, Kumar Gala wrote: > > On Aug 6, 2011, at 3:50 PM, Robin Holt wrote: > >> On Sat, Aug 06, 2011 at 11:52:45AM -0500, Kumar Gala wrote: >>> >>> On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: >>> >>>> On 08/06/2011 06:05 AM, Robin Holt wrote: >>>>> flexcan driver needs the clk_get, clk_get_rate, etc functions >>>>> to work. This patch provides the minimum functionality. >>>> >>>> This patch has to go via the powerpc git tree. Added >>>> linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org on CC. >>>> >>>>> Signed-off-by: Robin Holt <holt-sJ/iWh9BUns@public.gmane.org> >>>>> To: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> >>>>> To: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> >>>>> To: U Bhaskar-B22300 <B22300-KZfg59tc24xl57MIdRCFDg@public.gmane.org> >>>>> Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org >>>>> Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >>>>> --- >>>>> arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ >>>>> 1 files changed, 78 insertions(+), 0 deletions(-) >>> >>> NAK. >>> >>> This doesn't look right at all. We should be doing something based on the device tree node that isn't board specific. >>> >>> I believe Bhaskar has a version of flexcan support that he's been working on cleanup up for upstream. >> >> That version may be similar to what is in the freescale BSP which puts >> the clock functions inside flexcan.c >> >> The powerpc arch already provides a means for individual boards to provide >> the clock functions. I am not posting this patch here for acceptance >> for powerpc and I am sure I will get feedback there when I post to >> their mailing list. I am posting it here only to show that the flexcan >> developers earlier assertion that this can and should be done in the arch >> tree is correct and will work for the p1010 assuming we can get changes >> into the arch/powerpc directory to implement these clk_* functions. > > My point is that I don't think they should live in the arch code. The clk_* functions you want to implement are tied more the FlexCAN IP than anything arch specific. As such I believe they should be in the driver. > > For example when FSL has a P9999 with FlexCAN on it, we should NOT have to add any arch code to support it. The Flexcan is found on ARM and now also on PowerPC SOCs. My current understanding is that the ability to set the clock source and divider is only available on PowerPC SOCs and therefore it's clearly arch specific and should go to arch/powerpc/sysdev/fsl_soc.c if it's common for all PowerPC platforms. What do you think? Wolfgang. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. @ 2011-08-08 8:49 ` Wolfgang Grandegger 0 siblings, 0 replies; 21+ messages in thread From: Wolfgang Grandegger @ 2011-08-08 8:49 UTC (permalink / raw) To: Kumar Gala Cc: Netdev, U Bhaskar-B22300, socketcan-core, Robin Holt, linuxppc-dev@lists.ozlabs.org Development On 08/06/2011 10:59 PM, Kumar Gala wrote: > > On Aug 6, 2011, at 3:50 PM, Robin Holt wrote: > >> On Sat, Aug 06, 2011 at 11:52:45AM -0500, Kumar Gala wrote: >>> >>> On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: >>> >>>> On 08/06/2011 06:05 AM, Robin Holt wrote: >>>>> flexcan driver needs the clk_get, clk_get_rate, etc functions >>>>> to work. This patch provides the minimum functionality. >>>> >>>> This patch has to go via the powerpc git tree. Added >>>> linuxppc-dev@lists.ozlabs.org on CC. >>>> >>>>> Signed-off-by: Robin Holt <holt@sgi.com> >>>>> To: Marc Kleine-Budde <mkl@pengutronix.de> >>>>> To: Wolfgang Grandegger <wg@grandegger.com> >>>>> To: U Bhaskar-B22300 <B22300@freescale.com> >>>>> Cc: socketcan-core@lists.berlios.de >>>>> Cc: netdev@vger.kernel.org >>>>> --- >>>>> arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ >>>>> 1 files changed, 78 insertions(+), 0 deletions(-) >>> >>> NAK. >>> >>> This doesn't look right at all. We should be doing something based on the device tree node that isn't board specific. >>> >>> I believe Bhaskar has a version of flexcan support that he's been working on cleanup up for upstream. >> >> That version may be similar to what is in the freescale BSP which puts >> the clock functions inside flexcan.c >> >> The powerpc arch already provides a means for individual boards to provide >> the clock functions. I am not posting this patch here for acceptance >> for powerpc and I am sure I will get feedback there when I post to >> their mailing list. I am posting it here only to show that the flexcan >> developers earlier assertion that this can and should be done in the arch >> tree is correct and will work for the p1010 assuming we can get changes >> into the arch/powerpc directory to implement these clk_* functions. > > My point is that I don't think they should live in the arch code. The clk_* functions you want to implement are tied more the FlexCAN IP than anything arch specific. As such I believe they should be in the driver. > > For example when FSL has a P9999 with FlexCAN on it, we should NOT have to add any arch code to support it. The Flexcan is found on ARM and now also on PowerPC SOCs. My current understanding is that the ability to set the clock source and divider is only available on PowerPC SOCs and therefore it's clearly arch specific and should go to arch/powerpc/sysdev/fsl_soc.c if it's common for all PowerPC platforms. What do you think? Wolfgang. ^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <4E3FA301.4050005-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org>]
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. 2011-08-08 8:49 ` Wolfgang Grandegger @ 2011-08-08 9:32 ` Marc Kleine-Budde -1 siblings, 0 replies; 21+ messages in thread From: Marc Kleine-Budde @ 2011-08-08 9:32 UTC (permalink / raw) To: Wolfgang Grandegger Cc: Netdev, U Bhaskar-B22300, Kumar Gala, socketcan-core-0fE9KPoRgkgATYTw5x5z8w, linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org Development [-- Attachment #1.1: Type: text/plain, Size: 3411 bytes --] On 08/08/2011 10:49 AM, Wolfgang Grandegger wrote: > On 08/06/2011 10:59 PM, Kumar Gala wrote: >> >> On Aug 6, 2011, at 3:50 PM, Robin Holt wrote: >> >>> On Sat, Aug 06, 2011 at 11:52:45AM -0500, Kumar Gala wrote: >>>> >>>> On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: >>>> >>>>> On 08/06/2011 06:05 AM, Robin Holt wrote: >>>>>> flexcan driver needs the clk_get, clk_get_rate, etc functions >>>>>> to work. This patch provides the minimum functionality. >>>>> >>>>> This patch has to go via the powerpc git tree. Added >>>>> linuxppc-dev-uLR06cmDAlY/bJ5BZ2RsiQ@public.gmane.org on CC. >>>>> >>>>>> Signed-off-by: Robin Holt <holt-sJ/iWh9BUns@public.gmane.org> >>>>>> To: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> >>>>>> To: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> >>>>>> To: U Bhaskar-B22300 <B22300-KZfg59tc24xl57MIdRCFDg@public.gmane.org> >>>>>> Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org >>>>>> Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org >>>>>> --- >>>>>> arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ >>>>>> 1 files changed, 78 insertions(+), 0 deletions(-) >>>> >>>> NAK. >>>> >>>> This doesn't look right at all. We should be doing something based on the device tree node that isn't board specific. >>>> >>>> I believe Bhaskar has a version of flexcan support that he's been working on cleanup up for upstream. >>> >>> That version may be similar to what is in the freescale BSP which puts >>> the clock functions inside flexcan.c >>> >>> The powerpc arch already provides a means for individual boards to provide >>> the clock functions. I am not posting this patch here for acceptance >>> for powerpc and I am sure I will get feedback there when I post to >>> their mailing list. I am posting it here only to show that the flexcan >>> developers earlier assertion that this can and should be done in the arch >>> tree is correct and will work for the p1010 assuming we can get changes >>> into the arch/powerpc directory to implement these clk_* functions. >> >> My point is that I don't think they should live in the arch code. The clk_* functions you want to implement are tied more the FlexCAN IP than anything arch specific. As such I believe they should be in the driver. >> >> For example when FSL has a P9999 with FlexCAN on it, we should NOT have to add any arch code to support it. > > The Flexcan is found on ARM and now also on PowerPC SOCs. My current > understanding is that the ability to set the clock source and divider is > only available on PowerPC SOCs and therefore it's clearly arch specific > and should go to arch/powerpc/sysdev/fsl_soc.c if it's common for all > PowerPC platforms. What do you think? There is a bit in the CAN-Controller that selects the clock (at least on arm). The current driver just supports the bus clock. Support for the other, the oscillator clock, has not been implemented so far. IIRC the oscillator clock has a frequency that results in worse standard timing than the bus clock. cheers, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 262 bytes --] [-- Attachment #2: Type: text/plain, Size: 188 bytes --] _______________________________________________ Socketcan-core mailing list Socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org https://lists.berlios.de/mailman/listinfo/socketcan-core ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC 4/4] [powerpc] Implement a p1010rdb clock source. @ 2011-08-08 9:32 ` Marc Kleine-Budde 0 siblings, 0 replies; 21+ messages in thread From: Marc Kleine-Budde @ 2011-08-08 9:32 UTC (permalink / raw) To: Wolfgang Grandegger Cc: Netdev, U Bhaskar-B22300, socketcan-core, Robin Holt, linuxppc-dev@lists.ozlabs.org Development [-- Attachment #1: Type: text/plain, Size: 3244 bytes --] On 08/08/2011 10:49 AM, Wolfgang Grandegger wrote: > On 08/06/2011 10:59 PM, Kumar Gala wrote: >> >> On Aug 6, 2011, at 3:50 PM, Robin Holt wrote: >> >>> On Sat, Aug 06, 2011 at 11:52:45AM -0500, Kumar Gala wrote: >>>> >>>> On Aug 6, 2011, at 8:58 AM, Marc Kleine-Budde wrote: >>>> >>>>> On 08/06/2011 06:05 AM, Robin Holt wrote: >>>>>> flexcan driver needs the clk_get, clk_get_rate, etc functions >>>>>> to work. This patch provides the minimum functionality. >>>>> >>>>> This patch has to go via the powerpc git tree. Added >>>>> linuxppc-dev@lists.ozlabs.org on CC. >>>>> >>>>>> Signed-off-by: Robin Holt <holt@sgi.com> >>>>>> To: Marc Kleine-Budde <mkl@pengutronix.de> >>>>>> To: Wolfgang Grandegger <wg@grandegger.com> >>>>>> To: U Bhaskar-B22300 <B22300@freescale.com> >>>>>> Cc: socketcan-core@lists.berlios.de >>>>>> Cc: netdev@vger.kernel.org >>>>>> --- >>>>>> arch/powerpc/platforms/85xx/p1010rdb.c | 78 ++++++++++++++++++++++++++++++++ >>>>>> 1 files changed, 78 insertions(+), 0 deletions(-) >>>> >>>> NAK. >>>> >>>> This doesn't look right at all. We should be doing something based on the device tree node that isn't board specific. >>>> >>>> I believe Bhaskar has a version of flexcan support that he's been working on cleanup up for upstream. >>> >>> That version may be similar to what is in the freescale BSP which puts >>> the clock functions inside flexcan.c >>> >>> The powerpc arch already provides a means for individual boards to provide >>> the clock functions. I am not posting this patch here for acceptance >>> for powerpc and I am sure I will get feedback there when I post to >>> their mailing list. I am posting it here only to show that the flexcan >>> developers earlier assertion that this can and should be done in the arch >>> tree is correct and will work for the p1010 assuming we can get changes >>> into the arch/powerpc directory to implement these clk_* functions. >> >> My point is that I don't think they should live in the arch code. The clk_* functions you want to implement are tied more the FlexCAN IP than anything arch specific. As such I believe they should be in the driver. >> >> For example when FSL has a P9999 with FlexCAN on it, we should NOT have to add any arch code to support it. > > The Flexcan is found on ARM and now also on PowerPC SOCs. My current > understanding is that the ability to set the clock source and divider is > only available on PowerPC SOCs and therefore it's clearly arch specific > and should go to arch/powerpc/sysdev/fsl_soc.c if it's common for all > PowerPC platforms. What do you think? There is a bit in the CAN-Controller that selects the clock (at least on arm). The current driver just supports the bus clock. Support for the other, the oscillator clock, has not been implemented so far. IIRC the oscillator clock has a frequency that results in worse standard timing than the bus clock. cheers, Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | [-- Attachment #2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 262 bytes --] ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V5 [not found] ` <1312603504-30282-1-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> ` (2 preceding siblings ...) 2011-08-06 4:05 ` [RFC 4/4] [powerpc] Implement a p1010rdb clock source Robin Holt @ 2011-08-06 11:06 ` Robin Holt [not found] ` <20110806110602.GO4926-sJ/iWh9BUns@public.gmane.org> 3 siblings, 1 reply; 21+ messages in thread From: Robin Holt @ 2011-08-06 11:06 UTC (permalink / raw) To: Robin Holt, Marc Kleine-Budde, Wolfgang Grandegger, U Bhaskar-B22300 Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, netdev-u79uwXL29TY76Z2rM5mHXA On Fri, Aug 05, 2011 at 11:05:00PM -0500, Robin Holt wrote: > Marc, Wolfgang or U Bhaskar, > > This patch set should have all your comments included. > > I did implement a very simple clock source in the p1010rdb.c file, which, > unfortunately, your tree will not have so please do not apply the last > patch in the series. That will need to go to the powerpc folks and > follow the p1010rdb patch from freescale. > > Could you please apply the first three patches to a test branch, compile > and test them on an arm based system? I would like to at least feel > comfortable that I have not broken anything there. > > I have tested the full set on a p1010rdb with an external PSOC based > can communicator. That PSOC code has a bunch of erroneous can comms it > can generate, but I do not know how the developer of that code injects > those errors. As a result, no error handling from the can input has been > tested. I have tested both flexcan interfaces on the board and both work > with these patches in addition to the other p1010rdb patches not included. ARGH! I just did a quick look back at my git log, and I have one other patch earlier in the series where I committed a one-line change to flexcan.c which is probably very relevant to you, but not so much to me. I removed the mach/clock.h which does not seem to exist for powerpc. Can any of you tell me if that is relevant for the arm flexcan build? If not, does it seem reasonable to just remove it early on? Thanks, Robin ^ permalink raw reply [flat|nested] 21+ messages in thread
[parent not found: <20110806110602.GO4926-sJ/iWh9BUns@public.gmane.org>]
* Re: [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V5 [not found] ` <20110806110602.GO4926-sJ/iWh9BUns@public.gmane.org> @ 2011-08-06 11:26 ` Robin Holt 0 siblings, 0 replies; 21+ messages in thread From: Robin Holt @ 2011-08-06 11:26 UTC (permalink / raw) To: Robin Holt, Marc Kleine-Budde, Wolfgang Grandegger, U Bhaskar-B22300 Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, netdev-u79uwXL29TY76Z2rM5mHXA On Sat, Aug 06, 2011 at 06:06:02AM -0500, Robin Holt wrote: > On Fri, Aug 05, 2011 at 11:05:00PM -0500, Robin Holt wrote: > > Marc, Wolfgang or U Bhaskar, > > > > This patch set should have all your comments included. > > > > I did implement a very simple clock source in the p1010rdb.c file, which, > > unfortunately, your tree will not have so please do not apply the last > > patch in the series. That will need to go to the powerpc folks and > > follow the p1010rdb patch from freescale. > > > > Could you please apply the first three patches to a test branch, compile > > and test them on an arm based system? I would like to at least feel > > comfortable that I have not broken anything there. > > > > I have tested the full set on a p1010rdb with an external PSOC based > > can communicator. That PSOC code has a bunch of erroneous can comms it > > can generate, but I do not know how the developer of that code injects > > those errors. As a result, no error handling from the can input has been > > tested. I have tested both flexcan interfaces on the board and both work > > with these patches in addition to the other p1010rdb patches not included. > > ARGH! > > I just did a quick look back at my git log, and I have one other patch > earlier in the series where I committed a one-line change to flexcan.c > which is probably very relevant to you, but not so much to me. I removed > the mach/clock.h which does not seem to exist for powerpc. > > Can any of you tell me if that is relevant for the arm flexcan build? > If not, does it seem reasonable to just remove it early on? It looks like the more-nearly right thing to do is to #include <linux/clkdev.h> but powerpc does not implement one. Thanks, Robin ^ permalink raw reply [flat|nested] 21+ messages in thread
* [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V4 @ 2011-08-05 2:06 Robin Holt 2011-08-05 2:06 ` [RFC 1/4] [flexcan] Abstract off read/write for big/little endian Robin Holt 0 siblings, 1 reply; 21+ messages in thread From: Robin Holt @ 2011-08-05 2:06 UTC (permalink / raw) To: Robin Holt, Marc Kleine-Budde, Wolfgang Grandegger Cc: Robin Holt, socketcan-core, netdev Marc or Wolfgang, This patch set should have all your comments included. Could you please apply these four patches to a test branch, compile and test them on an arm based system? I would like to at least feel comfortable that I have not broken anything there so far. Before the integration of the comments, I had verified the flexcan driver was able to communicate. I still need to do more testing, but it certainly looks very promising at this point. Thanks, Robin Holt ^ permalink raw reply [flat|nested] 21+ messages in thread
* [RFC 1/4] [flexcan] Abstract off read/write for big/little endian. 2011-08-05 2:06 [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V4 Robin Holt @ 2011-08-05 2:06 ` Robin Holt [not found] ` <1312509979-13226-2-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> 0 siblings, 1 reply; 21+ messages in thread From: Robin Holt @ 2011-08-05 2:06 UTC (permalink / raw) To: Robin Holt, Marc Kleine-Budde, Wolfgang Grandegger Cc: Robin Holt, socketcan-core, netdev First step in converting the flexcan driver from supporting just arm to supporting both arm and powerpc architectures. Signed-off-by: Robin Holt <holt@sgi.com> To: Marc Kleine-Budde <mkl@pengutronix.de> To: Wolfgang Grandegger <wg@grandegger.com> Cc: socketcan-core@lists.berlios.de Cc: netdev@vger.kernel.org --- drivers/net/can/flexcan.c | 140 ++++++++++++++++++++++++++------------------ 1 files changed, 83 insertions(+), 57 deletions(-) diff --git a/drivers/net/can/flexcan.c b/drivers/net/can/flexcan.c index 67d9fc0..74b1706 100644 --- a/drivers/net/can/flexcan.c +++ b/drivers/net/can/flexcan.c @@ -196,6 +196,31 @@ static struct can_bittiming_const flexcan_bittiming_const = { }; /* + * Abstract off the read/write for arm versus ppc. + */ +#if defined(__BIG_ENDIAN) +static inline u32 flexcan_read(void __iomem *addr) +{ + return in_be32(addr); +} + +static inline void flexcan_write(u32 val, void __iomem *addr) +{ + out_be32(addr, val); +} +#else +static inline u32 flexcan_read(void __iomem *addr) +{ + return readl(addr); +} + +static inline void flexcan_write(u32 val, void __iomem *addr) +{ + writel(val, addr); +} +#endif + +/* * Swtich transceiver on or off */ static void flexcan_transceiver_switch(const struct flexcan_priv *priv, int on) @@ -216,9 +241,9 @@ static inline void flexcan_chip_enable(struct flexcan_priv *priv) struct flexcan_regs __iomem *regs = priv->base; u32 reg; - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); reg &= ~FLEXCAN_MCR_MDIS; - writel(reg, ®s->mcr); + flexcan_write(reg, ®s->mcr); udelay(10); } @@ -228,9 +253,9 @@ static inline void flexcan_chip_disable(struct flexcan_priv *priv) struct flexcan_regs __iomem *regs = priv->base; u32 reg; - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); reg |= FLEXCAN_MCR_MDIS; - writel(reg, ®s->mcr); + flexcan_write(reg, ®s->mcr); } static int flexcan_get_berr_counter(const struct net_device *dev, @@ -238,7 +263,7 @@ static int flexcan_get_berr_counter(const struct net_device *dev, { const struct flexcan_priv *priv = netdev_priv(dev); struct flexcan_regs __iomem *regs = priv->base; - u32 reg = readl(®s->ecr); + u32 reg = flexcan_read(®s->ecr); bec->txerr = (reg >> 0) & 0xff; bec->rxerr = (reg >> 8) & 0xff; @@ -272,15 +297,15 @@ static int flexcan_start_xmit(struct sk_buff *skb, struct net_device *dev) if (cf->can_dlc > 0) { u32 data = be32_to_cpup((__be32 *)&cf->data[0]); - writel(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[0]); + flexcan_write(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[0]); } if (cf->can_dlc > 3) { u32 data = be32_to_cpup((__be32 *)&cf->data[4]); - writel(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[1]); + flexcan_write(data, ®s->cantxfg[FLEXCAN_TX_BUF_ID].data[1]); } - writel(can_id, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_id); - writel(ctrl, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); + flexcan_write(can_id, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_id); + flexcan_write(ctrl, ®s->cantxfg[FLEXCAN_TX_BUF_ID].can_ctrl); kfree_skb(skb); @@ -468,8 +493,8 @@ static void flexcan_read_fifo(const struct net_device *dev, struct flexcan_mb __iomem *mb = ®s->cantxfg[0]; u32 reg_ctrl, reg_id; - reg_ctrl = readl(&mb->can_ctrl); - reg_id = readl(&mb->can_id); + reg_ctrl = flexcan_read(&mb->can_ctrl); + reg_id = flexcan_read(&mb->can_id); if (reg_ctrl & FLEXCAN_MB_CNT_IDE) cf->can_id = ((reg_id >> 0) & CAN_EFF_MASK) | CAN_EFF_FLAG; else @@ -479,12 +504,12 @@ static void flexcan_read_fifo(const struct net_device *dev, cf->can_id |= CAN_RTR_FLAG; cf->can_dlc = get_can_dlc((reg_ctrl >> 16) & 0xf); - *(__be32 *)(cf->data + 0) = cpu_to_be32(readl(&mb->data[0])); - *(__be32 *)(cf->data + 4) = cpu_to_be32(readl(&mb->data[1])); + *(__be32 *)(cf->data + 0) = cpu_to_be32(flexcan_read(&mb->data[0])); + *(__be32 *)(cf->data + 4) = cpu_to_be32(flexcan_read(&mb->data[1])); /* mark as read */ - writel(FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, ®s->iflag1); - readl(®s->timer); + flexcan_write(FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, ®s->iflag1); + flexcan_read(®s->timer); } static int flexcan_read_frame(struct net_device *dev) @@ -520,17 +545,17 @@ static int flexcan_poll(struct napi_struct *napi, int quota) * The error bits are cleared on read, * use saved value from irq handler. */ - reg_esr = readl(®s->esr) | priv->reg_esr; + reg_esr = flexcan_read(®s->esr) | priv->reg_esr; /* handle state changes */ work_done += flexcan_poll_state(dev, reg_esr); /* handle RX-FIFO */ - reg_iflag1 = readl(®s->iflag1); + reg_iflag1 = flexcan_read(®s->iflag1); while (reg_iflag1 & FLEXCAN_IFLAG_RX_FIFO_AVAILABLE && work_done < quota) { work_done += flexcan_read_frame(dev); - reg_iflag1 = readl(®s->iflag1); + reg_iflag1 = flexcan_read(®s->iflag1); } /* report bus errors */ @@ -540,8 +565,8 @@ static int flexcan_poll(struct napi_struct *napi, int quota) if (work_done < quota) { napi_complete(napi); /* enable IRQs */ - writel(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); - writel(priv->reg_ctrl_default, ®s->ctrl); + flexcan_write(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); + flexcan_write(priv->reg_ctrl_default, ®s->ctrl); } return work_done; @@ -555,9 +580,9 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) struct flexcan_regs __iomem *regs = priv->base; u32 reg_iflag1, reg_esr; - reg_iflag1 = readl(®s->iflag1); - reg_esr = readl(®s->esr); - writel(FLEXCAN_ESR_ERR_INT, ®s->esr); /* ACK err IRQ */ + reg_iflag1 = flexcan_read(®s->iflag1); + reg_esr = flexcan_read(®s->esr); + flexcan_write(FLEXCAN_ESR_ERR_INT, ®s->esr); /* ACK err IRQ */ /* * schedule NAPI in case of: @@ -573,16 +598,16 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) * save them for later use. */ priv->reg_esr = reg_esr & FLEXCAN_ESR_ERR_BUS; - writel(FLEXCAN_IFLAG_DEFAULT & ~FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, - ®s->imask1); - writel(priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_ALL, + flexcan_write(FLEXCAN_IFLAG_DEFAULT & + ~FLEXCAN_IFLAG_RX_FIFO_AVAILABLE, ®s->imask1); + flexcan_write(priv->reg_ctrl_default & ~FLEXCAN_CTRL_ERR_ALL, ®s->ctrl); napi_schedule(&priv->napi); } /* FIFO overflow */ if (reg_iflag1 & FLEXCAN_IFLAG_RX_FIFO_OVERFLOW) { - writel(FLEXCAN_IFLAG_RX_FIFO_OVERFLOW, ®s->iflag1); + flexcan_write(FLEXCAN_IFLAG_RX_FIFO_OVERFLOW, ®s->iflag1); dev->stats.rx_over_errors++; dev->stats.rx_errors++; } @@ -591,7 +616,7 @@ static irqreturn_t flexcan_irq(int irq, void *dev_id) if (reg_iflag1 & (1 << FLEXCAN_TX_BUF_ID)) { /* tx_bytes is incremented in flexcan_start_xmit */ stats->tx_packets++; - writel((1 << FLEXCAN_TX_BUF_ID), ®s->iflag1); + flexcan_write((1 << FLEXCAN_TX_BUF_ID), ®s->iflag1); netif_wake_queue(dev); } @@ -605,7 +630,7 @@ static void flexcan_set_bittiming(struct net_device *dev) struct flexcan_regs __iomem *regs = priv->base; u32 reg; - reg = readl(®s->ctrl); + reg = flexcan_read(®s->ctrl); reg &= ~(FLEXCAN_CTRL_PRESDIV(0xff) | FLEXCAN_CTRL_RJW(0x3) | FLEXCAN_CTRL_PSEG1(0x7) | @@ -629,11 +654,11 @@ static void flexcan_set_bittiming(struct net_device *dev) reg |= FLEXCAN_CTRL_SMP; dev_info(dev->dev.parent, "writing ctrl=0x%08x\n", reg); - writel(reg, ®s->ctrl); + flexcan_write(reg, ®s->ctrl); /* print chip status */ dev_dbg(dev->dev.parent, "%s: mcr=0x%08x ctrl=0x%08x\n", __func__, - readl(®s->mcr), readl(®s->ctrl)); + flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); } /* @@ -654,10 +679,10 @@ static int flexcan_chip_start(struct net_device *dev) flexcan_chip_enable(priv); /* soft reset */ - writel(FLEXCAN_MCR_SOFTRST, ®s->mcr); + flexcan_write(FLEXCAN_MCR_SOFTRST, ®s->mcr); udelay(10); - reg_mcr = readl(®s->mcr); + reg_mcr = flexcan_read(®s->mcr); if (reg_mcr & FLEXCAN_MCR_SOFTRST) { dev_err(dev->dev.parent, "Failed to softreset can module (mcr=0x%08x)\n", @@ -679,12 +704,12 @@ static int flexcan_chip_start(struct net_device *dev) * choose format C * */ - reg_mcr = readl(®s->mcr); + reg_mcr = flexcan_read(®s->mcr); reg_mcr |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_FEN | FLEXCAN_MCR_HALT | FLEXCAN_MCR_SUPV | FLEXCAN_MCR_WRN_EN | FLEXCAN_MCR_IDAM_C; dev_dbg(dev->dev.parent, "%s: writing mcr=0x%08x", __func__, reg_mcr); - writel(reg_mcr, ®s->mcr); + flexcan_write(reg_mcr, ®s->mcr); /* * CTRL @@ -702,7 +727,7 @@ static int flexcan_chip_start(struct net_device *dev) * (FLEXCAN_CTRL_ERR_MSK), too. Otherwise we don't get any * warning or bus passive interrupts. */ - reg_ctrl = readl(®s->ctrl); + reg_ctrl = flexcan_read(®s->ctrl); reg_ctrl &= ~FLEXCAN_CTRL_TSYN; reg_ctrl |= FLEXCAN_CTRL_BOFF_REC | FLEXCAN_CTRL_LBUF | FLEXCAN_CTRL_ERR_STATE | FLEXCAN_CTRL_ERR_MSK; @@ -710,38 +735,39 @@ static int flexcan_chip_start(struct net_device *dev) /* save for later use */ priv->reg_ctrl_default = reg_ctrl; dev_dbg(dev->dev.parent, "%s: writing ctrl=0x%08x", __func__, reg_ctrl); - writel(reg_ctrl, ®s->ctrl); + flexcan_write(reg_ctrl, ®s->ctrl); for (i = 0; i < ARRAY_SIZE(regs->cantxfg); i++) { - writel(0, ®s->cantxfg[i].can_ctrl); - writel(0, ®s->cantxfg[i].can_id); - writel(0, ®s->cantxfg[i].data[0]); - writel(0, ®s->cantxfg[i].data[1]); + flexcan_write(0, ®s->cantxfg[i].can_ctrl); + flexcan_write(0, ®s->cantxfg[i].can_id); + flexcan_write(0, ®s->cantxfg[i].data[0]); + flexcan_write(0, ®s->cantxfg[i].data[1]); /* put MB into rx queue */ - writel(FLEXCAN_MB_CNT_CODE(0x4), ®s->cantxfg[i].can_ctrl); + flexcan_write(FLEXCAN_MB_CNT_CODE(0x4), + ®s->cantxfg[i].can_ctrl); } /* acceptance mask/acceptance code (accept everything) */ - writel(0x0, ®s->rxgmask); - writel(0x0, ®s->rx14mask); - writel(0x0, ®s->rx15mask); + flexcan_write(0x0, ®s->rxgmask); + flexcan_write(0x0, ®s->rx14mask); + flexcan_write(0x0, ®s->rx15mask); flexcan_transceiver_switch(priv, 1); /* synchronize with the can bus */ - reg_mcr = readl(®s->mcr); + reg_mcr = flexcan_read(®s->mcr); reg_mcr &= ~FLEXCAN_MCR_HALT; - writel(reg_mcr, ®s->mcr); + flexcan_write(reg_mcr, ®s->mcr); priv->can.state = CAN_STATE_ERROR_ACTIVE; /* enable FIFO interrupts */ - writel(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); + flexcan_write(FLEXCAN_IFLAG_DEFAULT, ®s->imask1); /* print chip status */ dev_dbg(dev->dev.parent, "%s: reading mcr=0x%08x ctrl=0x%08x\n", - __func__, readl(®s->mcr), readl(®s->ctrl)); + __func__, flexcan_read(®s->mcr), flexcan_read(®s->ctrl)); return 0; @@ -763,12 +789,12 @@ static void flexcan_chip_stop(struct net_device *dev) u32 reg; /* Disable all interrupts */ - writel(0, ®s->imask1); + flexcan_write(0, ®s->imask1); /* Disable + halt module */ - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); reg |= FLEXCAN_MCR_MDIS | FLEXCAN_MCR_HALT; - writel(reg, ®s->mcr); + flexcan_write(reg, ®s->mcr); flexcan_transceiver_switch(priv, 0); priv->can.state = CAN_STATE_STOPPED; @@ -860,24 +886,24 @@ static int __devinit register_flexcandev(struct net_device *dev) /* select "bus clock", chip must be disabled */ flexcan_chip_disable(priv); - reg = readl(®s->ctrl); + reg = flexcan_read(®s->ctrl); reg |= FLEXCAN_CTRL_CLK_SRC; - writel(reg, ®s->ctrl); + flexcan_write(reg, ®s->ctrl); flexcan_chip_enable(priv); /* set freeze, halt and activate FIFO, restrict register access */ - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); reg |= FLEXCAN_MCR_FRZ | FLEXCAN_MCR_HALT | FLEXCAN_MCR_FEN | FLEXCAN_MCR_SUPV; - writel(reg, ®s->mcr); + flexcan_write(reg, ®s->mcr); /* * Currently we only support newer versions of this core * featuring a RX FIFO. Older cores found on some Coldfire * derivates are not yet supported. */ - reg = readl(®s->mcr); + reg = flexcan_read(®s->mcr); if (!(reg & FLEXCAN_MCR_FEN)) { dev_err(dev->dev.parent, "Could not enable RX FIFO, unsupported core\n"); -- 1.7.2.1 ^ permalink raw reply related [flat|nested] 21+ messages in thread
[parent not found: <1312509979-13226-2-git-send-email-holt-sJ/iWh9BUns@public.gmane.org>]
* Re: [RFC 1/4] [flexcan] Abstract off read/write for big/little endian. [not found] ` <1312509979-13226-2-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> @ 2011-08-05 8:32 ` Marc Kleine-Budde 0 siblings, 0 replies; 21+ messages in thread From: Marc Kleine-Budde @ 2011-08-05 8:32 UTC (permalink / raw) To: Robin Holt Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w, netdev-u79uwXL29TY76Z2rM5mHXA, Wolfgang Grandegger [-- Attachment #1.1: Type: text/plain, Size: 858 bytes --] On 08/05/2011 04:06 AM, Robin Holt wrote: > First step in converting the flexcan driver from supporting just arm to > supporting both arm and powerpc architectures. > > Signed-off-by: Robin Holt <holt-sJ/iWh9BUns@public.gmane.org> > To: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> > To: Wolfgang Grandegger <wg-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> > Cc: socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org > Cc: netdev-u79uwXL29TY76Z2rM5mHXA@public.gmane.org Acked-by: Marc Kleine-Budde <mkl-bIcnvbaLZ9MEGnE8C9+IrQ@public.gmane.org> Marc -- Pengutronix e.K. | Marc Kleine-Budde | Industrial Linux Solutions | Phone: +49-231-2826-924 | Vertretung West/Dortmund | Fax: +49-5121-206917-5555 | Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de | [-- Attachment #1.2: OpenPGP digital signature --] [-- Type: application/pgp-signature, Size: 262 bytes --] [-- Attachment #2: Type: text/plain, Size: 188 bytes --] _______________________________________________ Socketcan-core mailing list Socketcan-core-0fE9KPoRgkgATYTw5x5z8w@public.gmane.org https://lists.berlios.de/mailman/listinfo/socketcan-core ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2011-08-08 9:33 UTC | newest] Thread overview: 21+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2011-08-06 4:05 [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V5 Robin Holt 2011-08-06 4:05 ` [RFC 3/4] [flexcan] Add support for FLEXCAN_DEBUG Robin Holt [not found] ` <1312603504-30282-1-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> 2011-08-06 4:05 ` [RFC 1/4] [flexcan] Abstract off read/write for big/little endian Robin Holt 2011-08-06 4:05 ` [RFC 2/4] [flexcan] Add of_match to platform_device definition Robin Holt 2011-08-06 4:05 ` [RFC 4/4] [powerpc] Implement a p1010rdb clock source Robin Holt [not found] ` <1312603504-30282-5-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> 2011-08-06 13:58 ` Marc Kleine-Budde 2011-08-06 13:58 ` Marc Kleine-Budde 2011-08-06 16:52 ` Kumar Gala 2011-08-06 16:52 ` Kumar Gala [not found] ` <39414D86-7822-4B92-B005-351890A2A167-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org> 2011-08-06 20:50 ` Robin Holt 2011-08-06 20:50 ` Robin Holt 2011-08-06 20:59 ` Kumar Gala 2011-08-06 20:59 ` Kumar Gala [not found] ` <3C4B6145-5C75-4A3C-B504-DA32E0D2EC8A-XVmvHMARGAS8U2dJNN8I7kB+6BGkLq7r@public.gmane.org> 2011-08-08 8:49 ` Wolfgang Grandegger 2011-08-08 8:49 ` Wolfgang Grandegger [not found] ` <4E3FA301.4050005-5Yr1BZd7O62+XT7JhA+gdA@public.gmane.org> 2011-08-08 9:32 ` Marc Kleine-Budde 2011-08-08 9:32 ` Marc Kleine-Budde 2011-08-06 11:06 ` [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V5 Robin Holt [not found] ` <20110806110602.GO4926-sJ/iWh9BUns@public.gmane.org> 2011-08-06 11:26 ` Robin Holt -- strict thread matches above, loose matches on Subject: below -- 2011-08-05 2:06 [RFC 0/4] [flexcan] Add support for powerpc (freescale p1010) -V4 Robin Holt 2011-08-05 2:06 ` [RFC 1/4] [flexcan] Abstract off read/write for big/little endian Robin Holt [not found] ` <1312509979-13226-2-git-send-email-holt-sJ/iWh9BUns@public.gmane.org> 2011-08-05 8:32 ` Marc Kleine-Budde
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.