Hi Wolfgang and Mark,

> -----Original Message-----
> From: Wolfgang Grandegger [mailto:[email protected]]
> Sent: Wednesday, September 01, 2010 6:01 PM
> To: Marc Kleine-Budde
> Cc: Bhupesh SHARMA; [email protected]
> Subject: Re: [RFC PATCH 1/4] SPEAr320 CCAN driver
> 
> On 09/01/2010 02:10 PM, Marc Kleine-Budde wrote:
> > Wolfgang Grandegger wrote:
> >>> static u16 spear1310_can_read_reg(const struct bosch_ccan_priv
> *priv,
> >>>                           enum ccan_regs reg)
> >>> {
> >>>   u16 val;
> >>>
> >>>   /* 16 bit registers are aligned at 16-bit boundary */
> >>>   val = readw(priv->reg_base + reg);
> >>>   return val;
> >>> }
> >>>
> >>> static void spear1310_can_write_reg(const struct bosch_ccan_priv
> *priv,
> >>>                           enum ccan_regs reg, u16 val)
> >>> {
> >>>   /* 16 bit registers are aligned at 16-bit boundary */
> >>>   writew(val, priv->reg_base + reg);
> >>> }
> >>>
> >>> The one for SPEAr320 will look like:
> >>> static u16 spear320_can_read_reg(const struct bosch_ccan_priv
> *priv,
> >>>                           enum ccan_regs reg)
> >>> {
> >>>   u16 val;
> >>>
> >>>   /* shifting 1 place because 16 bit registers are word aligned */
> >>>   val = readw(priv->reg_base + (reg << 1));
> >>>   return val;
> >>> }
> >>>
> >>> static void spear320_can_write_reg(const struct bosch_ccan_priv
> *priv,
> >>>                           enum ccan_regs reg, u16 val)
> >>> {
> >>>   /* shifting 1 place because 16 bit registers are word aligned */
> >>>   writew(val, priv->reg_base + (reg << 1));
> >>> }
> >>
> >> These functions are still pretty generic and could be handled by a
> >> generic platform C_CAN driver via platform data field "reg_shift".
> >
> > the sja1000 uses IORESOURCE_MEM_xxBIT for this. See [1].
> >
> > cheers, Marc
> >
> > [1]
> >
> http://lxr.linux.no/linux+v2.6.35/drivers/net/can/sja1000/sja1000_platf
> orm.c#L119
> 
> Well, yes and no. I think for the SPEAr *word* accesses are required on
> a 2 and 4 byte boundary? Bhupesh? We could use IORESOURCE_MEM_16BIT and
> IORESOURCE_MEM_32BIT for these access types. But that might need to be
> extended. In the C_CAN manual there is written:
> 
>  "Up to now the C_CAN module is delivered with three different
>   interfaces. An 8-bit interface for the Motorola HC08 controller and
>   two 16-bit interfaces to the AMBA APB bus from ARM. They can easily
>   be replaced by a user-defined module interface."
> 

Ok, so are we aligned on generating a V2 that has CCAN as a platform driver
on the lines of sja1000_platform with "include/linux/can/platform/c_can.h"
providing the platform details and register offsets (as may vary with different
SoCs).

And yes you are right. In SPEAr *word* accesses are required on a 2 and 4 byte
boundary. 

BTW, what seems to be a better name for the platform driver 'bosch_ccan' or 
c_ccan

Regards,
Bhupesh
_______________________________________________
Socketcan-core mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/socketcan-core

Reply via email to