Skip to content

Commit cf61fdb

Browse files
guilhermeferreiragregkh
authored andcommitted
USB: FHCI: Reusing QUICC Engine USB Controller registers from immap_qe.h
The struct fhci_regs (in drivers/usb/host/fhci.h) is basically a redefinition of the struct qe_usb_ctlr (in arch/powerpc/include/asm/immap_qe.h). The qe_usb_ctlr struct is preferrable once it uses accurately the registers' names found in the Freescale's QUICC Engine Block Reference Manuals (QEIWRM.pdf Rev.4.4 Chapter 19 for MPC836xE series and MPC8323ERM.pdf Rev.2 Chapter 36 for MPC832xE series), making easier to map the FHCI device driver to the hardware manual. Also, as the FHCI driver uses the USB Controller registers, the name qe_usb_ctlr is a more precise representation of the hardware than fhci_regs. Signed-off-by: Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 023b515 commit cf61fdb

File tree

6 files changed

+54
-72
lines changed

6 files changed

+54
-72
lines changed

drivers/usb/host/fhci-dbg.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ void fhci_dbg_isr(struct fhci_hcd *fhci, int usb_er)
4141
static int fhci_dfs_regs_show(struct seq_file *s, void *v)
4242
{
4343
struct fhci_hcd *fhci = s->private;
44-
struct fhci_regs __iomem *regs = fhci->regs;
44+
struct qe_usb_ctlr __iomem *regs = fhci->regs;
4545

4646
seq_printf(s,
4747
"mode: 0x%x\n" "addr: 0x%x\n"
@@ -50,11 +50,11 @@ static int fhci_dfs_regs_show(struct seq_file *s, void *v)
5050
"status: 0x%x\n" "SOF timer: %d\n"
5151
"frame number: %d\n"
5252
"lines status: 0x%x\n",
53-
in_8(&regs->usb_mod), in_8(&regs->usb_addr),
54-
in_8(&regs->usb_comm), in_be16(&regs->usb_ep[0]),
55-
in_be16(&regs->usb_event), in_be16(&regs->usb_mask),
56-
in_8(&regs->usb_status), in_be16(&regs->usb_sof_tmr),
57-
in_be16(&regs->usb_frame_num),
53+
in_8(&regs->usb_usmod), in_8(&regs->usb_usadr),
54+
in_8(&regs->usb_uscom), in_be16(&regs->usb_usep[0]),
55+
in_be16(&regs->usb_usber), in_be16(&regs->usb_usbmr),
56+
in_8(&regs->usb_usbs), in_be16(&regs->usb_ussft),
57+
in_be16(&regs->usb_usfrn),
5858
fhci_ioports_check_bus_state(fhci));
5959

6060
return 0;

drivers/usb/host/fhci-hcd.c

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,8 @@ void fhci_start_sof_timer(struct fhci_hcd *fhci)
4040
/* clear frame_n */
4141
out_be16(&fhci->pram->frame_num, 0);
4242

43-
out_be16(&fhci->regs->usb_sof_tmr, 0);
44-
setbits8(&fhci->regs->usb_mod, USB_MODE_SFTE);
43+
out_be16(&fhci->regs->usb_ussft, 0);
44+
setbits8(&fhci->regs->usb_usmod, USB_MODE_SFTE);
4545

4646
fhci_dbg(fhci, "<- %s\n", __func__);
4747
}
@@ -50,15 +50,15 @@ void fhci_stop_sof_timer(struct fhci_hcd *fhci)
5050
{
5151
fhci_dbg(fhci, "-> %s\n", __func__);
5252

53-
clrbits8(&fhci->regs->usb_mod, USB_MODE_SFTE);
53+
clrbits8(&fhci->regs->usb_usmod, USB_MODE_SFTE);
5454
gtm_stop_timer16(fhci->timer);
5555

5656
fhci_dbg(fhci, "<- %s\n", __func__);
5757
}
5858

5959
u16 fhci_get_sof_timer_count(struct fhci_usb *usb)
6060
{
61-
return be16_to_cpu(in_be16(&usb->fhci->regs->usb_sof_tmr) / 12);
61+
return be16_to_cpu(in_be16(&usb->fhci->regs->usb_ussft) / 12);
6262
}
6363

6464
/* initialize the endpoint zero */
@@ -88,8 +88,8 @@ void fhci_usb_enable_interrupt(struct fhci_usb *usb)
8888
enable_irq(fhci_to_hcd(fhci)->irq);
8989

