Hi, On Wed, Jun 24, 2020 at 3:06 PM André Przywara <andre.przywara@xxxxxxx> wrote: > > On 24/06/2020 07:15, Vinod Koul wrote: > > Hi, > > > On 09-06-20, 15:47, Amit Singh Tomar wrote: > > > >> @@ -372,6 +383,7 @@ static inline int owl_dma_cfg_lli(struct owl_dma_vchan *vchan, > >> struct dma_slave_config *sconfig, > >> bool is_cyclic) > >> { > >> + struct owl_dma *od = to_owl_dma(vchan->vc.chan.device); > >> u32 mode, ctrlb; > >> > >> mode = OWL_DMA_MODE_PW(0); > >> @@ -427,14 +439,26 @@ static inline int owl_dma_cfg_lli(struct owl_dma_vchan *vchan, > >> lli->hw[OWL_DMADESC_DADDR] = dst; > >> lli->hw[OWL_DMADESC_SRC_STRIDE] = 0; > >> lli->hw[OWL_DMADESC_DST_STRIDE] = 0; > >> - /* > >> - * Word starts from offset 0xC is shared between frame length > >> - * (max frame length is 1MB) and frame count, where first 20 > >> - * bits are for frame length and rest of 12 bits are for frame > >> - * count. > >> - */ > >> - lli->hw[OWL_DMADESC_FLEN] = len | FCNT_VAL << 20; > >> - lli->hw[OWL_DMADESC_CTRLB] = ctrlb; > >> + > >> + if (od->devid == S700_DMA) { > >> + /* Max frame length is 1MB */ > >> + lli->hw[OWL_DMADESC_FLEN] = len; > >> + /* > >> + * On S700, word starts from offset 0x1C is shared between > >> + * frame count and ctrlb, where first 12 bits are for frame > >> + * count and rest of 20 bits are for ctrlb. > >> + */ > >> + lli->hw[OWL_DMADESC_CTRLB] = FCNT_VAL | ctrlb; > >> + } else { > >> + /* > >> + * On S900, word starts from offset 0xC is shared between > >> + * frame length (max frame length is 1MB) and frame count, > >> + * where first 20 bits are for frame length and rest of > >> + * 12 bits are for frame count. > >> + */ > >> + lli->hw[OWL_DMADESC_FLEN] = len | FCNT_VAL << 20; > >> + lli->hw[OWL_DMADESC_CTRLB] = ctrlb; > > > > Unfortunately this wont scale, we will keep adding new conditions for > > newer SoC's! So rather than this why not encode max frame length in > > driver_data rather than S900_DMA/S700_DMA.. In future one can add values > > for newer SoC and not code above logic again. > > What newer SoCs? I don't think we should try to guess the future here. > We can always introduce further abstractions later, once we actually > *know* what we are looking at. > Apart from it , we have *one* more SoC from Actions .i.e. S500 where the DMA controller is identical to S900, and requires *no* additional code to work properly. So, I think we are safe to have the changes proposed in this patch. Thanks -Amit