Ejemplo n.º 1
0
void uart_reset()
{
	if(arc_param->serial_disable)
		return;

	if(readl(P_UART_REG5(UART_PORT_CONS))==0){
	unsigned uart_cfg = readl(P_UART_CONTROL(UART_PORT_CONS));
	unsigned uart_misc = readl(P_AO_UART_MISC);
	setbits_le32(P_AO_RTI_GEN_CNTL_REG0,1<<17);
	clrbits_le32(P_AO_RTI_GEN_CNTL_REG0,1<<17);
	__udelay(100);
	writel(uart_cfg,P_UART_CONTROL(UART_PORT_CONS));
	writel(uart_misc,P_AO_UART_MISC);
	}else{
	unsigned uart_cfg = readl(P_UART_CONTROL(UART_PORT_CONS));
	unsigned uart_misc = readl(P_AO_UART_MISC);
	unsigned new_baudrate=readl(P_UART_REG5(UART_PORT_CONS));
	setbits_le32(P_AO_RTI_GEN_CNTL_REG0,1<<17);
	clrbits_le32(P_AO_RTI_GEN_CNTL_REG0,1<<17);
	__udelay(100);
	writel(uart_cfg,P_UART_CONTROL(UART_PORT_CONS));
	writel(uart_misc,P_AO_UART_MISC);
	writel(new_baudrate,P_UART_REG5(UART_PORT_CONS));
	__udelay(100);
	}
}
Ejemplo n.º 2
0
void reset_mmc(void)
{
	// writel((1 <<3),  P_RESET1_REGISTER);  // reset the whole MMC modules. 
#ifdef POWER_DOWN_DDRPHY
    APB_Wr(MMC_SOFT_RST, 0x0);	 // keep all MMC submodules in reset mode.
#endif
  	//Enable DDR DLL clock input from PLL.
    writel(0xc0000080, P_MMC_CLK_CNTL);  //  @@@ select the final mux from PLL output directly.
    writel(0xc00000c0, P_MMC_CLK_CNTL);

    //enable the clock.
    writel(0x400000c0, P_MMC_CLK_CNTL);

	__udelay(10);	// wait clock stable

	//reset all sub module
	APB_Wr(MMC_SOFT_RST, 0x0);
	while((APB_Rd(MMC_RST_STS)&0xffff) != 0x0);

	//deseart all reset.
	APB_Wr(MMC_SOFT_RST, 0xffff);
	while((APB_Rd(MMC_RST_STS)&0xffff) != 0xffff);
	__udelay(100);	// wait DLL lock.

}
Ejemplo n.º 3
0
void lowlevel_init(void* cur,void * target)
{
    int i;

    //close ddr
    //gpiob_8 
    clrbits_le32(P_PREG_GGPIO_O, 1<<16);
    clrbits_le32(P_PREG_GGPIO_EN_N, 1<<16);
    //gpiob_5 
    clrbits_le32(P_PREG_GGPIO_O, 1<<13);
    clrbits_le32(P_PREG_GGPIO_EN_N, 1<<13);
    //gpiob_6 
    //clrbits_le32(P_PREG_GGPIO_O, 1<<14);
    //clrbits_le32(P_PREG_GGPIO_EN_N, 1<<14);

	//Adjust 1us timer base
	setbits_le32(P_PREG_GGPIO_O, 1<<5);
	clrbits_le32(P_PREG_GGPIO_EN_N, 1<<5);
	//vcc_12v/24v power on GPIOX_70
	setbits_le32(P_PREG_GGPIO_O, 1<<6);
	clrbits_le32(P_PREG_GGPIO_EN_N, 1<<6);

    //backlight GPIOX_53
	setbits_le32(P_PREG_FGPIO_O, 1<<21);
	clrbits_le32(P_PREG_FGPIO_EN_N, 1<<21);
	WRITE_CBUS_REG_BITS(PREG_CTLREG0_ADDR,CONFIG_CRYSTAL_MHZ,4,5);
	/*
        Select TimerE 1 us base
    */
	clrsetbits_le32(P_ISA_TIMER_MUX,0x7<<8,0x1<<8);
    memory_pll_init(0,NULL);
	//serial_put_dword(get_timer(0));
	//serial_put_dword(readl(0xc1100000+0x200b*4));
#if CONFIG_ENABLE_SPL_DEBUG_ROM
    __udelay(100000);//wait for a uart input 
	if(serial_tstc()){
		writel(0,P_WATCHDOG_TC);//disable Watchdog	  
	    debug_rom(__FILE__,__LINE__);
		}
#else
    __udelay(1000);//delay 1 ms , wait pll ready	
#endif	

#if 1
#if CONFIG_ENABLE_SPL_DEBUG_ROM	
	if(ddr_init_test()){
		writel(0,P_WATCHDOG_TC);//disable Watchdog	  
	    debug_rom(__FILE__,__LINE__);
		}
#else

    do{
    }while(ddr_init_test(0x6));
#endif	    
#endif
	writel(0,P_WATCHDOG_TC);//disable Watchdog    
//	serial_puts("\nM2C Systemp Started\n");
}
Ejemplo n.º 4
0
void lowlevel_init(void* cur,void * target)
{
#if 0    
	if(cur != target) //r0!=r1
	{
	    //running from spi
    	// take me as a spi rom boot mode
		romboot_info->por_cfg = POR_INTL_SPI |
		    (READ_CBUS_REG(ASSIST_POR_CONFIG)&(~POR_INTL_CFG_MASK));
		romboot_info->boot_id = 0;//boot from spi
		/// Release pull up registers .
	}
#endif	

	power_hold();
	backlight_off();

	//changed by Elvis, add uart rx pull up
	//pull up LINUX_RX(B15--->GPIOE_19) reg (7422y v1.pdf)
	//GPIOE_19(M1-Apps v25- 2010-07-19-BGA372_297-6.xls serach B15)
	WRITE_CBUS_REG( PAD_PULL_UP_REG3, READ_CBUS_REG(PAD_PULL_UP_REG3) & ~(1<<2) );	// Meson-pull-up-down_table.xlsx ( GPIOE_19 is PAD_PULL_UP_REG3---0x203e 2bits)

	//Adjust 1us timer base
	WRITE_CBUS_REG_BITS(PREG_CTLREG0_ADDR,CONFIG_CRYSTAL_MHZ,4,5);
	/*
        Select TimerE 1 us base
    	*/
	clrsetbits_le32(P_ISA_TIMER_MUX,0x7<<8,0x1<<8);
    	memory_pll_init(0,NULL);
	serial_puts("\nFirmware start at: ");
	serial_put_dword(get_timer(0));
#if CONFIG_ENABLE_SPL_DEBUG_ROM
    __udelay(100000);//wait for a uart input 
	if(serial_tstc())
	{
	    debug_rom(__FILE__,__LINE__);
	}
#else
    __udelay(1000);//delay 1 ms , wait pll ready	
#endif	
//	writel((0<<22)|1000000,P_WATCHDOG_TC);//enable Watchdog
	unsigned por_cfg;
#if CONFIG_ENABLE_SPL_DEBUG_ROM	
	if(ddr_init_test())
	    debug_rom(__FILE__,__LINE__);
#else
    do{
    }while(ddr_init_test());

#endif	    
	serial_puts("\nFirmware started, now starting u-boot...");
}
Ejemplo n.º 5
0
void init_ddr_pll(void)
{
#if 0
	reset_ddrpll:
	//reset pll
	writel(readl(P_HHI_DDR_PLL_CNTL)|(1<<29),P_HHI_DDR_PLL_CNTL);
	
	writel(v_ddr_pll_cntl2,P_HHI_DDR_PLL_CNTL2);
	writel(v_ddr_pll_cntl3,P_HHI_DDR_PLL_CNTL3);
	writel(v_ddr_pll_cntl4,P_HHI_DDR_PLL_CNTL4);
	writel(v_ddr_pll_cntl&0x7FFFFFFF,P_HHI_DDR_PLL_CNTL);
    
    __udelay(1000);
    while((readl(P_HHI_DDR_PLL_CNTL)&0x80000000) == 0)
    {
        clrbits_le32(P_AM_ANALOG_TOP_REG1,1);
        setbits_le32(P_AM_ANALOG_TOP_REG1,1);
        goto reset_ddrpll;
    }
#endif /* 0 */

// Mike's code
	int i;
	
reset_ddrpll:
	i=0;
	// reset bandgap
    clrbits_le32(P_AM_ANALOG_TOP_REG1,1);
    setbits_le32(P_AM_ANALOG_TOP_REG1,1);
    __udelay(1000);

	//reset pll
	writel(readl(P_HHI_DDR_PLL_CNTL)|(1<<29),P_HHI_DDR_PLL_CNTL);
	// program the PLL	
	writel(v_ddr_pll_cntl2,P_HHI_DDR_PLL_CNTL2);
	writel(v_ddr_pll_cntl3,P_HHI_DDR_PLL_CNTL3);
	writel(v_ddr_pll_cntl4,P_HHI_DDR_PLL_CNTL4);
	
	//writel(v_ddr_pll_cntl&0x7FFFFFFF,P_HHI_DDR_PLL_CNTL);
	writel((v_ddr_pll_cntl & ~(1<<30))|1<<29,P_HHI_DDR_PLL_CNTL);	
	writel(v_ddr_pll_cntl & ~(3<<29),P_HHI_DDR_PLL_CNTL);
    
    do {
    	__udelay(1000);
    	if (i++ >= 100000)
    		goto reset_ddrpll;   // excessive error, let's try again
    } while((readl(P_HHI_DDR_PLL_CNTL)&0x80000000) == 0);
    
	return;
}
Ejemplo n.º 6
0
static void clock_sync_cpu(struct clock_sync_data *sync)
{
	atomic_dec(&sync->cpus);
	enable_sync_clock();
	/*
	 * This looks like a busy wait loop but it isn't. etr_sync_cpus
	 * is called on all other cpus while the TOD clocks is stopped.
	 * __udelay will stop the cpu on an enabled wait psw until the
	 * TOD is running again.
	 */
	while (sync->in_sync == 0) {
		__udelay(1);
		/*
		 * A different cpu changes *in_sync. Therefore use
		 * barrier() to force memory access.
		 */
		barrier();
	}
	if (sync->in_sync != 1)
		/* Didn't work. Clear per-cpu in sync bit again. */
		disable_sync_clock(NULL);
	/*
	 * This round of TOD syncing is done. Set the clock comparator
	 * to the next tick and let the processor continue.
	 */
	fixup_clock_comparator(sync->fixup_cc);
}
Ejemplo n.º 7
0
static void wait_clock(unsigned clk,unsigned dest)
{
	char * pszCLK[] = {
		NULL,NULL,NULL,"DDR PLL","USB0 CLK","USB1 CLK",
		"VID PLL","CLK81",NULL,NULL,NULL,"ETH RMII","VID2 PLL",
		};
    unsigned cur;
    do{
        cur=clk_util_clk_msr(clk);
		serial_puts("\nSet [");
		if(clk < (sizeof(pszCLK)/sizeof(pszCLK[0])) &&
			pszCLK[clk])
			serial_puts(pszCLK[clk]);
		else
			serial_puts("N/A");
		
		serial_puts("] to ");
        serial_put_dec(dest);
        serial_puts("MHz now it is ");

		//tolerance +/- 1
		if((cur == dest-1) || (cur == dest+1))
			serial_put_dec(dest);
		else
			serial_put_dec(cur);
		
		serial_puts("MHz");
        __udelay(100);
    }while(cur<dest-1 || cur >dest+1);

	serial_puts(" --> OK!\n");
	
}
Ejemplo n.º 8
0
static unsigned long wandboard_dram_init(void)
{
	int cpu_type = __imx6_cpu_type();
	unsigned long memsize;

	switch (cpu_type) {
	case  IMX6_CPUTYPE_IMX6S:
		mx6sdl_dram_iocfg(32, &mx6sdl_ddr_ioregs, &mx6sdl_grp_ioregs);
		mx6_dram_cfg(&mem_s, &mx6s_512m_mmdc_calib, &h5tq2g63dfr);
		memsize = SZ_512M;
		break;
	case IMX6_CPUTYPE_IMX6DL:
		mx6sdl_dram_iocfg(64, &mx6sdl_ddr_ioregs, &mx6sdl_grp_ioregs);
		mx6_dram_cfg(&mem_dl, &mx6dl_1g_mmdc_calib, &h5tq2g63dfr);
		memsize = SZ_1G;
		break;
	case IMX6_CPUTYPE_IMX6Q:
		mx6dq_dram_iocfg(64, &mx6dq_ddr_ioregs, &mx6dq_grp_ioregs);
		mx6_dram_cfg(&mem_q, &mx6q_2g_mmdc_calib, &h5t04g63afr);
		memsize = SZ_2G;
		break;
	default:
		return 0;
	}

	__udelay(100);

	mmdc_do_write_level_calibration();
	mmdc_do_dqs_calibration();
#ifdef DEBUG
	mmdc_print_calibration_results();
#endif
	return memsize;
}
Ejemplo n.º 9
0
static u32 _amd_erase_flash(u32 addr, u32 sector)
{
	unsigned elapsed;

	/* Issue erase */
	*(volatile u32*)(addr + 0x5554) = 0xAAAAAAAA;
	*(volatile u32*)(addr + 0xaaa8) = 0x55555555;
	*(volatile u32*)(addr + 0x5554) = 0x80808080;
	/* And one unlock */
	*(volatile u32*)(addr + 0x5554) = 0xAAAAAAAA;
	*(volatile u32*)(addr + 0xaaa8) = 0x55555555;
	/* Sector erase command comes last */
	*(volatile u32*)(addr + sector) = 0x30303030;

	elapsed = sc520_mmcr->swtmrmilli; /* dummy read */
	elapsed = 0;
	__udelay(50);
	while (((*(volatile u32*)(addr + sector)) & 0x80808080) != 0x80808080) {

		elapsed += sc520_mmcr->swtmrmilli;
		if (elapsed > ((CONFIG_SYS_FLASH_ERASE_TOUT/CONFIG_SYS_HZ) * 1000)) {
			*(volatile u32*)(addr) = 0xf0f0f0f0;
			return 1;
		}
	}

	*(volatile u32*)(addr) = 0xf0f0f0f0;

	return 0;
}
Ejemplo n.º 10
0
STATIC_PREFIX void memory_pll_init(int argc, char * argv[])
{
    pll_init(&__plls); //running under default freq now . Before we fixed the PLL stable problem
	__udelay(1000);//delay 1 ms , wait pll ready
    serial_init(__plls.uart);

}
Ejemplo n.º 11
0
void disable_mmc_req(void)
{
	APB_Wr(MMC_REQ_CTRL,0X0);
  	while(APB_Rd(MMC_CHAN_STS) == 0){
		__udelay(100);
	}
}
Ejemplo n.º 12
0
void enable_retention(void)
{
	 //RENT_N/RENT_EN_N switch from 01 to 10 (2'b10 = ret_enable)
	writel((readl(P_AO_RTI_PWR_CNTL_REG0)&(~(3<<16)))|(2<<16),P_AO_RTI_PWR_CNTL_REG0);
	__udelay(200000);

	//writel(readl(P_AO_RTI_PIN_MUX_REG)|(1<<20),P_AO_RTI_PIN_MUX_REG);
}
Ejemplo n.º 13
0
void disable_retention(void)
{
//RENT_N/RENT_EN_N switch from 10 to 01
	writel((readl(P_AO_RTI_PWR_CNTL_REG0)&(~(3<<16)))|(1<<16),P_AO_RTI_PWR_CNTL_REG0);
	__udelay(200);

	//writel(readl(P_AO_RTI_PIN_MUX_REG)&(~(1<<20)),P_AO_RTI_PIN_MUX_REG);
}
Ejemplo n.º 14
0
int run_testpd(unsigned addr)
{
	  char cmd;
	  
		rbt_save_env();
		
    /** copy ARM code*/
    //change arm mapping
    memcpy((void*)0x49008000,(void*)0x49000000,16*1024);
    
 		//remap arm memory
    writel((0x49008000>>14)&0xf,P_AO_REMAP_REG0);
    
    /** copy ARC code*/
    //copy code to 49000000 and remap to zero
    memcpy((void*)0x49008000,(void*)addr,16*1024);
    writel(0x1<<4,P_AO_REMAP_REG1);
    
    printf("start up ARC\n");
   
    //switch to ARC jtag
 //   writel(0x51001,0xc8100030);
        
    //reset arc
    writel(RESET_ARC625,CBUS_REG_ADDR(RESET2_REGISTER));
    __udelay(1000);
    
   	//enable arc
    writel(1,CBUS_REG_ADDR(AUD_ARC_CTL));
    writel(0,CBUS_REG_ADDR(AUD_ARC_CTL)); 
    
    do{
     		printf("cmd >");
    		cmd = getc();
				writel((unsigned)cmd,P_AO_RTI_STATUS_REG0);
				__udelay(1000);
				__udelay(1000);		
				if(cmd == 't'){
					asm volatile ("wfi");
				}
				else{
    				while(readl(P_AO_RTI_STATUS_REG0) != 0)
    				{
    					__udelay(1000);
    				}
 				}			    
Ejemplo n.º 15
0
void load_nop(void)
{
	writel((1 << 31) |
		(DDR_RANK << 20) |   //rank select
		NOP_CMD
		, P_UPCTL_MCMD_ADDR);
	__udelay(1000);
	while ( readl(P_UPCTL_MCMD_ADDR) & 0x80000000 ) {}
}
Ejemplo n.º 16
0
void mdelay (unsigned long msec)
{
       int i,j;
	   for(i=0;i<msec;i++)
	   {
	      __udelay(1000);
	   }

}
Ejemplo n.º 17
0
void close_usb_phy_clock(int cfg)
{
    dwc_otg_pullup(0);//disconnect
    __udelay(20);

    //dwc_otg_power_off_phy();//close phy
    run_command("sleep 1", 0);//sleep sometime to improve pc compatibility!!
    return;
}
Ejemplo n.º 18
0
static void ir_remocon_send_test(struct ir_remocon_data *data)
{
	unsigned int period = 0;
	int i;
	period = MICRO_SEC / data->signal[0];

	if (data->pwr_en == -1) {
		regulator = regulator_get(NULL, "vled_3.3v");
		if (IS_ERR(regulator))
			goto out;

		regulator_enable(regulator);
		regulator_status = 1;
	}

	if (data->pwr_en != -1)
		gpio_direction_output(data->pwr_en, 1);

	local_irq_disable();
	for (i = 1; i < MAX_SIZE; i++) {
		if (data->signal[i] == 0)
			break;
		else if (data->signal[i] == 10) {
			gpio_direction_output(data->gpio, 1);
			__udelay(period);
		} else if (data->signal[i] == 5) {
			gpio_direction_output(data->gpio, 0);
			__udelay(period);
		}
	}
	local_irq_enable();

	if (data->pwr_en != -1)
		gpio_direction_output(data->pwr_en, 0);

	if ((data->pwr_en == -1) && (regulator_status == 1)) {
		regulator_force_disable(regulator);
		regulator_put(regulator);

		regulator_status = -1;
	}
out: ;
}
Ejemplo n.º 19
0
void close_usb_phy_clock(int cfg)
{
    cfg = cfg;//avoid compiler warning

    dwc_otg_pullup(0);//disconnect
    __udelay(20);
    /*dwc_otg_power_off_phy();*///Don't call this as it may cause pull-down failed!!!!
    run_command("sleep 1", 0);//sleep sometime to improve pc compatibility!!

    return;
}
Ejemplo n.º 20
0
void load_mrs(int mrs_num, int mrs_value)
{
	writel((1 << 31) | 
		(DDR_RANK << 20) |   //rank select
		(mrs_num << 17) |
		(mrs_value << 4) |
		MRS_CMD
		, P_UPCTL_MCMD_ADDR);
	__udelay(1000);
	while ( readl(P_UPCTL_MCMD_ADDR) & 0x80000000 ) {};
}
Ejemplo n.º 21
0
void udelay(unsigned long usec)
{
	ulong kv;

	do {
		WATCHDOG_RESET();
		kv = usec > CONFIG_WD_PERIOD ? CONFIG_WD_PERIOD : usec;
		__udelay (kv);
		usec -= kv;
	} while(usec);
}
Ejemplo n.º 22
0
static void atmel_serial_init_internal(atmel_usart3_t *usart)
{
	/*
	 * Just in case: drain transmitter register
	 * 1000us is enough for baudrate >= 9600
	 */
	if (!(readl(&usart->csr) & USART3_BIT(TXEMPTY)))
		__udelay(1000);

	writel(USART3_BIT(RSTRX) | USART3_BIT(RSTTX), &usart->cr);
}
Ejemplo n.º 23
0
static void atmel_serial_activate(atmel_usart3_t *usart)
{
	writel((USART3_BF(USART_MODE, USART3_USART_MODE_NORMAL)
			   | USART3_BF(USCLKS, USART3_USCLKS_MCK)
			   | USART3_BF(CHRL, USART3_CHRL_8)
			   | USART3_BF(PAR, USART3_PAR_NONE)
			   | USART3_BF(NBSTOP, USART3_NBSTOP_1)),
			   &usart->mr);
	writel(USART3_BIT(RXEN) | USART3_BIT(TXEN), &usart->cr);
	/* 100us is enough for the new settings to be settled */
	__udelay(100);
}
Ejemplo n.º 24
0
int run_arc(unsigned addr)
{
	//char c;
    /** copy ARM code*/
    //change arm mapping
    memcpy((void*)0x49008000,(void*)0x49000000,16*1024);
 		//remap arm memory
    writel((0x49008000>>14)&0xf,P_AO_REMAP_REG0);
    /** copy ARC code*/
    //copy code to 49000000 and remap to zero
    memcpy((void*)0x49008000,(void*)addr,16*1024);
    writel(0x1<<4,P_AO_REMAP_REG1);
    
    writel(0x7fffffff,P_AO_RTI_STATUS_REG0);
    printf("start up ARC\n");
    //switch to ARC jtag
 //   writel(0x51001,0xc8100030);
    
    writel(1,P_AO_RTI_STATUS_REG1);
        
    //reset arc
    writel(RESET_ARC625,CBUS_REG_ADDR(RESET2_REGISTER));
    __udelay(1000);
    
   	//enable arc
    writel(1,CBUS_REG_ADDR(AUD_ARC_CTL));
    writel(0,CBUS_REG_ADDR(AUD_ARC_CTL)); 
    
    unsigned a,b;
    unsigned timer_base;
    a=b=0x7fffffff;
    printf("ARM is Live\n");
    timer_base=get_timer(0);
    do{
        a=readl(P_AO_RTI_STATUS_REG0);
        if((a&0x80000000)|| ((a==b)&&(get_timer(timer_base)<10000000)))
        {
            continue;
        }
        timer_base=get_timer(0);
        b=a;
        printf("ARM is Live: %x",a);
        switch(a&0xffff)
        {
            case 0: 
                printf("ARM Exit Sleep Mode\n");
                break;
            
        }
    }while(a);
       
     return 0;
}
Ejemplo n.º 25
0
int chip_reset(void)
{
#ifdef AML_BOOT_SPI  	
	/* if uboot is on flash then boot agian from flash */
	writel(WATCHDOG_ENABLE_MASK, IREG_WATCHDOG_CONTROL0);
#endif	
	WRITE_CBUS_REG(WATCHDOG_RESET, 0);
    WRITE_CBUS_REG(WATCHDOG_TC, 1 << 22 | 100); /*100*10uS=1ms*/
    WRITE_CBUS_REG(WATCHDOG_RESET, 0);
    __udelay(10000);/**/
    serial_puts("Chip watchdog reset error!!!please reset it by hardware\n");
    while (1) ;
	return 0;
}
Ejemplo n.º 26
0
void udelay( unsigned long usecs )
{
        uint64_t later ;
        uint64_t begin,offset;
        if( clock_source_freezed )
                return __udelay( usecs );
                        
        begin = rockchip_timer_read();
        
        later = (rockchip_apb_clk*TIMER_MIN_PCLK);
        later *= ((uint64_t)usecs);
        do_div(later,USEC_PER_SEC);
        if( later > TIMER_SCR_MASK ){
                printk("%s::too much long delay=%ld us\n",__func__ , usecs );
                return __udelay( usecs );
        }
        while( 1 ) {
                nop();
                offset =  (rockchip_timer_read( )-begin) & TIMER_SCR_MASK ; 
                if( offset >= later) {
                        break;
                }
        }
}
Ejemplo n.º 27
0
STATIC_PREFIX void ddr_pll_init(struct ddr_set * ddr_setting) 
{
    int i;
    writel(ddr_setting->ddr_pll_cntl|0x8000,P_HHI_DDR_PLL_CNTL);   
    writel(0x65e31ff,P_HHI_DDR_PLL_CNTL2);
	writel(0x1649a941,P_HHI_DDR_PLL_CNTL3);
    writel(ddr_setting->ddr_pll_cntl&(~(0x8000)),P_HHI_DDR_PLL_CNTL);    
#if 0
    for ( i = 0; i <= 1000; i ++) {          
       writel(ddr_setting->ddr_ctrl,P_MMC_DDR_CTRL);   // 
    }
#else
    __udelay(100);
    while(!(readl(P_HHI_DDR_PLL_CNTL3)&(1<<31)));
#endif
}
Ejemplo n.º 28
0
Archivo: pll.c Proyecto: xtra72/s805
static void hpll_load_en(void)
{
	Write_reg_bits(P_HHI_VID_CLK_CNTL,1,19,1);
	__udelay(1);
	Write_reg_bits(P_HHI_VID_CLK_CNTL,7,0,3);
	__udelay(1);
	Write_reg_bits(P_HHI_VID_CLK_CNTL,1,16,3);
	__udelay(1);
	writel(0x1, P_ENCL_VIDEO_EN);
	__udelay(100);
	writel(0x0, P_ENCL_VIDEO_EN);
	__udelay(100);
	Write_reg_bits(P_HHI_VID_CLK_CNTL,0,16,3);
    __udelay(10);
}
int rtc_hw_init(void)
{
	losc_ctrl losctl = {0};
	pr_info("%s(%d): start\n", __func__, __LINE__);

	/*
	 * select rtc clock source
	 * on fpga board, internal 32k clk src is the default, and can not be changed
	 */
	 
	losctl.clk32k_auto_swt_en = 0; /* disable auto switch */
	losctl.osc32k_src_sel = 1; /* external 32768hz osc */
	losctl.key_field = 0x16AA;
	losctl.ext_losc_gsm = 2; /* external 32768hz osc gsm: 0b10 */
	rtc_reg_list->losc_ctl = losctl;
	__udelay(100);
	/* check set result */
	losctl = rtc_reg_list->losc_ctl;
	if(1 != losctl.osc32k_src_sel) {
		pr_err("%s(%d) err: set clksrc to external losc failed! rtc time will be wrong\n", __func__, __LINE__);
		losc_err_flag = 1;
	}

	/* clear the alarm count value */
	writel(0x00000000, &rtc_reg_list->a_cnt_dd_hh_mm_ss);

	/* disable alarm, not generate irq pending */
	writel(0x00000000, &rtc_reg_list->a_enable);

	/* disable alarm week/cnt irq, unset to cpu */
	writel(0x00000000, &rtc_reg_list->a_irq_enable);

    writel(0x00000000, ALARM_CONFIG_REG);
	/* clear alarm week/cnt irq pending */
	writel(3, &rtc_reg_list->a_irq_status);
	pr_info("%s(%d): end\n", __func__, __LINE__);
	return 0;
}
Ejemplo n.º 30
0
static void __efuse_write_byte( unsigned long addr, unsigned long data )
{ 
#ifndef CONFIG_MESON_TRUSTZONE	
#ifdef EFUSE_DEBUG
	char *p = (char*)debug_buf;
	p[addr] = data;
	return;
#endif		
	//printf("addr=%d, data=%x\n", addr, data);
	unsigned long auto_wr_is_enabled = 0;

	//set efuse PD=0
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, 0, 27, 1);

	if ( READ_EFUSE_REG( P_EFUSE_CNTL1) & ( 1 << CNTL1_AUTO_WR_ENABLE_BIT ) )
	{
		auto_wr_is_enabled = 1;
	}
	else
	{
		/* temporarily enable Write mode */
		WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, CNTL1_AUTO_WR_ENABLE_ON,
			CNTL1_AUTO_WR_ENABLE_BIT, CNTL1_AUTO_WR_ENABLE_SIZE );
	}

#if defined(CONFIG_M8) || defined(CONFIG_M8B)
	unsigned int byte_sel = addr % 4;
	addr = addr / 4;

	/* write the address */
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, addr,
		CNTL1_BYTE_ADDR_BIT, CNTL1_BYTE_ADDR_SIZE );

	//auto write byte select (0-3), for m8
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL3, byte_sel,
		CNTL1_AUTO_WR_START_BIT, 2 );
