Hi Junhui, Thank you for the patch.
On sam., janv. 04, 2025 at 11:37, Junhui Liu <junhui....@pigmoral.tech> wrote: > From: Kongyang Liu <seashell11234...@gmail.com> > > The loop used to calculate HBstLen for extern DMA mode does not produce > the correct result according to the datasheet [1]. Replacing that loop > with a direct calculation using LOG2 to correctly assign the burst length > in the GAHBCFG register for external DMA mode. > > [1] https://rockchip.fr/RK312X%20TRM/chapter-26-usb-otg-2-0.pdf#page=24 > > Signed-off-by: Kongyang Liu <seashell11234...@gmail.com> > Reviewed-by: Marek Vasut <ma...@denx.de> > Tested-by: Peter Robinson <pbrobin...@gmail.com> > Signed-off-by: Junhui Liu <junhui....@pigmoral.tech> Reviewed-by: Mattijs Korpershoek <mkorpersh...@baylibre.com> > > --- > Additionally, the boards I have only use internal DMA mode, and it’s > unclear which chips employ external DMA. The testing was performed by > comparing against the datasheet, and the results are shown in [2]. > > [2] https://gist.github.com/Judehahh/34530da390b58728102778406e602cb1 > --- > drivers/usb/host/dwc2.c | 7 ++----- > 1 file changed, 2 insertions(+), 5 deletions(-) > > diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c > index > 609de18faa3abc5f4ecb0c23cf3590966bad7992..954650d856a4f2e95d74e1b5716c0ebe83fa9ba8 > 100644 > --- a/drivers/usb/host/dwc2.c > +++ b/drivers/usb/host/dwc2.c > @@ -448,11 +448,8 @@ static void dwc_otg_core_init(struct udevice *dev) > case DWC2_HWCFG2_ARCHITECTURE_SLAVE_ONLY: > break; > case DWC2_HWCFG2_ARCHITECTURE_EXT_DMA: > - while (brst_sz > 1) { > - ahbcfg |= ahbcfg + (1 << DWC2_GAHBCFG_HBURSTLEN_OFFSET); > - ahbcfg &= DWC2_GAHBCFG_HBURSTLEN_MASK; > - brst_sz >>= 1; > - } > + ahbcfg |= (LOG2(brst_sz >> 1) << DWC2_GAHBCFG_HBURSTLEN_OFFSET) > & > + DWC2_GAHBCFG_HBURSTLEN_MASK; > > #ifdef DWC2_DMA_ENABLE > ahbcfg |= DWC2_GAHBCFG_DMAENABLE; > > -- > 2.47.1