On 6 February 2015 at 16:07, Kaukab, Yousaf <yousaf.kau...@intel.com> wrote:
>> >> GAHBCFG_HBSTLEN_INCR4 << diff --git a/drivers/usb/dwc2/gadget.c
>> >> b/drivers/usb/dwc2/gadget.c index 15aa578..20085de 100644
>> >> --- a/drivers/usb/dwc2/gadget.c
>> >> +++ b/drivers/usb/dwc2/gadget.c
>> >> @@ -2314,9 +2314,13 @@ void s3c_hsotg_core_init_disconnected(struct
>> >> dwc2_hsotg *hsotg,
>> >>               GINTSTS_USBSUSP | GINTSTS_WKUPINT,
>> >>               hsotg->regs + GINTMSK);
>> >>
>> >> +     if ((hsotg->core_params) && (hsotg->core_params->ahbcfg != -
>> >> 1))
>> >> +             val = hsotg->core_params->ahbcfg &
>> >> ~GAHBCFG_CTRL_MASK;
>> >> +     else
>> >> +             val = GAHBCFG_HBSTLEN_INCR4 <<
>> >> GAHBCFG_HBSTLEN_SHIFT;
>> >> +
>> >>       if (using_dma(hsotg))
>> >> -             writel(GAHBCFG_GLBL_INTR_EN |
>> >> GAHBCFG_DMA_EN |
>> >> -                    (GAHBCFG_HBSTLEN_INCR4 <<
>> >> GAHBCFG_HBSTLEN_SHIFT),
>> >> +             writel(GAHBCFG_GLBL_INTR_EN |
>> >> GAHBCFG_DMA_EN | val,
>> >>                      hsotg->regs + GAHBCFG);
>> >>       else
>> >>               writel(((hsotg->dedicated_fifos) ?
>> >> (GAHBCFG_NP_TXF_EMP_LVL |
>> >
>> > There are other bits in GAHBCFG that can be set from platform. They will be
>> preserved by your patch, as they are not part of GAHBCFG_CTRL_MASK, but
>> only in case dma is enabled. Perhaps preserve them in non-dma case as well.
>>
>> Here may have issue if also set hsotg->core_params->ahbcfg for non-dma case,
>> since GAHBCFG[4:1] may be set.
>
> You can mask off HBstLen in that case. However, I don't think setting burst 
> length will be an issue in non DMA case as DWC2 will not act as a bus master. 
> John, can you please confirm if setting burst length will be an issue in 
> non-dma case?

It would be great if John has some input.
I am not sure, just doubt ahbcfg is specifically used for dma mode.

static int dwc2_gahbcfg_init(struct dwc2_hsotg *hsotg)
{
        case GHWCFG2_INT_DMA_ARCH:
                dev_dbg(hsotg->dev, "Internal DMA Mode\n");
                if (hsotg->core_params->ahbcfg != -1) {
                        ahbcfg &= GAHBCFG_CTRL_MASK;
                        ahbcfg |= hsotg->core_params->ahbcfg &
                                  ~GAHBCFG_CTRL_MASK;
                }
                break;
}

Looks like only GHWCFG2_INT_DMA_ARCH case cares the value of ahbcfg.

>
>>
>> Though from drivers/usb/dwc2/core.h we can not see @ahbcfg is specifically
>> used for dma case, most case in drivers/usb/dwc2/platform.c use ahbcfg is set
>> hbstlen, GAHBCFG[4:1].
>> For example, our platform set GAHBCFG_HBSTLEN_INCR16.
>>
>> So I just assume @ahbcfg is used for dma case.
>> What do you think.
>
> While you are fixing it, why not fix it for other bits, for example 
> AHBSingle, InvDescEndianness etc.,  which are part of the same register and 
> will be overwritten at the same place.

Yes, understand.
Not sure other value need to be overwirtten, if only GAHBCFG[4:1],
burst len, maybe we can add another property?

Will update accordingly after John give some info.

Thanks Yousaf
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to