#else
	/* write the address */
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, addr,
		CNTL1_BYTE_ADDR_BIT, CNTL1_BYTE_ADDR_SIZE );
#endif

	/* set starting byte address */
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, CNTL1_BYTE_ADDR_SET_ON,
		CNTL1_BYTE_ADDR_SET_BIT, CNTL1_BYTE_ADDR_SET_SIZE );
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, CNTL1_BYTE_ADDR_SET_OFF,
		CNTL1_BYTE_ADDR_SET_BIT, CNTL1_BYTE_ADDR_SET_SIZE );

	/* write the byte */
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, data,
		CNTL1_BYTE_WR_DATA_BIT, CNTL1_BYTE_WR_DATA_SIZE );
	/* start the write process */
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, CNTL1_AUTO_WR_START_ON,
		CNTL1_AUTO_WR_START_BIT, CNTL1_AUTO_WR_START_SIZE );
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, CNTL1_AUTO_WR_START_OFF,
		CNTL1_AUTO_WR_START_BIT, CNTL1_AUTO_WR_START_SIZE );
	/* dummy read */
	READ_EFUSE_REG(P_EFUSE_CNTL1 );

	while ( READ_EFUSE_REG(P_EFUSE_CNTL1) & ( 1 << CNTL1_AUTO_WR_BUSY_BIT ))
	{
		__udelay(1);
	}

	/* if auto write wasn't enabled and we enabled it, then disable it upon exit */
	if (auto_wr_is_enabled == 0 )
	{
		WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, CNTL1_AUTO_WR_ENABLE_OFF,
			CNTL1_AUTO_WR_ENABLE_BIT, CNTL1_AUTO_WR_ENABLE_SIZE );
	}

	//set efuse PD=1
	WRITE_EFUSE_REG_BITS( P_EFUSE_CNTL1, 1, 27, 1);

#endif   // endif trustzone	
}