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

Commit 97493e2e authored by Alessio Igor Bogani's avatar Alessio Igor Bogani Committed by Scott Wood
Browse files

powerpc/86xx: Add support for Emerson/Artesyn MVME7100



Add support for the Artesyn MVME7100 Single Board Computer.

The MVME7100 is a 6U form factor VME64 computer with:

    - A two e600 cores Freescale MPC8641D CPU
    - 2 GB of DDR2 onboard memory
    - Four Gigabit Ethernets
    - Five 16550 compatible UARTs
    - One USB 2.0 port
    - Two PCI/PCI eXpress Mezzanine Card (PMC/XMC) Slots
    - A DS1375 Real Time Clock (RTC)
    - 512 KB of Non-Volatile Memory (NVRAM)
    - Two 64 KB EEPROMs
    - 128 MB NOR and 4/8 GB NAND Flash

This patch is based on linux-4.7-rc1 and has been only boot tested.

Limitations:
    This patch covers only models 171 and 173
    No plans to support CPLD timers

Know issues:
    All four PHYs work in polling mode

Configuration is missing for:
    PCI IDSEL and PCI Interrupt definition

Support is missing for:
    Cache and memory controllers (which are very similar to the 85xx ones
        but right now I don't know if we can re-use their support)
    Watchdog, USB, NVRAM, NOR, NAND, EEPROMs, VME, PMC/XMC and RTC

Signed-off-by: default avatarAlessio Igor Bogani <alessio.bogani@elettra.eu>
Signed-off-by: default avatarScott Wood <oss@buserror.net>
parent ae9ac1d3
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -113,6 +113,7 @@ src-plat-$(CONFIG_EPAPR_BOOT) += epapr.c epapr-wrapper.c
src-plat-$(CONFIG_PPC_PSERIES) += pseries-head.S
src-plat-$(CONFIG_PPC_POWERNV) += pseries-head.S
src-plat-$(CONFIG_PPC_IBM_CELL_BLADE) += pseries-head.S
src-plat-$(CONFIG_MVME7100) += motload-head.S mvme7100.c

src-wlib := $(sort $(src-wlib-y))
src-plat := $(sort $(src-plat-y))
@@ -296,6 +297,9 @@ image-$(CONFIG_TQM8560) += cuImage.tqm8560
image-$(CONFIG_SBC8548)			+= cuImage.sbc8548
image-$(CONFIG_KSI8560)			+= cuImage.ksi8560

# Board ports in arch/powerpc/platform/86xx/Kconfig
image-$(CONFIG_MVME7100)                += dtbImage.mvme7100

# Board ports in arch/powerpc/platform/embedded6xx/Kconfig
image-$(CONFIG_STORCENTER)		+= cuImage.storcenter
image-$(CONFIG_MPC7448HPC2)		+= cuImage.mpc7448hpc2
+153 −0
Original line number Diff line number Diff line
/*
 * Device tree source for the Emerson/Artesyn MVME7100
 *
 * Copyright 2016 Elettra-Sincrotrone Trieste S.C.p.A.
 *
 * Author: Alessio Igor Bogani <alessio.bogani@elettra.eu>
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 *
 */

/include/ "mpc8641si-pre.dtsi"

/ {
	model = "MVME7100";
	compatible = "artesyn,MVME7100";

	memory {
		device_type = "memory";
		reg = <0x00000000 0x80000000>;
	};

	soc: soc@f1000000 {
		ranges = <0x00000000 0xf1000000 0x00100000>;

		i2c@3000 {
			hwmon@4c {
				compatible = "dallas,max6649";
				reg = <0x4c>;
			};

			rtc@68 {
				status = "disabled";
			};
		};


		enet0: ethernet@24000 {
			phy-handle = <&phy0>;
			phy-connection-type = "rgmii-id";
		};

		mdio@24520 {
			phy0: ethernet-phy@1 {
				reg = <1>;
			};
			phy1: ethernet-phy@2 {
				reg = <2>;
			};
			phy2: ethernet-phy@3 {
				reg = <3>;
			};
			phy3: ethernet-phy@4 {
				reg = <4>;
			};
		};

		enet1: ethernet@25000 {
			phy-handle = <&phy1>;
			phy-connection-type = "rgmii-id";
		};

		mdio@25520 {
			status = "disabled";
		};

		enet2: ethernet@26000 {
			phy-handle = <&phy2>;
			phy-connection-type = "rgmii-id";
		};

		mdio@26520 {
			status = "disabled";
		};

		enet3: ethernet@27000 {
			phy-handle = <&phy3>;
			phy-connection-type = "rgmii-id";
		};

		mdio@27520 {
			status = "disabled";
		};

		serial1: serial@4600 {
			status = "disabled";
		};
	};

	lbc: localbus@f1005000 {
		reg = <0xf1005000 0x1000>;

		ranges = <0 0 0xf8000000 0x08000000	// NOR Flash (128MB)
			  2 0 0xf2030000 0x00010000	// NAND Flash (8GB)
			  3 0 0xf2400000 0x00080000	// MRAM (512KB)
			  4 0 0xf2000000 0x00010000	// BCSR
			  5 0 0xf2010000 0x00010000>;	// QUART

		bcsr@4,0 {
			compatible = "artesyn,mvme7100-bcsr";
			reg = <4 0 0x10000>;
		};

		serial@5,1000 {
			device_type = "serial";
			compatible = "ns16550";
			reg = <5 0x1000 0x100>;
			clock-frequency = <1843200>;
			interrupts = <11 1 0 0>;
		};

		serial@5,2000 {
			device_type = "serial";
			compatible = "ns16550";
			reg = <5 0x2000 0x100>;
			clock-frequency = <1843200>;
			interrupts = <11 1 0 0>;
		};

		serial@5,3000 {
			device_type = "serial";
			compatible = "ns16550";
			reg = <5 0x3000 0x100>;
			clock-frequency = <1843200>;
			interrupts = <11 1 0 0>;
		};

		serial@5,4000 {
			device_type = "serial";
			compatible = "ns16550";
			reg = <5 0x4000 0x100>;
			clock-frequency = <1843200>;
			interrupts = <11 1 0 0>;
		};
	};

	pci0: pcie@f1008000 {
		status = "disabled";
	};

	pci1: pcie@f1009000 {
		status = "disabled";
	};

	chosen {
		linux,stdout-path = &serial0;
	};
};

/include/ "mpc8641si-post.dtsi"
+11 −0
Original line number Diff line number Diff line
#include "ppc_asm.h"

	.text
	.globl _zimage_start
_zimage_start:
	mfmsr   r10
	rlwinm  r10,r10,0,~(1<<15)        /* Clear MSR_EE */
	sync
	mtmsr   r10
	isync
	b	_zimage_start_lib
+59 −0
Original line number Diff line number Diff line
/*
 * Motload compatibility for the Emerson/Artesyn MVME7100
 *
 * Copyright 2016 Elettra-Sincrotrone Trieste S.C.p.A.
 *
 * Author: Alessio Igor Bogani <alessio.bogani@elettra.eu>
 *
 * This program is free software; you can redistribute  it and/or modify it
 * under  the terms of  the GNU General  Public License as published by the
 * Free Software Foundation;  either version 2 of the  License, or (at your
 * option) any later version.
 *
 */

#include "ops.h"
#include "stdio.h"
#include "cuboot.h"

#define TARGET_86xx
#define TARGET_HAS_ETH1
#define TARGET_HAS_ETH2
#define TARGET_HAS_ETH3
#include "ppcboot.h"

static bd_t bd;

BSS_STACK(16384);

static void mvme7100_fixups(void)
{
	void *devp;
	unsigned long busfreq = bd.bi_busfreq * 1000000;

	dt_fixup_cpu_clocks(bd.bi_intfreq * 1000000, busfreq / 4, busfreq);

	devp = finddevice("/soc@f1000000");
	if (devp)
		setprop(devp, "bus-frequency", &busfreq, sizeof(busfreq));

	devp = finddevice("/soc/serial@4500");
	if (devp)
		setprop(devp, "clock-frequency", &busfreq, sizeof(busfreq));

	dt_fixup_memory(bd.bi_memstart, bd.bi_memsize);

	dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
	dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
	dt_fixup_mac_address_by_alias("ethernet2", bd.bi_enet2addr);
	dt_fixup_mac_address_by_alias("ethernet3", bd.bi_enet3addr);
}

void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
		   unsigned long r6, unsigned long r7)
{
	CUBOOT_INIT();
	fdt_init(_dtb_start);
	serial_console_init();
	platform_ops.fixups = mvme7100_fixups;
}
+1 −1
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ typedef struct bd_info {
	unsigned long	bi_sramstart;	/* start of SRAM memory */
	unsigned long	bi_sramsize;	/* size	 of SRAM memory */
#if defined(TARGET_8xx) || defined(TARGET_CPM2) || defined(TARGET_85xx) ||\
	defined(TARGET_83xx)
	defined(TARGET_83xx) || defined(TARGET_86xx)
	unsigned long	bi_immr_base;	/* base of IMMR register */
#endif
#if defined(TARGET_PPC_MPC52xx)
Loading