Skip to content
Snippets Groups Projects
  • Bin Meng's avatar
    84aa8536
    usb: sandbox: Fix emulator device select logic in usb_emul_find_devnum() · 84aa8536
    Bin Meng authored
    
    Current emulator select logic in usb_emul_find_devnum() is to test
    the USB address. The USB address of the device being enumerated is
    initialized to zero at the beginning of the enumeration process in
    usb_setup_device(). At this point, the saved USB address in the
    platform data has not been assigned to any valid USB address either.
    This means: the logic will select an emulator device according to
    its sequence of declaring order in the device tree. Take test.dts
    for example, flash-stick@0 will be selected before flash-stick@1.
    But unfortunately such logic is wrong.
    
    In fact USB devices show up in a random order during the enumeration
    which means usb_emul_find_devnum() may be called on port 3 for keyb@3
    before on port 0 for flash-stick@0.
    
    To fix this, we introduce a new emulator uclass specific platdata
    to store the USB device's port number on its parent hub, and update
    the logic to test the port number instead.
    
    Signed-off-by: default avatarBin Meng <bmeng.cn@gmail.com>
    84aa8536
    History
    usb: sandbox: Fix emulator device select logic in usb_emul_find_devnum()
    Bin Meng authored
    
    Current emulator select logic in usb_emul_find_devnum() is to test
    the USB address. The USB address of the device being enumerated is
    initialized to zero at the beginning of the enumeration process in
    usb_setup_device(). At this point, the saved USB address in the
    platform data has not been assigned to any valid USB address either.
    This means: the logic will select an emulator device according to
    its sequence of declaring order in the device tree. Take test.dts
    for example, flash-stick@0 will be selected before flash-stick@1.
    But unfortunately such logic is wrong.
    
    In fact USB devices show up in a random order during the enumeration
    which means usb_emul_find_devnum() may be called on port 3 for keyb@3
    before on port 0 for flash-stick@0.
    
    To fix this, we introduce a new emulator uclass specific platdata
    to store the USB device's port number on its parent hub, and update
    the logic to test the port number instead.
    
    Signed-off-by: default avatarBin Meng <bmeng.cn@gmail.com>