* Shilimkar, Santosh <[email protected]> [090109 12:51]:
> 
> Tony,
> Regarding your proposal of doing the no. of channel reservation during 
> runtime has one problem. 
> 
> The whole idea was not to restrict users from using all 32 channels and hence 
> the config option. For OMAP secure chips, few security drivers which will 
> execute in secure contex needs dedicated DMA channels and kernel dma library 
> can't be used in that case. So in such cases, required DMA channels can be 
> reserved using this config option. For GP devices all 32 channels can be used 
> currently. 
> 
> If it can done in better way, please suggest.

Well how about passing the configuration for the DMA channels
from board-*.c file then?

> Time being if needed what best I can do is, to split this patch into two 
> parts as mentioned earlier. This will avoid confusion of spurious interrupt 
> issue and dma channel reservation

OK

Regards,

Tony

> 
> > -----Original Message-----
> > From: Shilimkar, Santosh 
> > Sent: Friday, January 09, 2009 10:22 AM
> > To: 'Tony Lindgren'
> > Cc: Pandita, Vikram; [email protected]
> > Subject: RE: [PATCH] [OMAPZOOM] OMAP : DMA: Spurious interrupt fix
> > 
> > 
> > > -----Original Message-----
> > > From: Tony Lindgren [mailto:[email protected]] 
> > > Sent: Thursday, January 08, 2009 8:41 PM
> > > To: Shilimkar, Santosh
> > > Cc: Pandita, Vikram; [email protected]
> > > Subject: Re: [PATCH] [OMAPZOOM] OMAP : DMA: Spurious interrupt fix
> > > 
> > > Hi,
> > > 
> > > * Shilimkar, Santosh <[email protected]> [081204 08:21]:
> > > > From: Santosh Shilimkar <[email protected]>
> > > > 
> > > > This fixes the spurious interrupt issue on a DMA channel. 
> > > 
> > > Sounds like we need to do this. But let's rather do it 
> > during runtime
> > > in dma init with cpu_is_omapXXXX() and omap_type() macros.
> > 
> > Yes we need this. Actually this patch has two parts. One is 
> > the config option and another one is correcting ISR. I could 
> > have done two separate patches.
> >  --- omapkernel.orig/arch/arm/plat-omap/dma.c       
> >  2008-12-04 10:38:16.732010840 +0530
> >  +++ omapkernel/arch/arm/plat-omap/dma.c    2008-12-04 
> >  11:11:07.671274902 +0530
> >  @@ -1946,7 +1946,7 @@ static int omap2_dma_handle_ch(int ch)
> >   /* STATUS register count is from 1-32 while our is 0-31 */
> >   static irqreturn_t omap2_dma_irq_handler(int irq, void *dev_id)
> >   {
> >  -  u32 val;
> >  +  u32 val, enable_reg;
> >     int i;
> >   
> >     val = dma_read(IRQSTATUS_L0);
> >  @@ -1955,6 +1955,8 @@ static irqreturn_t omap2_dma_irq_handler
> >                     printk(KERN_WARNING "Spurious DMA IRQ\n");
> >             return IRQ_HANDLED;
> >     }
> >  +  enable_reg = dma_read(IRQENABLE_L0);
> >  +  val &= enable_reg; /* Dispatch only relevant interrupts */
> >     for (i = 0; i < dma_lch_count && val != 0; i++) {
> >             if (val & 1)
> >                     omap2_dma_handle_ch(i);
> > 
> > We should at least update this on mainline because this was a 
> > real issue. Reserving channel was more of a request from 
> > security drivers which also helps in this case. 
> >  
> > > > 
> > > > Signed-off-by: Santosh Shilimkar <[email protected]>
> > > > Acked By: Nishant Kamat <[email protected]>
> > > > Acked By: Gopinath Thara <[email protected]>
> > > > ---
> > > > --- omapkernel.orig/arch/arm/plat-omap/include/mach/dma.h       
> > > 2008-12-04 10:29:08.949018434 +0530
> > > > +++ omapkernel/arch/arm/plat-omap/include/mach/dma.h    
> > > 2008-12-04 11:14:25.359087775 +0530
> > > > @@ -67,7 +67,11 @@
> > > >  #define OMAP_DMA4_CAPS_4               0x74
> > > >  
> > > >  #define OMAP1_LOGICAL_DMA_CH_COUNT     17
> > > > +#ifdef CONFIG_OMAP_DMA_LIBRARY_CHANNELS
> > > > +#define OMAP_DMA4_LOGICAL_DMA_CH_COUNT 
> > > CONFIG_OMAP_DMA_LIBRARY_CHANNELS
> > > > +#else
> > > >  #define OMAP_DMA4_LOGICAL_DMA_CH_COUNT 32      /* 
> > > REVISIT: Is this 32 + 2? */
> > > > +#endif
> > > >  
> > > >  /* Common channel specific registers for omap1 */
> > > >  #define OMAP1_DMA_CH_BASE(n)           (0x40 * (n) + 0x00)
> > > > Index: omapkernel/arch/arm/plat-omap/Kconfig
> > > > 
> > ===================================================================
> > > > --- omapkernel.orig/arch/arm/plat-omap/Kconfig  
> > > 2008-12-04 10:29:08.949018434 +0530
> > > > +++ omapkernel/arch/arm/plat-omap/Kconfig       2008-12-04 
> > > 10:38:21.883850512 +0530
> > > > @@ -256,6 +256,18 @@ config OMAP_SERIAL_WAKE
> > > >           to data on the serial RX line. This allows you to wake the
> > > >           system from serial console.
> > > >  
> > > > +
> > > > +config OMAP_DMA_LIBRARY_CHANNELS
> > > > +        int "DMA channels controlled by the kernel DMA library"
> > > > +        range 24 32
> > > > +        depends on ARCH_OMAP3
> > > > +        default "32"
> > > > +        help
> > > > +          Some of the OMAP System DMA channels may need to be
> > > > +          reserved for software that don't use the DMA 
> > > library, such as
> > > > +          security drivers. Use this option to limit the 
> > > number of channels
> > > > +          controlled by the kernel DMA library.
> > > > +
> > > >  endmenu
> > > >  
> > > >  endif
> > > > Index: omapkernel/arch/arm/configs/omap_3430sdp_defconfig
> > > > 
> > ===================================================================
> > > > --- omapkernel.orig/arch/arm/configs/omap_3430sdp_defconfig     
> > > 2008-12-04 10:29:08.949018434 +0530
> > > > +++ omapkernel/arch/arm/configs/omap_3430sdp_defconfig  
> > > 2008-12-04 10:38:21.884850481 +0530
> > > > @@ -177,7 +177,7 @@ CONFIG_ARCH_OMAP_OTG=y
> > > >  # CONFIG_ARCH_OMAP1 is not set
> > > >  # CONFIG_ARCH_OMAP2 is not set
> > > >  CONFIG_ARCH_OMAP3=y
> > > > -
> > > > +CONFIG_OMAP_DMA_LIBRARY_CHANNELS=24
> > > >  #
> > > >  # OMAP Feature Selections
> > > >  #
> > > > Index: omapkernel/arch/arm/plat-omap/dma.c
> > > > 
> > ===================================================================
> > > > --- omapkernel.orig/arch/arm/plat-omap/dma.c    
> > > 2008-12-04 10:38:16.732010840 +0530
> > > > +++ omapkernel/arch/arm/plat-omap/dma.c 2008-12-04 
> > > 11:11:07.671274902 +0530
> > > > @@ -1946,7 +1946,7 @@ static int omap2_dma_handle_ch(int ch)
> > > >  /* STATUS register count is from 1-32 while our is 0-31 */
> > > >  static irqreturn_t omap2_dma_irq_handler(int irq, void *dev_id)
> > > >  {
> > > > -       u32 val;
> > > > +       u32 val, enable_reg;
> > > >         int i;
> > > >  
> > > >         val = dma_read(IRQSTATUS_L0);
> > > > @@ -1955,6 +1955,8 @@ static irqreturn_t omap2_dma_irq_handler
> > > >                         printk(KERN_WARNING "Spurious DMA IRQ\n");
> > > >                 return IRQ_HANDLED;
> > > >         }
> > > > +       enable_reg = dma_read(IRQENABLE_L0);
> > > > +       val &= enable_reg; /* Dispatch only relevant interrupts */
> > > >         for (i = 0; i < dma_lch_count && val != 0; i++) {
> > > >                 if (val & 1)
> > > >                         omap2_dma_handle_ch(i);
> > > > Index: omapkernel/arch/arm/configs/omap_ldp_defconfig
> > > > 
> > ===================================================================
> > > > --- omapkernel.orig/arch/arm/configs/omap_ldp_defconfig 
> > > 2008-12-04 11:18:54.000000000 +0530
> > > > +++ omapkernel/arch/arm/configs/omap_ldp_defconfig      
> > > 2008-12-04 11:19:33.507466484 +0530
> > > > @@ -177,6 +177,7 @@ CONFIG_ARCH_OMAP_OTG=y
> > > >  # CONFIG_ARCH_OMAP1 is not set
> > > >  # CONFIG_ARCH_OMAP2 is not set
> > > >  CONFIG_ARCH_OMAP3=y
> > > > +CONFIG_OMAP_DMA_LIBRARY_CHANNELS=32
> > > >  #
> > > >  # OMAP Feature Selections
> > > >  #
> > > > 
> > > > --
> > > > To unsubscribe from this list: send the line "unsubscribe 
> > > linux-omap" in
> > > > the body of a message to [email protected]
> > > > More majordomo info at  http://vger.kernel.org/majordomo-info.html
> > > 
> > > 
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to