~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/sh/kernel/cpu/sh2a/clock-sh7264.c

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/sh/kernel/cpu/sh2a/clock-sh7264.c (Version linux-6.12-rc7) and /arch/i386/kernel/cpu/sh2a/clock-sh7264.c (Version linux-4.18.20)


  1 // SPDX-License-Identifier: GPL-2.0                 1 
  2 /*                                                
  3  * arch/sh/kernel/cpu/sh2a/clock-sh7264.c         
  4  *                                                
  5  * SH7264 clock framework support                 
  6  *                                                
  7  * Copyright (C) 2012  Phil Edworthy              
  8  */                                               
  9 #include <linux/init.h>                           
 10 #include <linux/kernel.h>                         
 11 #include <linux/io.h>                             
 12 #include <linux/clkdev.h>                         
 13 #include <asm/clock.h>                            
 14                                                   
 15 /* SH7264 registers */                            
 16 #define FRQCR           0xfffe0010                
 17 #define STBCR3          0xfffe0408                
 18 #define STBCR4          0xfffe040c                
 19 #define STBCR5          0xfffe0410                
 20 #define STBCR6          0xfffe0414                
 21 #define STBCR7          0xfffe0418                
 22 #define STBCR8          0xfffe041c                
 23                                                   
 24 static const unsigned int pll1rate[] = {8, 12}    
 25                                                   
 26 static unsigned int pll1_div;                     
 27                                                   
 28 /* Fixed 32 KHz root clock for RTC */             
 29 static struct clk r_clk = {                       
 30         .rate           = 32768,                  
 31 };                                                
 32                                                   
 33 /*                                                
 34  * Default rate for the root input clock, rese    
 35  * from the platform code.                        
 36  */                                               
 37 static struct clk extal_clk = {                   
 38         .rate           = 18000000,               
 39 };                                                
 40                                                   
 41 static unsigned long pll_recalc(struct clk *cl    
 42 {                                                 
 43         unsigned long rate = clk->parent->rate    
 44         return rate * pll1rate[(__raw_readw(FR    
 45 }                                                 
 46                                                   
 47 static struct sh_clk_ops pll_clk_ops = {          
 48         .recalc         = pll_recalc,             
 49 };                                                
 50                                                   
 51 static struct clk pll_clk = {                     
 52         .ops            = &pll_clk_ops,           
 53         .parent         = &extal_clk,             
 54         .flags          = CLK_ENABLE_ON_INIT,     
 55 };                                                
 56                                                   
 57 struct clk *main_clks[] = {                       
 58         &r_clk,                                   
 59         &extal_clk,                               
 60         &pll_clk,                                 
 61 };                                                
 62                                                   
 63 static int div2[] = { 1, 2, 3, 4, 6, 8, 12 };     
 64                                                   
 65 static struct clk_div_mult_table div4_div_mult    
 66         .divisors = div2,                         
 67         .nr_divisors = ARRAY_SIZE(div2),          
 68 };                                                
 69                                                   
 70 static struct clk_div4_table div4_table = {       
 71         .div_mult_table = &div4_div_mult_table    
 72 };                                                
 73                                                   
 74 enum { DIV4_I, DIV4_P,                            
 75        DIV4_NR };                                 
 76                                                   
 77 #define DIV4(_reg, _bit, _mask, _flags) \         
 78   SH_CLK_DIV4(&pll_clk, _reg, _bit, _mask, _fl    
 79                                                   
 80 /* The mask field specifies the div2 entries t    
 81 struct clk div4_clks[DIV4_NR] = {                 
 82         [DIV4_I] = DIV4(FRQCR, 4, 0x7,  CLK_EN    
 83                                         | CLK_    
 84         [DIV4_P] = DIV4(FRQCR, 0, 0x78, CLK_EN    
 85 };                                                
 86                                                   
 87 enum {  MSTP77, MSTP74, MSTP72,                   
 88         MSTP60,                                   
 89         MSTP35, MSTP34, MSTP33, MSTP32, MSTP30    
 90         MSTP_NR };                                
 91                                                   
 92 static struct clk mstp_clks[MSTP_NR] = {          
 93         [MSTP77] = SH_CLK_MSTP8(&div4_clks[DIV    
 94         [MSTP74] = SH_CLK_MSTP8(&div4_clks[DIV    
 95         [MSTP72] = SH_CLK_MSTP8(&div4_clks[DIV    
 96         [MSTP60] = SH_CLK_MSTP8(&div4_clks[DIV    
 97         [MSTP35] = SH_CLK_MSTP8(&div4_clks[DIV    
 98         [MSTP34] = SH_CLK_MSTP8(&div4_clks[DIV    
 99         [MSTP33] = SH_CLK_MSTP8(&div4_clks[DIV    
100         [MSTP32] = SH_CLK_MSTP8(&div4_clks[DIV    
101         [MSTP30] = SH_CLK_MSTP8(&r_clk, STBCR3    
102 };                                                
103                                                   
104 static struct clk_lookup lookups[] = {            
105         /* main clocks */                         
106         CLKDEV_CON_ID("rclk", &r_clk),            
107         CLKDEV_CON_ID("extal", &extal_clk),       
108         CLKDEV_CON_ID("pll_clk", &pll_clk),       
109                                                   
110         /* DIV4 clocks */                         
111         CLKDEV_CON_ID("cpu_clk", &div4_clks[DI    
112         CLKDEV_CON_ID("peripheral_clk", &div4_    
113                                                   
114         /* MSTP clocks */                         
115         CLKDEV_ICK_ID("fck", "sh-sci.0", &mstp    
116         CLKDEV_ICK_ID("fck", "sh-sci.1", &mstp    
117         CLKDEV_ICK_ID("fck", "sh-sci.2", &mstp    
118         CLKDEV_ICK_ID("fck", "sh-sci.3", &mstp    
119         CLKDEV_ICK_ID("fck", "sh-sci.4", &mstp    
120         CLKDEV_ICK_ID("fck", "sh-sci.5", &mstp    
121         CLKDEV_ICK_ID("fck", "sh-sci.6", &mstp    
122         CLKDEV_ICK_ID("fck", "sh-sci.7", &mstp    
123         CLKDEV_CON_ID("vdc3", &mstp_clks[MSTP7    
124         CLKDEV_ICK_ID("fck", "sh-cmt-16.0", &m    
125         CLKDEV_CON_ID("usb0", &mstp_clks[MSTP6    
126         CLKDEV_ICK_ID("fck", "sh-mtu2", &mstp_    
127         CLKDEV_CON_ID("sdhi0", &mstp_clks[MSTP    
128         CLKDEV_CON_ID("sdhi1", &mstp_clks[MSTP    
129         CLKDEV_CON_ID("adc0", &mstp_clks[MSTP3    
130         CLKDEV_CON_ID("rtc0", &mstp_clks[MSTP3    
131 };                                                
132                                                   
133 int __init arch_clk_init(void)                    
134 {                                                 
135         int k, ret = 0;                           
136                                                   
137         if (test_mode_pin(MODE_PIN0)) {           
138                 if (test_mode_pin(MODE_PIN1))     
139                         pll1_div = 3;             
140                 else                              
141                         pll1_div = 4;             
142         } else                                    
143                 pll1_div = 1;                     
144                                                   
145         for (k = 0; !ret && (k < ARRAY_SIZE(ma    
146                 ret = clk_register(main_clks[k    
147                                                   
148         clkdev_add_table(lookups, ARRAY_SIZE(l    
149                                                   
150         if (!ret)                                 
151                 ret = sh_clk_div4_register(div    
152                                                   
153         if (!ret)                                 
154                 ret = sh_clk_mstp_register(mst    
155                                                   
156         return ret;                               
157 }                                                 
158                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php