xref: /rk3399_rockchip-uboot/include/bidram.h (revision fc7ff0f015ba9b45f5ea0356818302246b4c1d4a)
1483d0493SJoseph Chen /* SPDX-License-Identifier:     GPL-2.0+ */
2483d0493SJoseph Chen /*
3483d0493SJoseph Chen  * (C) Copyright 2019 Rockchip Electronics Co., Ltd
4483d0493SJoseph Chen  */
5483d0493SJoseph Chen 
6483d0493SJoseph Chen #ifndef _BIDRAM_H
7483d0493SJoseph Chen #define _BIDRAM_H
8483d0493SJoseph Chen 
9483d0493SJoseph Chen #include <memblk.h>
10483d0493SJoseph Chen 
11483d0493SJoseph Chen typedef struct memblock *(*parse_fn_t)(int *);
12483d0493SJoseph Chen 
13483d0493SJoseph Chen struct bidram {
14483d0493SJoseph Chen 	struct lmb lmb;
15483d0493SJoseph Chen 	struct list_head reserved_head;
16483d0493SJoseph Chen 	bool has_init;
17483d0493SJoseph Chen };
18483d0493SJoseph Chen 
19483d0493SJoseph Chen /**
20483d0493SJoseph Chen  * bidram_initr() - Initial bidram after relocation.
21483d0493SJoseph Chen  *
22483d0493SJoseph Chen  * @return 0 on success, otherwise error
23483d0493SJoseph Chen  */
24483d0493SJoseph Chen int bidram_initr(void);
25483d0493SJoseph Chen 
26483d0493SJoseph Chen /**
27483d0493SJoseph Chen  * bidram_get_ram_size() - Initial bidram and get ram size.
28483d0493SJoseph Chen  *
29483d0493SJoseph Chen  * @parse_fn: function to parse ddr memory regions
30483d0493SJoseph Chen  *
31483d0493SJoseph Chen  * @return ram size, 0 on success, otherwise the effect ram size.
32483d0493SJoseph Chen  */
33483d0493SJoseph Chen phys_size_t bidram_get_ram_size(void);
34483d0493SJoseph Chen 
35483d0493SJoseph Chen /**
36483d0493SJoseph Chen  * bidram_gen_gd_bi_dram() - Update gd->bd->bi_dram[] according to bidram state.
37483d0493SJoseph Chen  */
38483d0493SJoseph Chen void bidram_gen_gd_bi_dram(void);
39483d0493SJoseph Chen 
40483d0493SJoseph Chen /**
41483d0493SJoseph Chen  * bidram_reserve() - Reserve bidram region
42483d0493SJoseph Chen  *
43483d0493SJoseph Chen  * @id: memblk id
44483d0493SJoseph Chen  * @base: region base address
45483d0493SJoseph Chen  * @size: region size
46483d0493SJoseph Chen  *
47483d0493SJoseph Chen  * @return 0 on success, otherwise error
48483d0493SJoseph Chen  */
49483d0493SJoseph Chen int bidram_reserve(enum memblk_id id, phys_addr_t base, phys_size_t size);
50483d0493SJoseph Chen 
51483d0493SJoseph Chen /**
52483d0493SJoseph Chen  * bidram_reserve_by_name() - Reserve bidram region by name
53483d0493SJoseph Chen  *
54483d0493SJoseph Chen  * @name: region name
55483d0493SJoseph Chen  * @base: region base address
56483d0493SJoseph Chen  * @size: region size
57483d0493SJoseph Chen  *
58483d0493SJoseph Chen  * @return 0 on success, otherwise error
59483d0493SJoseph Chen  */
60483d0493SJoseph Chen int bidram_reserve_by_name(const char *name, phys_addr_t base, phys_size_t size);
61483d0493SJoseph Chen 
62483d0493SJoseph Chen /**
63483d0493SJoseph Chen  * bidram_dump_all() - Dump all bidram stat
64483d0493SJoseph Chen  */
65483d0493SJoseph Chen void bidram_dump(void);
66483d0493SJoseph Chen 
67483d0493SJoseph Chen /**
68*fc7ff0f0SJoseph Chen  * bidram_reserved_is_overlap() - Check outside memory is overlap with reserved
69*fc7ff0f0SJoseph Chen  *
70*fc7ff0f0SJoseph Chen  * @base: region base address
71*fc7ff0f0SJoseph Chen  * @size: region size
72*fc7ff0f0SJoseph Chen  *
73*fc7ff0f0SJoseph Chen  * @return memblk struct when overlap, otherwise NULL
74*fc7ff0f0SJoseph Chen  */
75*fc7ff0f0SJoseph Chen struct memblock *bidram_reserved_is_overlap(phys_addr_t base, phys_size_t size);
76*fc7ff0f0SJoseph Chen 
77*fc7ff0f0SJoseph Chen /**
78483d0493SJoseph Chen  * board_bidram_parse_fn() - Weak function for board to implement
79483d0493SJoseph Chen  */
80483d0493SJoseph Chen parse_fn_t board_bidram_parse_fn(void);
81483d0493SJoseph Chen 
82483d0493SJoseph Chen /**
83483d0493SJoseph Chen  * board_bidram_reserve() - Weak function for board to implement
84483d0493SJoseph Chen  *
85483d0493SJoseph Chen  * @bidram: global bidram point, ignored
86483d0493SJoseph Chen  *
87483d0493SJoseph Chen  * @return 0 on success, otherwise error
88483d0493SJoseph Chen  */
89483d0493SJoseph Chen int board_bidram_reserve(struct bidram *bidram);
90483d0493SJoseph Chen 
91483d0493SJoseph Chen #endif /* _BIDRAM_H */
92