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

TOMOYO Linux Cross Reference
Linux/arch/m68k/sun3/config.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ 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 ] ~

  1 /*
  2  *  linux/arch/m68k/sun3/config.c
  3  *
  4  *  Copyright (C) 1996,1997 Pekka Pietik{inen
  5  *
  6  * This file is subject to the terms and conditions of the GNU General Public
  7  * License.  See the file COPYING in the main directory of this archive
  8  * for more details.
  9  */
 10 
 11 #include <linux/types.h>
 12 #include <linux/kernel.h>
 13 #include <linux/mm.h>
 14 #include <linux/seq_file.h>
 15 #include <linux/tty.h>
 16 #include <linux/console.h>
 17 #include <linux/init.h>
 18 #include <linux/memblock.h>
 19 #include <linux/platform_device.h>
 20 #include <linux/linkage.h>
 21 
 22 #include <asm/oplib.h>
 23 #include <asm/setup.h>
 24 #include <asm/contregs.h>
 25 #include <asm/movs.h>
 26 #include <asm/pgalloc.h>
 27 #include <asm/sun3-head.h>
 28 #include <asm/sun3mmu.h>
 29 #include <asm/machdep.h>
 30 #include <asm/machines.h>
 31 #include <asm/idprom.h>
 32 #include <asm/intersil.h>
 33 #include <asm/irq.h>
 34 #include <asm/sections.h>
 35 #include <asm/sun3ints.h>
 36 #include <asm/config.h>
 37 
 38 #include "sun3.h"
 39 
 40 char sun3_reserved_pmeg[SUN3_PMEGS_NUM];
 41 
 42 static void sun3_sched_init(void);
 43 
 44 volatile char* clock_va;
 45 extern unsigned long availmem;
 46 unsigned long num_pages;
 47 
 48 static void sun3_get_hardware_list(struct seq_file *m)
 49 {
 50         seq_printf(m, "PROM Revision:\t%s\n", romvec->pv_monid);
 51 }
 52 
 53 asmlinkage void __init sun3_init(void)
 54 {
 55         unsigned char enable_register;
 56         int i;
 57 
 58         m68k_machtype= MACH_SUN3;
 59         m68k_cputype = CPU_68020;
 60         m68k_fputype = FPU_68881; /* mc68881 actually */
 61         m68k_mmutype = MMU_SUN3;
 62         clock_va    =          (char *) 0xfe06000;      /* dark  */
 63         sun3_intreg = (unsigned char *) 0xfe0a000;      /* magic */
 64         sun3_disable_interrupts();
 65 
 66         prom_init((void *)LINUX_OPPROM_BEGVM);
 67 
 68         GET_CONTROL_BYTE(AC_SENABLE,enable_register);
 69         enable_register |= 0x50; /* Enable FPU */
 70         SET_CONTROL_BYTE(AC_SENABLE,enable_register);
 71         GET_CONTROL_BYTE(AC_SENABLE,enable_register);
 72 
 73         /* This code looks suspicious, because it doesn't subtract
 74            memory belonging to the kernel from the available space */
 75 
 76 
 77         memset(sun3_reserved_pmeg, 0, sizeof(sun3_reserved_pmeg));
 78 
 79         /* Reserve important PMEGS */
 80         /* FIXME: These should be probed instead of hardcoded */
 81 
 82         for (i=0; i<8; i++)             /* Kernel PMEGs */
 83                 sun3_reserved_pmeg[i] = 1;
 84 
 85         sun3_reserved_pmeg[247] = 1;    /* ROM mapping  */
 86         sun3_reserved_pmeg[248] = 1;    /* AMD Ethernet */
 87         sun3_reserved_pmeg[251] = 1;    /* VB area      */
 88         sun3_reserved_pmeg[254] = 1;    /* main I/O     */
 89 
 90         sun3_reserved_pmeg[249] = 1;
 91         sun3_reserved_pmeg[252] = 1;
 92         sun3_reserved_pmeg[253] = 1;
 93         set_fc(USER_DATA);
 94 }
 95 
 96 /* Without this, Bad Things happen when something calls arch_reset. */
 97 static void sun3_reboot (void)
 98 {
 99         prom_reboot ("vmlinux");
100 }
101 
102 static void sun3_halt (void)
103 {
104         prom_halt ();
105 }
106 
107 /* sun3 bootmem allocation */
108 
109 static void __init sun3_bootmem_alloc(unsigned long memory_start,
110                                       unsigned long memory_end)
111 {
112         /* align start/end to page boundaries */
113         memory_start = ((memory_start + (PAGE_SIZE-1)) & PAGE_MASK);
114         memory_end = memory_end & PAGE_MASK;
115 
116         max_pfn = num_pages = __pa(memory_end) >> PAGE_SHIFT;
117 
118         high_memory = (void *)memory_end;
119         availmem = memory_start;
120 
121         m68k_setup_node(0);
122 }
123 
124 
125 void __init config_sun3(void)
126 {
127         unsigned long memory_start, memory_end;
128 
129         pr_info("ARCH: SUN3\n");
130         idprom_init();
131 
132         /* Subtract kernel memory from available memory */
133 
134         mach_sched_init      =  sun3_sched_init;
135         mach_init_IRQ        =  sun3_init_IRQ;
136         mach_reset           =  sun3_reboot;
137         mach_get_model       =  sun3_get_model;
138         mach_hwclk           =  sun3_hwclk;
139         mach_halt            =  sun3_halt;
140         mach_get_hardware_list = sun3_get_hardware_list;
141 
142         memory_start = ((((unsigned long)_end) + 0x2000) & ~0x1fff);
143 // PROM seems to want the last couple of physical pages. --m
144         memory_end   = *(romvec->pv_sun3mem) + PAGE_OFFSET - 2*PAGE_SIZE;
145 
146         m68k_num_memory=1;
147         m68k_memory[0].size=*(romvec->pv_sun3mem);
148 
149         sun3_bootmem_alloc(memory_start, memory_end);
150 }
151 
152 static void __init sun3_sched_init(void)
153 {
154         sun3_disable_interrupts();
155         intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_DISABLE|INTERSIL_24H_MODE);
156         intersil_clock->int_reg=INTERSIL_HZ_100_MASK;
157         intersil_clear();
158         sun3_enable_irq(5);
159         intersil_clock->cmd_reg=(INTERSIL_RUN|INTERSIL_INT_ENABLE|INTERSIL_24H_MODE);
160         sun3_enable_interrupts();
161         intersil_clear();
162 }
163 
164 #if IS_ENABLED(CONFIG_SUN3_SCSI)
165 
166 static const struct resource sun3_scsi_vme_rsrc[] __initconst = {
167         {
168                 .flags = IORESOURCE_IRQ,
169                 .start = SUN3_VEC_VMESCSI0,
170                 .end   = SUN3_VEC_VMESCSI0,
171         }, {
172                 .flags = IORESOURCE_MEM,
173                 .start = 0xff200000,
174                 .end   = 0xff200021,
175         }, {
176                 .flags = IORESOURCE_IRQ,
177                 .start = SUN3_VEC_VMESCSI1,
178                 .end   = SUN3_VEC_VMESCSI1,
179         }, {
180                 .flags = IORESOURCE_MEM,
181                 .start = 0xff204000,
182                 .end   = 0xff204021,
183         },
184 };
185 
186 /*
187  * Int: level 2 autovector
188  * IO: type 1, base 0x00140000, 5 bits phys space: A<4..0>
189  */
190 static const struct resource sun3_scsi_rsrc[] __initconst = {
191         {
192                 .flags = IORESOURCE_IRQ,
193                 .start = 2,
194                 .end   = 2,
195         }, {
196                 .flags = IORESOURCE_MEM,
197                 .start = 0x00140000,
198                 .end   = 0x0014001f,
199         },
200 };
201 
202 static int __init sun3_platform_init(void)
203 {
204         switch (idprom->id_machtype) {
205         case SM_SUN3 | SM_3_160:
206         case SM_SUN3 | SM_3_260:
207                 platform_device_register_simple("sun3_scsi_vme", -1,
208                         sun3_scsi_vme_rsrc, ARRAY_SIZE(sun3_scsi_vme_rsrc));
209                 break;
210         case SM_SUN3 | SM_3_50:
211         case SM_SUN3 | SM_3_60:
212                 platform_device_register_simple("sun3_scsi", -1,
213                         sun3_scsi_rsrc, ARRAY_SIZE(sun3_scsi_rsrc));
214                 break;
215         }
216         return 0;
217 }
218 
219 arch_initcall(sun3_platform_init);
220 
221 #endif
222 

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