dsp: 打开电源域时避免访问DDR
author黄涛 <huangtao@rock-chips.com>
Wed, 1 Sep 2010 05:58:37 +0000 (13:58 +0800)
committer黄涛 <huangtao@rock-chips.com>
Wed, 1 Sep 2010 05:58:58 +0000 (13:58 +0800)
drivers/staging/rk2818/rk2818_dsp/rk2818_dsp.c

index f6170cf9f9df409feedc4e28c83ac35516a1b5d8..0561611ad697c5e0a2abed9f1eb20039a12fe511 100755 (executable)
@@ -338,6 +338,20 @@ void dsp_set_clk(int clkrate)
 #endif
 }
 
+#ifdef CONFIG_CHIP_RK2818
+#include <asm/tcm.h>
+static void __tcmfunc dsp_subsys_power_on(void)
+{
+       unsigned long flags;
+
+       local_irq_save(flags);
+       /* dsp subsys power on 0x21*/
+       tcm_udelay(1, 600);     //¿ªÖ®Ç°Ò²µÃ¼Ó,±ÜÃâ×ÜÏß»¹ÔÚ·ÃÎÊ
+       __raw_writel((__raw_readl(SCU_BASE_ADDR_VA+0x10) & (~0x21)) , SCU_BASE_ADDR_VA+0x10);
+       tcm_udelay(1, 600);     //¹ØÖжÏʱ¼ä²»ÄÜÌ«³¤ (´ó¸ÅΪ1us)
+       local_irq_restore(flags);
+}
+#endif
 
 void dsp_powerctl(int ctl, int arg)
 {
@@ -348,15 +362,9 @@ void dsp_powerctl(int ctl, int arg)
     {
     case DPC_NORMAL:
         {
-#if 0 //def CONFIG_CHIP_RK2818 //coreµçѹ²»ÎÈʱ,dspÉϵç»áµ¼ÖÂAHBÈ¡Ö¸´íÎó,ËùÒÔdspÉϵçºóµ½Îȶ¨Æڼ䲻²Ù×÷AHB
-                       unsigned long flags;
-                       local_irq_save(flags);
-            /* dsp subsys power on 0x21*/
-                       ddr_pll_delay(6000);    //¿ªÖ®Ç°Ò²µÃ¼Ó,±ÜÃâ×ÜÏß»¹ÔÚ·ÃÎÊ
-            __raw_writel((__raw_readl(SCU_BASE_ADDR_VA+0x10) & (~0x21)) , SCU_BASE_ADDR_VA+0x10);
-                       ddr_pll_delay(6000);    //¹ØÖжÏʱ¼ä²»ÄÜÌ«³¤ (6000´ó¸ÅΪ1us)
-                       local_irq_restore(flags);
-                       mdelay(10);
+#ifdef CONFIG_CHIP_RK2818      //coreµçѹ²»ÎÈʱ,dspÉϵç»áµ¼ÖÂAHBÈ¡Ö¸´íÎó,ËùÒÔdspÉϵçºóµ½Îȶ¨Æڼ䲻²Ù×÷AHB
+            dsp_subsys_power_on();
+            mdelay(10);
 #else
             /* dsp subsys power on 0x21*/
             __raw_writel((__raw_readl(SCU_BASE_ADDR_VA+0x10) & (~0x21)) , SCU_BASE_ADDR_VA+0x10);