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

TOMOYO Linux Cross Reference
Linux/arch/mips/rb532/devices.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/mips/rb532/devices.c (Version linux-6.12-rc7) and /arch/ppc/rb532/devices.c (Version linux-5.5.19)


  1 // SPDX-License-Identifier: GPL-2.0-or-later        1 
  2 /*                                                
  3  *  RouterBoard 500 Platform devices              
  4  *                                                
  5  *  Copyright (C) 2006 Felix Fietkau <nbd@open    
  6  *  Copyright (C) 2007 Florian Fainelli <flori    
  7  */                                               
  8 #include <linux/kernel.h>                         
  9 #include <linux/export.h>                         
 10 #include <linux/init.h>                           
 11 #include <linux/ctype.h>                          
 12 #include <linux/string.h>                         
 13 #include <linux/platform_device.h>                
 14 #include <linux/mtd/platnand.h>                   
 15 #include <linux/mtd/mtd.h>                        
 16 #include <linux/gpio.h>                           
 17 #include <linux/gpio/machine.h>                   
 18 #include <linux/gpio_keys.h>                      
 19 #include <linux/input.h>                          
 20 #include <linux/serial_8250.h>                    
 21                                                   
 22 #include <asm/bootinfo.h>                         
 23                                                   
 24 #include <asm/mach-rc32434/rc32434.h>             
 25 #include <asm/mach-rc32434/dma.h>                 
 26 #include <asm/mach-rc32434/dma_v.h>               
 27 #include <asm/mach-rc32434/eth.h>                 
 28 #include <asm/mach-rc32434/rb.h>                  
 29 #include <asm/mach-rc32434/integ.h>               
 30 #include <asm/mach-rc32434/gpio.h>                
 31 #include <asm/mach-rc32434/irq.h>                 
 32                                                   
 33 #define ETH0_RX_DMA_ADDR  (DMA0_BASE_ADDR + 0     
 34 #define ETH0_TX_DMA_ADDR  (DMA0_BASE_ADDR + 1     
 35                                                   
 36 extern unsigned int idt_cpu_freq;                 
 37                                                   
 38 static struct mpmc_device dev3;                   
 39                                                   
 40 void set_latch_u5(unsigned char or_mask, unsig    
 41 {                                                 
 42         unsigned long flags;                      
 43                                                   
 44         spin_lock_irqsave(&dev3.lock, flags);     
 45                                                   
 46         dev3.state = (dev3.state | or_mask) &     
 47         writeb(dev3.state, dev3.base);            
 48                                                   
 49         spin_unlock_irqrestore(&dev3.lock, fla    
 50 }                                                 
 51 EXPORT_SYMBOL(set_latch_u5);                      
 52                                                   
 53 unsigned char get_latch_u5(void)                  
 54 {                                                 
 55         return dev3.state;                        
 56 }                                                 
 57 EXPORT_SYMBOL(get_latch_u5);                      
 58                                                   
 59 static struct resource korina_dev0_res[] = {      
 60         {                                         
 61                 .name = "emac",                   
 62                 .start = ETH0_BASE_ADDR,          
 63                 .end = ETH0_BASE_ADDR + sizeof    
 64                 .flags = IORESOURCE_MEM,          
 65          }, {                                     
 66                 .name = "rx",                     
 67                 .start = ETH0_DMA_RX_IRQ,         
 68                 .end = ETH0_DMA_RX_IRQ,           
 69                 .flags = IORESOURCE_IRQ           
 70         }, {                                      
 71                 .name = "tx",                     
 72                 .start = ETH0_DMA_TX_IRQ,         
 73                 .end = ETH0_DMA_TX_IRQ,           
 74                 .flags = IORESOURCE_IRQ           
 75         }, {                                      
 76                 .name = "dma_rx",                 
 77                 .start = ETH0_RX_DMA_ADDR,        
 78                 .end = ETH0_RX_DMA_ADDR + DMA_    
 79                 .flags = IORESOURCE_MEM,          
 80          }, {                                     
 81                 .name = "dma_tx",                 
 82                 .start = ETH0_TX_DMA_ADDR,        
 83                 .end = ETH0_TX_DMA_ADDR + DMA_    
 84                 .flags = IORESOURCE_MEM,          
 85          }                                        
 86 };                                                
 87                                                   
 88 static struct korina_device korina_dev0_data =    
 89         .name = "korina0",                        
 90         .mac = {0xde, 0xca, 0xff, 0xc0, 0xff,     
 91 };                                                
 92                                                   
 93 static struct platform_device korina_dev0 = {     
 94         .id = -1,                                 
 95         .name = "korina",                         
 96         .resource = korina_dev0_res,              
 97         .num_resources = ARRAY_SIZE(korina_dev    
 98         .dev = {                                  
 99                 .platform_data = &korina_dev0_    
100         }                                         
101 };                                                
102                                                   
103 static struct resource cf_slot0_res[] = {         
104         {                                         
105                 .name = "cf_membase",             
106                 .flags = IORESOURCE_MEM           
107         }, {                                      
108                 .name = "cf_irq",                 
109                 .start = (8 + 4 * 32 + CF_GPIO    
110                 .end = (8 + 4 * 32 + CF_GPIO_N    
111                 .flags = IORESOURCE_IRQ           
112         }                                         
113 };                                                
114                                                   
115 static struct gpiod_lookup_table cf_slot0_gpio    
116         .dev_id = "pata-rb532-cf",                
117         .table = {                                
118                 GPIO_LOOKUP("gpio0", CF_GPIO_N    
119                             NULL, GPIO_ACTIVE_    
120                 { },                              
121         },                                        
122 };                                                
123                                                   
124 static struct platform_device cf_slot0 = {        
125         .id = -1,                                 
126         .name = "pata-rb532-cf",                  
127         .resource = cf_slot0_res,                 
128         .num_resources = ARRAY_SIZE(cf_slot0_r    
129 };                                                
130                                                   
131 /* Resources and device for NAND */               
132 static int rb532_dev_ready(struct nand_chip *c    
133 {                                                 
134         return gpio_get_value(GPIO_RDY);          
135 }                                                 
136                                                   
137 static void rb532_cmd_ctrl(struct nand_chip *c    
138 {                                                 
139         unsigned char orbits, nandbits;           
140                                                   
141         if (ctrl & NAND_CTRL_CHANGE) {            
142                 orbits = (ctrl & NAND_CLE) <<     
143                 orbits |= (ctrl & NAND_ALE) >>    
144                                                   
145                 nandbits = (~ctrl & NAND_CLE)     
146                 nandbits |= (~ctrl & NAND_ALE)    
147                                                   
148                 set_latch_u5(orbits, nandbits)    
149         }                                         
150         if (cmd != NAND_CMD_NONE)                 
151                 writeb(cmd, chip->legacy.IO_AD    
152 }                                                 
153                                                   
154 static struct resource nand_slot0_res[] = {       
155         [0] = {                                   
156                 .name = "nand_membase",           
157                 .flags = IORESOURCE_MEM           
158         }                                         
159 };                                                
160                                                   
161 static struct platform_nand_data rb532_nand_da    
162         .ctrl.dev_ready = rb532_dev_ready,        
163         .ctrl.cmd_ctrl  = rb532_cmd_ctrl,         
164 };                                                
165                                                   
166 static struct platform_device nand_slot0 = {      
167         .name = "gen_nand",                       
168         .id = -1,                                 
169         .resource = nand_slot0_res,               
170         .num_resources = ARRAY_SIZE(nand_slot0    
171         .dev.platform_data = &rb532_nand_data,    
172 };                                                
173                                                   
174 static struct mtd_partition rb532_partition_in    
175         {                                         
176                 .name = "Routerboard NAND boot    
177                 .offset = 0,                      
178                 .size = 4 * 1024 * 1024,          
179         }, {                                      
180                 .name = "rootfs",                 
181                 .offset = MTDPART_OFS_NXTBLK,     
182                 .size = MTDPART_SIZ_FULL,         
183         }                                         
184 };                                                
185                                                   
186 static struct platform_device rb532_led = {       
187         .name = "rb532-led",                      
188         .id = -1,                                 
189 };                                                
190                                                   
191 static struct platform_device rb532_button = {    
192         .name   = "rb532-button",                 
193         .id     = -1,                             
194 };                                                
195                                                   
196 static struct resource rb532_wdt_res[] = {        
197         {                                         
198                 .name = "rb532_wdt_res",          
199                 .start = INTEG0_BASE_ADDR,        
200                 .end = INTEG0_BASE_ADDR + size    
201                 .flags = IORESOURCE_MEM,          
202         }                                         
203 };                                                
204                                                   
205 static struct platform_device rb532_wdt = {       
206         .name           = "rc32434_wdt",          
207         .id             = -1,                     
208         .resource       = rb532_wdt_res,          
209         .num_resources  = ARRAY_SIZE(rb532_wdt    
210 };                                                
211                                                   
212 static struct plat_serial8250_port rb532_uart_    
213         {                                         
214                 .type           = PORT_16550A,    
215                 .membase        = (char *)KSEG    
216                 .irq            = UART0_IRQ,      
217                 .regshift       = 2,              
218                 .iotype         = UPIO_MEM,       
219                 .flags          = UPF_BOOT_AUT    
220         },                                        
221         {                                         
222                 .flags          = 0,              
223         }                                         
224 };                                                
225                                                   
226 static struct platform_device rb532_uart = {      
227         .name              = "serial8250",        
228         .id                = PLAT8250_DEV_PLAT    
229         .dev.platform_data = &rb532_uart_res,     
230 };                                                
231                                                   
232 static struct platform_device *rb532_devs[] =     
233         &korina_dev0,                             
234         &nand_slot0,                              
235         &cf_slot0,                                
236         &rb532_led,                               
237         &rb532_button,                            
238         &rb532_uart,                              
239         &rb532_wdt                                
240 };                                                
241                                                   
242 /* NAND definitions */                            
243 #define NAND_CHIP_DELAY 25                        
244                                                   
245 static void __init rb532_nand_setup(void)         
246 {                                                 
247         switch (mips_machtype) {                  
248         case MACH_MIKROTIK_RB532A:                
249                 set_latch_u5(LO_FOFF | LO_CEX,    
250                                 LO_ULED | LO_A    
251                 break;                            
252         default:                                  
253                 set_latch_u5(LO_WPX | LO_FOFF     
254                                 LO_ULED | LO_A    
255                 break;                            
256         }                                         
257                                                   
258         /* Setup NAND specific settings */        
259         rb532_nand_data.chip.nr_chips = 1;        
260         rb532_nand_data.chip.nr_partitions = A    
261         rb532_nand_data.chip.partitions = rb53    
262         rb532_nand_data.chip.chip_delay = NAND    
263 }                                                 
264                                                   
265                                                   
266 static int __init plat_setup_devices(void)        
267 {                                                 
268         /* Look for the CF card reader */         
269         if (!readl(IDT434_REG_BASE + DEV1MASK)    
270                 rb532_devs[2] = NULL;   /* dis    
271         else {                                    
272                 cf_slot0_res[0].start =           
273                     readl(IDT434_REG_BASE + DE    
274                 cf_slot0_res[0].end = cf_slot0    
275         }                                         
276                                                   
277         /* Read the NAND resources from the de    
278         nand_slot0_res[0].start = readl(IDT434    
279         nand_slot0_res[0].end = nand_slot0_res    
280                                                   
281         /* Read and map device controller 3 */    
282         dev3.base = ioremap(readl(IDT434_REG_B    
283                                                   
284         if (!dev3.base) {                         
285                 printk(KERN_ERR "rb532: cannot    
286                 return -ENXIO;                    
287         }                                         
288                                                   
289         /* Initialise the NAND device */          
290         rb532_nand_setup();                       
291                                                   
292         /* set the uart clock to the current c    
293         rb532_uart_res[0].uartclk = idt_cpu_fr    
294                                                   
295         gpiod_add_lookup_table(&cf_slot0_gpio_    
296         return platform_add_devices(rb532_devs    
297 }                                                 
298                                                   
299 #ifdef CONFIG_NET                                 
300                                                   
301 static int __init setup_kmac(char *s)             
302 {                                                 
303         printk(KERN_INFO "korina mac = %s\n",     
304         if (!mac_pton(s, korina_dev0_data.mac)    
305                 printk(KERN_ERR "Invalid mac\n    
306         return 1;                                 
307 }                                                 
308                                                   
309 __setup("kmac=", setup_kmac);                     
310                                                   
311 #endif /* CONFIG_NET */                           
312                                                   
313 arch_initcall(plat_setup_devices);                
314                                                   

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