Troy Kisky <troy.ki...@boundarydevices.com> writes:

> Reserve channels 0,1,12,13 and
> slots 78-109 for dsp use on dm644x.
>
> Signed-off-by: Troy Kisky <troy.ki...@boundarydevices.com>
>
> I've only verified that channels 0, and 78-101 need
> reserved, but reserving a little extra seems like
> a good idea.

I'm not crazy about this hard-coded reservation.

The DSP code has a kernel-side driver (dsplinkk.)  That driver
should be doing the channel reservations.

Kevin

>  arch/arm/mach-davinci/dm644x.c            |    6 ++++++
>  arch/arm/mach-davinci/dma.c               |    8 ++++++++
>  arch/arm/mach-davinci/include/mach/edma.h |    7 ++++++-
>  3 files changed, 20 insertions(+), 1 deletions(-)
>
> diff --git a/arch/arm/mach-davinci/dm644x.c b/arch/arm/mach-davinci/dm644x.c
> index 6a08568..86eb9ef 100644
> --- a/arch/arm/mach-davinci/dm644x.c
> +++ b/arch/arm/mach-davinci/dm644x.c
> @@ -403,6 +403,12 @@ static struct edma_soc_info dm644x_edma_info = {
>       .n_slot         = 128,
>       .n_tc           = 2,
>       .noevent        = dma_chan_dm644x_no_event,
> +/* reserve slots 78-109 for dsp use */
> +     .dsp_reserve_slot_min = 78,
> +     .dsp_reserve_slot_max = 78 + 31,
> +/* reserve channels 0, 1, 12, 13 for dsp use */
> +     .dsp_reserve_channel_min = 0,
> +     .dsp_reserve_channel_max = 13,
>  };
>  
>  static struct resource edma_resources[] = {
> diff --git a/arch/arm/mach-davinci/dma.c b/arch/arm/mach-davinci/dma.c
> index 1f58631..f2e6b8a 100644
> --- a/arch/arm/mach-davinci/dma.c
> +++ b/arch/arm/mach-davinci/dma.c
> @@ -1051,6 +1051,14 @@ static int __init edma_probe(struct platform_device 
> *pdev)
>               while (*noevent != -1)
>                       set_bit(*noevent++, edma_noevent);
>       }
> +     for (i = info->dsp_reserve_slot_min;
> +                     i <= info->dsp_reserve_slot_max; i++)
> +             set_bit(i, edma_inuse);
> +
> +     for (i = info->dsp_reserve_channel_min;
> +                     i <= info->dsp_reserve_channel_max; i++)
> +             if (test_bit(i, edma_noevent))
> +                     set_bit(i, edma_inuse);
>  
>       irq = platform_get_irq(pdev, 0);
>       status = request_irq(irq, dma_irq_handler, 0, "edma", &pdev->dev);
> diff --git a/arch/arm/mach-davinci/include/mach/edma.h 
> b/arch/arm/mach-davinci/include/mach/edma.h
> index b467358..cb45960 100644
> --- a/arch/arm/mach-davinci/include/mach/edma.h
> +++ b/arch/arm/mach-davinci/include/mach/edma.h
> @@ -222,8 +222,13 @@ struct edma_soc_info {
>       unsigned        n_slot;
>       unsigned        n_tc;
>  
> -     /* list of channels with no even trigger; terminated by "-1" */
> +     /* list of channels with no event trigger; terminated by "-1" */
>       const s8        *noevent;
> +     u16             dsp_reserve_slot_min;
> +     u16             dsp_reserve_slot_max;
> +     /* only "no event" channels in range below are reserved */
> +     u16             dsp_reserve_channel_min;
> +     u16             dsp_reserve_channel_max;
>  };
>  
>  #endif
> -- 
> 1.5.4.3
>
>
> _______________________________________________
> Davinci-linux-open-source mailing list
> Davinci-linux-open-source@linux.davincidsp.com
> http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

_______________________________________________
Davinci-linux-open-source mailing list
Davinci-linux-open-source@linux.davincidsp.com
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to