usb: xhci: Correct command TRB 4th dword initialization
In xhci_queue_command(), when the command is not 'reset endpoint', 'stop endpoint' or 'set TR dequeue pointer', endpoint ID should not be encoded in the TRB. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Reviewed-by: Simon Glass <sjg@chromium.org> Reviewed-by: Stefan Roese <sr@denx.de> Tested-by: Stefan Roese <sr@denx.de>
This commit is contained in:
parent
f2e0315e9d
commit
43eb0d4488
@ -280,8 +280,15 @@ void xhci_queue_command(struct xhci_ctrl *ctrl, u8 *ptr, u32 slot_id,
|
||||
fields[0] = lower_32_bits(val_64);
|
||||
fields[1] = upper_32_bits(val_64);
|
||||
fields[2] = 0;
|
||||
fields[3] = TRB_TYPE(cmd) | EP_ID_FOR_TRB(ep_index) |
|
||||
SLOT_ID_FOR_TRB(slot_id) | ctrl->cmd_ring->cycle_state;
|
||||
fields[3] = TRB_TYPE(cmd) | SLOT_ID_FOR_TRB(slot_id) |
|
||||
ctrl->cmd_ring->cycle_state;
|
||||
|
||||
/*
|
||||
* Only 'reset endpoint', 'stop endpoint' and 'set TR dequeue pointer'
|
||||
* commands need endpoint id encoded.
|
||||
*/
|
||||
if (cmd >= TRB_RESET_EP && cmd <= TRB_SET_DEQ)
|
||||
fields[3] |= EP_ID_FOR_TRB(ep_index);
|
||||
|
||||
queue_trb(ctrl, ctrl->cmd_ring, false, fields);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user