Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d834d26a authored by Thomas Petazzoni's avatar Thomas Petazzoni Committed by Jason Cooper
Browse files

arm: mvebu: don't hardcode the physical address for mvebu-mbus



Since the mvebu-mbus driver doesn't yet have a DT binding (and this DT
binding may not necessarily be ready for 3.11), the physical address
of the mvebu-mbus registers are currently hardcoded. This doesn't play
well with the fact that the internal registers base address may be
different depending on the bootloader.

In order to have only one central place for the physical address of
the internal registers, we now use of_translate_address() to translate
the mvebu-mbus register offsets into the real physical address, by
using DT-based address translation. This will go away once the
mvebu-mbus driver gains a proper DT binding.

Signed-off-by: default avatarThomas Petazzoni <thomas.petazzoni@free-electrons.com>
Acked-by: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarJason Cooper <jason@lakedaemon.net>
parent 580ff0ee
Loading
Loading
Loading
Loading
+27 −11
Original line number Original line Diff line number Diff line
@@ -14,6 +14,7 @@


#include <linux/kernel.h>
#include <linux/kernel.h>
#include <linux/init.h>
#include <linux/init.h>
#include <linux/of_address.h>
#include <linux/of_platform.h>
#include <linux/of_platform.h>
#include <linux/io.h>
#include <linux/io.h>
#include <linux/time-armada-370-xp.h>
#include <linux/time-armada-370-xp.h>
@@ -33,29 +34,44 @@ static void __init armada_370_xp_map_io(void)
	debug_ll_io_init();
	debug_ll_io_init();
}
}


static void __init armada_370_xp_timer_and_clk_init(void)
{
	char *mbus_soc_name;

	mvebu_clocks_init();
	armada_370_xp_timer_init();
	coherency_init();

/*
/*
 * This initialization will be replaced by a DT-based
 * This initialization will be replaced by a DT-based
 * initialization once the mvebu-mbus driver gains DT support.
 * initialization once the mvebu-mbus driver gains DT support.
 */
 */

#define ARMADA_370_XP_MBUS_WINS_OFFS   0x20000
#define ARMADA_370_XP_MBUS_WINS_SIZE   0x100
#define ARMADA_370_XP_SDRAM_WINS_OFFS  0x20180
#define ARMADA_370_XP_SDRAM_WINS_SIZE  0x20

static void __init armada_370_xp_mbus_init(void)
{
	char *mbus_soc_name;
	struct device_node *dn;
	const __be32 mbus_wins_offs = cpu_to_be32(ARMADA_370_XP_MBUS_WINS_OFFS);
	const __be32 sdram_wins_offs = cpu_to_be32(ARMADA_370_XP_SDRAM_WINS_OFFS);

	if (of_machine_is_compatible("marvell,armada370"))
	if (of_machine_is_compatible("marvell,armada370"))
		mbus_soc_name = "marvell,armada370-mbus";
		mbus_soc_name = "marvell,armada370-mbus";
	else
	else
		mbus_soc_name = "marvell,armadaxp-mbus";
		mbus_soc_name = "marvell,armadaxp-mbus";


	dn = of_find_node_by_name(NULL, "internal-regs");
	BUG_ON(!dn);

	mvebu_mbus_init(mbus_soc_name,
	mvebu_mbus_init(mbus_soc_name,
			ARMADA_370_XP_MBUS_WINS_BASE,
			of_translate_address(dn, &mbus_wins_offs),
			ARMADA_370_XP_MBUS_WINS_SIZE,
			ARMADA_370_XP_MBUS_WINS_SIZE,
			ARMADA_370_XP_SDRAM_WINS_BASE,
			of_translate_address(dn, &sdram_wins_offs),
			ARMADA_370_XP_SDRAM_WINS_SIZE);
			ARMADA_370_XP_SDRAM_WINS_SIZE);
}


static void __init armada_370_xp_timer_and_clk_init(void)
{
	mvebu_clocks_init();
	armada_370_xp_timer_init();
	coherency_init();
	armada_370_xp_mbus_init();
#ifdef CONFIG_CACHE_L2X0
#ifdef CONFIG_CACHE_L2X0
	l2x0_of_init(0, ~0UL);
	l2x0_of_init(0, ~0UL);
#endif
#endif
+0 −8
Original line number Original line Diff line number Diff line
@@ -15,14 +15,6 @@
#ifndef __MACH_ARMADA_370_XP_H
#ifndef __MACH_ARMADA_370_XP_H
#define __MACH_ARMADA_370_XP_H
#define __MACH_ARMADA_370_XP_H


#define ARMADA_370_XP_REGS_PHYS_BASE	0xd0000000

/* These defines can go away once mvebu-mbus has a DT binding */
#define ARMADA_370_XP_MBUS_WINS_BASE    (ARMADA_370_XP_REGS_PHYS_BASE + 0x20000)
#define ARMADA_370_XP_MBUS_WINS_SIZE    0x100
#define ARMADA_370_XP_SDRAM_WINS_BASE   (ARMADA_370_XP_REGS_PHYS_BASE + 0x20180)
#define ARMADA_370_XP_SDRAM_WINS_SIZE   0x20

#ifdef CONFIG_SMP
#ifdef CONFIG_SMP
#include <linux/cpumask.h>
#include <linux/cpumask.h>