⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 clock.h

📁 linux-2.6.15.6
💻 H
📖 第 1 页 / 共 5 页
字号:
/* *  linux/arch/arm/mach-omap24xx/clock.h * *  Copyright (C) 2005 Texas Instruments Inc. *  Richard Woodruff <r-woodruff2@ti.com> *  Created for OMAP2. * *  Copyright (C) 2004 Nokia corporation *  Written by Tuukka Tikkanen <tuukka.tikkanen@elektrobit.com> *  Based on clocks.h by Tony Lindgren, Gordon McNutt and RidgeRun, Inc * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. */#ifndef __ARCH_ARM_MACH_OMAP2_CLOCK_H#define __ARCH_ARM_MACH_OMAP2_CLOCK_Hstatic void omap2_sys_clk_recalc(struct clk * clk);static void omap2_clksel_recalc(struct clk * clk);static void omap2_followparent_recalc(struct clk * clk);static void omap2_propagate_rate(struct clk * clk);static void omap2_mpu_recalc(struct clk * clk);static int omap2_select_table_rate(struct clk * clk, unsigned long rate);static long omap2_round_to_table_rate(struct clk * clk, unsigned long rate);static void omap2_clk_unuse(struct clk *clk);static void omap2_sys_clk_recalc(struct clk * clk);static u32 omap2_clksel_to_divisor(u32 div_sel, u32 field_val);static u32 omap2_clksel_get_divisor(struct clk *clk);#define RATE_IN_242X	(1 << 0)#define RATE_IN_243X	(1 << 1)/* Memory timings */#define M_DDR		1#define M_LOCK_CTRL	(1 << 2)#define M_UNLOCK	0#define M_LOCK		1struct memory_timings {	u32 m_type;		/* ddr = 1, sdr = 0 */	u32 dll_mode;		/* use lock mode = 1, unlock mode = 0 */	u32 slow_dll_ctrl;	/* unlock mode, dll value for slow speed */	u32 fast_dll_ctrl;	/* unlock mode, dll value for fast speed */	u32 base_cs;		/* base chip select to use for calculations */};/* Key dividers which make up a PRCM set. Ratio's for a PRCM are mandated. * xtal_speed, dpll_speed, mpu_speed, CM_CLKSEL_MPU,CM_CLKSEL_DSP * CM_CLKSEL_GFX, CM_CLKSEL1_CORE, CM_CLKSEL1_PLL CM_CLKSEL2_PLL, CM_CLKSEL_MDM */struct prcm_config {	unsigned long xtal_speed;	/* crystal rate */	unsigned long dpll_speed;	/* dpll: out*xtal*M/(N-1)table_recalc */	unsigned long mpu_speed;	/* speed of MPU */	unsigned long cm_clksel_mpu;	/* mpu divider */	unsigned long cm_clksel_dsp;	/* dsp+iva1 div(2420), iva2.1(2430) */	unsigned long cm_clksel_gfx;	/* gfx dividers */	unsigned long cm_clksel1_core;	/* major subsystem dividers */	unsigned long cm_clksel1_pll;	/* m,n */	unsigned long cm_clksel2_pll;	/* dpllx1 or x2 out */	unsigned long cm_clksel_mdm;	/* modem dividers 2430 only */	unsigned long base_sdrc_rfr;	/* base refresh timing for a set */	unsigned char flags;};/* Mask for clksel which support parent settign in set_rate */#define SRC_SEL_MASK (CM_CORE_SEL1 | CM_CORE_SEL2 | CM_WKUP_SEL1 | \			CM_PLL_SEL1 | CM_PLL_SEL2 | CM_SYSCLKOUT_SEL1)/* Mask for clksel regs which support rate operations */#define SRC_RATE_SEL_MASK (CM_MPU_SEL1 | CM_DSP_SEL1 | CM_GFX_SEL1 | \			CM_MODEM_SEL1 | CM_CORE_SEL1 | CM_CORE_SEL2 | \			CM_WKUP_SEL1 | CM_PLL_SEL1 | CM_PLL_SEL2 | \			CM_SYSCLKOUT_SEL1)/* * The OMAP2 processor can be run at several discrete 'PRCM configurations'. * These configurations are characterized by voltage and speed for clocks. * The device is only validated for certain combinations. One way to express * these combinations is via the 'ratio's' which the clocks operate with * respect to each other. These ratio sets are for a given voltage/DPLL * setting. All configurations can be described by a DPLL setting and a ratio * There are 3 ratio sets for the 2430 and X ratio sets for 2420. * * 2430 differs from 2420 in that there are no more phase synchronizers used. * They both have a slightly different clock domain setup. 2420(iva1,dsp) vs * 2430 (iva2.1, NOdsp, mdm) *//* Core fields for cm_clksel, not ratio governed */#define RX_CLKSEL_DSS1			(0x10 << 8)#define RX_CLKSEL_DSS2			(0x0 << 13)#define RX_CLKSEL_SSI			(0x5 << 20)/*------------------------------------------------------------------------- * Voltage/DPLL ratios *-------------------------------------------------------------------------*//* 2430 Ratio's, 2430-Ratio Config 1 */#define R1_CLKSEL_L3			(4 << 0)#define R1_CLKSEL_L4			(2 << 5)#define R1_CLKSEL_USB			(4 << 25)#define R1_CM_CLKSEL1_CORE_VAL		R1_CLKSEL_USB | RX_CLKSEL_SSI | \					RX_CLKSEL_DSS2 | RX_CLKSEL_DSS1 | \					R1_CLKSEL_L4 | R1_CLKSEL_L3#define R1_CLKSEL_MPU			(2 << 0)#define R1_CM_CLKSEL_MPU_VAL		R1_CLKSEL_MPU#define R1_CLKSEL_DSP			(2 << 0)#define R1_CLKSEL_DSP_IF		(2 << 5)#define R1_CM_CLKSEL_DSP_VAL		R1_CLKSEL_DSP | R1_CLKSEL_DSP_IF#define R1_CLKSEL_GFX			(2 << 0)#define R1_CM_CLKSEL_GFX_VAL		R1_CLKSEL_GFX#define R1_CLKSEL_MDM			(4 << 0)#define R1_CM_CLKSEL_MDM_VAL		R1_CLKSEL_MDM/* 2430-Ratio Config 2 */#define R2_CLKSEL_L3			(6 << 0)#define R2_CLKSEL_L4			(2 << 5)#define R2_CLKSEL_USB			(2 << 25)#define R2_CM_CLKSEL1_CORE_VAL		R2_CLKSEL_USB | RX_CLKSEL_SSI | \					RX_CLKSEL_DSS2 | RX_CLKSEL_DSS1 | \					R2_CLKSEL_L4 | R2_CLKSEL_L3#define R2_CLKSEL_MPU			(2 << 0)#define R2_CM_CLKSEL_MPU_VAL		R2_CLKSEL_MPU#define R2_CLKSEL_DSP			(2 << 0)#define R2_CLKSEL_DSP_IF		(3 << 5)#define R2_CM_CLKSEL_DSP_VAL		R2_CLKSEL_DSP | R2_CLKSEL_DSP_IF#define R2_CLKSEL_GFX			(2 << 0)#define R2_CM_CLKSEL_GFX_VAL		R2_CLKSEL_GFX#define R2_CLKSEL_MDM			(6 << 0)#define R2_CM_CLKSEL_MDM_VAL		R2_CLKSEL_MDM/* 2430-Ratio Bootm (BYPASS) */#define RB_CLKSEL_L3			(1 << 0)#define RB_CLKSEL_L4			(1 << 5)#define RB_CLKSEL_USB			(1 << 25)#define RB_CM_CLKSEL1_CORE_VAL		RB_CLKSEL_USB | RX_CLKSEL_SSI | \					RX_CLKSEL_DSS2 | RX_CLKSEL_DSS1 | \					RB_CLKSEL_L4 | RB_CLKSEL_L3#define RB_CLKSEL_MPU			(1 << 0)#define RB_CM_CLKSEL_MPU_VAL		RB_CLKSEL_MPU#define RB_CLKSEL_DSP			(1 << 0)#define RB_CLKSEL_DSP_IF		(1 << 5)#define RB_CM_CLKSEL_DSP_VAL		RB_CLKSEL_DSP | RB_CLKSEL_DSP_IF#define RB_CLKSEL_GFX			(1 << 0)#define RB_CM_CLKSEL_GFX_VAL		RB_CLKSEL_GFX#define RB_CLKSEL_MDM			(1 << 0)#define RB_CM_CLKSEL_MDM_VAL		RB_CLKSEL_MDM/* 2420 Ratio Equivalents */#define RXX_CLKSEL_VLYNQ		(0x12 << 15)#define RXX_CLKSEL_SSI			(0x8 << 20)/* 2420-PRCM III 532MHz core */#define RIII_CLKSEL_L3			(4 << 0)	/* 133MHz */#define RIII_CLKSEL_L4			(2 << 5)	/* 66.5MHz */#define RIII_CLKSEL_USB			(4 << 25)	/* 33.25MHz */#define RIII_CM_CLKSEL1_CORE_VAL	RIII_CLKSEL_USB | RXX_CLKSEL_SSI | \					RXX_CLKSEL_VLYNQ | RX_CLKSEL_DSS2 | \					RX_CLKSEL_DSS1 | RIII_CLKSEL_L4 | \					RIII_CLKSEL_L3#define RIII_CLKSEL_MPU			(2 << 0)	/* 266MHz */#define RIII_CM_CLKSEL_MPU_VAL		RIII_CLKSEL_MPU#define RIII_CLKSEL_DSP			(3 << 0)	/* c5x - 177.3MHz */#define RIII_CLKSEL_DSP_IF		(2 << 5)	/* c5x - 88.67MHz */#define RIII_SYNC_DSP			(1 << 7)	/* Enable sync */#define RIII_CLKSEL_IVA			(6 << 8)	/* iva1 - 88.67MHz */#define RIII_SYNC_IVA			(1 << 13)	/* Enable sync */#define RIII_CM_CLKSEL_DSP_VAL		RIII_SYNC_IVA | RIII_CLKSEL_IVA | \					RIII_SYNC_DSP | RIII_CLKSEL_DSP_IF | \					RIII_CLKSEL_DSP#define RIII_CLKSEL_GFX			(2 << 0)	/* 66.5MHz */#define RIII_CM_CLKSEL_GFX_VAL		RIII_CLKSEL_GFX/* 2420-PRCM II 600MHz core */#define RII_CLKSEL_L3			(6 << 0)	/* 100MHz */#define RII_CLKSEL_L4			(2 << 5)	/* 50MHz */#define RII_CLKSEL_USB			(2 << 25)	/* 50MHz */#define RII_CM_CLKSEL1_CORE_VAL		RII_CLKSEL_USB | \					RXX_CLKSEL_SSI | RXX_CLKSEL_VLYNQ | \					RX_CLKSEL_DSS2 | RX_CLKSEL_DSS1 | \					RII_CLKSEL_L4 | RII_CLKSEL_L3#define RII_CLKSEL_MPU			(2 << 0)	/* 300MHz */#define RII_CM_CLKSEL_MPU_VAL		RII_CLKSEL_MPU#define RII_CLKSEL_DSP			(3 << 0)	/* c5x - 200MHz */#define RII_CLKSEL_DSP_IF		(2 << 5)	/* c5x - 100MHz */#define RII_SYNC_DSP			(0 << 7)	/* Bypass sync */#define RII_CLKSEL_IVA			(6 << 8)	/* iva1 - 200MHz */#define RII_SYNC_IVA			(0 << 13)	/* Bypass sync */#define RII_CM_CLKSEL_DSP_VAL		RII_SYNC_IVA | RII_CLKSEL_IVA | \					RII_SYNC_DSP | RII_CLKSEL_DSP_IF | \					RII_CLKSEL_DSP#define RII_CLKSEL_GFX			(2 << 0)	/* 50MHz */#define RII_CM_CLKSEL_GFX_VAL		RII_CLKSEL_GFX/* 2420-PRCM VII (boot) */#define RVII_CLKSEL_L3			(1 << 0)#define RVII_CLKSEL_L4			(1 << 5)#define RVII_CLKSEL_DSS1		(1 << 8)#define RVII_CLKSEL_DSS2		(0 << 13)#define RVII_CLKSEL_VLYNQ		(1 << 15)#define RVII_CLKSEL_SSI			(1 << 20)#define RVII_CLKSEL_USB			(1 << 25)#define RVII_CM_CLKSEL1_CORE_VAL	RVII_CLKSEL_USB | RVII_CLKSEL_SSI | \					RVII_CLKSEL_VLYNQ | RVII_CLKSEL_DSS2 | \					RVII_CLKSEL_DSS1 | RVII_CLKSEL_L4 | RVII_CLKSEL_L3#define RVII_CLKSEL_MPU			(1 << 0) /* all divide by 1 */#define RVII_CM_CLKSEL_MPU_VAL		RVII_CLKSEL_MPU#define RVII_CLKSEL_DSP			(1 << 0)#define RVII_CLKSEL_DSP_IF		(1 << 5)#define RVII_SYNC_DSP			(0 << 7)#define RVII_CLKSEL_IVA			(1 << 8)#define RVII_SYNC_IVA			(0 << 13)#define RVII_CM_CLKSEL_DSP_VAL		RVII_SYNC_IVA | RVII_CLKSEL_IVA | RVII_SYNC_DSP | \					RVII_CLKSEL_DSP_IF | RVII_CLKSEL_DSP#define RVII_CLKSEL_GFX			(1 << 0)#define RVII_CM_CLKSEL_GFX_VAL		RVII_CLKSEL_GFX/*------------------------------------------------------------------------- * 2430 Target modes: Along with each configuration the CPU has several * modes which goes along with them. Modes mainly are the addition of * describe DPLL combinations to go along with a ratio. *-------------------------------------------------------------------------*//* Hardware governed */#define MX_48M_SRC			(0 << 3)#define MX_54M_SRC			(0 << 5)#define MX_APLLS_CLIKIN_12		(3 << 23)#define MX_APLLS_CLIKIN_13		(2 << 23)#define MX_APLLS_CLIKIN_19_2		(0 << 23)/* * 2430 - standalone, 2*ref*M/(n+1), M/N is for exactness not relock speed * #2	(ratio1) baseport-target * #5a	(ratio1) baseport-target, target DPLL = 266*2 = 532MHz */#define M5A_DPLL_MULT_12		(133 << 12)#define M5A_DPLL_DIV_12			(5 << 8)#define M5A_CM_CLKSEL1_PLL_12_VAL	MX_48M_SRC | MX_54M_SRC | \					M5A_DPLL_DIV_12 | M5A_DPLL_MULT_12 | \					MX_APLLS_CLIKIN_12#define M5A_DPLL_MULT_13		(266 << 12)#define M5A_DPLL_DIV_13			(12 << 8)#define M5A_CM_CLKSEL1_PLL_13_VAL	MX_48M_SRC | MX_54M_SRC | \					M5A_DPLL_DIV_13 | M5A_DPLL_MULT_13 | \					MX_APLLS_CLIKIN_13#define M5A_DPLL_MULT_19		(180 << 12)#define M5A_DPLL_DIV_19			(12 << 8)#define M5A_CM_CLKSEL1_PLL_19_VAL	MX_48M_SRC | MX_54M_SRC | \					M5A_DPLL_DIV_19 | M5A_DPLL_MULT_19 | \					MX_APLLS_CLIKIN_19_2/* #5b	(ratio1) target DPLL = 200*2 = 400MHz */#define M5B_DPLL_MULT_12		(50 << 12)#define M5B_DPLL_DIV_12			(2 << 8)#define M5B_CM_CLKSEL1_PLL_12_VAL	MX_48M_SRC | MX_54M_SRC | \					M5B_DPLL_DIV_12 | M5B_DPLL_MULT_12 | \					MX_APLLS_CLIKIN_12#define M5B_DPLL_MULT_13		(200 << 12)#define M5B_DPLL_DIV_13			(12 << 8)#define M5B_CM_CLKSEL1_PLL_13_VAL	MX_48M_SRC | MX_54M_SRC | \					M5B_DPLL_DIV_13 | M5B_DPLL_MULT_13 | \					MX_APLLS_CLIKIN_13#define M5B_DPLL_MULT_19		(125 << 12)#define M5B_DPLL_DIV_19			(31 << 8)#define M5B_CM_CLKSEL1_PLL_19_VAL	MX_48M_SRC | MX_54M_SRC | \					M5B_DPLL_DIV_19 | M5B_DPLL_MULT_19 | \					MX_APLLS_CLIKIN_19_2/* * #4	(ratio2) * #3	(ratio2) baseport-target, target DPLL = 330*2 = 660MHz */#define M3_DPLL_MULT_12			(55 << 12)#define M3_DPLL_DIV_12			(1 << 8)#define M3_CM_CLKSEL1_PLL_12_VAL	MX_48M_SRC | MX_54M_SRC | \					M3_DPLL_DIV_12 | M3_DPLL_MULT_12 | \					MX_APLLS_CLIKIN_12#define M3_DPLL_MULT_13			(330 << 12)#define M3_DPLL_DIV_13			(12 << 8)#define M3_CM_CLKSEL1_PLL_13_VAL	MX_48M_SRC | MX_54M_SRC | \					M3_DPLL_DIV_13 | M3_DPLL_MULT_13 | \					MX_APLLS_CLIKIN_13#define M3_DPLL_MULT_19			(275 << 12)#define M3_DPLL_DIV_19			(15 << 8)#define M3_CM_CLKSEL1_PLL_19_VAL	MX_48M_SRC | MX_54M_SRC | \					M3_DPLL_DIV_19 | M3_DPLL_MULT_19 | \					MX_APLLS_CLIKIN_19_2/* boot (boot) */#define MB_DPLL_MULT			(1 << 12)#define MB_DPLL_DIV			(0 << 8)#define MB_CM_CLKSEL1_PLL_12_VAL	MX_48M_SRC | MX_54M_SRC | MB_DPLL_DIV |\					MB_DPLL_MULT | MX_APLLS_CLIKIN_12#define MB_CM_CLKSEL1_PLL_13_VAL	MX_48M_SRC | MX_54M_SRC | MB_DPLL_DIV |\					MB_DPLL_MULT | MX_APLLS_CLIKIN_13#define MB_CM_CLKSEL1_PLL_19_VAL	MX_48M_SRC | MX_54M_SRC | MB_DPLL_DIV |\					MB_DPLL_MULT | MX_APLLS_CLIKIN_19/* * 2430 - chassis (sedna) * 165 (ratio1) same as above #2 * 150 (ratio1) * 133 (ratio2) same as above #4 * 110 (ratio2) same as above #3 * 104 (ratio2) * boot (boot) *//* * 2420 Equivalent - mode registers * PRCM II , target DPLL = 2*300MHz = 600MHz */#define MII_DPLL_MULT_12		(50 << 12)#define MII_DPLL_DIV_12			(1 << 8)#define MII_CM_CLKSEL1_PLL_12_VAL	MX_48M_SRC | MX_54M_SRC | \					MII_DPLL_DIV_12 | MII_DPLL_MULT_12 | \					MX_APLLS_CLIKIN_12#define MII_DPLL_MULT_13		(300 << 12)#define MII_DPLL_DIV_13			(12 << 8)#define MII_CM_CLKSEL1_PLL_13_VAL	MX_48M_SRC | MX_54M_SRC | \					MII_DPLL_DIV_13 | MII_DPLL_MULT_13 | \					MX_APLLS_CLIKIN_13/* PRCM III target DPLL = 2*266 = 532MHz*/#define MIII_DPLL_MULT_12		(133 << 12)#define MIII_DPLL_DIV_12		(5 << 8)#define MIII_CM_CLKSEL1_PLL_12_VAL	MX_48M_SRC | MX_54M_SRC | \					MIII_DPLL_DIV_12 | MIII_DPLL_MULT_12 | \					MX_APLLS_CLIKIN_12#define MIII_DPLL_MULT_13		(266 << 12)#define MIII_DPLL_DIV_13		(12 << 8)#define MIII_CM_CLKSEL1_PLL_13_VAL	MX_48M_SRC | MX_54M_SRC | \					MIII_DPLL_DIV_13 | MIII_DPLL_MULT_13 | \					MX_APLLS_CLIKIN_13/* PRCM VII (boot bypass) */#define MVII_CM_CLKSEL1_PLL_12_VAL	MB_CM_CLKSEL1_PLL_12_VAL#define MVII_CM_CLKSEL1_PLL_13_VAL	MB_CM_CLKSEL1_PLL_13_VAL/* High and low operation value */#define MX_CLKSEL2_PLL_2x_VAL		(2 << 0)#define MX_CLKSEL2_PLL_1x_VAL		(1 << 0)/* * These represent optimal values for common parts, it won't work for all. * As long as you scale down, most parameters are still work, they just * become sub-optimal. The RFR value goes in the oppisite direction. If you * don't adjust it down as your clock period increases the refresh interval * will not be met. Setting all parameters for complete worst case may work, * but may cut memory performance by 2x. Due to errata the DLLs need to be * unlocked and their value needs run time calibration.	A dynamic call is * need for that as no single right value exists acorss production samples. * * Only the FULL speed values are given. Current code is such that rate * changes must be made at DPLLoutx2. The actual value adjustment for low * frequency operation will be handled by omap_set_performance() * * By having the boot loader boot up in the fastest L4 speed available likely * will result in something which you can switch between. */#define V24XX_SDRC_RFR_CTRL_133MHz	(0x0003de00 | 1)#define V24XX_SDRC_RFR_CTRL_100MHz	(0x0002da01 | 1)#define V24XX_SDRC_RFR_CTRL_110MHz	(0x0002da01 | 1) /* Need to calc */#define V24XX_SDRC_RFR_CTRL_BYPASS	(0x00005000 | 1) /* Need to calc *//* MPU speed defines */#define S12M	12000000#define S13M	13000000#define S19M	19200000#define S26M	26000000#define S100M	100000000#define S133M	133000000#define S150M	150000000#define S165M	165000000#define S200M	200000000#define S266M	266000000#define S300M	300000000#define S330M	330000000#define S400M	400000000#define S532M	532000000#define S600M	600000000#define S660M	660000000/*------------------------------------------------------------------------- * Key dividers which make up a PRCM set. Ratio's for a PRCM are mandated. * xtal_speed, dpll_speed, mpu_speed, CM_CLKSEL_MPU, * CM_CLKSEL_DSP, CM_CLKSEL_GFX, CM_CLKSEL1_CORE, CM_CLKSEL1_PLL, * CM_CLKSEL2_PLL, CM_CLKSEL_MDM * * Filling in table based on H4 boards and 2430-SDPs variants available. * There are quite a few more rates combinations which could be defined. * * When multiple values are defiend the start up will try and choose the * fastest one. If a 'fast' value is defined, then automatically, the /2 * one should be included as it can be used.	Generally having more that * one fast set does not make sense, as static timings need to be changed * to change the set.	 The exception is the bypass setting which is * availble for low power bypass. * * Note: This table needs to be sorted, fastest to slowest. *-------------------------------------------------------------------------*/static struct prcm_config rate_table[] = {	/* PRCM II - FAST */	{S12M, S600M, S300M, RII_CM_CLKSEL_MPU_VAL,		/* 300MHz ARM */		RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL,		RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_12_VAL,		MX_CLKSEL2_PLL_2x_VAL, 0, V24XX_SDRC_RFR_CTRL_100MHz,		RATE_IN_242X},	{S13M, S600M, S300M, RII_CM_CLKSEL_MPU_VAL,		/* 300MHz ARM */		RII_CM_CLKSEL_DSP_VAL, RII_CM_CLKSEL_GFX_VAL,		RII_CM_CLKSEL1_CORE_VAL, MII_CM_CLKSEL1_PLL_13_VAL,		MX_CLKSEL2_PLL_2x_VAL, 0, V24XX_SDRC_RFR_CTRL_100MHz,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -