/*************************************************************************
* FUNCTION
*  USC_Wake_Up_Init
*
* DESCRIPTION
*  This function is used to initialize the us counter variable during waking up to fixed us HW bug. 
*  ths function is only called by  UL1SM_Interrupt (3G wake-up LISR) and L1SM_TDMAInterrupt (2G wake up LISR)
*
* PARAMETERS
*  Timer       -    0: use TDMA timer, 1: use RTR timer
*
* RETURNS
*  none
*
*************************************************************************/
void USC_Wake_Up_Init( kal_uint32  Timer )
{
#if defined(MT6268_S00)

    kal_uint32 irq;
     irq = LockIRQ();
	 
    if( Wake_US_Updated == 0)
    {
      Wake_USCNTI = HW_READ(USCNTI_VAL);
        Wake_Timer = Timer;
        Wake_33us_TimeOut = 0;	
        if( Timer == 0 )
	       Wake_TimerCnt = HW_READ(US_TD_Timer);
        else
         Wake_TimerCnt = HW_READ(US_RTR_Timer) & 0x7FFF ;
	Wake_US_Updated = 1;
	
	//Wake_Temp_Dur = 0;
	//Wake_Timer_Count = 0;
    }

    RestoreIRQ(irq & 0x000000c0);
	
#endif	
	
}
Пример #2
0
void HW_wait_32k_start(void)
{
#if MD_DRV_IS_CENTRALIZED_SMM_CHIP

   #ifdef __UE_SIMULATOR__
#undef   FRC_CMD_MAGIC_VALUE
#define  FRC_CMD_MAGIC_VALUE            0x62760000
   #endif

   /*CSMM use 26M to calibrate 32K at TOPSM HW module*/
   kal_uint32 result;
   int count = 0;
   int waiting_32k_count = 80000;
   kal_uint32 tmp_T0 = 0, tmp_T1 = 0, tmp_D0 = 0, tmp_D1 = 0;

   /* Enable FRC for FM. */
   HW_WRITE( SM_FRC_CON, (FRC_CMD_MAGIC_VALUE+0x00000001) );
   HW_WRITE( SM_FM_CAL, 2 ); /*calibrate 2T 32K, ideal got 1586.9T 26M*/

   while(count < waiting_32k_count)
   {
      /* Enable FM and no need to Unmask FM INT. */
      HW_WRITE(SM_FM_CON, 0x11);

      /* Polling until FM_EN bit is cleared. */
      while((HW_READ(SM_FM_CON) & 0x1)) ;

      tmp_T0 = (HW_READ(SM_FM_T0)) & 0xFFFFFF;
      tmp_D0 = (HW_READ(SM_FM_T0)) >> 24;
      tmp_T1 = (HW_READ(SM_FM_T1)) & 0xFFFFFF;
      tmp_D1 = (HW_READ(SM_FM_T1)) >> 24;
      if( tmp_T1 > tmp_T0 )
      {
         result = (tmp_T1*26+tmp_D1) - (tmp_T0*26+tmp_D0);
      }
      else /* 1MHz FRC wrap case: */
      {
         result = ((tmp_T1+0x1000000)*26+tmp_D1) - (tmp_T0*26+tmp_D0);
      }
      if( FM_RESULT_LOWER_BOUND < result && result < FM_RESULT_UPPER_BOUND )
      {
         /* Clear INT of FM. Need to set bit[4] to mask it. */
         HW_WRITE(SM_FM_CON, 0x110);
         break;
      }
      count++;
   }
#else
   #error "Please implement HW_wait_32k_start() for non-centralized-sleep-mode chip"
#endif
}
Пример #3
0
static void MD_DRV_WAIT_TIME_QB( short time_qb )
{
   unsigned short  last_qb, cur_qb;
   short  qb_diff, qb_remain;

   qb_remain = time_qb;
   last_qb = HW_READ( TQ_CURRENT_COUNT );
   while( qb_remain>0 )
   {  cur_qb = HW_READ( TQ_CURRENT_COUNT );
      qb_diff = cur_qb-last_qb;
      qb_remain -= (qb_diff<0) ? 1 : qb_diff;
      last_qb = cur_qb;
   }
}
Пример #4
0
// These functions may be called at system bootup time,
// so we need to keep the code and data in primary MAUI
void L1D_HW_TDMA_AUX_TIME_SETUP(kal_uint16 event0, kal_uint16 event1)
{
   kal_uint16 d16 = (kal_uint16)HW_READ(TDMA_AUXEVENA);
   HW_WRITE(TDMA_AUXEV0, event0);
   HW_WRITE(TDMA_AUXEV1, event1);
   HW_WRITE(TDMA_AUXEVENA, (d16|0x3));
}
Пример #5
0
int console_init( Console* cons )
{
	ptr base = 0;
	int status = 0;
	uint channel = 0;
	uint control = 0;
	
	base = console_getbase( cons );

	channel = cons->channel == CONSOLE_1 ? COM1 : COM2;
	/* Reset port first */
	cons->write_bytes = 0;
	cons->read_bytes = 0;
	status = bwsetspeed( channel, cons->speed );

	control = HW_READ( base, UART_LCRH_OFFSET );
	
	if( cons->fifo ){
		control |= FEN_MASK;
	} else {
		control &= ( ~FEN_MASK );
	}
	if( cons->dbl_stop ){
		control |= STP2_MASK;
	}
	
	HW_WRITE( base, UART_LCRH_OFFSET, control );

	ASSERT( status == ERR_NONE );

	/* Leave no garbage */
	console_drain( cons );
	
	return ERR_NONE;
}
Пример #6
0
static void MD_DRV_L1D_DisableAllIRQ( void )
{
   HW_WRITE( EVENT_ENA(0), (HW_READ(EVENT_ENA(0))&0x0000)|MD_DRV_EVTENA0_SLOW_EN_SEL );
   HW_WRITE( EVENT_ENA(1), (HW_READ(EVENT_ENA(1))&0x0080) );
   HW_WRITE( EVENT_ENA(2), 0x0000 );
   HW_WRITE( EVENT_ENA(3), 0x0000 );
   HW_WRITE( EVENT_ENA(4), 0x0000 );
   HW_WRITE( EVENT_ENA(5), 0x0000 );
   HW_WRITE( EVENT_ENA(6), 0x0000 );
   #if MD_DRV_IS_TXPC_CL_AUXADC_SUPPORT
   HW_WRITE( EVENT_ENA(7), (HW_READ(EVENT_ENA(7))&0x0003) );
   #endif
   #if MD_DRV_IS_CHIP_MT6290 || MD_DRV_IS_CHIP_MT6595 || MD_DRV_IS_CHIP_MT6752_MD1 || MD_DRV_IS_CHIP_MT6752_MD2 || MD_DRV_IS_CHIP_MT6735
   HW_WRITE( EVENT_ENA(8), 0x0000 );
   HW_WRITE( EVENT_ENA(9), 0x0000 );
   #endif
}
Пример #7
0
/*************************************************************************
* FUNCTION
*  USC_Get_TimeStamp
*
* DESCRIPTION
*  This function calculate the frame number.
*
* PARAMETERS
*  none
*
* RETURNS
*  Frame number since system power up
*
*************************************************************************/
kal_uint32 DEVDRV_LS_INTSRAM_ROCODE USC_Get_TimeStamp( void )
{
#if defined(__ALIGN_2G_CLOCK__)

    kal_uint32 uscnti,curFrame,_savedMask;

    _savedMask = SaveAndSetIRQMask();

    uscnti= ust_get_current_time();
    if (uscnti >= Pre_USCNTI) {
        curFrame = USCNT_TO_FRAME( uscnti - Pre_USCNTI ); // dur/3250/(120/26)
    } else {
        curFrame = USCNT_TO_FRAME((USCNT_WRAP - Pre_USCNTI) + uscnti);
    }
    FrameCount += curFrame;

    Pre_USCNTI += FRAME_TO_USCNT(curFrame);

    if( Pre_USCNTI > USCNT_WRAP )
    {
        Pre_USCNTI -= USCNT_WRAP;
    }

    RestoreIRQMask(_savedMask);

    return FrameCount;

#else

    kal_uint32 uscnti,curFrame,_savedMask;

    _savedMask = SaveAndSetIRQMask();

#if defined(__HW_OSTICK_CNT__)
    HW_WRITE(OST_CMD, CMD_MAGIC_VALUE | 0x02);
    curFrame = HW_READ(OST_TIMER_CNT_R);
#else
    uscnti= ust_get_current_time();

    if (uscnti >= Pre_USCNTI) {
        Total_USCNTI += (uscnti - Pre_USCNTI);
    } else {
        Total_USCNTI += ((USCNT_WRAP - Pre_USCNTI) + uscnti);
    }

    Pre_USCNTI = uscnti;

    curFrame = USCNT_TO_FRAME(Total_USCNTI);
#endif

    RestoreIRQMask(_savedMask);


    return curFrame;
#endif
}
Пример #8
0
int watchdog_init()
{
	uchar* ctrl_addr = ( uchar* )HW_ADDR( WATCHDOG_CTRL, 0 );
	watchdog_refresh();

	/* Timeout 8 seconds */
	*ctrl_addr = 0x07;
	DEBUG_PRINT( DBG_WATCHDOG, "watchdog initialized to %c\n", ( uchar* )HW_READ( WATCHDOG_CTRL, 0 ) );

	return ERR_NONE;
}
Пример #9
0
/*************************************************************************
 * FUNCTION
 *    HW_TDMA_Enable_CTIRQ1
 *
 * DESCRIPTION
 *    This function enable TDMA module CTIRQ1.
 *
 * PARAMETERS
 *
 * RETURNS
 *    None
 *
 * GLOBALS AFFECTED
 *
 *************************************************************************/
