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

TOMOYO Linux Cross Reference
Linux/arch/arm/mach-imx/anatop.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.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/arm/mach-imx/anatop.c (Version linux-6.12-rc7) and /arch/alpha/mach-imx/anatop.c (Version linux-5.9.16)


  1 // SPDX-License-Identifier: GPL-2.0-or-later        1 
  2 /*                                                
  3  * Copyright (C) 2013-2015 Freescale Semicondu    
  4  * Copyright 2017-2018 NXP.                       
  5  */                                               
  6                                                   
  7 #include <linux/err.h>                            
  8 #include <linux/io.h>                             
  9 #include <linux/of.h>                             
 10 #include <linux/of_address.h>                     
 11 #include <linux/mfd/syscon.h>                     
 12 #include <linux/regmap.h>                         
 13 #include "common.h"                               
 14 #include "hardware.h"                             
 15                                                   
 16 #define REG_SET         0x4                       
 17 #define REG_CLR         0x8                       
 18                                                   
 19 #define ANADIG_REG_2P5          0x130             
 20 #define ANADIG_REG_CORE         0x140             
 21 #define ANADIG_ANA_MISC0        0x150             
 22 #define ANADIG_DIGPROG          0x260             
 23 #define ANADIG_DIGPROG_IMX6SL   0x280             
 24 #define ANADIG_DIGPROG_IMX7D    0x800             
 25                                                   
 26 #define SRC_SBMR2               0x1c              
 27                                                   
 28 #define BM_ANADIG_REG_2P5_ENABLE_WEAK_LINREG      
 29 #define BM_ANADIG_REG_2P5_ENABLE_PULLDOWN         
 30 #define BM_ANADIG_REG_CORE_FET_ODRIVE             
 31 #define BM_ANADIG_ANA_MISC0_STOP_MODE_CONFIG      
 32 /* Below MISC0_DISCON_HIGH_SNVS is only for i.    
 33 #define BM_ANADIG_ANA_MISC0_DISCON_HIGH_SNVS      
 34                                                   
 35 static struct regmap *anatop;                     
 36                                                   
 37 static void imx_anatop_enable_weak2p5(bool ena    
 38 {                                                 
 39         u32 reg, val;                             
 40                                                   
 41         regmap_read(anatop, ANADIG_ANA_MISC0,     
 42                                                   
 43         /* can only be enabled when stop_mode_    
 44         reg = ANADIG_REG_2P5;                     
 45         reg += (enable && (val & BM_ANADIG_ANA    
 46                 REG_SET : REG_CLR;                
 47         regmap_write(anatop, reg, BM_ANADIG_RE    
 48 }                                                 
 49                                                   
 50 static void imx_anatop_enable_fet_odrive(bool     
 51 {                                                 
 52         regmap_write(anatop, ANADIG_REG_CORE +    
 53                 BM_ANADIG_REG_CORE_FET_ODRIVE)    
 54 }                                                 
 55                                                   
 56 static inline void imx_anatop_enable_2p5_pulld    
 57 {                                                 
 58         regmap_write(anatop, ANADIG_REG_2P5 +     
 59                 BM_ANADIG_REG_2P5_ENABLE_PULLD    
 60 }                                                 
 61                                                   
 62 static inline void imx_anatop_disconnect_high_    
 63 {                                                 
 64         regmap_write(anatop, ANADIG_ANA_MISC0     
 65                 BM_ANADIG_ANA_MISC0_DISCON_HIG    
 66 }                                                 
 67                                                   
 68 void imx_anatop_pre_suspend(void)                 
 69 {                                                 
 70         if (imx_mmdc_get_ddr_type() == IMX_DDR    
 71                 imx_anatop_enable_2p5_pulldown    
 72         else                                      
 73                 imx_anatop_enable_weak2p5(true    
 74                                                   
 75         imx_anatop_enable_fet_odrive(true);       
 76                                                   
 77         if (cpu_is_imx6sl())                      
 78                 imx_anatop_disconnect_high_snv    
 79 }                                                 
 80                                                   
 81 void imx_anatop_post_resume(void)                 
 82 {                                                 
 83         if (imx_mmdc_get_ddr_type() == IMX_DDR    
 84                 imx_anatop_enable_2p5_pulldown    
 85         else                                      
 86                 imx_anatop_enable_weak2p5(fals    
 87                                                   
 88         imx_anatop_enable_fet_odrive(false);      
 89                                                   
 90         if (cpu_is_imx6sl())                      
 91                 imx_anatop_disconnect_high_snv    
 92 }                                                 
 93                                                   
 94 void __init imx_init_revision_from_anatop(void    
 95 {                                                 
 96         struct device_node *np, *src_np;          
 97         void __iomem *anatop_base;                
 98         unsigned int revision;                    
 99         u32 digprog;                              
100         u16 offset = ANADIG_DIGPROG;              
101         u8 major_part, minor_part;                
102                                                   
103         np = of_find_compatible_node(NULL, NUL    
104         anatop_base = of_iomap(np, 0);            
105         WARN_ON(!anatop_base);                    
106         if (of_device_is_compatible(np, "fsl,i    
107                 offset = ANADIG_DIGPROG_IMX6SL    
108         if (of_device_is_compatible(np, "fsl,i    
109                 offset = ANADIG_DIGPROG_IMX7D;    
110         digprog = readl_relaxed(anatop_base +     
111         iounmap(anatop_base);                     
112                                                   
113         /*                                        
114          * On i.MX7D digprog value match linux    
115          * it needn't map again and we can use    
116          */                                       
117         if (of_device_is_compatible(np, "fsl,i    
118                 revision = digprog & 0xff;        
119         } else {                                  
120                 /*                                
121                  * MAJOR: [15:8], the major si    
122                  * MINOR: [7: 0], the minor si    
123                  *                                
124                  * please refer to the i.MX RM    
125                  * silicon revison bit define.    
126                  * format the major part and m    
127                  * linux kernel soc version fo    
128                  */                               
129                 major_part = (digprog >> 8) &     
130                 minor_part = digprog & 0xf;       
131                 revision = ((major_part + 1) <    
132                                                   
133                 if ((digprog >> 16) == MXC_CPU    
134                         void __iomem *src_base    
135                         u32 sbmr2;                
136                                                   
137                         src_np = of_find_compa    
138                                                   
139                         src_base = of_iomap(sr    
140                         of_node_put(src_np);      
141                         WARN_ON(!src_base);       
142                         sbmr2 = readl_relaxed(    
143                         iounmap(src_base);        
144                                                   
145                         /* src_sbmr2 bit 6 is     
146                         if (sbmr2 & (1 << 6))     
147                                 digprog &= ~(0    
148                                 digprog |= (MX    
149                         }                         
150                 }                                 
151         }                                         
152         of_node_put(np);                          
153                                                   
154         mxc_set_cpu_type(digprog >> 16 & 0xff)    
155         imx_set_soc_revision(revision);           
156 }                                                 
157                                                   
158 void __init imx_anatop_init(void)                 
159 {                                                 
160         anatop = syscon_regmap_lookup_by_compa    
161         if (IS_ERR(anatop))                       
162                 pr_err("%s: failed to find imx    
163 }                                                 
164                                                   

~ [ 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