Skip to content
Snippets Groups Projects
Forked from KED Software Projects / Miscellaneous / KED U-Boot Fork
Source project has a limited visibility.
  • Heiko Schocher's avatar
    b37c4a2b
    usb: fix unaligned access in device_qual() · b37c4a2b
    Heiko Schocher authored
    
    while playing with dfu, I tapped in an unaligned access
    when doing on the host side a "lsusb -d [vendornr]: -v"
    I get on the board:
    
    GADGET DRIVER: usb_dnl_dfu
    data abort
    
        MAYBE you should read doc/README.arm-unaligned-accesses
    
    pc : [<8ff71db8>]          lr : [<8ff75aec>]
    sp : 8ef40d18  ip : 00000005     fp : 00000000
    r10: 00000000  r9 : 47401410     r8 : 8ef40f38
    r7 : 8ef4aae8  r6 : 0000000a     r5 : 8ef4ab28  r4 : 8ef4ab80
    r3 : 0000000a  r2 : 00000006     r1 : 00000006  r0 : 8ef4aae8
    Flags: Nzcv  IRQs off  FIQs on  Mode SVC_32
    Resetting CPU ...
    
    reason is that in the "struct usb_composite_dev" the
    "struct usb_device_descriptor desc;" is on an odd address,
    and this struct gets accessed in
    drivers/usb/gadget/composite.c device_qual()
    
    Fix it, by align this var "struct desc" fix to an aligned
    address.
    
    Signed-off-by: default avatarHeiko Schocher <hs@denx.de>
    Cc: Marek Vasut <marek.vasut@gmail.com>
    Cc: Samuel Egli <samuel.egli@siemens.com>
    b37c4a2b
    History
    usb: fix unaligned access in device_qual()
    Heiko Schocher authored
    
    while playing with dfu, I tapped in an unaligned access
    when doing on the host side a "lsusb -d [vendornr]: -v"
    I get on the board:
    
    GADGET DRIVER: usb_dnl_dfu
    data abort
    
        MAYBE you should read doc/README.arm-unaligned-accesses
    
    pc : [<8ff71db8>]          lr : [<8ff75aec>]
    sp : 8ef40d18  ip : 00000005     fp : 00000000
    r10: 00000000  r9 : 47401410     r8 : 8ef40f38
    r7 : 8ef4aae8  r6 : 0000000a     r5 : 8ef4ab28  r4 : 8ef4ab80
    r3 : 0000000a  r2 : 00000006     r1 : 00000006  r0 : 8ef4aae8
    Flags: Nzcv  IRQs off  FIQs on  Mode SVC_32
    Resetting CPU ...
    
    reason is that in the "struct usb_composite_dev" the
    "struct usb_device_descriptor desc;" is on an odd address,
    and this struct gets accessed in
    drivers/usb/gadget/composite.c device_qual()
    
    Fix it, by align this var "struct desc" fix to an aligned
    address.
    
    Signed-off-by: default avatarHeiko Schocher <hs@denx.de>
    Cc: Marek Vasut <marek.vasut@gmail.com>
    Cc: Samuel Egli <samuel.egli@siemens.com>