Skip to content

Commit 88a25e0

Browse files
Nobuhiro IwamatsuFelipe Balbi
authored andcommitted
usb: renesas_usbhs: Add access control for INTSTS1 and INTENB1 register
INTSTS1 and INTENB1 register of renesas_usbhs can access only Host mode. This adds process of accessing INTSTS1 and INTENB1 only when renesas_usbhs is Host mode. Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> Signed-off-by: Felipe Balbi <balbi@ti.com>
1 parent 1c14905 commit 88a25e0

File tree

1 file changed

+34
-27
lines changed
  • drivers/usb/renesas_usbhs

1 file changed

+34
-27
lines changed

drivers/usb/renesas_usbhs/mod.c

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -218,10 +218,12 @@ static int usbhs_status_get_each_irq(struct usbhs_priv *priv,
218218
/******************** spin lock ********************/
219219
usbhs_lock(priv, flags);
220220
state->intsts0 = usbhs_read(priv, INTSTS0);
221-
state->intsts1 = usbhs_read(priv, INTSTS1);
222-
223221
intenb0 = usbhs_read(priv, INTENB0);
224-
intenb1 = usbhs_read(priv, INTENB1);
222+
223+
if (usbhs_mod_is_host(priv)) {
224+
state->intsts1 = usbhs_read(priv, INTSTS1);
225+
intenb1 = usbhs_read(priv, INTENB1);
226+
}
225227

226228
/* mask */
227229
if (mod) {
@@ -275,7 +277,8 @@ static irqreturn_t usbhs_interrupt(int irq, void *data)
275277
* - Function :: VALID bit should 0
276278
*/
277279
usbhs_write(priv, INTSTS0, ~irq_state.intsts0 & INTSTS0_MAGIC);
278-
usbhs_write(priv, INTSTS1, ~irq_state.intsts1 & INTSTS1_MAGIC);
280+
if (usbhs_mod_is_host(priv))
281+
usbhs_write(priv, INTSTS1, ~irq_state.intsts1 & INTSTS1_MAGIC);
279282

280283
usbhs_write(priv, BRDYSTS, ~irq_state.brdysts);
281284
usbhs_write(priv, NRDYSTS, ~irq_state.nrdysts);
@@ -303,19 +306,20 @@ static irqreturn_t usbhs_interrupt(int irq, void *data)
303306
if (irq_state.intsts0 & BRDY)
304307
usbhs_mod_call(priv, irq_ready, priv, &irq_state);
305308

306-
/* INTSTS1 */
307-
if (irq_state.intsts1 & ATTCH)
308-
usbhs_mod_call(priv, irq_attch, priv, &irq_state);
309-
310-
if (irq_state.intsts1 & DTCH)
311-
usbhs_mod_call(priv, irq_dtch, priv, &irq_state);
309+
if (usbhs_mod_is_host(priv)) {
310+
/* INTSTS1 */
311+
if (irq_state.intsts1 & ATTCH)
312+
usbhs_mod_call(priv, irq_attch, priv, &irq_state);
312313

313-
if (irq_state.intsts1 & SIGN)
314-
usbhs_mod_call(priv, irq_sign, priv, &irq_state);
314+
if (irq_state.intsts1 & DTCH)
315+
usbhs_mod_call(priv, irq_dtch, priv, &irq_state);
315316

316-
if (irq_state.intsts1 & SACK)
317-
usbhs_mod_call(priv, irq_sack, priv, &irq_state);
317+
if (irq_state.intsts1 & SIGN)
318+
usbhs_mod_call(priv, irq_sign, priv, &irq_state);
318319

320+
if (irq_state.intsts1 & SACK)
321+
usbhs_mod_call(priv, irq_sack, priv, &irq_state);
322+
}
319323
return IRQ_HANDLED;
320324
}
321325

@@ -334,7 +338,8 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod)
334338
* - update INTSTS0
335339
*/
336340
usbhs_write(priv, INTENB0, 0);
337-
usbhs_write(priv, INTENB1, 0);
341+
if (usbhs_mod_is_host(priv))
342+
usbhs_write(priv, INTENB1, 0);
338343

339344
usbhs_write(priv, BEMPENB, 0);
340345
usbhs_write(priv, BRDYENB, 0);
@@ -368,25 +373,27 @@ void usbhs_irq_callback_update(struct usbhs_priv *priv, struct usbhs_mod *mod)
368373
intenb0 |= BRDYE;
369374
}
370375

371-
/*
372-
* INTSTS1
373-
*/
374-
if (mod->irq_attch)
375-
intenb1 |= ATTCHE;
376+
if (usbhs_mod_is_host(priv)) {
377+
/*
378+
* INTSTS1
379+
*/
380+
if (mod->irq_attch)
381+
intenb1 |= ATTCHE;
376382

377-
if (mod->irq_dtch)
378-
intenb1 |= DTCHE;
383+
if (mod->irq_dtch)
384+
intenb1 |= DTCHE;
379385

380-
if (mod->irq_sign)
381-
intenb1 |= SIGNE;
386+
if (mod->irq_sign)
387+
intenb1 |= SIGNE;
382388

383-
if (mod->irq_sack)
384-
intenb1 |= SACKE;
389+
if (mod->irq_sack)
390+
intenb1 |= SACKE;
391+
}
385392
}
386393

387394
if (intenb0)
388395
usbhs_write(priv, INTENB0, intenb0);
389396

390-
if (intenb1)
397+
if (usbhs_mod_is_host(priv) && intenb1)
391398
usbhs_write(priv, INTENB1, intenb1);
392399
}

0 commit comments

Comments
 (0)