From: Hans de Goede Date: Tue, 5 May 2015 21:56:09 +0000 (+0200) Subject: usb: ohci: Move the td array struct to inside the ohci_dev struct X-Git-Tag: v2015.07-rc2~285^2~10 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=3c5497d831fe2450b47eead2c8b57602028ecdea;p=oweals%2Fu-boot.git usb: ohci: Move the td array struct to inside the ohci_dev struct This is a preparation patch for adding driver-model support. Signed-off-by: Hans de Goede Acked-by: Marek Vasut --- diff --git a/drivers/usb/host/ohci-hcd.c b/drivers/usb/host/ohci-hcd.c index 745825cd32..b5676ab05d 100644 --- a/drivers/usb/host/ohci-hcd.c +++ b/drivers/usb/host/ohci-hcd.c @@ -447,7 +447,7 @@ int sohci_submit_job(ohci_t *ohci, ohci_dev_t *ohci_dev, urb_priv_t *urb, /* allocate the TDs */ /* note that td[0] was allocated in ep_add_ed */ for (i = 0; i < size; i++) { - purb_priv->td[i] = td_alloc(dev); + purb_priv->td[i] = td_alloc(ohci_dev, dev); if (!purb_priv->td[i]) { purb_priv->length = i; urb_free_priv(purb_priv); @@ -760,7 +760,7 @@ static ed_t *ep_add_ed(ohci_dev_t *ohci_dev, struct usb_device *usb_dev, if (ed->state == ED_NEW) { /* dummy td; end of td list for ed */ - td = td_alloc(usb_dev); + td = td_alloc(ohci_dev, usb_dev); ed->hwTailP = m32_swap((unsigned long)td); ed->hwHeadP = ed->hwTailP; ed->state = ED_UNLINK; @@ -1762,12 +1762,6 @@ int usb_lowlevel_init(int index, enum usb_init_type init, void **controller) } phcca = &ghcca[0]; info("aligned ghcca %p", phcca); - memset(gtd, 0, sizeof(td_t) * (NUM_TD + 1)); - if ((__u32)gtd & 0x7) { - err("TDs not aligned!!"); - return -1; - } - ptd = gtd; gohci.hcca = phcca; memset(phcca, 0, sizeof(struct ohci_hcca)); diff --git a/drivers/usb/host/ohci.h b/drivers/usb/host/ohci.h index c3191641ce..96a0ac1ed4 100644 --- a/drivers/usb/host/ohci.h +++ b/drivers/usb/host/ohci.h @@ -410,8 +410,11 @@ typedef struct #define NUM_EDS 8 /* num of preallocated endpoint descriptors */ +#define NUM_TD 64 /* we need more TDs than EDs */ + typedef struct ohci_device { ed_t ed[NUM_EDS] __aligned(16); + td_t tds[NUM_TD] __aligned(32); int ed_cnt; } ohci_dev_t; @@ -425,7 +428,7 @@ typedef struct ohci_device { typedef struct ohci { /* this allocates EDs for all possible endpoints */ - struct ohci_device ohci_dev __aligned(16); + struct ohci_device ohci_dev __aligned(32); struct ohci_hcca *hcca; /* hcca */ /*dma_addr_t hcca_dma;*/ @@ -457,17 +460,9 @@ static ed_t *ep_add_ed(ohci_dev_t *ohci_dev, struct usb_device *usb_dev, /*-------------------------------------------------------------------------*/ -/* we need more TDs than EDs */ -#define NUM_TD 64 - -/* +1 so we can align the storage */ -td_t gtd[NUM_TD+1]; -/* pointers to aligned storage */ -td_t *ptd; - /* TDs ... */ static inline struct td * -td_alloc (struct usb_device *usb_dev) +td_alloc (ohci_dev_t *ohci_dev, struct usb_device *usb_dev) { int i; struct td *td; @@ -475,9 +470,9 @@ td_alloc (struct usb_device *usb_dev) td = NULL; for (i = 0; i < NUM_TD; i++) { - if (ptd[i].usb_dev == NULL) + if (ohci_dev->tds[i].usb_dev == NULL) { - td = &ptd[i]; + td = &ohci_dev->tds[i]; td->usb_dev = usb_dev; break; }