aboutsummaryrefslogtreecommitdiff
path: root/drivers/misc/mediatek/mrdump/v1/mrdump_setup.c
blob: 7b5d4450d5af00d70f984bb5645c3a2521751d64 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <linux/kconfig.h>
#include <linux/memblock.h>
#include <linux/mrdump.h>
#include <linux/reboot.h>
#include <asm/memory.h>
#include <asm/page.h>
#include <asm/io.h>

#define MRDUMP_CB_ADDR (PHYS_OFFSET + 0x1F00000)
#define MRDUMP_CB_SIZE 0x2000

#define LK_LOAD_ADDR (PHYS_OFFSET + 0x1E00000)
#define LK_LOAD_SIZE 0x100000

static void mrdump_hw_enable(bool enabled)
{
}

static void mrdump_reboot(void)
{
	emergency_restart();
}

const struct mrdump_platform mrdump_v1_platform = {
	.hw_enable = mrdump_hw_enable,
	.reboot = mrdump_reboot
};

void mrdump_reserve_memory(void)
{
	struct mrdump_control_block *cblock = NULL;

#if defined(CONFIG_ARCH_MT6735) || defined(CONFIG_ARCH_MT6752) || defined(CONFIG_ARCH_MT6795)
#define PRELOADER_ADDR (PHYS_OFFSET + 0x2000000)
#define PRELOADER_SIZE 0x200000

	memblock_reserve(PRELOADER_ADDR, PRELOADER_SIZE);
#endif

	/* We must reserved the lk block, can we pass it from lk? */    
	memblock_reserve(LK_LOAD_ADDR, LK_LOAD_SIZE);

	memblock_reserve(MRDUMP_CB_ADDR, MRDUMP_CB_SIZE);
	cblock = (struct mrdump_control_block *)__va(MRDUMP_CB_ADDR);

	mrdump_platform_init(cblock, &mrdump_v1_platform);
}