From: Ana Bobillo <[email protected]> sdp_rx_command_complete() converts the big-endian addr and cnt fields of the command in each case that uses them. struct sdp_command is packed and starts one byte into the report, so every conversion is a run of byte loads: six of them across four commands.
Convert both fields once, before the switch. No functional change: an addr of zero still selects CONFIG_SDP_LOADADDR. This takes 96 bytes off the SPL of imx6dl_mamoj, room the closed-part checks later in this series need to stay within that board's SPL size limit. Signed-off-by: Ana Bobillo <[email protected]> --- drivers/usb/gadget/f_sdp.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/drivers/usb/gadget/f_sdp.c b/drivers/usb/gadget/f_sdp.c index 9af411f16ec..aff69c3a138 100644 --- a/drivers/usb/gadget/f_sdp.c +++ b/drivers/usb/gadget/f_sdp.c @@ -306,10 +306,11 @@ static void sdp_rx_command_complete(struct usb_ep *ep, struct usb_request *req) } struct sdp_command *cmd = req->buf + 1; + u32 addr = be32_to_cpu(cmd->addr); + u32 cnt = be32_to_cpu(cmd->cnt); debug("%s: command: %04x, addr: %08x, cnt: %u\n", - __func__, be16_to_cpu(cmd->cmd), - be32_to_cpu(cmd->addr), be32_to_cpu(cmd->cnt)); + __func__, be16_to_cpu(cmd->cmd), addr, cnt); switch (be16_to_cpu(cmd->cmd)) { case SDP_READ_REGISTER: @@ -317,8 +318,8 @@ static void sdp_rx_command_complete(struct usb_ep *ep, struct usb_request *req) sdp->error_status = 0x0; sdp->state = SDP_STATE_TX_SEC_CONF; - sdp->dnl_address = be32_to_cpu(cmd->addr); - sdp->dnl_bytes_remaining = be32_to_cpu(cmd->cnt); + sdp->dnl_address = addr; + sdp->dnl_bytes_remaining = cnt; sdp->next_state = SDP_STATE_TX_REGISTER; printf("Reading %d registers at 0x%08x... ", sdp->dnl_bytes_remaining, sdp->dnl_address); @@ -328,8 +329,8 @@ static void sdp_rx_command_complete(struct usb_ep *ep, struct usb_request *req) sdp->error_status = SDP_WRITE_FILE_COMPLETE; sdp->state = SDP_STATE_RX_FILE_DATA; - sdp->dnl_address = cmd->addr ? be32_to_cpu(cmd->addr) : CONFIG_SDP_LOADADDR; - sdp->dnl_bytes_remaining = be32_to_cpu(cmd->cnt); + sdp->dnl_address = addr ? addr : CONFIG_SDP_LOADADDR; + sdp->dnl_bytes_remaining = cnt; sdp->dnl_bytes = sdp->dnl_bytes_remaining; sdp->next_state = SDP_STATE_IDLE; @@ -349,14 +350,14 @@ static void sdp_rx_command_complete(struct usb_ep *ep, struct usb_request *req) sdp->error_status = SDP_WRITE_REGISTER_COMPLETE; sdp->state = SDP_STATE_RX_DCD_DATA; - sdp->dnl_bytes_remaining = be32_to_cpu(cmd->cnt); + sdp->dnl_bytes_remaining = cnt; sdp->next_state = SDP_STATE_IDLE; break; case SDP_JUMP_ADDRESS: sdp->always_send_status = false; sdp->error_status = 0; - sdp->jmp_address = cmd->addr ? be32_to_cpu(cmd->addr) : CONFIG_SDP_LOADADDR; + sdp->jmp_address = addr ? addr : CONFIG_SDP_LOADADDR; sdp->state = SDP_STATE_TX_SEC_CONF; sdp->next_state = SDP_STATE_JUMP; break;
