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ʱÐò²ÎÊý
#include <linux/wait.h>
#include <linux/syscalls.h>
#include <linux/timer.h>
+#include <asm/tcm.h>
#include "rk2818_dsp.h"
#include "queue.h"
}
#ifdef CONFIG_CHIP_RK2818
-#include <asm/tcm.h>
-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
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*/