On 14-09-21 10:11 PM, Peter Chen wrote: > > >>>> Subject: Re: FIX ME in oxu210p-hcd.c >>>> >>>> >>>> I found a unfixed FIX ME in the file stated in my above message. I am >>>> wondering what to set hcd->self.comtroller->dma_mask to as it's now >>>> been defined to NULL and clearly even as a newbie this seem incorrect. >>>> Regards Nick >>> >>> Usually, it is set at its controller driver or pass through through >>> device tree or platform data. >>> >>> Peter >>> >> Sorry Peter, >> I apologize for asking for more help here but I will paste the function below and >> with my changes. >> Please let me known if I am wrong and how to fix it as I new here. >> Sorry for Wasting Your Time, > > You are welcome > >> Nick >> static int oxu_reset(struct usb_hcd *hcd) { >> struct oxu_hcd *oxu = hcd_to_oxu(hcd); >> int ret; >> >> spin_lock_init(&oxu->mem_lock); >> INIT_LIST_HEAD(&oxu->urb_list); >> oxu->urb_len = 0; >> >> - /* FIMXE */ >> + hcd->self.controller->dma_mask = hcd->regs; >> > > It is the dma mask, not the register. > > Try below patch to see if it works for you: > > diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c > index da5fb0e..5549851 100644 > --- a/drivers/usb/host/oxu210hp-hcd.c > +++ b/drivers/usb/host/oxu210hp-hcd.c > @@ -37,6 +37,7 @@ > #include <linux/moduleparam.h> > #include <linux/dma-mapping.h> > #include <linux/io.h> > +#include <linux/dma-mapping.h> > > #include <asm/irq.h> > #include <asm/unaligned.h> > @@ -3841,6 +3842,12 @@ static int oxu_drv_probe(struct platform_device *pdev) > goto error; > } > > + ret = dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); > + if (ret) { > + dev_err(&pdev->dev, "set dma mask error\n"); > + goto error; > + } > + > /* Allocate a driver data struct to hold useful info for both > * SPH & OTG devices > */ > > Peter > > >> if (oxu->is_otg) { >> oxu->caps = hcd->regs + OXU_OTG_CAP_OFFSET; >> oxu->regs = hcd->regs + OXU_OTG_CAP_OFFSET + \ >> HC_LENGTH(readl(&oxu->caps->hc_capbase)); >> >> oxu->mem = hcd->regs + OXU_SPH_MEM; >> } else { >> oxu->caps = hcd->regs + OXU_SPH_CAP_OFFSET; >> oxu->regs = hcd->regs + OXU_SPH_CAP_OFFSET + \ >> HC_LENGTH(readl(&oxu->caps->hc_capbase)); >> >> oxu->mem = hcd->regs + OXU_OTG_MEM; >> } >> >> oxu->hcs_params = readl(&oxu->caps->hcs_params); >> oxu->sbrn = 0x20; >> >> ret = oxu_hcd_init(hcd); >> if (ret) >> return ret; >> >> return 0; >> } Unfortunately I can't get it to apply with git apply and get the following message, Checking patch drivers/usb/host/oxu210hp-hcd.c... error: while searching for: goto error; } /* Allocate a driver data struct to hold useful info for both * SPH & OTG devices */ error: patch failed: drivers/usb/host/oxu210hp-hcd.c:3841 error: drivers/usb/host/oxu210hp-hcd.c: patch does not apply I will paste the version of my patch file for your troubles. Regards Nick
diff --git a/drivers/usb/host/oxu210hp-hcd.c b/drivers/usb/host/oxu210hp-hcd.c index da5fb0e..5549851 100644 --- a/drivers/usb/host/oxu210hp-hcd.c +++ b/drivers/usb/host/oxu210hp-hcd.c @@ -37,6 +37,7 @@ #include <linux/moduleparam.h> #include <linux/dma-mapping.h> #include <linux/io.h> +#include <linux/dma-mapping.h> #include <asm/irq.h> #include <asm/unaligned.h> @@ -3841,6 +3842,12 @@ static int oxu_drv_probe(struct platform_device *pdev) goto error; } + ret = dma_coerce_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32)); + if (ret) { + dev_err(&pdev->dev, "set dma mask error\n"); + goto error; + } + /* Allocate a driver data struct to hold useful info for both * SPH & OTG devices */