9090
/* initialize the event register and mask register */
91-
out_be16(&usb->fhci->regs->usb_event, 0xffff);
92-
out_be16(&usb->fhci->regs->usb_mask, usb->saved_msk);
91+
out_be16(&usb->fhci->regs->usb_usber, 0xffff);
92+
out_be16(&usb->fhci->regs->usb_usbmr, usb->saved_msk);
9393

9494
/* enable the timer interrupts */
9595
enable_irq(fhci->timer->irq);
@@ -109,7 +109,7 @@ void fhci_usb_disable_interrupt(struct fhci_usb *usb)
109109

110110
/* disable the usb interrupt */
111111
disable_irq_nosync(fhci_to_hcd(fhci)->irq);
112-
out_be16(&usb->fhci->regs->usb_mask, 0);
112+
out_be16(&usb->fhci->regs->usb_usbmr, 0);
113113
}
114114
usb->intr_nesting_cnt++;
115115
}
@@ -119,9 +119,9 @@ static u32 fhci_usb_enable(struct fhci_hcd *fhci)
119119
{
120120
struct fhci_usb *usb = fhci->usb_lld;
121121

122-
out_be16(&usb->fhci->regs->usb_event, 0xffff);
123-
out_be16(&usb->fhci->regs->usb_mask, usb->saved_msk);
124-
setbits8(&usb->fhci->regs->usb_mod, USB_MODE_EN);
122+
out_be16(&usb->fhci->regs->usb_usber, 0xffff);
123+
out_be16(&usb->fhci->regs->usb_usbmr, usb->saved_msk);
124+
setbits8(&usb->fhci->regs->usb_usmod, USB_MODE_EN);
125125

126126
mdelay(100);
127127

@@ -141,7 +141,7 @@ static u32 fhci_usb_disable(struct fhci_hcd *fhci)
141141
usb->port_status == FHCI_PORT_LOW)
142142
fhci_device_disconnected_interrupt(fhci);
143143

144-
clrbits8(&usb->fhci->regs->usb_mod, USB_MODE_EN);
144+
clrbits8(&usb->fhci->regs->usb_usmod, USB_MODE_EN);
145145

146146
return 0;
147147
}
@@ -285,13 +285,13 @@ static int fhci_usb_init(struct fhci_hcd *fhci)
285285
USB_E_IDLE_MASK |
286286
USB_E_RESET_MASK | USB_E_SFT_MASK | USB_E_MSF_MASK);
287287

288-
out_8(&usb->fhci->regs->usb_mod, USB_MODE_HOST | USB_MODE_EN);
288+
out_8(&usb->fhci->regs->usb_usmod, USB_MODE_HOST | USB_MODE_EN);
289289

290290
/* clearing the mask register */
291-
out_be16(&usb->fhci->regs->usb_mask, 0);
291+
out_be16(&usb->fhci->regs->usb_usbmr, 0);
292292

293293
/* initialing the event register */
294-
out_be16(&usb->fhci->regs->usb_event, 0xffff);
294+
out_be16(&usb->fhci->regs->usb_usber, 0xffff);
295295

296296
if (endpoint_zero_init(usb, DEFAULT_DATA_MEM, DEFAULT_RING_LEN) != 0) {
297297
fhci_usb_free(usb);
@@ -745,8 +745,8 @@ static int __devinit of_fhci_probe(struct platform_device *ofdev)
745745
}
746746

747747
/* Clear and disable any pending interrupts. */
748-
out_be16(&fhci->regs->usb_event, 0xffff);
749-
out_be16(&fhci->regs->usb_mask, 0);
748+
out_be16(&fhci->regs->usb_usber, 0xffff);
749+
out_be16(&fhci->regs->usb_usbmr, 0);
750750

751751
ret = usb_add_hcd(hcd, usb_irq, 0);
752752
if (ret < 0)

drivers/usb/host/fhci-hub.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ void fhci_port_disable(struct fhci_hcd *fhci)
9797

9898
/* Enable IDLE since we want to know if something comes along */
9999
usb->saved_msk |= USB_E_IDLE_MASK;
100-
out_be16(&usb->fhci->regs->usb_mask, usb->saved_msk);
100+
out_be16(&usb->fhci->regs->usb_usbmr, usb->saved_msk);
101101

102102
/* check if during the disconnection process attached new device */
103103
if (port_status == FHCI_PORT_WAITING)
@@ -158,21 +158,21 @@ void fhci_port_reset(void *lld)
158158

