Merge branch 'master' of git://git.denx.de/u-boot-usb

- Fix some possible alignment issues
This commit is contained in:
Tom Rini 2019-11-22 10:20:56 -05:00
commit c59afcff8a
4 changed files with 22 additions and 11 deletions

View file

@ -18,7 +18,7 @@
#include <linux/kernel.h>
#include <linux/io.h>
#include <usb.h>
#include "../host/xhci.h"
#include <usb/xhci.h>
#include "core.h"
#include "host-export.h"

View file

@ -11,7 +11,7 @@
#include <dm.h>
#include <linux/compat.h>
#include <usb.h>
#include "../host/xhci.h"
#include <usb/xhci.h>
#include "core.h"
#include "drd.h"

View file

@ -12,8 +12,16 @@
#define USB_BUFSIZ 4096
/* Helper type for accessing packed u16 pointers */
typedef struct { __le16 val; } __packed __le16_packed;
static struct usb_composite_driver *composite;
static inline void le16_add_cpu_packed(__le16_packed *var, u16 val)
{
var->val = cpu_to_le16(le16_to_cpu(var->val) + val);
}
/**
* usb_add_function() - add a function to a configuration
* @config: the configuration
@ -480,20 +488,21 @@ done:
* the host side.
*/
static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf)
static void collect_langs(struct usb_gadget_strings **sp, void *buf)
{
const struct usb_gadget_strings *s;
u16 language;
__le16 *tmp;
__le16_packed *tmp;
__le16_packed *end = (buf + 252);
while (*sp) {
s = *sp;
language = cpu_to_le16(s->language);
for (tmp = buf; *tmp && tmp < &buf[126]; tmp++) {
if (*tmp == language)
for (tmp = buf; tmp->val && tmp < end; tmp++) {
if (tmp->val == language)
goto repeat;
}
*tmp++ = language;
tmp->val = language;
repeat:
sp++;
}
@ -705,7 +714,8 @@ static int bos_desc(struct usb_composite_dev *cdev)
*/
usb_ext = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
bos->bNumDeviceCaps++;
le16_add_cpu(&bos->wTotalLength, USB_DT_USB_EXT_CAP_SIZE);
le16_add_cpu_packed((__le16_packed *)&bos->wTotalLength,
USB_DT_USB_EXT_CAP_SIZE);
usb_ext->bLength = USB_DT_USB_EXT_CAP_SIZE;
usb_ext->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
usb_ext->bDevCapabilityType = USB_CAP_TYPE_EXT;
@ -721,7 +731,8 @@ static int bos_desc(struct usb_composite_dev *cdev)
ss_cap = cdev->req->buf + le16_to_cpu(bos->wTotalLength);
bos->bNumDeviceCaps++;
le16_add_cpu(&bos->wTotalLength, USB_DT_USB_SS_CAP_SIZE);
le16_add_cpu_packed((__le16_packed *)&bos->wTotalLength,
USB_DT_USB_SS_CAP_SIZE);
ss_cap->bLength = USB_DT_USB_SS_CAP_SIZE;
ss_cap->bDescriptorType = USB_DT_DEVICE_CAPABILITY;
ss_cap->bDevCapabilityType = USB_SS_CAP_TYPE;

View file

@ -731,7 +731,7 @@ static int write_fifo_ep0(struct dwc2_ep *ep, struct dwc2_request *req)
return 0;
}
static int dwc2_fifo_read(struct dwc2_ep *ep, u32 *cp, int max)
static int dwc2_fifo_read(struct dwc2_ep *ep, void *cp, int max)
{
invalidate_dcache_range((unsigned long)cp, (unsigned long)cp +
ROUND(max, CONFIG_SYS_CACHELINE_SIZE));
@ -1285,7 +1285,7 @@ static void dwc2_ep0_setup(struct dwc2_udc *dev)
nuke(ep, -EPROTO);
/* read control req from fifo (8 bytes) */
dwc2_fifo_read(ep, (u32 *)usb_ctrl, 8);
dwc2_fifo_read(ep, usb_ctrl, 8);
debug_cond(DEBUG_SETUP != 0,
"%s: bRequestType = 0x%x(%s), bRequest = 0x%x"