[PATCH 2/4] can: flexcan: add hardware controller version support

Wolfgang Grandegger wg at grandegger.com
Wed Jun 27 20:57:55 EST 2012


On 06/27/2012 12:13 PM, Hui Wang wrote:
> Marc Kleine-Budde wrote:
>> On 06/27/2012 11:43 AM, Wolfgang Grandegger wrote:
>>  
>>> Hi Marc,
>>>
>>> On 06/27/2012 10:56 AM, Wolfgang Grandegger wrote:
>>>    
>>>> On 06/27/2012 10:27 AM, Marc Kleine-Budde wrote:
>>>>      
>>>>> On 06/27/2012 10:19 AM, Hui Wang wrote:
>>>>>        
>>>>>> At least in the i.MX series, the flexcan contrller divides into ver_3
>>>>>> and ver_10, current driver is for ver_3 controller.
>>>>>>
>>>>>> i.MX6 has ver_10 controller, it has more reigsters than ver_3 has.
>>>>>> The rxfgmask (Rx FIFO Global Mask) register is one of the new added.
>>>>>> Its reset value is 0xffffffff, this means ID Filter Table must be
>>>>>> checked when receive a packet, but the driver is designed to accept
>>>>>> everything during the chip start, we need to clear this register to
>>>>>> follow this design.
>>>>>>
>>>>>> Add a hw_ver entry in the device tree, this can let us distinguish
>>>>>> which version the controller is, if we don't set value to this entry,
>>>>>> the hw_ver is 3 by default, this is backward compatible for existing
>>>>>> platforms like powerpc and imx35.
>>>>>>           
>>>>> Is it possible to read this value from the hardware?
>>>>> Another possibility would be to introduce a new compatible device
>>>>> in the
>>>>> device tree.
>>>>>         
>>>> I vote for the latter. IIRC, in the past we already had some discussion
>>>> on how to handle version dependent Flexcan hardware, e.g. by using
>>>> flexcan-vX.X or being expicit using fsl,p1010-flexcan. Search for "Add
>>>> support for powerpc" in the netdev mailing list. I added the
>>>> devicetree-discuss ml for that reason.
>>>>       
>>> I looked up the threads and found:
>>>
>>>   http://marc.info/?w=4&r=1&s=Fix+up+fsl-flexcan+device+tree+bi&q=t
>>>
>>> In the Flexcan driver we currently only have:
>>>
>>>   static struct of_device_id flexcan_of_match[] = {
>>>         {
>>>                 .compatible = "fsl,p1010-flexcan",
>>>         },
>>>         {},
>>>   };
>>>
>>> What compatible string do they actually use for the i.MX6Q board? Shawn
>>> or Hui? We need to fix that. From the discussion mentioned above I think
>>>     
> Currently i modified the can1 DT entry in the  imx6q.dtsi like this:
>            flexcan at 02090000 { /* CAN1 */
>                reg = <0x02090000 0x4000>;
>                interrupts = <0 110 0x04>;
>                hw-version = <10>;
>            };
> 
> and the DT entry in the imx6q-sabrelite.dts like this:
>            flexcan at 02090000 { /* CAN1 */
>                compatible = "fsl,imx6q-flexcan", "fsl,p1010-flexcan";
>                phy-en-gpio = <&gpio1 4 0>;
>                phy-stby-gpio = <&gpio1 2 0>;
>                pinctrl-names = "default";
>                pinctrl-0 = <&pinctrl_flexcan1_1>;
>            };
> if we don't use hw-version entry and use flexcan-v10, do you mean we use
> strcmp or strxxx to decide controller version?

Yes, that could be done wuth that syntax, but ...

> Regards,
> Hui.
>>> "fsl,flexcan-v10" would be acceptable. Unfortunately, we do not known
>>>     
>>
>> As far as I understand the DT, the name should be something like
>>
>> "fsl,${OLDEST_SOCK_THAT_HAS_THIS_VERSION_OF_FLEXCAN}-flexcan".

... the above string is indeed the prefered one, even if I think it's
much less transparent. You should then define the .data field of "struct
of_device_id" to set the hw version.

Wolfgang.




More information about the devicetree-discuss mailing list