Re: [PATCH 4/6] net: can: flexcan: Add provision for variable payload size

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 07/31/2018 07:34 AM, Alexander Stein wrote:
> On Monday, July 30, 2018, 6:07:13 PM CEST Pankaj Bansal wrote:
>> [...]
>> @@ -666,8 +670,13 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload,
>>  {
>>  	struct flexcan_priv *priv = rx_offload_to_priv(offload);
>>  	struct flexcan_regs __iomem *regs = priv->regs;
>> -	struct flexcan_mb __iomem *mb = &regs->mb[n];
>> -	u32 reg_ctrl, reg_id, reg_iflag1;
>> +	struct flexcan_mb __iomem *mb;
>> +	u32 reg_ctrl, reg_id, reg_iflag1, i, data;
> 
> Shouldn't data be __be32 instead?

Yes...

> 
>> +	u8 mb_size, can_dlc_dword;
>> +
>> +	mb_size = sizeof(struct flexcan_mb) + priv->devtype_data->payload_size;
>> +
>> +	mb = (struct flexcan_mb __iomem *)((u8 *)&regs->mb + (mb_size * n));
>>  
>>  	if (priv->devtype_data->quirks & FLEXCAN_QUIRK_USE_OFF_TIMESTAMP) {
>>  		u32 code;
>> @@ -708,8 +717,11 @@ static unsigned int flexcan_mailbox_read(struct can_rx_offload *offload,
>>  		cf->can_id |= CAN_RTR_FLAG;
>>  	cf->can_dlc = get_can_dlc((reg_ctrl >> 16) & 0xf);
>>  
>> -	*(__be32 *)(cf->data + 0) = cpu_to_be32(priv->read(&mb->data[0]));
>> -	*(__be32 *)(cf->data + 4) = cpu_to_be32(priv->read(&mb->data[1]));
>> +	can_dlc_dword = (cf->can_dlc + sizeof(u32) - 1) / sizeof(u32);
>> +	for (i = 0; i < can_dlc_dword; i++) {
>> +		data = cpu_to_be32(priv->read(&mb->data[i]));

...as it's assigned from a _to_be32 here.

>> +		*(__be32 *)(cf->data + (i * sizeof(u32))) = data;
> 
> So sparse can help here when dealing with little/big-endianess when compiling using C=2.
ACK

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: signature.asc
Description: OpenPGP digital signature


[Index of Archives]     [Automotive Discussions]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]     [CAN Bus]

  Powered by Linux