usb: musb: omap: Add device tree support for omap musb glue
Hello Kishon Vijay Abraham I,
The patch 00a0b1d58af873d8: "usb: musb: omap: Add device tree support for omap musb glue", from Sep 11 2012, leads to the following static checker warning:
drivers/usb/musb/omap2430.c:569 omap2430_probe() warn: does endianness matter for 'config->num_eps'?
drivers/usb/musb/omap2430.c
565
566 of_property_read_u32(np, "mode", (u32 *)&pdata->mode);
567 of_property_read_u32(np, "interface-type",
568 (u32 *)&data->interface_type);
569 of_property_read_u32(np, "num-eps", (u32 *)&config->num_eps);
^^^^^^^^^^^^^^^This is not endian safe, but more importantly ->num_eps is a u8 so when we write 32 bits to it, we are corrupting ->dma_channels, ->dyn_fifo_size, and ->vendor_ctrl. On little endian, it's going to be setting them to zero so it might not cause and immediate problem.
The way to do this is to use a 32 bit temporary variable and then save the value to ->num_eps afterward. Create a small function to do this in a nice way.
All the casts here are a bit scary.
570 of_property_read_u32(np, "ram-bits", (u32 *)&config->ram_bits); 571 of_property_read_u32(np, "power", (u32 *)&pdata->power);
regards,
dan carpenter
Hi,
Quoted 17 lines · Dan Carpenter
Hello Kishon Vijay Abraham I,
The patch
00a0b1d58af873d8: "usb: musb: omap: Add device tree support for omap musb glue", from Sep 11 2012, leads to the following static checker warning:drivers/usb/musb/omap2430.c:569 omap2430_probe() warn: does endianness matter for 'config->num_eps'?
drivers/usb/musb/omap2430.c
565566 of_property_read_u32(np, "mode", (u32 *)&pdata->mode); 567 of_property_read_u32(np, "interface-type", 568 (u32 *)&data->interface_type); 569 of_property_read_u32(np, "num-eps", (u32 *)&config->num_eps); ^^^^^^^^^^^^^^^
Quoted 8 lines
This is not endian safe, but more importantly ->num_eps is a u8 so when we write 32 bits to it, we are corrupting ->dma_channels, ->dyn_fifo_size, and ->vendor_ctrl. On little endian, it's going to be setting them to zero so it might not cause and immediate problem.
The way to do this is to use a 32 bit temporary variable and then save the value to ->num_eps afterward. Create a small function to do this in a nice way.
Sure. Will do it.
Thanks
Kishon
Quoted 9 lines
All the casts here are a bit scary.
570 of_property_read_u32(np, "ram-bits", (u32 *)&config->ram_bits); 571 of_property_read_u32(np, "power", (u32 *)&pdata->power);regards,
dan carpenter