omap3530/omap3530_drivers/prcm/prcm.cpp
changeset 23 117faf51deac
parent 0 6663340f3fc9
child 52 d2416cb47e12
equal deleted inserted replaced
22:b7e488c49d0d 23:117faf51deac
   152 		{ KCM_CLKSEL_CORE,			KBit0 | KBit1,					EDiv_1_2,			0 },	// EClkL3Domain,
   152 		{ KCM_CLKSEL_CORE,			KBit0 | KBit1,					EDiv_1_2,			0 },	// EClkL3Domain,
   153 		{ KCM_CLKSEL_CORE,			KBit2 | KBit3,					EDiv_1_2,			2 },	// EClkL4Domain,
   153 		{ KCM_CLKSEL_CORE,			KBit2 | KBit3,					EDiv_1_2,			2 },	// EClkL4Domain,
   154 
   154 
   155 		{ KCM_CLKSEL1_PLL_MPU,		KBit19 | KBit20 | KBit21,		EDivCore_1_2_4,		19 },	// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   155 		{ KCM_CLKSEL1_PLL_MPU,		KBit19 | KBit20 | KBit21,		EDivCore_1_2_4,		19 },	// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   156 		{ KCM_CLKSEL1_PLL_IVA2,		KBit19 | KBit20 | KBit21,		EDivCore_1_2_4,		19 },	// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   156 		{ KCM_CLKSEL1_PLL_IVA2,		KBit19 | KBit20 | KBit21,		EDivCore_1_2_4,		19 },	// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   157 		{ KCM_CLKSEL_WKUP,			KBit1 | KBit2,					EDiv_1_2,			1 },	// EClkRM_F,	///< Reset manager functional clock	
   157 		{ KCM_CLKSEL_WKUP,			KBit1 | KBit2,					EDiv_1_2,			1 },	// EClkRM_F,	///< Reset manager functional clock
   158 		{ KCM_CLKSEL3_PLL,			0x1F,							EDivPll_1_To_16,	0 },	// EClk96M		///< 96MHz clock
   158 		{ KCM_CLKSEL3_PLL,			0x1F,							EDivPll_1_To_16,	0 },	// EClk96M		///< 96MHz clock
   159 		{ KCM_CLKSEL5_PLL,			0x1F,							EDivPll_1_To_16,	0 },	// EClk120M		///< 120MHz clock
   159 		{ KCM_CLKSEL5_PLL,			0x1F,							EDivPll_1_To_16,	0 },	// EClk120M		///< 120MHz clock
   160 		{ KCM_CLKOUT_CTRL,			KBit3 | KBit4 | KBit5,			EDivClkOut_1_2_4_8_16,	3 },	// EClkSysOut
   160 		{ KCM_CLKOUT_CTRL,			KBit3 | KBit4 | KBit5,			EDivClkOut_1_2_4_8_16,	3 },	// EClkSysOut
   161 
   161 
   162 		// Functional clocks
   162 		// Functional clocks
   360 		{ { KDummy, 0, 0, 0 },							{ KCM_CLKSTCTRL_CORE, KBit0 | KBit1, KBit0 | KBit1, 0 } },		// EClkL3Domain,
   360 		{ { KDummy, 0, 0, 0 },							{ KCM_CLKSTCTRL_CORE, KBit0 | KBit1, KBit0 | KBit1, 0 } },		// EClkL3Domain,
   361 		{ { KDummy, 0, 0, 0 },							{ KCM_CLKSTCTRL_CORE, KBit2 | KBit3, KBit2 | KBit3, 0 } },	// EClkL4Domain,
   361 		{ { KDummy, 0, 0, 0 },							{ KCM_CLKSTCTRL_CORE, KBit2 | KBit3, KBit2 | KBit3, 0 } },	// EClkL4Domain,
   362 
   362 
   363 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   363 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   364 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   364 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   365 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClkRM_F,			///< Reset manager functional clock	
   365 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClkRM_F,			///< Reset manager functional clock
   366 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClk96M,			///< 96MHz clock
   366 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClk96M,			///< 96MHz clock
   367 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClk120M,			///< 120MHz clock
   367 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClk120M,			///< 120MHz clock
   368 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkSysOut,
   368 		{ { KDummy, 0, 0, 0 },							{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkSysOut,
   369 
   369 
   370 	// Functional clocks
   370 	// Functional clocks
   384 		{ { KCM_FCLKEN_PER, KBit1, KBit1, 0 },		{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcBSP3_F,
   384 		{ { KCM_FCLKEN_PER, KBit1, KBit1, 0 },		{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcBSP3_F,
   385 		{ { KCM_FCLKEN_PER, KBit2, KBit2, 0 },		{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcBSP4_F,
   385 		{ { KCM_FCLKEN_PER, KBit2, KBit2, 0 },		{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcBSP4_F,
   386 		{ { KCM_FCLKEN1_CORE, KBit10, KBit10, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcBSP5_F,
   386 		{ { KCM_FCLKEN1_CORE, KBit10, KBit10, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcBSP5_F,
   387 		{ { KCM_FCLKEN1_CORE, KBit18, KBit18, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcSpi1_F,
   387 		{ { KCM_FCLKEN1_CORE, KBit18, KBit18, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcSpi1_F,
   388 		{ { KCM_FCLKEN1_CORE, KBit19, KBit19, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcSpi2_F,
   388 		{ { KCM_FCLKEN1_CORE, KBit19, KBit19, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcSpi2_F,
   389 		{ { KCM_FCLKEN1_CORE, KBit20, KBit20, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcSpi3_F,
   389 		{ { KCM_FCLKEN1_CORE, KBit20, KBit20, 0 },	{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClkMcSpi3_F,
   390 		{ { KCM_FCLKEN1_CORE, KBit21, KBit21, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkMcSpi4_F,
   390 		{ { KCM_FCLKEN1_CORE, KBit21, KBit21, 0 },	{ KDummy, 0, KDummyReadAsEnabled, 0 } },		// EClkMcSpi4_F,
   391 		{ { KCM_FCLKEN1_CORE, KBit15, KBit15, 0},	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkI2c1_F,
   391 		{ { KCM_FCLKEN1_CORE, KBit15, KBit15, 0},	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkI2c1_F,
   392 		{ { KCM_FCLKEN1_CORE, KBit16, KBit16, 0},	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkI2c2_F,
   392 		{ { KCM_FCLKEN1_CORE, KBit16, KBit16, 0},	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkI2c2_F,
   393 		{ { KCM_FCLKEN1_CORE, KBit17, KBit17, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkI2c3_F,
   393 		{ { KCM_FCLKEN1_CORE, KBit17, KBit17, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkI2c3_F,
   394 		{ { KCM_FCLKEN1_CORE, KBit13, KBit13, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkUart1_F,
   394 		{ { KCM_FCLKEN1_CORE, KBit13, KBit13, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkUart1_F,
   395 		{ { KCM_FCLKEN1_CORE, KBit14, KBit14, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkUart2_F,
   395 		{ { KCM_FCLKEN1_CORE, KBit14, KBit14, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },		// EClkUart2_F,
   518 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkL3Domain,
   518 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkL3Domain,
   519 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkL4Domain,
   519 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkL4Domain,
   520 
   520 
   521 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   521 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   522 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   522 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   523 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkRM_F,			///< Reset manager functional clock	
   523 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkRM_F,			///< Reset manager functional clock
   524 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClk96M,			///< 96MHz clock
   524 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClk96M,			///< 96MHz clock
   525 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClk120M,			///< 120MHz clock
   525 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClk120M,			///< 120MHz clock
   526 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkSysOut,
   526 		{ KDummy, 0, KDummyReadAsDisabled, 0 },	// EClkSysOut,
   527 
   527 
   528 	// Functional clocks
   528 	// Functional clocks
   682 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkL3Domain,
   682 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkL3Domain,
   683 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkL4Domain,
   683 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkL4Domain,
   684 
   684 
   685 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   685 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   686 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   686 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   687 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkRM_F,			///< Reset manager functional clock	
   687 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkRM_F,			///< Reset manager functional clock
   688 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClk96M,			///< 96MHz clock
   688 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClk96M,			///< 96MHz clock
   689 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClk120M,			///< 120MHz clock
   689 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClk120M,			///< 120MHz clock
   690 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkSysOut,
   690 		{ { KDummy, 0, KDummyReadAsDisabled, 0 },	{ KDummy, 0, KDummyReadAsDisabled, 0 } },			// EClkSysOut,
   691 
   691 
   692 	// Functional clocks
   692 	// Functional clocks
   858 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkL3Domain,
   858 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkL3Domain,
   859 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkL4Domain,
   859 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkL4Domain,
   860 
   860 
   861 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   861 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkMpuPll_Bypass,	///< DPLL1 bypass frequency
   862 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   862 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkIva2Pll_Bypass,	///< DPLL2 bypass frequency
   863 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkRM_F,			///< Reset manager functional clock	
   863 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkRM_F,			///< Reset manager functional clock
   864 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClk96M,			///< 96MHz clock
   864 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClk96M,			///< 96MHz clock
   865 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClk120M,			///< 120MHz clock
   865 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClk120M,			///< 120MHz clock
   866 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkSysOut,
   866 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkSysOut,
   867 
   867 
   868 	// Functional clocks
   868 	// Functional clocks
   991 
   991 
   992 		{ KPM_WKDEP_USBHOST,	{1,	0,		2,		-1,		-1,		4	} },		// EClkUsb_I,			///< USB host interface clock
   992 		{ KPM_WKDEP_USBHOST,	{1,	0,		2,		-1,		-1,		4	} },		// EClkUsb_I,			///< USB host interface clock
   993 
   993 
   994 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClk48M
   994 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClk48M
   995 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClk12M
   995 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClk12M
   996 		
   996 
   997 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkSysClk
   997 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkSysClk
   998 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkAltClk
   998 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkAltClk
   999 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkSysClk32k
   999 		{ KDummy,		{-1,		-1,		-1,		-1,		-1,		-1 } },		// EClkSysClk32k
  1000 		// REGISTER			MPU		CORE	IVA2	PER		DSS		WAKE
  1000 		// REGISTER			MPU		CORE	IVA2	PER		DSS		WAKE
  1001 	};
  1001 	};
  1043 		{ KCM_CLKSEL_PER, KBit2 },	//	EGpt4,
  1043 		{ KCM_CLKSEL_PER, KBit2 },	//	EGpt4,
  1044 		{ KCM_CLKSEL_PER, KBit3 },	//	EGpt5,
  1044 		{ KCM_CLKSEL_PER, KBit3 },	//	EGpt5,
  1045 		{ KCM_CLKSEL_PER, KBit4 },	//	EGpt6,
  1045 		{ KCM_CLKSEL_PER, KBit4 },	//	EGpt6,
  1046 		{ KCM_CLKSEL_PER, KBit5 },	//	EGpt7,
  1046 		{ KCM_CLKSEL_PER, KBit5 },	//	EGpt7,
  1047 		{ KCM_CLKSEL_PER, KBit6 },	//	EGpt8,
  1047 		{ KCM_CLKSEL_PER, KBit6 },	//	EGpt8,
  1048 		{ KCM_CLKSEL_PER, KBit7 },	//	EGpt9, 
  1048 		{ KCM_CLKSEL_PER, KBit7 },	//	EGpt9,
  1049 		{ KCM_CLKSEL_CORE, KBit6 },	//	EGpt10,
  1049 		{ KCM_CLKSEL_CORE, KBit6 },	//	EGpt10,
  1050 		{ KCM_CLKSEL_CORE, KBit7 },	//	EGpt11,
  1050 		{ KCM_CLKSEL_CORE, KBit7 },	//	EGpt11,
  1051 		{ KDummy, 0 },			//	EGpt12	- clocked from security block
  1051 		{ KDummy, 0 },			//	EGpt12	- clocked from security block
  1052 	};
  1052 	};
  1053 
  1053 
  1150 		{ EDuplicate,	Prcm::EClkSysClk32k },					// EClkGpio3_F,
  1150 		{ EDuplicate,	Prcm::EClkSysClk32k },					// EClkGpio3_F,
  1151 		{ EDuplicate,	Prcm::EClkSysClk32k },					// EClkGpio4_F,
  1151 		{ EDuplicate,	Prcm::EClkSysClk32k },					// EClkGpio4_F,
  1152 		{ EDuplicate,	Prcm::EClkSysClk32k },					// EClkGpio5_F,
  1152 		{ EDuplicate,	Prcm::EClkSysClk32k },					// EClkGpio5_F,
  1153 		{ EDuplicate,	Prcm::EClkSysClk32k },					// EClkGpio6_F,
  1153 		{ EDuplicate,	Prcm::EClkSysClk32k },					// EClkGpio6_F,
  1154 		{ EDuplicate,	Prcm::EClk120M },		// EClkUsb120_F,
  1154 		{ EDuplicate,	Prcm::EClk120M },		// EClkUsb120_F,
  1155 		{ EDuplicate,	Prcm::EClk48M },		// EClkUsb48_F,	
  1155 		{ EDuplicate,	Prcm::EClk48M },		// EClkUsb48_F,
  1156 
  1156 
  1157 	// Interface clocks
  1157 	// Interface clocks
  1158 		{ EDuplicate,	Prcm::EClkL4Domain },		// EClkDss_I,
  1158 		{ EDuplicate,	Prcm::EClkL4Domain },		// EClkDss_I,
  1159 		{ EDuplicate,	Prcm::EClkL4Domain },		// EClkCam_I,
  1159 		{ EDuplicate,	Prcm::EClkL4Domain },		// EClkCam_I,
  1160 		{ },					// EClkIcr_I,
  1160 		{ },					// EClkIcr_I,
  1690 			newMode = KPllModeFastRelock;
  1690 			newMode = KPllModeFastRelock;
  1691 			break;
  1691 			break;
  1692 		}
  1692 		}
  1693 
  1693 
  1694 	TInt irq = __SPIN_LOCK_IRQSAVE(iLock);
  1694 	TInt irq = __SPIN_LOCK_IRQSAVE(iLock);
  1695 	
  1695 
  1696 	_BitClearSet(	KPllMode[ aPll ].iModeRegister,
  1696 	_BitClearSet(	KPllMode[ aPll ].iModeRegister,
  1697 					KPllModeMask << KPllMode[ aPll ].iModeShift,
  1697 					KPllModeMask << KPllMode[ aPll ].iModeShift,
  1698 					newMode << KPllMode[ aPll ].iModeShift );
  1698 					newMode << KPllMode[ aPll ].iModeShift );
  1699 
  1699 
  1700 	_BitClearSet(	KPllMode[ aPll ].iAutoRegister,
  1700 	_BitClearSet(	KPllMode[ aPll ].iAutoRegister,
  1701 					KPllAutoMask << KPllMode[ aPll ].iAutoShift,
  1701 					KPllAutoMask << KPllMode[ aPll ].iAutoShift,
  1702 					newAuto << KPllMode[ aPll ].iAutoShift );
  1702 					newAuto << KPllMode[ aPll ].iAutoShift );
  1703 	
  1703 
  1704 	__SPIN_UNLOCK_IRQRESTORE(iLock, irq);
  1704 	__SPIN_UNLOCK_IRQRESTORE(iLock, irq);
  1705 	}
  1705 	}
  1706 
  1706 
  1707 
  1707 
  1708 EXPORT_C TPllMode PllMode( TPll aPll )
  1708 EXPORT_C TPllMode PllMode( TPll aPll )
  1711 	__ASSERT_DEBUG( (TUint)aPll <= EDpll5, Panic( ESetPllModeBadClock ) );
  1711 	__ASSERT_DEBUG( (TUint)aPll <= EDpll5, Panic( ESetPllModeBadClock ) );
  1712 
  1712 
  1713 	TUint32 mode = (AsspRegister::Read32( KPllMode[ aPll ].iModeRegister ) >> KPllMode[ aPll ].iModeShift) bitand KPllModeMask;
  1713 	TUint32 mode = (AsspRegister::Read32( KPllMode[ aPll ].iModeRegister ) >> KPllMode[ aPll ].iModeShift) bitand KPllModeMask;
  1714 	TUint32 autoSet = (AsspRegister::Read32( KPllMode[ aPll ].iAutoRegister ) >> KPllMode[ aPll ].iAutoShift) bitand KPllAutoMask;
  1714 	TUint32 autoSet = (AsspRegister::Read32( KPllMode[ aPll ].iAutoRegister ) >> KPllMode[ aPll ].iAutoShift) bitand KPllAutoMask;
  1715 
  1715 
  1716 	static const TPllMode modeTable[8][2] = 
  1716 	static const TPllMode modeTable[8][2] =
  1717 		{	// auto disabled	auto enabled
  1717 		{	// auto disabled	auto enabled
  1718 			{ EPllStop,			EPllStop },	// not possible
  1718 			{ EPllStop,			EPllStop },	// not possible
  1719 			{ EPllStop,			EPllStop },
  1719 			{ EPllStop,			EPllStop },
  1720 			{ EPllStop,			EPllStop },	// not possible
  1720 			{ EPllStop,			EPllStop },	// not possible
  1721 			{ EPllStop,			EPllStop },	// not possible
  1721 			{ EPllStop,			EPllStop },	// not possible
  1877 
  1877 
  1878 EXPORT_C TBypassDivider PllBypassDivider( TPll aPll )
  1878 EXPORT_C TBypassDivider PllBypassDivider( TPll aPll )
  1879 	{
  1879 	{
  1880 	__KTRACE_OPT( KPRCM, Kern::Printf( "Prcm::PllBypassDivider(%x)", aPll ) );
  1880 	__KTRACE_OPT( KPRCM, Kern::Printf( "Prcm::PllBypassDivider(%x)", aPll ) );
  1881 	__ASSERT_DEBUG( (TUint)aPll <= EDpll5, Panic( EPllBypassDividerBadPll ) );
  1881 	__ASSERT_DEBUG( (TUint)aPll <= EDpll5, Panic( EPllBypassDividerBadPll ) );
  1882 	
  1882 
  1883 	TUint div = 1;
  1883 	TUint div = 1;
  1884 
  1884 
  1885 	switch( aPll )
  1885 	switch( aPll )
  1886 		{
  1886 		{
  1887 		case EDpll1:
  1887 		case EDpll1:
  1915 	__KTRACE_OPT( KPRCM, Kern::Printf( "Prcm::SetDivider(%x;%x)", aClock, aDivide ) );
  1915 	__KTRACE_OPT( KPRCM, Kern::Printf( "Prcm::SetDivider(%x;%x)", aClock, aDivide ) );
  1916 
  1916 
  1917 	__ASSERT_DEBUG( (TUint)aClock < KSupportedClockCount, Panic( ESetDividerBadClock ) );
  1917 	__ASSERT_DEBUG( (TUint)aClock < KSupportedClockCount, Panic( ESetDividerBadClock ) );
  1918 
  1918 
  1919 	const TDividerInfo&	inf = KDividerInfo[ aClock ];
  1919 	const TDividerInfo&	inf = KDividerInfo[ aClock ];
  1920 	
  1920 
  1921 	TUint32 div = aDivide;	// most common case, special cases handled below
  1921 	TUint32 div = aDivide;	// most common case, special cases handled below
  1922 
  1922 
  1923 	switch( inf.iDivType )
  1923 	switch( inf.iDivType )
  1924 		{
  1924 		{
  1925 		case EDivUsimClk:
  1925 		case EDivUsimClk:
  2024 			break;
  2024 			break;
  2025 			}
  2025 			}
  2026 		}
  2026 		}
  2027 
  2027 
  2028 	// if we get here, we have a valid divider value
  2028 	// if we get here, we have a valid divider value
  2029 	
  2029 
  2030 	_LockedBitClearSet( inf.iRegister, inf.iMask, div << inf.iShift );
  2030 	_LockedBitClearSet( inf.iRegister, inf.iMask, div << inf.iShift );
  2031 	}
  2031 	}
  2032 
  2032 
  2033 EXPORT_C TUint Divider( TClock aClock )
  2033 EXPORT_C TUint Divider( TClock aClock )
  2034 	{
  2034 	{
  2035 	__KTRACE_OPT( KPRCM, Kern::Printf( "Prcm::Divider(%x)", aClock ) );
  2035 	__KTRACE_OPT( KPRCM, Kern::Printf( "Prcm::Divider(%x)", aClock ) );
  2036 
  2036 
  2037 	__ASSERT_DEBUG( (TUint)aClock < KSupportedClockCount, Panic( EGetDividerBadClock ) );
  2037 	__ASSERT_DEBUG( (TUint)aClock < KSupportedClockCount, Panic( EGetDividerBadClock ) );
  2038 
  2038 
  2039 	const TDividerInfo&	inf = KDividerInfo[ aClock ];
  2039 	const TDividerInfo&	inf = KDividerInfo[ aClock ];
  2040 	
  2040 
  2041 	TUint32 div = ( AsspRegister::Read32( inf.iRegister ) bitand inf.iMask ) >> inf.iShift;
  2041 	TUint32 div = ( AsspRegister::Read32( inf.iRegister ) bitand inf.iMask ) >> inf.iShift;
  2042 	TUint result = div;	// most common case
  2042 	TUint result = div;	// most common case
  2043 
  2043 
  2044 	switch( inf.iDivType )
  2044 	switch( inf.iDivType )
  2045 		{
  2045 		{
  2125 	__KTRACE_OPT( KPRCM, Kern::Printf( "Prcm::SetPowerDomainMode(%x;%x)", aDomain, aMode ) );
  2125 	__KTRACE_OPT( KPRCM, Kern::Printf( "Prcm::SetPowerDomainMode(%x;%x)", aDomain, aMode ) );
  2126 	__ASSERT_DEBUG( (TUint)aDomain < KSupportedPowerDomainCount, Panic( ESetDomainModeBadDomain ) );
  2126 	__ASSERT_DEBUG( (TUint)aDomain < KSupportedPowerDomainCount, Panic( ESetDomainModeBadDomain ) );
  2127 	__ASSERT_DEBUG( (TUint)aMode <= EPowerOn, Panic( ESetDomainModeBadMode ) );
  2127 	__ASSERT_DEBUG( (TUint)aMode <= EPowerOn, Panic( ESetDomainModeBadMode ) );
  2128 
  2128 
  2129 	__ASSERT_DEBUG( 0 != (KPowerDomainControl[ aDomain ].iAllowedMask bitand (1 << aMode)), Panic( ESetDomainModeUnsupportedMode ) );
  2129 	__ASSERT_DEBUG( 0 != (KPowerDomainControl[ aDomain ].iAllowedMask bitand (1 << aMode)), Panic( ESetDomainModeUnsupportedMode ) );
  2130 	
  2130 
  2131 	TUint shift = KPowerDomainControl[ aDomain ].iShift;
  2131 	TUint shift = KPowerDomainControl[ aDomain ].iShift;
  2132 
  2132 
  2133 	_LockedBitClearSet( KPowerDomainControl[ aDomain ].iRegister,
  2133 	_LockedBitClearSet( KPowerDomainControl[ aDomain ].iRegister,
  2134 						KPowerModeMask << shift,
  2134 						KPowerModeMask << shift,
  2135 						aMode << shift );
  2135 						aMode << shift );
  2314 	__ASSERT_DEBUG( (TUint)aClock <= (TUint)KSupportedClockCount, Panic( EAddDomainBadClock ) );
  2314 	__ASSERT_DEBUG( (TUint)aClock <= (TUint)KSupportedClockCount, Panic( EAddDomainBadClock ) );
  2315 	__ASSERT_DEBUG( (TUint)aDomain <= (TUint)KSupportedWakeupDomainCount, Panic( EAddDomainBadDomain ) );
  2315 	__ASSERT_DEBUG( (TUint)aDomain <= (TUint)KSupportedWakeupDomainCount, Panic( EAddDomainBadDomain ) );
  2316 
  2316 
  2317 	const TWakeupDomainInfo& inf = KClockWakeupDomainTable[ aClock ];
  2317 	const TWakeupDomainInfo& inf = KClockWakeupDomainTable[ aClock ];
  2318 	TUint32 mask = 1 << (TUint)inf.iBitNumber[ aDomain ];	// unsupported bit numbers will result in a mask of 0x00000000
  2318 	TUint32 mask = 1 << (TUint)inf.iBitNumber[ aDomain ];	// unsupported bit numbers will result in a mask of 0x00000000
  2319 	
  2319 
  2320 	_LockedBitClearSet( inf.iRegister, KClearNone, mask );
  2320 	_LockedBitClearSet( inf.iRegister, KClearNone, mask );
  2321 	}
  2321 	}
  2322 
  2322 
  2323 EXPORT_C void RemoveFromWakeupDomain( TClock aClock, TWakeupDomain aDomain )
  2323 EXPORT_C void RemoveFromWakeupDomain( TClock aClock, TWakeupDomain aDomain )
  2324 	{
  2324 	{
  2327 	__ASSERT_DEBUG( (TUint)aClock <= (TUint)KSupportedClockCount, Panic( ERemoveDomainBadClock ) );
  2327 	__ASSERT_DEBUG( (TUint)aClock <= (TUint)KSupportedClockCount, Panic( ERemoveDomainBadClock ) );
  2328 	__ASSERT_DEBUG( (TUint)aDomain <= (TUint)KSupportedWakeupDomainCount, Panic( ERemoveDomainBadDomain ) );
  2328 	__ASSERT_DEBUG( (TUint)aDomain <= (TUint)KSupportedWakeupDomainCount, Panic( ERemoveDomainBadDomain ) );
  2329 
  2329 
  2330 	const TWakeupDomainInfo& inf = KClockWakeupDomainTable[ aClock ];
  2330 	const TWakeupDomainInfo& inf = KClockWakeupDomainTable[ aClock ];
  2331 	TUint32 mask = 1 << (TUint)inf.iBitNumber[ aDomain ];	// unsupported bit numbers will result in a mask of 0x00000000
  2331 	TUint32 mask = 1 << (TUint)inf.iBitNumber[ aDomain ];	// unsupported bit numbers will result in a mask of 0x00000000
  2332 	
  2332 
  2333 	_LockedBitClearSet( inf.iRegister, mask, KSetNone );
  2333 	_LockedBitClearSet( inf.iRegister, mask, KSetNone );
  2334 	}
  2334 	}
  2335 
  2335 
  2336 EXPORT_C TBool IsInWakeupDomain( TClock aClock, TWakeupDomain aDomain )
  2336 EXPORT_C TBool IsInWakeupDomain( TClock aClock, TWakeupDomain aDomain )
  2337 	{
  2337 	{
  2774 
  2774 
  2775 			case EDiv4:
  2775 			case EDiv4:
  2776 				div *= 4;
  2776 				div *= 4;
  2777 				break;
  2777 				break;
  2778 			}
  2778 			}
  2779 		
  2779 
  2780 		currentClock = prevClock;
  2780 		currentClock = prevClock;
  2781 		}	// end do
  2781 		}	// end do
  2782 
  2782 
  2783 	// When we reach here we have worked back to the origin clock
  2783 	// When we reach here we have worked back to the origin clock
  2784 	
  2784 
  2785 	TUint64 fSrc;
  2785 	TUint64 fSrc;
  2786 	const Omap3530Assp* variant = (Omap3530Assp*)Arch::TheAsic();
  2786 	const Omap3530Assp* variant = (Omap3530Assp*)Arch::TheAsic();
  2787 
  2787 
  2788 	if( EClkSysClk == currentClock )
  2788 	if( EClkSysClk == currentClock )
  2789 		{
  2789 		{
  2826 	}
  2826 	}
  2827 
  2827 
  2828 /** Get the currently configured SysClk frequency */
  2828 /** Get the currently configured SysClk frequency */
  2829 EXPORT_C TSysClkFrequency SysClkFrequency()
  2829 EXPORT_C TSysClkFrequency SysClkFrequency()
  2830 	{
  2830 	{
  2831 	
  2831 
  2832 	switch( AsspRegister::Read32( KPRM_CLKSEL ) bitand (KBit0 | KBit1 | KBit2) )
  2832 	switch( AsspRegister::Read32( KPRM_CLKSEL ) bitand (KBit0 | KBit1 | KBit2) )
  2833 		{
  2833 		{
  2834 		case 0:
  2834 		case 0:
  2835 			return ESysClk12MHz;
  2835 			return ESysClk12MHz;
  2836 		case 1:
  2836 		case 1:
  2943 	SetClockState( EClkMcSpi2_F, EClkOff );
  2943 	SetClockState( EClkMcSpi2_F, EClkOff );
  2944 	SetClockState( EClkMcSpi2_I, EClkOff );
  2944 	SetClockState( EClkMcSpi2_I, EClkOff );
  2945 	r = AsspRegister::Read32(KMCSPI3_SYSCONFIG);
  2945 	r = AsspRegister::Read32(KMCSPI3_SYSCONFIG);
  2946 	__NK_ASSERT_ALWAYS((r & 1 << 3) == 0);
  2946 	__NK_ASSERT_ALWAYS((r & 1 << 3) == 0);
  2947 	__NK_ASSERT_ALWAYS((r & 1 << 8) == 0);
  2947 	__NK_ASSERT_ALWAYS((r & 1 << 8) == 0);
       
  2948 	/* nxz enable SPI 3
  2948 	SetClockState( EClkMcSpi3_F, EClkOff );
  2949 	SetClockState( EClkMcSpi3_F, EClkOff );
  2949 	SetClockState( EClkMcSpi3_I, EClkOff );
  2950 	SetClockState( EClkMcSpi3_I, EClkOff );*/
       
  2951 	SetClockState( EClkMcSpi3_F, EClkOn );
       
  2952 	SetClockState( EClkMcSpi3_I, EClkOn );
  2950 	r = AsspRegister::Read32(KMCSPI4_SYSCONFIG);
  2953 	r = AsspRegister::Read32(KMCSPI4_SYSCONFIG);
  2951 	__NK_ASSERT_ALWAYS((r & 1 << 3) == 0);
  2954 	__NK_ASSERT_ALWAYS((r & 1 << 3) == 0);
  2952 	__NK_ASSERT_ALWAYS((r & 1 << 8) == 0);
  2955 	__NK_ASSERT_ALWAYS((r & 1 << 8) == 0);
       
  2956 	/* nxz enable SPI 4
  2953 	SetClockState( EClkMcSpi4_F, EClkOff );
  2957 	SetClockState( EClkMcSpi4_F, EClkOff );
  2954 	SetClockState( EClkMcSpi4_I, EClkOff );
  2958 	SetClockState( EClkMcSpi4_I, EClkOff );*/
       
  2959 	SetClockState( EClkMcSpi4_F, EClkOn );
       
  2960 	SetClockState( EClkMcSpi4_I, EClkOn );
  2955 
  2961 
  2956 	// UART
  2962 	// UART
  2957 	TInt debugport = Kern::SuperPage().iDebugPort;
  2963 	TInt debugport = Kern::SuperPage().iDebugPort;
  2958 	if( debugport != 0 )
  2964 	if( debugport != 0 )
  2959 		{
  2965 		{
  3068 	r = AsspRegister::Read32(KGPIO1_SYSCONFIG);
  3074 	r = AsspRegister::Read32(KGPIO1_SYSCONFIG);
  3069 	__NK_ASSERT_ALWAYS((r & 1 << 3) == 0);
  3075 	__NK_ASSERT_ALWAYS((r & 1 << 3) == 0);
  3070 	__NK_ASSERT_ALWAYS((r & 1 << 8) == 0);
  3076 	__NK_ASSERT_ALWAYS((r & 1 << 8) == 0);
  3071 	_BitClearSet(KCM_FCLKEN_WKUP, 1 << 3, 0);
  3077 	_BitClearSet(KCM_FCLKEN_WKUP, 1 << 3, 0);
  3072 	_BitClearSet(KCM_ICLKEN_WKUP, 1 << 3, 0);
  3078 	_BitClearSet(KCM_ICLKEN_WKUP, 1 << 3, 0);
  3073 	
  3079 
  3074 	//r = AsspRegister::Read32(KGPIO2_SYSCONFIG);
  3080 	//r = AsspRegister::Read32(KGPIO2_SYSCONFIG);
  3075 	//__NK_ASSERT_ALWAYS((r & 1 << 3) == 0);
  3081 	//__NK_ASSERT_ALWAYS((r & 1 << 3) == 0);
  3076 	//__NK_ASSERT_ALWAYS((r & 1 << 8) == 0);
  3082 	//__NK_ASSERT_ALWAYS((r & 1 << 8) == 0);
  3077 	//_BitClearSet(KCM_FCLKEN_PER, 1 << 13, 0);
  3083 	//_BitClearSet(KCM_FCLKEN_PER, 1 << 13, 0);
  3078 	//_BitClearSet(KCM_ICLKEN_PER, 1 << 13, 0);
  3084 	//_BitClearSet(KCM_ICLKEN_PER, 1 << 13, 0);