From 19556667639b12b3ef8efa947b55d28da0930f26 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Tue, 21 Sep 2010 17:19:23 +0800 Subject: [PATCH] =?utf8?q?dsp:=20=E7=A7=BB=E6=A4=8D.25=EF=BC=8C=E6=89=93?= =?utf8?q?=E5=BC=80dsp=E6=97=B6=E5=85=B3=E9=97=ADarm=E7=94=B5=E6=BA=90?= =?utf8?q?=E5=9F=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- arch/arm/mach-rk2818/ddr.c | 29 +++++++++++++++++-- .../staging/rk2818/rk2818_dsp/rk2818_dsp.c | 25 +++++++++------- 2 files changed, 40 insertions(+), 14 deletions(-) diff --git a/arch/arm/mach-rk2818/ddr.c b/arch/arm/mach-rk2818/ddr.c index 711236edde2b..f18fd5512619 100644 --- a/arch/arm/mach-rk2818/ddr.c +++ b/arch/arm/mach-rk2818/ddr.c @@ -1320,14 +1320,37 @@ static void __tcmfunc DDRUpdateTiming(void) pDDR_Reg->CTRL_REG_68 = ddrCTRL_REG_68; } +/* we avoid to use stack and global var. six instr in one cycle.*/ +#if 0 +volatile uint32 __tcmdata for_ddr_delay; void __tcmfunc ddr_pll_delay( int loops ) { - volatile int i; - for( i = loops ; i > 0 ; i-- ){ + for_ddr_delay = loops; + for( ; for_ddr_delay > 0 ; for_ddr_delay-- ){ ; } } - +#else +asm( +" .section \".tcm.text\",\"ax\"\n" +" .align\n" +" .type ddr_pll_delay, #function\n" +" .global ddr_pll_delay\n" +"ddr_pll_delay:\n" +" cmp r0,#0\n" +" movle pc , lr\n" +"1: sub r0,r0,#1\n" +" mov r1,r1\n" +" mov r1,r1\n" +" mov r1,r1\n" +" mov r2,r2\n" +" mov r2,r2\n" +" cmp r0,#0\n" +" bgt 1b\n" +" mov pc,lr\n" +" .previous" +); +#endif /****************************************************************/ //º¯ÊýÃû:SDRAM_BeforeUpdateFreq //ÃèÊö:µ÷ÕûSDRAM/DDRƵÂÊÇ°µ÷Óõĺ¯Êý£¬ÓÃÓÚµ÷ÕûSDRAM/DDRʱÐò²ÎÊý diff --git a/drivers/staging/rk2818/rk2818_dsp/rk2818_dsp.c b/drivers/staging/rk2818/rk2818_dsp/rk2818_dsp.c index 0561611ad697..ead1f313858c 100755 --- a/drivers/staging/rk2818/rk2818_dsp/rk2818_dsp.c +++ b/drivers/staging/rk2818/rk2818_dsp/rk2818_dsp.c @@ -40,6 +40,7 @@ #include #include #include +#include #include "rk2818_dsp.h" #include "queue.h" @@ -339,17 +340,18 @@ void dsp_set_clk(int clkrate) } #ifdef CONFIG_CHIP_RK2818 -#include -static void __tcmfunc dsp_subsys_power_on(void) +static void __tcmfunc dsp_open_power( 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); + unsigned long flags; + dspprintk("enter %s!!\n",__func__); + local_irq_save(flags); + __raw_writel((__raw_readl(SCU_BASE_ADDR_VA+0xc) &(~0xc)) , SCU_BASE_ADDR_VA+0xc); + ddr_pll_delay(1); //¿ªÖ®Ç°Ò²µÃ¼Ó,±ÜÃâ×ÜÏß»¹ÔÚ·ÃÎÊ + __raw_writel((__raw_readl(SCU_BASE_ADDR_VA+0x10) & (~0x21)) , SCU_BASE_ADDR_VA+0x10); + ddr_pll_delay(24); //¹ØÖжÏʱ¼ä²»ÄÜÌ«³¤ (6000´ó¸ÅΪ1us) + __raw_writel((__raw_readl(SCU_BASE_ADDR_VA+0xc) |(1<<2)) , SCU_BASE_ADDR_VA+0xc); + local_irq_restore(flags); + dspprintk("exit %s!!\n",__func__); } #endif @@ -363,7 +365,8 @@ void dsp_powerctl(int ctl, int arg) case DPC_NORMAL: { #ifdef CONFIG_CHIP_RK2818 //coreµçѹ²»ÎÈʱ,dspÉϵç»áµ¼ÖÂAHBÈ¡Ö¸´íÎó,ËùÒÔdspÉϵçºóµ½Îȶ¨Æڼ䲻²Ù×÷AHB - dsp_subsys_power_on(); + /* dsp subsys power on 0x21*/ + dsp_open_power(); mdelay(10); #else /* dsp subsys power on 0x21*/ -- 2.34.1