159159
fhci_stop_sof_timer(fhci);
160160
/* disable the USB controller */
161-
mode = in_8(&fhci->regs->usb_mod);
162-
out_8(&fhci->regs->usb_mod, mode & (~USB_MODE_EN));
161+
mode = in_8(&fhci->regs->usb_usmod);
162+
out_8(&fhci->regs->usb_usmod, mode & (~USB_MODE_EN));
163163

164164
/* disable idle interrupts */
165-
mask = in_be16(&fhci->regs->usb_mask);
166-
out_be16(&fhci->regs->usb_mask, mask & (~USB_E_IDLE_MASK));
165+
mask = in_be16(&fhci->regs->usb_usbmr);
166+
out_be16(&fhci->regs->usb_usbmr, mask & (~USB_E_IDLE_MASK));
167167

168168
fhci_io_port_generate_reset(fhci);
169169

170170
/* enable interrupt on this endpoint */
171-
out_be16(&fhci->regs->usb_mask, mask);
171+
out_be16(&fhci->regs->usb_usbmr, mask);
172172

173173
/* enable the USB controller */
174-
mode = in_8(&fhci->regs->usb_mod);
175-
out_8(&fhci->regs->usb_mod, mode | USB_MODE_EN);
174+
mode = in_8(&fhci->regs->usb_usmod);
175+
out_8(&fhci->regs->usb_usmod, mode | USB_MODE_EN);
176176
fhci_start_sof_timer(fhci);
177177

178178
fhci_dbg(fhci, "<- %s\n", __func__);

drivers/usb/host/fhci-sched.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -132,8 +132,8 @@ void fhci_flush_all_transmissions(struct fhci_usb *usb)
132132
u8 mode;
133133
struct td *td;
134134

135-
mode = in_8(&usb->fhci->regs->usb_mod);
136-
clrbits8(&usb->fhci->regs->usb_mod, USB_MODE_EN);
135+
mode = in_8(&usb->fhci->regs->usb_usmod);
136+
clrbits8(&usb->fhci->regs->usb_usmod, USB_MODE_EN);
137137

138138
fhci_flush_bds(usb);
139139

@@ -147,9 +147,9 @@ void fhci_flush_all_transmissions(struct fhci_usb *usb)
147147
usb->actual_frame->frame_status = FRAME_END_TRANSMISSION;
148148

149149
/* reset the event register */
150-
out_be16(&usb->fhci->regs->usb_event, 0xffff);
150+
out_be16(&usb->fhci->regs->usb_usber, 0xffff);
151151
/* enable the USB controller */
152-
out_8(&usb->fhci->regs->usb_mod, mode | USB_MODE_EN);
152+
out_8(&usb->fhci->regs->usb_usmod, mode | USB_MODE_EN);
153153
}
154154

155155
/*
@@ -414,7 +414,7 @@ static void sof_interrupt(struct fhci_hcd *fhci)
414414
usb->port_status = FHCI_PORT_FULL;
415415
/* Disable IDLE */
416416
usb->saved_msk &= ~USB_E_IDLE_MASK;
417-
out_be16(&usb->fhci->regs->usb_mask, usb->saved_msk);
417+
out_be16(&usb->fhci->regs->usb_usbmr, usb->saved_msk);
418418
}
419419

420420
gtm_set_exact_timer16(fhci->timer, usb->max_frame_usage, false);
@@ -433,14 +433,14 @@ void fhci_device_disconnected_interrupt(struct fhci_hcd *fhci)
433433
fhci_dbg(fhci, "-> %s\n", __func__);
434434

435435
fhci_usb_disable_interrupt(usb);
436-
clrbits8(&usb->fhci->regs->usb_mod, USB_MODE_LSS);
436+
clrbits8(&usb->fhci->regs->usb_usmod, USB_MODE_LSS);
437437
usb->port_status = FHCI_PORT_DISABLED;
438438

439439
fhci_stop_sof_timer(fhci);
440440

441441
/* Enable IDLE since we want to know if something comes along */
442442
usb->saved_msk |= USB_E_IDLE_MASK;
443-
out_be16(&usb->fhci->regs->usb_mask, usb->saved_msk);
443+
out_be16(&usb->fhci->regs->usb_usbmr, usb->saved_msk);
444444

