/*
 * arch/arm/plat-orion/include/plat/addr-map.h
 *
 * Marvell Orion SoC address map handling.
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2.  This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */

#ifndef __PLAT_ADDR_MAP_H
#define __PLAT_ADDR_MAP_H

extern struct mbus_dram_target_info orion_mbus_dram_info;

struct orion_addr_map_cfg {
	const int num_wins;	/* Total number of windows */
	const int remappable_wins;
	void __iomem *bridge_virt_base;

	/* If NULL, the default cpu_win_can_remap will be used, using
	   the value in remappable_wins */
	int (*cpu_win_can_remap) (const struct orion_addr_map_cfg *cfg,
				  const int win);
	/* If NULL, the default win_cfg_base will be used, using the
	   value in bridge_virt_base */
	void __iomem *(*win_cfg_base) (const struct orion_addr_map_cfg *cfg,
				 const int win);
};

/*
 * Information needed to setup one address mapping.
 */
struct orion_addr_map_info {
	const int win;
	const u32 base;
	const u32 size;
	const u8 target;
	const u8 attr;
	const int remap;
};

void __init orion_config_wins(struct orion_addr_map_cfg *cfg,
			      const struct orion_addr_map_info *info);

void __init orion_setup_cpu_win(const struct orion_addr_map_cfg *cfg,
				const int win, const u32 base,
				const u32 size, const u8 target,
				const u8 attr, const int remap);

void __init orion_setup_cpu_mbus_target(const struct orion_addr_map_cfg *cfg,
					const void __iomem *ddr_window_cpu_base);
#endif
