|
Takashi Iwai |
859c02 |
From 11228eee79ae78317644b59246cb4de195e00b2c Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
859c02 |
From: Rui Miguel Silva <rui.silva@linaro.org>
|
|
Takashi Iwai |
859c02 |
Date: Fri, 27 Aug 2021 14:11:52 +0100
|
|
Takashi Iwai |
859c02 |
Subject: [PATCH] usb: isp1760: write to status and address register
|
|
Takashi Iwai |
859c02 |
Git-commit: 36815a4a0763bb405ebd776c45553005c1ef7a15
|
|
Takashi Iwai |
859c02 |
Patch-mainline: v5.15-rc1
|
|
Takashi Iwai |
859c02 |
References: stable-5.14.6
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
[ Upstream commit 36815a4a0763bb405ebd776c45553005c1ef7a15 ]
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
We were already writing directly the port status register to
|
|
Takashi Iwai |
859c02 |
trigger changes in isp1763. The same is needed in other IP
|
|
Takashi Iwai |
859c02 |
from the family, including also to setup the read address
|
|
Takashi Iwai |
859c02 |
before reading from device.
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
Reported-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
|
|
Takashi Iwai |
859c02 |
Tested-by: Dietmar Eggemann <dietmar.eggemann@arm.com>
|
|
Takashi Iwai |
859c02 |
Signed-off-by: Rui Miguel Silva <rui.silva@linaro.org>
|
|
Takashi Iwai |
859c02 |
Link: https://lore.kernel.org/r/20210827131154.4151862-4-rui.silva@linaro.org
|
|
Takashi Iwai |
859c02 |
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Takashi Iwai |
859c02 |
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
Takashi Iwai |
859c02 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
---
|
|
Takashi Iwai |
859c02 |
drivers/usb/isp1760/isp1760-hcd.c | 23 +++++++++++------------
|
|
Takashi Iwai |
859c02 |
1 file changed, 11 insertions(+), 12 deletions(-)
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
diff --git a/drivers/usb/isp1760/isp1760-hcd.c b/drivers/usb/isp1760/isp1760-hcd.c
|
|
Takashi Iwai |
859c02 |
index d2d19548241e..e517376c3291 100644
|
|
Takashi Iwai |
859c02 |
--- a/drivers/usb/isp1760/isp1760-hcd.c
|
|
Takashi Iwai |
859c02 |
+++ b/drivers/usb/isp1760/isp1760-hcd.c
|
|
Takashi Iwai |
859c02 |
@@ -182,7 +182,7 @@ struct urb_listitem {
|
|
Takashi Iwai |
859c02 |
struct urb *urb;
|
|
Takashi Iwai |
859c02 |
};
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
-static const u32 isp1763_hc_portsc1_fields[] = {
|
|
Takashi Iwai |
859c02 |
+static const u32 isp176x_hc_portsc1_fields[] = {
|
|
Takashi Iwai |
859c02 |
[PORT_OWNER] = BIT(13),
|
|
Takashi Iwai |
859c02 |
[PORT_POWER] = BIT(12),
|
|
Takashi Iwai |
859c02 |
[PORT_LSTATUS] = BIT(10),
|
|
Takashi Iwai |
859c02 |
@@ -205,27 +205,28 @@ static u32 isp1760_hcd_read(struct usb_hcd *hcd, u32 field)
|
|
Takashi Iwai |
859c02 |
}
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
/*
|
|
Takashi Iwai |
859c02 |
- * We need, in isp1763, to write directly the values to the portsc1
|
|
Takashi Iwai |
859c02 |
+ * We need, in isp176x, to write directly the values to the portsc1
|
|
Takashi Iwai |
859c02 |
* register so it will make the other values to trigger.
|
|
Takashi Iwai |
859c02 |
*/
|
|
Takashi Iwai |
859c02 |
static void isp1760_hcd_portsc1_set_clear(struct isp1760_hcd *priv, u32 field,
|
|
Takashi Iwai |
859c02 |
u32 val)
|
|
Takashi Iwai |
859c02 |
{
|
|
Takashi Iwai |
859c02 |
- u32 bit = isp1763_hc_portsc1_fields[field];
|
|
Takashi Iwai |
859c02 |
- u32 port_status = readl(priv->base + ISP1763_HC_PORTSC1);
|
|
Takashi Iwai |
859c02 |
+ u32 bit = isp176x_hc_portsc1_fields[field];
|
|
Takashi Iwai |
859c02 |
+ u16 portsc1_reg = priv->is_isp1763 ? ISP1763_HC_PORTSC1 :
|
|
Takashi Iwai |
859c02 |
+ ISP176x_HC_PORTSC1;
|
|
Takashi Iwai |
859c02 |
+ u32 port_status = readl(priv->base + portsc1_reg);
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
if (val)
|
|
Takashi Iwai |
859c02 |
- writel(port_status | bit, priv->base + ISP1763_HC_PORTSC1);
|
|
Takashi Iwai |
859c02 |
+ writel(port_status | bit, priv->base + portsc1_reg);
|
|
Takashi Iwai |
859c02 |
else
|
|
Takashi Iwai |
859c02 |
- writel(port_status & ~bit, priv->base + ISP1763_HC_PORTSC1);
|
|
Takashi Iwai |
859c02 |
+ writel(port_status & ~bit, priv->base + portsc1_reg);
|
|
Takashi Iwai |
859c02 |
}
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
static void isp1760_hcd_write(struct usb_hcd *hcd, u32 field, u32 val)
|
|
Takashi Iwai |
859c02 |
{
|
|
Takashi Iwai |
859c02 |
struct isp1760_hcd *priv = hcd_to_priv(hcd);
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
- if (unlikely(priv->is_isp1763 &&
|
|
Takashi Iwai |
859c02 |
- (field >= PORT_OWNER && field <= PORT_CONNECT)))
|
|
Takashi Iwai |
859c02 |
+ if (unlikely((field >= PORT_OWNER && field <= PORT_CONNECT)))
|
|
Takashi Iwai |
859c02 |
return isp1760_hcd_portsc1_set_clear(priv, field, val);
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
isp1760_field_write(priv->fields, field, val);
|
|
Takashi Iwai |
859c02 |
@@ -367,8 +368,7 @@ static void isp1760_mem_read(struct usb_hcd *hcd, u32 src_offset, void *dst,
|
|
Takashi Iwai |
859c02 |
{
|
|
Takashi Iwai |
859c02 |
struct isp1760_hcd *priv = hcd_to_priv(hcd);
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
- isp1760_hcd_write(hcd, MEM_BANK_SEL, ISP_BANK_0);
|
|
Takashi Iwai |
859c02 |
- isp1760_hcd_write(hcd, MEM_START_ADDR, src_offset);
|
|
Takashi Iwai |
859c02 |
+ isp1760_reg_write(priv->regs, ISP176x_HC_MEMORY, src_offset);
|
|
Takashi Iwai |
859c02 |
ndelay(100);
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
bank_reads8(priv->base, src_offset, ISP_BANK_0, dst, bytes);
|
|
Takashi Iwai |
859c02 |
@@ -496,8 +496,7 @@ static void isp1760_ptd_read(struct usb_hcd *hcd, u32 ptd_offset, u32 slot,
|
|
Takashi Iwai |
859c02 |
u16 src_offset = ptd_offset + slot * sizeof(*ptd);
|
|
Takashi Iwai |
859c02 |
struct isp1760_hcd *priv = hcd_to_priv(hcd);
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
- isp1760_hcd_write(hcd, MEM_BANK_SEL, ISP_BANK_0);
|
|
Takashi Iwai |
859c02 |
- isp1760_hcd_write(hcd, MEM_START_ADDR, src_offset);
|
|
Takashi Iwai |
859c02 |
+ isp1760_reg_write(priv->regs, ISP176x_HC_MEMORY, src_offset);
|
|
Takashi Iwai |
859c02 |
ndelay(90);
|
|
Takashi Iwai |
859c02 |
|
|
Takashi Iwai |
859c02 |
bank_reads8(priv->base, src_offset, ISP_BANK_0, (void *)ptd,
|
|
Takashi Iwai |
859c02 |
--
|
|
Takashi Iwai |
859c02 |
2.26.2
|
|
Takashi Iwai |
859c02 |
|