445445
usb->vroot_hub->port.wPortStatus &= ~USB_PORT_STAT_CONNECTION;
446446
usb->vroot_hub->port.wPortChange |= USB_PORT_STAT_C_CONNECTION;
@@ -473,7 +473,7 @@ void fhci_device_connected_interrupt(struct fhci_hcd *fhci)
473473
}
474474

475475
usb->port_status = FHCI_PORT_LOW;
476-
setbits8(&usb->fhci->regs->usb_mod, USB_MODE_LSS);
476+
setbits8(&usb->fhci->regs->usb_usmod, USB_MODE_LSS);
477477
usb->vroot_hub->port.wPortStatus |=
478478
(USB_PORT_STAT_LOW_SPEED |
479479
USB_PORT_STAT_CONNECTION);
@@ -491,7 +491,7 @@ void fhci_device_connected_interrupt(struct fhci_hcd *fhci)
491491
}
492492

493493
usb->port_status = FHCI_PORT_FULL;
494-
clrbits8(&usb->fhci->regs->usb_mod, USB_MODE_LSS);
494+
clrbits8(&usb->fhci->regs->usb_usmod, USB_MODE_LSS);
495495
usb->vroot_hub->port.wPortStatus &=
496496
~USB_PORT_STAT_LOW_SPEED;
497497
usb->vroot_hub->port.wPortStatus |=
@@ -535,7 +535,7 @@ static void abort_transmission(struct fhci_usb *usb)
535535
/* issue stop Tx command */
536536
qe_issue_cmd(QE_USB_STOP_TX, QE_CR_SUBBLOCK_USB, EP_ZERO, 0);
537537
/* flush Tx FIFOs */
538-
out_8(&usb->fhci->regs->usb_comm, USB_CMD_FLUSH_FIFO | EP_ZERO);
538+
out_8(&usb->fhci->regs->usb_uscom, USB_CMD_FLUSH_FIFO | EP_ZERO);
539539
udelay(1000);
540540
/* reset Tx BDs */
541541
fhci_flush_bds(usb);
@@ -555,11 +555,11 @@ irqreturn_t fhci_irq(struct usb_hcd *hcd)
555555

556556
usb = fhci->usb_lld;
557557

558-
usb_er |= in_be16(&usb->fhci->regs->usb_event) &
559-
in_be16(&usb->fhci->regs->usb_mask);
558+
usb_er |= in_be16(&usb->fhci->regs->usb_usber) &
559+
in_be16(&usb->fhci->regs->usb_usbmr);
560560

561561
/* clear event bits for next time */
562-
out_be16(&usb->fhci->regs->usb_event, usb_er);
562+
out_be16(&usb->fhci->regs->usb_usber, usb_er);
563563

564564
fhci_dbg_isr(fhci, usb_er);
565565

@@ -573,7 +573,7 @@ irqreturn_t fhci_irq(struct usb_hcd *hcd)
573573

