All of lore.kernel.org
 help / color / mirror / Atom feed
From: andrew@lunn.ch (Andrew Lunn)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v5 3/9] arm: mach-mvebu: add source files
Date: Wed, 27 Jun 2012 17:36:52 +0200	[thread overview]
Message-ID: <20120627153652.GE29702@lunn.ch> (raw)
In-Reply-To: <1340805290-9051-4-git-send-email-gregory.clement@free-electrons.com>

> diff --git a/arch/arm/mach-mvebu/system-controller.c b/arch/arm/mach-mvebu/system-controller.c
> new file mode 100644
> index 0000000..14331ba
> --- /dev/null
> +++ b/arch/arm/mach-mvebu/system-controller.c
> @@ -0,0 +1,100 @@
> +/*
> + * System controller support for Armada 370 and XP platforms.
> + *
> + * Copyright (C) 2012 Marvell
> + *
> + * Lior Amsalem <alior@marvell.com>
> + * Gregory CLEMENT <gregory.clement@free-electrons.com>
> + * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
> + *
> + * 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.
> + *
> + * The Armada 370 and Armada XP SoCs both have a range of
> + * miscellaneous registers, that do not belong to a particular device,
> + * but rather provide system-level features. This basic
> + * system-controller driver provides a device tree binding for those
> + * registers, and implements utility functions offering various
> + * features related to those registers.
> + *
> + * For now, the feature set is limited to restarting the platform by a
> + * soft-reset, but it might be extended in the future.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/of_address.h>
> +#include <linux/io.h>
> +
> +static void __iomem *system_controller_base;
> +
> +struct mvebu_system_controller {
> +	u32 rstoutn_mask_offset;
> +	u32 system_soft_reset_offset;
> +
> +	u32 rstoutn_mask_reset_out_en;
> +	u32 system_soft_reset;
> +};
> +static struct mvebu_system_controller *mvebu_sc;
> +
> +const struct mvebu_system_controller armada_370_xp_system_controller = {
> +	.rstoutn_mask_offset = 0x60,
> +	.system_soft_reset_offset = 0x64,
> +	.rstoutn_mask_reset_out_en = 0x1,
> +	.system_soft_reset = 0x1,
> +};
> +
> +const struct mvebu_system_controller orion_system_controller = {
> +	.rstoutn_mask_offset = 0x108,
> +	.system_soft_reset_offset = 0x10c,
> +	.rstoutn_mask_reset_out_en = 0x4,
> +	.system_soft_reset = 0x1,
> +};
> +
> +static struct of_device_id of_system_controller_table[] = {
> +	{.compatible = "marvell,orion-system-controller",
> +	 .data = (void *) &orion_system_controller},
> +	{.compatible = "marvell,armada-370-xp-system-controller",
> +	 .data = (void *) &armada_370_xp_system_controller},
> +	{ /* end of list */ },
> +};
> +
> +void mvebu_restart(char mode, const char *cmd)
> +{
> +	if (!system_controller_base) {
> +		pr_warn("Cannot restart, system-controller not available\n");

Does pr_warn() get shown by default? I would of probably gone for
BUG_ON() or WARN_ON(), to make it clearer what has happened. It may
not be a kernel bug, but a DT description bug, but it still a bug...

> +	} else {
> +		/*
> +		 * Enable soft reset to assert RSTOUTn.
> +		 */
> +		writel(mvebu_sc->rstoutn_mask_reset_out_en,
> +			system_controller_base +
> +			mvebu_sc->rstoutn_mask_offset);
> +		/*
> +		 * Assert soft reset.
> +		 */
> +		writel(mvebu_sc->system_soft_reset,
> +			system_controller_base +
> +			mvebu_sc->system_soft_reset_offset);
> +	}
> +	while (1)
> +		;
> +}

I tested this on a Kirkwood QNAP with DT property:

                system-controller at 20000 {
                        compatible = "marvell,orion-system-controller";
                        reg = <0x20000 0x1000>;
                };

and it works. So:

Tested-by: Andrew Lunn <andrew@lunn.ch>

However Orion5x has a slightly different variant, so i would like to
test it on that SoC as well. However, we don't have DT on Orion5x yet,
so i need to simulate it.

   Andrew

  reply	other threads:[~2012-06-27 15:36 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-27 13:54 [PATCH v5] arm: Add basic support for new Marvell Armada 370 and Armada XP SoC Gregory Clement
2012-06-27 13:54 ` [PATCH v5 1/9] clocksource: time-armada-370-xp: Marvell Armada 370/XP SoC timer driver Gregory Clement
2012-06-27 13:54 ` [PATCH v5 2/9] arm: mach-mvebu: add header Gregory Clement
2012-06-27 13:54 ` [PATCH v5 3/9] arm: mach-mvebu: add source files Gregory Clement
2012-06-27 15:36   ` Andrew Lunn [this message]
2012-06-28 18:07     ` Nicolas Pitre
2012-07-02 11:36     ` Thomas Petazzoni
2012-06-27 13:54 ` [PATCH v5 4/9] arm: mach-mvebu: add support for Armada 370 and Armada XP with DT Gregory Clement
2012-06-27 16:11   ` Ben Dooks
2012-07-02 11:37     ` Thomas Petazzoni
2012-06-27 13:54 ` [PATCH v5 5/9] arm: mach-mvebu: add documentation for new device tree bindings Gregory Clement
2012-06-27 13:54 ` [PATCH v5 6/9] arm: mach-mvebu: add defconfig Gregory Clement
2012-06-27 13:54 ` [PATCH v5 7/9] arm: mach-mvebu: add compilation/configuration change Gregory Clement
2012-06-27 13:54 ` [PATCH v5 8/9] arm: mach-mvebu: add entry to MAINTAINERS Gregory Clement
2012-06-27 13:54 ` [PATCH v5 9/9] ARM: mvebu: MPIC: read number of interrupts from control register Gregory Clement
2012-06-27 15:54 ` [PATCH v5] arm: Add basic support for new Marvell Armada 370 and Armada XP SoC Ben Dooks
2012-07-02  8:30   ` Thomas Petazzoni
2012-07-02  9:19     ` Ben Dooks
2012-07-02  9:19       ` Thomas Petazzoni
2012-07-02  9:25         ` Ben Dooks
2012-07-02  9:26           ` Thomas Petazzoni
2012-06-27 16:26 ` review comments Ben Dooks
2012-06-27 16:26   ` [PATCH 1/3] arm: mach-mvebu: fixup style error in system-controller Ben Dooks
2012-06-27 16:26   ` [PATCH 2/3] arm: mach-mvebu: check result of of_match_node() Ben Dooks
2012-06-27 16:26   ` [PATCH 3/3] arm: mach-mvebu: system-controller only registers restart if device exists Ben Dooks
2012-06-27 19:19     ` Russell King - ARM Linux
2012-06-28  9:23       ` Ben Dooks
2012-06-28 10:17         ` Russell King - ARM Linux
2012-07-02 11:35   ` review comments Thomas Petazzoni
2012-06-28 12:10 ` [PATCH v5] arm: Add basic support for new Marvell Armada 370 and Armada XP SoC Lior Amsalem

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20120627153652.GE29702@lunn.ch \
    --to=andrew@lunn.ch \
    --cc=linux-arm-kernel@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.