* [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler
@ 2019-10-25 11:47 Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 2/6] usb: musb: dma: Add support for shared IRQ Paul Cercueil
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Paul Cercueil @ 2019-10-25 11:47 UTC (permalink / raw)
To: Bin Liu
Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, od, Paul Cercueil,
Artur Rojek
The IRQ handler was passed a pointer to a struct dma_controller, but the
argument was then casted to a pointer to a struct musb_dma_controller.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Tested-by: Artur Rojek <contact@artur-rojek.eu>
---
Notes:
v2: Rebase on 4.5-rc4
drivers/usb/musb/musbhsdma.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
index 5fc6825745f2..2d3751d885b4 100644
--- a/drivers/usb/musb/musbhsdma.c
+++ b/drivers/usb/musb/musbhsdma.c
@@ -425,7 +425,7 @@ struct dma_controller *musbhs_dma_controller_create(struct musb *musb,
controller->controller.channel_abort = dma_channel_abort;
if (request_irq(irq, dma_controller_irq, 0,
- dev_name(musb->controller), &controller->controller)) {
+ dev_name(musb->controller), controller)) {
dev_err(dev, "request_irq %d failed!\n", irq);
musb_dma_controller_destroy(&controller->controller);
--
2.23.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 2/6] usb: musb: dma: Add support for shared IRQ
2019-10-25 11:47 [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
@ 2019-10-25 11:47 ` Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 3/6] usb: musb: jz4740: Add support for DMA Paul Cercueil
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2019-10-25 11:47 UTC (permalink / raw)
To: Bin Liu
Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, od, Paul Cercueil,
Artur Rojek
The implementation of the Inventra IP in some of the Ingenic JZ47xx SoCs
does not use a separate IRQ line for DMA transfers.
Allow these SoCs to be supported by adding a flag 'dma_share_usb_irq'
in the struct musb. If set, no extra IRQ line is required, and the musb
glue will need to call the API function musbhs_dma_controller_irq()
within its interrupt handler.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Tested-by: Artur Rojek <contact@artur-rojek.eu>
---
Notes:
v2: Rebase on 4.5-rc4
drivers/usb/musb/musb_core.h | 2 ++
drivers/usb/musb/musb_dma.h | 1 +
drivers/usb/musb/musbhsdma.c | 27 ++++++++++++++++++++++-----
3 files changed, 25 insertions(+), 5 deletions(-)
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index 04203b7126d5..b7c31c717800 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -392,6 +392,8 @@ struct musb {
unsigned flush_irq_work:1;
+ unsigned dma_share_usb_irq:1;
+
u8 address;
u8 test_mode_nr;
u16 ackpend; /* ep0 */
diff --git a/drivers/usb/musb/musb_dma.h b/drivers/usb/musb/musb_dma.h
index 8f60271c0a9d..b3f65016a972 100644
--- a/drivers/usb/musb/musb_dma.h
+++ b/drivers/usb/musb/musb_dma.h
@@ -191,6 +191,7 @@ extern void (*musb_dma_controller_destroy)(struct dma_controller *);
extern struct dma_controller *
musbhs_dma_controller_create(struct musb *musb, void __iomem *base);
extern void musbhs_dma_controller_destroy(struct dma_controller *c);
+extern irqreturn_t musbhs_dma_controller_irq(struct dma_controller *c);
extern struct dma_controller *
tusb_dma_controller_create(struct musb *musb, void __iomem *base);
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
index 2d3751d885b4..898856e9974e 100644
--- a/drivers/usb/musb/musbhsdma.c
+++ b/drivers/usb/musb/musbhsdma.c
@@ -268,7 +268,7 @@ static int dma_channel_abort(struct dma_channel *channel)
return 0;
}
-static irqreturn_t dma_controller_irq(int irq, void *private_data)
+static irqreturn_t dma_controller_irq_cb(int irq, void *private_data)
{
struct musb_dma_controller *controller = private_data;
struct musb *musb = controller->private_data;
@@ -292,6 +292,9 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data)
int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR);
if (!int_hsdma) {
+ if (musb->dma_share_usb_irq)
+ goto done;
+
musb_dbg(musb, "spurious DMA irq");
for (bchannel = 0; bchannel < MUSB_HSDMA_CHANNELS; bchannel++) {
@@ -384,6 +387,15 @@ static irqreturn_t dma_controller_irq(int irq, void *private_data)
return retval;
}
+irqreturn_t musbhs_dma_controller_irq(struct dma_controller *c)
+{
+ struct musb_dma_controller *controller = container_of(c,
+ struct musb_dma_controller, controller);
+
+ return dma_controller_irq_cb(controller->irq, controller);
+}
+EXPORT_SYMBOL_GPL(musbhs_dma_controller_irq);
+
void musbhs_dma_controller_destroy(struct dma_controller *c)
{
struct musb_dma_controller *controller = container_of(c,
@@ -404,9 +416,14 @@ struct dma_controller *musbhs_dma_controller_create(struct musb *musb,
struct musb_dma_controller *controller;
struct device *dev = musb->controller;
struct platform_device *pdev = to_platform_device(dev);
- int irq = platform_get_irq_byname(pdev, "dma");
+ int irq;
+
+ if (musb->dma_share_usb_irq)
+ irq = 0;
+ else
+ irq = platform_get_irq_byname(pdev, "dma");
- if (irq <= 0) {
+ if (irq < 0) {
dev_err(dev, "No DMA interrupt line!\n");
return NULL;
}
@@ -424,8 +441,8 @@ struct dma_controller *musbhs_dma_controller_create(struct musb *musb,
controller->controller.channel_program = dma_channel_program;
controller->controller.channel_abort = dma_channel_abort;
- if (request_irq(irq, dma_controller_irq, 0,
- dev_name(musb->controller), controller)) {
+ if (irq > 0 && request_irq(irq, dma_controller_irq_cb, 0,
+ dev_name(musb->controller), controller)) {
dev_err(dev, "request_irq %d failed!\n", irq);
musb_dma_controller_destroy(&controller->controller);
--
2.23.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/6] usb: musb: jz4740: Add support for DMA
2019-10-25 11:47 [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 2/6] usb: musb: dma: Add support for shared IRQ Paul Cercueil
@ 2019-10-25 11:47 ` Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 4/6] usb: musb: jz4740: Drop dependency on NOP_USB_XCEIV Paul Cercueil
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2019-10-25 11:47 UTC (permalink / raw)
To: Bin Liu
Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, od, Paul Cercueil,
Artur Rojek
Add support for using the DMA channels built into the Inventra IP.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
Tested-by: Artur Rojek <contact@artur-rojek.eu>
---
Notes:
v2: Rebase on 4.5-rc4
drivers/usb/musb/Kconfig | 2 +-
drivers/usb/musb/jz4740.c | 21 +++++++++++++++------
2 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index 52f8e2b57ad5..210e4844c92a 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -142,7 +142,7 @@ config USB_UX500_DMA
config USB_INVENTRA_DMA
bool 'Inventra'
- depends on USB_MUSB_OMAP2PLUS
+ depends on USB_MUSB_OMAP2PLUS || USB_MUSB_JZ4740
help
Enable DMA transfers using Mentor's engine.
diff --git a/drivers/usb/musb/jz4740.c b/drivers/usb/musb/jz4740.c
index 5261f8dfedec..bbecfdee6ea1 100644
--- a/drivers/usb/musb/jz4740.c
+++ b/drivers/usb/musb/jz4740.c
@@ -25,11 +25,14 @@ struct jz4740_glue {
static irqreturn_t jz4740_musb_interrupt(int irq, void *__hci)
{
unsigned long flags;
- irqreturn_t retval = IRQ_NONE;
+ irqreturn_t retval = IRQ_NONE, retval_dma = IRQ_NONE;
struct musb *musb = __hci;
spin_lock_irqsave(&musb->lock, flags);
+ if (IS_ENABLED(CONFIG_USB_INVENTRA_DMA) && musb->dma_controller)
+ retval_dma = musbhs_dma_controller_irq(musb->dma_controller);
+
musb->int_usb = musb_readb(musb->mregs, MUSB_INTRUSB);
musb->int_tx = musb_readw(musb->mregs, MUSB_INTRTX);
musb->int_rx = musb_readw(musb->mregs, MUSB_INTRRX);
@@ -47,7 +50,10 @@ static irqreturn_t jz4740_musb_interrupt(int irq, void *__hci)
spin_unlock_irqrestore(&musb->lock, flags);
- return retval;
+ if (retval == IRQ_HANDLED || retval_dma == IRQ_HANDLED)
+ return IRQ_HANDLED;
+
+ return IRQ_NONE;
}
static struct musb_fifo_cfg jz4740_musb_fifo_cfg[] = {
@@ -91,18 +97,19 @@ static int jz4740_musb_init(struct musb *musb)
musb->dyn_fifo = true;
musb->isr = jz4740_musb_interrupt;
+ musb->dma_share_usb_irq = true;
return 0;
}
-/*
- * DMA has not been confirmed to work with CONFIG_USB_INVENTRA_DMA,
- * so let's not set up the dma function pointers yet.
- */
static const struct musb_platform_ops jz4740_musb_ops = {
.quirks = MUSB_DMA_INVENTRA | MUSB_INDEXED_EP,
.fifo_mode = 2,
.init = jz4740_musb_init,
+#ifdef CONFIG_USB_INVENTRA_DMA
+ .dma_init = musbhs_dma_controller_create,
+ .dma_exit = musbhs_dma_controller_destroy,
+#endif
};
static int jz4740_probe(struct platform_device *pdev)
@@ -137,6 +144,8 @@ static int jz4740_probe(struct platform_device *pdev)
}
musb->dev.parent = &pdev->dev;
+ musb->dev.dma_mask = &musb->dev.coherent_dma_mask;
+ musb->dev.coherent_dma_mask = DMA_BIT_MASK(32);
glue->dev = &pdev->dev;
glue->musb = musb;
--
2.23.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 4/6] usb: musb: jz4740: Drop dependency on NOP_USB_XCEIV
2019-10-25 11:47 [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 2/6] usb: musb: dma: Add support for shared IRQ Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 3/6] usb: musb: jz4740: Add support for DMA Paul Cercueil
@ 2019-10-25 11:47 ` Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 5/6] usb: musb: jz4740: Silence error if code is -EPROBE_DEFER Paul Cercueil
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2019-10-25 11:47 UTC (permalink / raw)
To: Bin Liu; +Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, od, Paul Cercueil
The driver does not depend directly on the NOP transceiver. It can
compile and work just fine without it.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
Notes:
v2: New patch
drivers/usb/musb/Kconfig | 1 -
1 file changed, 1 deletion(-)
diff --git a/drivers/usb/musb/Kconfig b/drivers/usb/musb/Kconfig
index 210e4844c92a..56ccba3c8444 100644
--- a/drivers/usb/musb/Kconfig
+++ b/drivers/usb/musb/Kconfig
@@ -111,7 +111,6 @@ config USB_MUSB_UX500
config USB_MUSB_JZ4740
tristate "JZ4740"
- depends on NOP_USB_XCEIV
depends on MIPS || COMPILE_TEST
depends on USB_MUSB_GADGET
depends on USB=n || USB_OTG_BLACKLIST_HUB
--
2.23.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 5/6] usb: musb: jz4740: Silence error if code is -EPROBE_DEFER
2019-10-25 11:47 [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
` (2 preceding siblings ...)
2019-10-25 11:47 ` [PATCH v2 4/6] usb: musb: jz4740: Drop dependency on NOP_USB_XCEIV Paul Cercueil
@ 2019-10-25 11:47 ` Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 6/6] usb: musb: jz4740: Code cleanup Paul Cercueil
2019-10-30 11:23 ` [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2019-10-25 11:47 UTC (permalink / raw)
To: Bin Liu; +Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, od, Paul Cercueil
Avoid printing any error message if the error code is -EPROBE_DEFER.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
Notes:
v2: New patch
drivers/usb/musb/jz4740.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/musb/jz4740.c b/drivers/usb/musb/jz4740.c
index bbecfdee6ea1..5e885fa26829 100644
--- a/drivers/usb/musb/jz4740.c
+++ b/drivers/usb/musb/jz4740.c
@@ -81,14 +81,17 @@ static struct musb_hdrc_platform_data jz4740_musb_platform_data = {
static int jz4740_musb_init(struct musb *musb)
{
struct device *dev = musb->controller->parent;
+ int err;
if (dev->of_node)
musb->xceiv = devm_usb_get_phy_by_phandle(dev, "phys", 0);
else
musb->xceiv = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
if (IS_ERR(musb->xceiv)) {
- dev_err(dev, "No transceiver configured\n");
- return PTR_ERR(musb->xceiv);
+ err = PTR_ERR(musb->xceiv);
+ if (err != -EPROBE_DEFER)
+ dev_err(dev, "No transceiver configured: %d", err);
+ return err;
}
/* Silicon does not implement ConfigData register.
--
2.23.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 6/6] usb: musb: jz4740: Code cleanup
2019-10-25 11:47 [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
` (3 preceding siblings ...)
2019-10-25 11:47 ` [PATCH v2 5/6] usb: musb: jz4740: Silence error if code is -EPROBE_DEFER Paul Cercueil
@ 2019-10-25 11:47 ` Paul Cercueil
2019-10-30 11:23 ` [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2019-10-25 11:47 UTC (permalink / raw)
To: Bin Liu; +Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, od, Paul Cercueil
Just some code maintenance; no functional change.
Signed-off-by: Paul Cercueil <paul@crapouillou.net>
---
Notes:
v2: New patch
drivers/usb/musb/jz4740.c | 71 +++++++++++++++++++--------------------
1 file changed, 35 insertions(+), 36 deletions(-)
diff --git a/drivers/usb/musb/jz4740.c b/drivers/usb/musb/jz4740.c
index 5e885fa26829..b755b6be7059 100644
--- a/drivers/usb/musb/jz4740.c
+++ b/drivers/usb/musb/jz4740.c
@@ -17,16 +17,15 @@
#include "musb_core.h"
struct jz4740_glue {
- struct device *dev;
- struct platform_device *musb;
+ struct platform_device *musb;
struct clk *clk;
};
static irqreturn_t jz4740_musb_interrupt(int irq, void *__hci)
{
- unsigned long flags;
- irqreturn_t retval = IRQ_NONE, retval_dma = IRQ_NONE;
- struct musb *musb = __hci;
+ unsigned long flags;
+ irqreturn_t retval = IRQ_NONE, retval_dma = IRQ_NONE;
+ struct musb *musb = __hci;
spin_lock_irqsave(&musb->lock, flags);
@@ -43,7 +42,7 @@ static irqreturn_t jz4740_musb_interrupt(int irq, void *__hci)
* never see them set
*/
musb->int_usb &= MUSB_INTR_SUSPEND | MUSB_INTR_RESUME |
- MUSB_INTR_RESET | MUSB_INTR_SOF;
+ MUSB_INTR_RESET | MUSB_INTR_SOF;
if (musb->int_usb || musb->int_tx || musb->int_rx)
retval = musb_interrupt(musb);
@@ -57,25 +56,20 @@ static irqreturn_t jz4740_musb_interrupt(int irq, void *__hci)
}
static struct musb_fifo_cfg jz4740_musb_fifo_cfg[] = {
-{ .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
-{ .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
-{ .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 64, },
+ { .hw_ep_num = 1, .style = FIFO_TX, .maxpacket = 512, },
+ { .hw_ep_num = 1, .style = FIFO_RX, .maxpacket = 512, },
+ { .hw_ep_num = 2, .style = FIFO_TX, .maxpacket = 64, },
};
static const struct musb_hdrc_config jz4740_musb_config = {
/* Silicon does not implement USB OTG. */
- .multipoint = 0,
+ .multipoint = 0,
/* Max EPs scanned, driver will decide which EP can be used. */
- .num_eps = 4,
+ .num_eps = 4,
/* RAMbits needed to configure EPs from table */
- .ram_bits = 9,
- .fifo_cfg = jz4740_musb_fifo_cfg,
- .fifo_cfg_size = ARRAY_SIZE(jz4740_musb_fifo_cfg),
-};
-
-static struct musb_hdrc_platform_data jz4740_musb_platform_data = {
- .mode = MUSB_PERIPHERAL,
- .config = &jz4740_musb_config,
+ .ram_bits = 9,
+ .fifo_cfg = jz4740_musb_fifo_cfg,
+ .fifo_cfg_size = ARRAY_SIZE(jz4740_musb_fifo_cfg),
};
static int jz4740_musb_init(struct musb *musb)
@@ -94,7 +88,8 @@ static int jz4740_musb_init(struct musb *musb)
return err;
}
- /* Silicon does not implement ConfigData register.
+ /*
+ * Silicon does not implement ConfigData register.
* Set dyn_fifo to avoid reading EP config from hardware.
*/
musb->dyn_fifo = true;
@@ -115,65 +110,69 @@ static const struct musb_platform_ops jz4740_musb_ops = {
#endif
};
+static const struct musb_hdrc_platform_data jz4740_musb_pdata = {
+ .mode = MUSB_PERIPHERAL,
+ .config = &jz4740_musb_config,
+ .platform_ops = &jz4740_musb_ops,
+};
+
static int jz4740_probe(struct platform_device *pdev)
{
- struct musb_hdrc_platform_data *pdata = &jz4740_musb_platform_data;
+ struct device *dev = &pdev->dev;
+ const struct musb_hdrc_platform_data *pdata = &jz4740_musb_pdata;
struct platform_device *musb;
struct jz4740_glue *glue;
- struct clk *clk;
+ struct clk *clk;
int ret;
- glue = devm_kzalloc(&pdev->dev, sizeof(*glue), GFP_KERNEL);
+ glue = devm_kzalloc(dev, sizeof(*glue), GFP_KERNEL);
if (!glue)
return -ENOMEM;
musb = platform_device_alloc("musb-hdrc", PLATFORM_DEVID_AUTO);
if (!musb) {
- dev_err(&pdev->dev, "failed to allocate musb device\n");
+ dev_err(dev, "failed to allocate musb device");
return -ENOMEM;
}
- clk = devm_clk_get(&pdev->dev, "udc");
+ clk = devm_clk_get(dev, "udc");
if (IS_ERR(clk)) {
- dev_err(&pdev->dev, "failed to get clock\n");
+ dev_err(dev, "failed to get clock");
ret = PTR_ERR(clk);
goto err_platform_device_put;
}
ret = clk_prepare_enable(clk);
if (ret) {
- dev_err(&pdev->dev, "failed to enable clock\n");
+ dev_err(dev, "failed to enable clock");
goto err_platform_device_put;
}
- musb->dev.parent = &pdev->dev;
+ musb->dev.parent = dev;
musb->dev.dma_mask = &musb->dev.coherent_dma_mask;
musb->dev.coherent_dma_mask = DMA_BIT_MASK(32);
- glue->dev = &pdev->dev;
glue->musb = musb;
glue->clk = clk;
- pdata->platform_ops = &jz4740_musb_ops;
-
platform_set_drvdata(pdev, glue);
ret = platform_device_add_resources(musb, pdev->resource,
pdev->num_resources);
if (ret) {
- dev_err(&pdev->dev, "failed to add resources\n");
+ dev_err(dev, "failed to add resources");
goto err_clk_disable;
}
ret = platform_device_add_data(musb, pdata, sizeof(*pdata));
if (ret) {
- dev_err(&pdev->dev, "failed to add platform_data\n");
+ dev_err(dev, "failed to add platform_data");
goto err_clk_disable;
}
ret = platform_device_add(musb);
if (ret) {
- dev_err(&pdev->dev, "failed to register musb device\n");
+ dev_err(dev, "failed to register musb device");
goto err_clk_disable;
}
@@ -188,7 +187,7 @@ static int jz4740_probe(struct platform_device *pdev)
static int jz4740_remove(struct platform_device *pdev)
{
- struct jz4740_glue *glue = platform_get_drvdata(pdev);
+ struct jz4740_glue *glue = platform_get_drvdata(pdev);
platform_device_unregister(glue->musb);
clk_disable_unprepare(glue->clk);
@@ -199,7 +198,7 @@ static int jz4740_remove(struct platform_device *pdev)
#ifdef CONFIG_OF
static const struct of_device_id jz4740_musb_of_match[] = {
{ .compatible = "ingenic,jz4740-musb" },
- {},
+ { /* sentinel */ },
};
MODULE_DEVICE_TABLE(of, jz4740_musb_of_match);
#endif
--
2.23.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler
2019-10-25 11:47 [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
` (4 preceding siblings ...)
2019-10-25 11:47 ` [PATCH v2 6/6] usb: musb: jz4740: Code cleanup Paul Cercueil
@ 2019-10-30 11:23 ` Paul Cercueil
5 siblings, 0 replies; 7+ messages in thread
From: Paul Cercueil @ 2019-10-30 11:23 UTC (permalink / raw)
To: Bin Liu; +Cc: Greg Kroah-Hartman, linux-usb, linux-kernel, od, Artur Rojek
Hi,
Le ven., oct. 25, 2019 at 13:47, Paul Cercueil <paul@crapouillou.net> a
écrit :
> The IRQ handler was passed a pointer to a struct dma_controller, but
> the
> argument was then casted to a pointer to a struct musb_dma_controller.
>
> Signed-off-by: Paul Cercueil <paul@crapouillou.net>
> Tested-by: Artur Rojek <contact@artur-rojek.eu>
> ---
>
> Notes:
> v2: Rebase on 4.5-rc4
Typo in the changelog of this patch and the following ones: it was
rebased on 5.4-rc4, obviously.
>
> drivers/usb/musb/musbhsdma.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/usb/musb/musbhsdma.c
> b/drivers/usb/musb/musbhsdma.c
> index 5fc6825745f2..2d3751d885b4 100644
> --- a/drivers/usb/musb/musbhsdma.c
> +++ b/drivers/usb/musb/musbhsdma.c
> @@ -425,7 +425,7 @@ struct dma_controller
> *musbhs_dma_controller_create(struct musb *musb,
> controller->controller.channel_abort = dma_channel_abort;
>
> if (request_irq(irq, dma_controller_irq, 0,
> - dev_name(musb->controller), &controller->controller)) {
> + dev_name(musb->controller), controller)) {
> dev_err(dev, "request_irq %d failed!\n", irq);
> musb_dma_controller_destroy(&controller->controller);
>
> --
> 2.23.0
>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-10-30 11:23 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-10-25 11:47 [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 2/6] usb: musb: dma: Add support for shared IRQ Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 3/6] usb: musb: jz4740: Add support for DMA Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 4/6] usb: musb: jz4740: Drop dependency on NOP_USB_XCEIV Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 5/6] usb: musb: jz4740: Silence error if code is -EPROBE_DEFER Paul Cercueil
2019-10-25 11:47 ` [PATCH v2 6/6] usb: musb: jz4740: Code cleanup Paul Cercueil
2019-10-30 11:23 ` [PATCH v2 1/6] usb: musb: dma: Correct parameter passed to IRQ handler Paul Cercueil
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.