Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/arch/mips/econet/init.c
26424 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
/*
3
* EcoNet setup code
4
*
5
* Copyright (C) 2025 Caleb James DeLisle <[email protected]>
6
*/
7
8
#include <linux/init.h>
9
#include <linux/of_clk.h>
10
#include <linux/irqchip.h>
11
12
#include <asm/addrspace.h>
13
#include <asm/io.h>
14
#include <asm/bootinfo.h>
15
#include <asm/time.h>
16
#include <asm/prom.h>
17
#include <asm/smp-ops.h>
18
#include <asm/reboot.h>
19
20
#define CR_AHB_RSTCR ((void __iomem *)CKSEG1ADDR(0x1fb00040))
21
#define RESET BIT(31)
22
23
#define UART_BASE CKSEG1ADDR(0x1fbf0003)
24
#define UART_REG_SHIFT 2
25
26
static void hw_reset(char *command)
27
{
28
iowrite32(RESET, CR_AHB_RSTCR);
29
}
30
31
/* 1. Bring up early printk. */
32
void __init prom_init(void)
33
{
34
setup_8250_early_printk_port(UART_BASE, UART_REG_SHIFT, 0);
35
_machine_restart = hw_reset;
36
}
37
38
/* 2. Parse the DT and find memory */
39
void __init plat_mem_setup(void)
40
{
41
void *dtb;
42
43
set_io_port_base(KSEG1);
44
45
dtb = get_fdt();
46
if (!dtb)
47
panic("no dtb found");
48
49
__dt_setup_arch(dtb);
50
51
early_init_dt_scan_memory();
52
}
53
54
/* 3. Overload __weak device_tree_init(), add SMP_UP ops */
55
void __init device_tree_init(void)
56
{
57
unflatten_and_copy_device_tree();
58
59
register_up_smp_ops();
60
}
61
62
const char *get_system_type(void)
63
{
64
return "EcoNet-EN75xx";
65
}
66
67
/* 4. Initialize the IRQ subsystem */
68
void __init arch_init_irq(void)
69
{
70
irqchip_init();
71
}
72
73
/* 5. Timers */
74
void __init plat_time_init(void)
75
{
76
of_clk_init(NULL);
77
timer_probe();
78
}
79
80