574574
/* Turn on IDLE since we want to disconnect */
575575
usb->saved_msk |= USB_E_IDLE_MASK;
576-
out_be16(&usb->fhci->regs->usb_event,
576+
out_be16(&usb->fhci->regs->usb_usber,
577577
usb->saved_msk);
578578
} else if (usb->port_status == FHCI_PORT_DISABLED) {
579579
if (fhci_ioports_check_bus_state(fhci) == 1)
@@ -611,7 +611,7 @@ irqreturn_t fhci_irq(struct usb_hcd *hcd)
611611
/* XXX usb->port_status = FHCI_PORT_WAITING; */
612612
/* Disable IDLE */
613613
usb->saved_msk &= ~USB_E_IDLE_MASK;
614-
out_be16(&usb->fhci->regs->usb_mask,
614+
out_be16(&usb->fhci->regs->usb_usbmr,
615615
usb->saved_msk);
616616
} else {
617617
fhci_dbg_isr(fhci, -1);

drivers/usb/host/fhci-tds.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -249,7 +249,7 @@ void fhci_init_ep_registers(struct fhci_usb *usb, struct endpoint *ep,
249249
u8 rt;
250250

251251
/* set the endpoint registers according to the endpoint */
252-
out_be16(&usb->fhci->regs->usb_ep[0],
252+
out_be16(&usb->fhci->regs->usb_usep[0],
253253
USB_TRANS_CTR | USB_EP_MF | USB_EP_RTE);
254254
out_be16(&usb->fhci->pram->ep_ptr[0],
255255
cpm_muram_offset(ep->ep_pram_ptr));
@@ -463,7 +463,7 @@ u32 fhci_host_transaction(struct fhci_usb *usb,
463463
cq_put(&ep->conf_frame_Q, pkt);
464464

465465
if (cq_howmany(&ep->conf_frame_Q) == 1)
466-
out_8(&usb->fhci->regs->usb_comm, USB_CMD_STR_FIFO);
466+
out_8(&usb->fhci->regs->usb_uscom, USB_CMD_STR_FIFO);
467467

468468
return 0;
469469
}
@@ -535,8 +535,8 @@ void fhci_flush_actual_frame(struct fhci_usb *usb)
535535
struct endpoint *ep = usb->ep0;
536536

537537
/* disable the USB controller */
538-
mode = in_8(&usb->fhci->regs->usb_mod);
539-
out_8(&usb->fhci->regs->usb_mod, mode & ~USB_MODE_EN);
538+
mode = in_8(&usb->fhci->regs->usb_usmod);
539+
out_8(&usb->fhci->regs->usb_usmod, mode & ~USB_MODE_EN);
540540

541541
tb_ptr = in_be16(&ep->ep_pram_ptr->tx_bd_ptr);
542542
td = cpm_muram_addr(tb_ptr);
@@ -571,9 +571,9 @@ void fhci_flush_actual_frame(struct fhci_usb *usb)
571571
usb->actual_frame->frame_status = FRAME_TIMER_END_TRANSMISSION;
572572

573573
/* reset the event register */
574-
out_be16(&usb->fhci->regs->usb_event, 0xffff);
574+
out_be16(&usb->fhci->regs->usb_usber, 0xffff);
575575
/* enable the USB controller */
576-
out_8(&usb->fhci->regs->usb_mod, mode | USB_MODE_EN);
576+
out_8(&usb->fhci->regs->usb_usmod, mode | USB_MODE_EN);
577577
}
578578

579579
/* handles Tx confirm and Tx error interrupt */
@@ -613,7 +613,7 @@ void fhci_host_transmit_actual_frame(struct fhci_usb *usb)
613613

614614
/* start transmit only if we have something in the TDs */
615615
if (in_be16(&td->status) & TD_R)
616-
out_8(&usb->fhci->regs->usb_comm, USB_CMD_STR_FIFO);
616+
out_8(&usb->fhci->regs->usb_uscom, USB_CMD_STR_FIFO);
617617

618618
if (in_be32(&ep->conf_td->buf_ptr) == DUMMY_BD_BUFFER) {
619619
out_be32(&old_td->buf_ptr, 0);

drivers/usb/host/fhci.h

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <linux/usb.h>
2929
#include <linux/usb/hcd.h>
3030
#include <asm/qe.h>
31+
#include <asm/immap_qe.h>
3132

3233
#define USB_CLOCK 48000000
3334

@@ -173,25 +174,6 @@
173174
#define USB_E_TXB_MASK 0x0002
174175
#define USB_E_RXB_MASK 0x0001
175176

176-
/* Freescale USB Host controller registers */
177-
struct fhci_regs {
178-
u8 usb_mod; /* mode register */
179-
u8 usb_addr; /* address register */
180-
u8 usb_comm; /* command register */
181-
u8 reserved1[1];
182-
__be16 usb_ep[4]; /* endpoint register */
183-
u8 reserved2[4];
184-
__be16 usb_event; /* event register */
185-
u8 reserved3[2];
186-
__be16 usb_mask; /* mask register */
187-
u8 reserved4[1];
188-
u8 usb_status; /* status register */
189-
__be16 usb_sof_tmr; /* Start Of Frame timer */
190-
u8 reserved5[2];
191-
__be16 usb_frame_num; /* frame number register */
192-
u8 reserved6[1];
193-
};
194-
195177
/* Freescale USB HOST */
196178
struct fhci_pram {
197179
__be16 ep_ptr[4]; /* Endpoint porter reg */
@@ -267,7 +249,7 @@ struct fhci_hcd {
267249
int gpios[NUM_GPIOS];
268250
bool alow_gpios[NUM_GPIOS];
269251

270-
struct fhci_regs __iomem *regs; /* I/O memory used to communicate */
252+
struct qe_usb_ctlr __iomem *regs; /* I/O memory used to communicate */
271253
struct fhci_pram __iomem *pram; /* Parameter RAM */
272254
struct gtm_timer *timer;
273255

0 commit comments

Comments
 (0)