select GENERIC_CPU_DEVICES
select MODULES_USE_ELF_RELA
select GENERIC_CLOCKEVENTS
+ select CLKDEV_LOOKUP
config MMU
bool
generic-y += barrier.h
generic-y += bitsperlong.h
+generic-y += clkdev.h
generic-y += cputime.h
generic-y += current.h
generic-y += delay.h
--- /dev/null
+#ifndef __H8300_CLK_H
+#define __H8300_CLK_H
+
+struct clk {
+ struct clk *parent;
+ unsigned long rate;
+ unsigned long flags;
+};
+
+#endif
obj-y := process.o traps.o ptrace.o \
sys_h8300.o time.o signal.o \
setup.o syscalls.o irq.o \
- entry.o timer/
+ entry.o clk.o timer/
obj-$(CONFIG_ROMKERNEL) += head_rom.o
obj-$(CONFIG_RAMKERNEL) += head_ram.o
--- /dev/null
+/*
+ * linux/arch/h8300/kernel/clk.c
+ *
+ * Copyright 2015 Yoshinori Sato <ysato@users.sourceforge.jp>
+ */
+
+#include <linux/clk.h>
+#include <linux/module.h>
+#include <linux/compiler.h>
+#include <linux/clkdev.h>
+#include <asm/clk.h>
+
+unsigned long clk_get_rate(struct clk *clk)
+{
+ return clk->parent->rate;
+}
+EXPORT_SYMBOL(clk_get_rate)
+
+int clk_enable(struct clk *clk)
+{
+ return 0;
+}
+EXPORT_SYMBOL(clk_enable)
+
+void clk_disable(struct clk *clk)
+{
+}
+EXPORT_SYMBOL(clk_disable)
+
+static struct clk master_clk;
+
+static struct clk peripheral_clk = {
+ .parent = &master_clk,
+};
+
+static struct clk_lookup lookups[] = {
+ {
+ .con_id = "master_clk",
+ .clk = &master_clk,
+ } ,
+ {
+ .con_id = "peripheral_clk",
+ .clk = &peripheral_clk,
+ },
+};
+
+int __init h8300_clk_init(unsigned long hz)
+{
+ master_clk.rate = hz;
+ clkdev_add_table(lookups, ARRAY_SIZE(lookups));
+ return 0;
+}
extern unsigned long _ramend;
void sim_console_register(void);
+int h8300_clk_init(unsigned long hz);
void __init __attribute__((weak)) early_device_init(void)
{
free_bootmem(memory_start, memory_end - memory_start);
reserve_bootmem(memory_start, bootmap_size, BOOTMEM_DEFAULT);
+ h8300_clk_init(bootparams.clock_freq);
early_device_init();
#if defined(CONFIG_H8300H_SIM) || defined(CONFIG_H8S_SIM)
sim_console_register();
static int show_cpuinfo(struct seq_file *m, void *v)
{
- char *cpu;
- u_long clockfreq;
+ char *cpu;
+ u_long clockfreq;
- cpu = CPU;
- clockfreq = bootparams.clock_freq;
+ cpu = CPU;
+ clockfreq = bootparams.clock_freq;
- seq_printf(m, "CPU:\t\t%s\n"
+ seq_printf(m, "CPU:\t\t%s\n"
"Clock:\t\t%lu.%1luMHz\n"
"BogoMips:\t%lu.%02lu\n"
"Calibration:\t%lu loops\n",
- cpu,
- clockfreq/1000,clockfreq%1000,
- (loops_per_jiffy*HZ)/500000,((loops_per_jiffy*HZ)/5000)%100,
- (loops_per_jiffy*HZ));
+ cpu,
+ clockfreq/1000,clockfreq%1000,
+ (loops_per_jiffy*HZ)/500000,((loops_per_jiffy*HZ)/5000)%100,
+ (loops_per_jiffy*HZ));
- return 0;
+ return 0;
}
static void *c_start(struct seq_file *m, loff_t *pos)