diff options
author | Hans J. Koch <hjk@linutronix.de> | 2010-09-17 12:15:11 -0400 |
---|---|---|
committer | Thomas Gleixner <tglx@linutronix.de> | 2010-09-17 15:55:08 -0400 |
commit | da15797eaec795bc2a1a9adb441214a6f5ea07fc (patch) | |
tree | abc0d5443f24716a274599999c9b948a5103f027 /arch/arm/plat-tcc/include/mach | |
parent | 83ef3338a2ae5d5bd9f5f6803b900b8067660054 (diff) |
ARM: Add the clock framework for Telechips TCC8xxx processors.
This adds definitions and low-level functions to handle clocks in
TCC8xxx processors.
Signed-off-by: "Hans J. Koch" <hjk@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/arm/plat-tcc/include/mach')
-rw-r--r-- | arch/arm/plat-tcc/include/mach/clkdev.h | 7 | ||||
-rw-r--r-- | arch/arm/plat-tcc/include/mach/clock.h | 48 | ||||
-rw-r--r-- | arch/arm/plat-tcc/include/mach/tcc8k-regs.h | 31 |
3 files changed, 76 insertions, 10 deletions
diff --git a/arch/arm/plat-tcc/include/mach/clkdev.h b/arch/arm/plat-tcc/include/mach/clkdev.h new file mode 100644 index 000000000000..04b37a89801c --- /dev/null +++ b/arch/arm/plat-tcc/include/mach/clkdev.h | |||
@@ -0,0 +1,7 @@ | |||
1 | #ifndef __ASM_MACH_CLKDEV_H | ||
2 | #define __ASM_MACH_CLKDEV_H | ||
3 | |||
4 | #define __clk_get(clk) ({ 1; }) | ||
5 | #define __clk_put(clk) do { } while (0) | ||
6 | |||
7 | #endif | ||
diff --git a/arch/arm/plat-tcc/include/mach/clock.h b/arch/arm/plat-tcc/include/mach/clock.h new file mode 100644 index 000000000000..a12f58ad71a8 --- /dev/null +++ b/arch/arm/plat-tcc/include/mach/clock.h | |||
@@ -0,0 +1,48 @@ | |||
1 | /* | ||
2 | * Low level clock header file for Telechips TCC architecture | ||
3 | * (C) 2010 Hans J. Koch <hjk@linutronix.de> | ||
4 | * | ||
5 | * Licensed under the GPL v2. | ||
6 | */ | ||
7 | |||
8 | #ifndef __ASM_ARCH_TCC_CLOCK_H__ | ||
9 | #define __ASM_ARCH_TCC_CLOCK_H__ | ||
10 | |||
11 | #ifndef __ASSEMBLY__ | ||
12 | |||
13 | struct clk { | ||
14 | struct clk *parent; | ||
15 | /* id number of a root clock, 0 for normal clocks */ | ||
16 | int root_id; | ||
17 | /* Reference count of clock enable/disable */ | ||
18 | int refcount; | ||
19 | /* Address of associated BCLKCTRx register. Must be set. */ | ||
20 | void __iomem *bclkctr; | ||
21 | /* Bit position for BCLKCTRx. Must be set. */ | ||
22 | int bclk_shift; | ||
23 | /* Address of ACLKxxx register, if any. */ | ||
24 | void __iomem *aclkreg; | ||
25 | /* get the current clock rate (always a fresh value) */ | ||
26 | unsigned long (*get_rate) (struct clk *); | ||
27 | /* Function ptr to set the clock to a new rate. The rate must match a | ||
28 | supported rate returned from round_rate. Leave blank if clock is not | ||
29 | programmable */ | ||
30 | int (*set_rate) (struct clk *, unsigned long); | ||
31 | /* Function ptr to round the requested clock rate to the nearest | ||
32 | supported rate that is less than or equal to the requested rate. */ | ||
33 | unsigned long (*round_rate) (struct clk *, unsigned long); | ||
34 | /* Function ptr to enable the clock. Leave blank if clock can not | ||
35 | be gated. */ | ||
36 | int (*enable) (struct clk *); | ||
37 | /* Function ptr to disable the clock. Leave blank if clock can not | ||
38 | be gated. */ | ||
39 | void (*disable) (struct clk *); | ||
40 | /* Function ptr to set the parent clock of the clock. */ | ||
41 | int (*set_parent) (struct clk *, struct clk *); | ||
42 | }; | ||
43 | |||
44 | int clk_register(struct clk *clk); | ||
45 | void clk_unregister(struct clk *clk); | ||
46 | |||
47 | #endif /* __ASSEMBLY__ */ | ||
48 | #endif /* __ASM_ARCH_MXC_CLOCK_H__ */ | ||
diff --git a/arch/arm/plat-tcc/include/mach/tcc8k-regs.h b/arch/arm/plat-tcc/include/mach/tcc8k-regs.h index f3243ebea463..1d9428295332 100644 --- a/arch/arm/plat-tcc/include/mach/tcc8k-regs.h +++ b/arch/arm/plat-tcc/include/mach/tcc8k-regs.h | |||
@@ -30,13 +30,13 @@ | |||
30 | #define EXT_MEM_CTRL_BASE 0xf0000000 | 30 | #define EXT_MEM_CTRL_BASE 0xf0000000 |
31 | #define EXT_MEM_CTRL_SIZE SZ_4K | 31 | #define EXT_MEM_CTRL_SIZE SZ_4K |
32 | 32 | ||
33 | #define CS1_BASE_VIRT 0xf7000000 | 33 | #define CS1_BASE_VIRT (void __iomem *)0xf7000000 |
34 | #define AHB_PERI_BASE_VIRT 0xf4000000 | 34 | #define AHB_PERI_BASE_VIRT (void __iomem *)0xf4000000 |
35 | #define APB0_PERI_BASE_VIRT 0xf1000000 | 35 | #define APB0_PERI_BASE_VIRT (void __iomem *)0xf1000000 |
36 | #define APB1_PERI_BASE_VIRT 0xf2000000 | 36 | #define APB1_PERI_BASE_VIRT (void __iomem *)0xf2000000 |
37 | #define EXT_MEM_CTRL_BASE_VIRT 0xf3000000 | 37 | #define EXT_MEM_CTRL_BASE_VIRT (void __iomem *)0xf3000000 |
38 | #define INT_SRAM_BASE_VIRT 0xf5000000 | 38 | #define INT_SRAM_BASE_VIRT (void __iomem *)0xf5000000 |
39 | #define DATA_TCM_BASE_VIRT 0xf6000000 | 39 | #define DATA_TCM_BASE_VIRT (void __iomem *)0xf6000000 |
40 | 40 | ||
41 | #define __REG(x) (*((volatile u32 *)(x))) | 41 | #define __REG(x) (*((volatile u32 *)(x))) |
42 | 42 | ||
@@ -649,8 +649,7 @@ | |||
649 | #define PMGPIO_APB_OFFS 0x800 | 649 | #define PMGPIO_APB_OFFS 0x800 |
650 | 650 | ||
651 | /* Clock controller registers */ | 651 | /* Clock controller registers */ |
652 | #define CKC_BASE (APB1_PERI_BASE_VIRT + 0x6000) | 652 | #define CKC_BASE ((void __iomem *)(APB1_PERI_BASE_VIRT + 0x6000)) |
653 | #define CKC_BASE_PHYS (APB1_PERI_BASE + 0x6000) | ||
654 | 653 | ||
655 | #define CLKCTRL_OFFS 0x00 | 654 | #define CLKCTRL_OFFS 0x00 |
656 | #define PLL0CFG_OFFS 0x04 | 655 | #define PLL0CFG_OFFS 0x04 |
@@ -724,8 +723,20 @@ | |||
724 | /* SWRESET1 bits */ | 723 | /* SWRESET1 bits */ |
725 | #define SWRESET1_USBH1 (1 << 20) | 724 | #define SWRESET1_USBH1 (1 << 20) |
726 | 725 | ||
727 | /* System clock sources */ | 726 | /* System clock sources. |
727 | * Note: These are the clock sources that serve as parents for | ||
728 | * all other clocks. They have no parents themselves. | ||
729 | * | ||
730 | * These values are used for struct clk->root_id. All clocks | ||
731 | * that are not system clock sources have this value set to | ||
732 | * CLK_SRC_NOROOT. | ||
733 | * The values for system clocks start with CLK_SRC_PLL0 == 0 | ||
734 | * because this gives us exactly the values needed for the lower | ||
735 | * 4 bits of ACLK_* registers. Therefore, CLK_SRC_NOROOT is | ||
736 | * defined as -1 to not disturb the order. | ||
737 | */ | ||
728 | enum root_clks { | 738 | enum root_clks { |
739 | CLK_SRC_NOROOT = -1, | ||
729 | CLK_SRC_PLL0 = 0, | 740 | CLK_SRC_PLL0 = 0, |
730 | CLK_SRC_PLL1, | 741 | CLK_SRC_PLL1, |
731 | CLK_SRC_PLL0DIV, | 742 | CLK_SRC_PLL0DIV, |