void HW_TDMA_Enable_CTIRQ1(void)
{
   kal_uint32 dX;

   HW_TDMA_Start();
   HW_WRITE(CTIRQ1, MD_DRV_TQ_CTIRQ1);
   HW_WRITE(TQ_WRAP, MD_DRV_TQ_WRAP_COUNT-1);
   HW_WRITE(TQ_EVENT_VALID, MD_DRV_TQ_VALIDATE_COUNT);
   dX  = HW_READ(EVENT_ENA(0));
   dX |= 0x2;
   HW_WRITE(EVENT_ENA(0), dX);
}
Пример #10
0
int clk_value( uint clk, uint* val )
{
	ptr base = clk_getbase( clk );

	ASSERT( val );

	clkLastVal[ clk ] = HW_READ( base, TIMER_VAL_OFFSET );
	*val = clkLastVal[ clk ];

	// DEBUG_PRINT( "read clk %u\n", *val );

	return ERR_NONE;
}
Пример #11
0
void L1D_Xmode_Latch(void)
{
   unsigned short d16;
   unsigned short ctrl       = 0x1C3F;                               // SCTRL_IMOD(0,29);
   unsigned long  data       = 0x0FBDD4D0;                           // CW251[D19]:DCXO_XMODE_LATCH = 0x1
   volatile long  addr;
   unsigned long  BSI_base80 = 0x83070000;
   unsigned long  dummy_read;

   /*   init BSI   */
   HW_WRITE( PDN_CLR2, PDN_CON_BSI );
   HW_WRITE( PDN_CLR4, PDN_CON_BSI );

   d16  = HW_READ( ((APBADDR)  (BSI_base80+0x0C08)) );        // BSI_IO_CON
   d16 &= ~( 0x1<<8 );                                        /* clear RESET_MODE (bit 8) */
   HW_WRITE( ((APBADDR)  (BSI_base80+0x0C08)), d16 );         // BSI_IO_CON

   /*   immediately send  BSI */
   HW_WRITE( ((APBADDR32)(BSI_base80+0x0000)), 0x0008001 );   // HW_WRITE( BSI_CON, SCTRL_IMOD_MAIN );
   addr = (long)((APBADDR)  (BSI_base80+0x0004));             // BSI_Dn_CON(0);
   HW_WRITE( (APBADDR)addr, ctrl );  addr += 4;
   HW_WRITE( (APBADDR32)(addr), (data) );                     // HW_WRITE_BSI_DATA( addr, data );

   dummy_read = HW_READ( (APBADDR32)(addr) );

   HW_WRITE( ((APBADDR)  (BSI_base80+0x0508)), 0x8000 );      // HW_WRITE( GSM_BSI_ACTUPT, 0x8000 );

   dummy_read = HW_READ( (APBADDR32)(addr) ); 
   (void)dummy_read;

   HW_WRITE( ((APBADDR32)(BSI_base80+0x0000)), 0x8401 );      // HW_WRITE( BSI_CON, SCTRL_IMOD_SEND );

   /*  immediately mode end  */
   HW_WRITE( ((APBADDR32)(BSI_base80+0x0000)), 0x0008001  );  // HW_WRITE( BSI_CON,  SCTRL_MAIN );
   HW_WRITE( ((APBADDR32)(BSI_base80+0x0500)), 0xFFFFFFFF );  // MT6280 is 42
   HW_WRITE( ((APBADDR32)(BSI_base80+0x0504)), 0x000003FF );

}
/*************************************************************************
* FUNCTION
*  USC_Get_Int
*
* DESCRIPTION
* This function is used to get the integer value of us counter to fix the us counter hw bug.
*
* PARAMETERS
*  none
*
* RETURNS
*  compensated us counter value.
*
*************************************************************************/
kal_uint32 USC_Get_Int(void)
{
#if defined(MT6268_S00)

    kal_uint32 ret_val,irq,duration;

     irq = LockIRQ();
    
    if(  Wake_33us_TimeOut == 0 )
    {
        if ( Wake_Timer == 1 )
        {
            //Wake_Timer_Tick[Wake_Timer_Count] = (*US_RTR_Timer & 0x7FFF ) ;
          if( (HW_READ(US_RTR_Timer) & 0x7FFF ) >=  Wake_TimerCnt )
            {
                //duration = ( (*US_RTR_Timer & 0x7FFF )  - Wake_TimerCnt )*325/3072 ;
                 duration = (( (*US_RTR_Timer & 0x7FFF )  - Wake_TimerCnt )*6933)>>16;
            }
	     else
	     {
	         //duration = ( 0x7FFF - Wake_TimerCnt + (*US_RTR_Timer & 0x7FFF ) )*325/3072;
              duration = (( 0x7FFF - Wake_TimerCnt + (HW_READ(US_RTR_Timer) & 0x7FFF ) )*6933)>>16;
	     }
        }
Пример #13
0
unsigned int uVtc_get_detect(void)
{
	uio_handle Vtc_handle;
	unsigned int detectedSize = 0;
	assert(gVtcInfo.isInitialized == XIL_COMPONENT_IS_READY);

	uio_get_Handler(&gVtcInfo, &Vtc_handle);
	assert(Vtc_handle.IsReady == XIL_COMPONENT_IS_READY);

	detectedSize = HW_READ(Vtc_handle.Control_bus_BaseAddress, VTC_DETECT);

	uio_release_handle(&gVtcInfo,&Vtc_handle);

	return detectedSize;
}
Пример #14
0
int clk_reset( uint clk, uint initial )
{
	ptr base = clk_getbase( clk );
	uint ctrlVal = 0;
	int status;

	ctrlVal = HW_READ( base, TIMER_CTRL_OFFSET );

	status = clk_disable( clk );
	ASSERT( status == ERR_NONE );

	HW_WRITE( base, TIMER_LDR_OFFSET, initial );
	
	status = clk_enable_direct( clk, ctrlVal );
	ASSERT( status == ERR_NONE );

	return ERR_NONE;
}
Пример #15
0
/* Receive one byte through the UART port.
   Set block to 1 to busy wait until ready bit is set.
*/
static inline int console_receive( Console* cons, uchar* data, uint blocking )
{
	ptr base = console_getbase( cons );

	do {
		if( console_ready_read( cons ) ){
			*data = (uchar)HW_READ( base, UART_DATA_OFFSET );
			cons->read_bytes += 1;
			break;
		} else if( blocking ){
			continue;
		} else {
			return ERR_CONSOLE_NOT_READY;
		}
	} while( 1 );

	return ERR_NONE;
}
Пример #16
0
void Frequency_hopping_enable( void )
{
#if MD_DRV_IS_UDVT_FH_SUPPORT
   int d16;
   sFHset FHset = { (1 << FREE_RUN_BASE), 0 }; // -1%

   /*Enable DDS. Let RG_MDDS_EN[0] = 1*/
   /*It is done in INT_SetPLL()*/

   /*Power on TDMA*/
   HW_TDMA_Start();

   /*Init TQ_WRAP and Event validate*/
   HW_WRITE( TQ_WRAP, MD_DRV_TQ_WRAP_COUNT-1 );
   HW_WRITE( TQ_EVENT_VALID, MD_DRV_TQ_VALIDATE_COUNT );

   /*Low index of FH_table_UDVT first*/
   d16 = HW_READ(TDMA_FHCON(0));
   d16 &= TDMA_FHCON0_MASK;
   HW_WRITE( TDMA_FHCON(0), d16 );

   /*MNPLL free run range*/
   L1D_SET_MNPLL_FREE_RUN_RANGE();

   /*EFPLL free run range*/
   L1D_SET_EFPLL_FREE_RUN_RANGE();

   /*MNPLL FH type*/
   L1D_SET_MNPLL_FH_TYPE();

   /*EFPLL FH type*/
   L1D_SET_EFPLL_FH_TYPE();

   /*Reset FH TDMA timer*/
   ReSet_MPLLFH_FHSTR();

   /*init frequency hopping table*/
   FH_init_FHtable();

   FH_set_fhset( 0, &FHset );
   HW_WRITE( TQ_BIAS_CONT, 0 );
   HW_WRITE( TDMA_FHSTR(0), 0 );
#endif
}
Пример #17
0
int clk_speed( uint clk, uint* speed )
{
	ptr base = clk_getbase( clk );
	uint srcSel = 0;
	uint clkSpeed = 0;

	srcSel = HW_READ( base, TIMER_CTRL_OFFSET ) & TIMER_CLKSEL_MASK;

	switch( srcSel ){
	case 0:
		// SEL unset, 2kHz clock
		clkSpeed = CLK_SRC_2KHZ_SPEED;
		break;
	case TIMER_CLKSEL_MASK:
		// SEL set, 508 kHz clock
		clkSpeed = CLK_SRC_508KHZ_SPEED;
		break;
	}

	*speed = clkSpeed;
	
	return ERR_NONE;
}
Пример #18
0
kal_uint16 L1D_HW_TDMA_GET_TQWRAP( void )
{
   return HW_READ(TQ_WRAP);
}
Пример #19
0
kal_uint16 L1D_TDMA_GET_TQCNT( void )
{
   return HW_READ(TQ_CURRENT_COUNT);
}
Пример #20
0
kal_uint32 L1D_HW_TDMA_GET_32KCNT( void )
{
   return HW_READ(RTCCOUNT);
}