blob: 79f6f2cc5dbcd4a3cb318131cb184a580da93553 [file] [log] [blame]
Konstantin Porotchkine7be6e22018-10-08 16:53:09 +03001/*
2 * Copyright (C) 2018 Marvell International Ltd.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 * https://spdx.org/licenses
6 */
7
8#ifndef _IO_ADDR_DEC_H_
9#define _IO_ADDR_DEC_H_
10
11#include <stdint.h>
12
13/* There are 5 configurable cpu decoder windows. */
14#define DRAM_WIN_MAP_NUM_MAX 5
15/* Target number for dram in cpu decoder windows. */
16#define DRAM_CPU_DEC_TARGET_NUM 0
17
18/*
19 * Not all configurable decode windows could be used for dram, some units have
20 * to reserve one decode window for other unit they have to communicate with;
21 * for example, DMA engineer has 3 configurable windows, but only two could be
22 * for dram while the last one has to be for pcie, so for DMA, its max_dram_win
23 * is 2.
24 */
25struct dec_win_config {
26 uint32_t dec_reg_base; /* IO address decoder register base address */
27 uint32_t win_attr; /* IO address decoder windows attributes */
28 /* How many configurable dram decoder windows that this unit has; */
29 uint32_t max_dram_win;
30 /* The decoder windows number including remapping that this unit has */
31 uint32_t max_remap;
32 /* The offset between continuous decode windows
33 * within the same unit, typically 0x10
34 */
35 uint32_t win_offset;
36};
37
38struct dram_win {
39 uintptr_t base_addr;
40 uintptr_t win_size;
41};
42
43struct dram_win_map {
44 int dram_win_num;
45 struct dram_win dram_windows[DRAM_WIN_MAP_NUM_MAX];
46};
47
48/*
49 * init_io_addr_dec
50 *
51 * This function initializes io address decoder windows by
52 * cpu dram window mapping information
53 *
54 * @input: N/A
55 * - dram_wins_map: cpu dram windows mapping
56 * - io_dec_config: io address decoder windows configuration
57 * - io_unit_num: io address decoder unit number
58 * @output: N/A
59 *
60 * @return: 0 on success and others on failure
61 */
62int init_io_addr_dec(struct dram_win_map *dram_wins_map,
63 struct dec_win_config *io_dec_config,
64 uint32_t io_unit_num);
65
66#endif /* _IO_ADDR_DEC_H_ */
67