root/arch/hexagon/kernel/setup.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. calibrate_delay
  2. setup_arch
  3. c_start
  4. c_next
  5. c_stop
  6. show_cpuinfo

   1 // SPDX-License-Identifier: GPL-2.0-only
   2 /*
   3  * Arch related setup for Hexagon
   4  *
   5  * Copyright (c) 2010-2013, The Linux Foundation. All rights reserved.
   6  */
   7 
   8 #include <linux/init.h>
   9 #include <linux/delay.h>
  10 #include <linux/memblock.h>
  11 #include <linux/mmzone.h>
  12 #include <linux/mm.h>
  13 #include <linux/seq_file.h>
  14 #include <linux/console.h>
  15 #include <linux/of_fdt.h>
  16 #include <asm/io.h>
  17 #include <asm/sections.h>
  18 #include <asm/setup.h>
  19 #include <asm/processor.h>
  20 #include <asm/hexagon_vm.h>
  21 #include <asm/vm_mmu.h>
  22 #include <asm/time.h>
  23 
  24 char cmd_line[COMMAND_LINE_SIZE];
  25 static char default_command_line[COMMAND_LINE_SIZE] __initdata = CONFIG_CMDLINE;
  26 
  27 int on_simulator;
  28 
  29 void calibrate_delay(void)
  30 {
  31         loops_per_jiffy = thread_freq_mhz * 1000000 / HZ;
  32 }
  33 
  34 /*
  35  * setup_arch -  high level architectural setup routine
  36  * @cmdline_p: pointer to pointer to command-line arguments
  37  */
  38 
  39 void __init setup_arch(char **cmdline_p)
  40 {
  41         char *p = &external_cmdline_buffer;
  42 
  43         /*
  44          * These will eventually be pulled in via either some hypervisor
  45          * or devicetree description.  Hardwiring for now.
  46          */
  47         pcycle_freq_mhz = 600;
  48         thread_freq_mhz = 100;
  49         sleep_clk_freq = 32000;
  50 
  51         /*
  52          * Set up event bindings to handle exceptions and interrupts.
  53          */
  54         __vmsetvec(_K_VM_event_vector);
  55 
  56         printk(KERN_INFO "PHYS_OFFSET=0x%08lx\n", PHYS_OFFSET);
  57 
  58         /*
  59          * Simulator has a few differences from the hardware.
  60          * For now, check uninitialized-but-mapped memory
  61          * prior to invoking setup_arch_memory().
  62          */
  63         if (*(int *)((unsigned long)_end + 8) == 0x1f1f1f1f)
  64                 on_simulator = 1;
  65         else
  66                 on_simulator = 0;
  67 
  68         if (p[0] != '\0')
  69                 strlcpy(boot_command_line, p, COMMAND_LINE_SIZE);
  70         else
  71                 strlcpy(boot_command_line, default_command_line,
  72                         COMMAND_LINE_SIZE);
  73 
  74         /*
  75          * boot_command_line and the value set up by setup_arch
  76          * are both picked up by the init code. If no reason to
  77          * make them different, pass the same pointer back.
  78          */
  79         strlcpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE);
  80         *cmdline_p = cmd_line;
  81 
  82         parse_early_param();
  83 
  84         setup_arch_memory();
  85 
  86 #ifdef CONFIG_SMP
  87         smp_start_cpus();
  88 #endif
  89 }
  90 
  91 /*
  92  * Functions for dumping CPU info via /proc
  93  * Probably should move to kernel/proc.c or something.
  94  */
  95 static void *c_start(struct seq_file *m, loff_t *pos)
  96 {
  97         return *pos < nr_cpu_ids ? (void *)((unsigned long) *pos + 1) : NULL;
  98 }
  99 
 100 static void *c_next(struct seq_file *m, void *v, loff_t *pos)
 101 {
 102         ++*pos;
 103         return c_start(m, pos);
 104 }
 105 
 106 static void c_stop(struct seq_file *m, void *v)
 107 {
 108 }
 109 
 110 /*
 111  * Eventually this will dump information about
 112  * CPU properties like ISA level, TLB size, etc.
 113  */
 114 static int show_cpuinfo(struct seq_file *m, void *v)
 115 {
 116         int cpu = (unsigned long) v - 1;
 117 
 118 #ifdef CONFIG_SMP
 119         if (!cpu_online(cpu))
 120                 return 0;
 121 #endif
 122 
 123         seq_printf(m, "processor\t: %d\n", cpu);
 124         seq_printf(m, "model name\t: Hexagon Virtual Machine\n");
 125         seq_printf(m, "BogoMips\t: %lu.%02lu\n",
 126                 (loops_per_jiffy * HZ) / 500000,
 127                 ((loops_per_jiffy * HZ) / 5000) % 100);
 128         seq_printf(m, "\n");
 129         return 0;
 130 }
 131 
 132 const struct seq_operations cpuinfo_op = {
 133         .start  = &c_start,
 134         .next   = &c_next,
 135         .stop   = &c_stop,
 136         .show   = &show_cpuinfo,
 137 };

/* [<][>][^][v][top][bottom][index][help] */