All of lore.kernel.org
 help / color / mirror / Atom feed
From: arnd@arndb.de (Arnd Bergmann)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/6] ARM: add Highbank core platform support
Date: Thu, 18 Aug 2011 17:34:25 +0200	[thread overview]
Message-ID: <201108181734.25397.arnd@arndb.de> (raw)
In-Reply-To: <1313526898-19920-3-git-send-email-robherring2@gmail.com>

On Tuesday 16 August 2011, Rob Herring wrote:

> +void __iomem *a9_base_addr = ((void __iomem *)(HB_MPIC_VIRT_BASE));
> +void __iomem *sregs_base;
> +
> +static struct map_desc highbank_io_desc[] __initdata = {
> +	{
> +		.virtual	= HB_MPIC_VIRT_BASE,
> +		.pfn		= 0, /* run-time */
> +		.length		= SZ_4K,
> +		.type		= MT_DEVICE,
> +	},
> +#ifdef CONFIG_DEBUG_LL
> +	{
> +		.virtual	= HB_DEBUG_LL_VIRT_BASE,
> +		.pfn		= __phys_to_pfn(HB_DEBUG_LL_PHYS_BASE),
> +		.length		= SZ_4K,
> +		.type		= MT_DEVICE,
> +	},
> +#endif
> +};
> +
> +static void __init highbank_map_io(void)
> +{
> +	unsigned long base;
> +
> +	/* Get SCU base */
> +	asm("mrc p15, 4, %0, c15, c0, 0" : "=r" (base));
> +
> +	highbank_io_desc[0].pfn = __phys_to_pfn(base);
> +	iotable_init(highbank_io_desc, ARRAY_SIZE(highbank_io_desc));
> +}

I really liked the way that Barry moved the io_desc out to the
drivers using them, e.g arch/arm/mach-prima2/lluart.c.

Can you do the same thing with your lluart and with the a9_base_addr?
I guess it can live locally in platsmp.c.

> +void highbank_init_irq(void)
> +{
> +	struct device_node *node;
> +	struct of_intc_desc desc;
> +	int n = 0;
> +
> +	memset(&desc, 0, sizeof(desc));
> +	desc.controller = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-gic");
> +	gic_of_init(&desc);
> +	node = desc.controller;
> +	for_each_child_of_node(node, desc.controller) {
> +		gic_of_ppi_init(&desc);
> +	}
> +
> +	for_each_compatible_node(node, NULL, "arm,pl061") {
> +		irq_domain_add_simple(node, 160 + (8 * n));
> +		n++;
> +	}

Where does the "160 + (8 * n)" come from? Is that something that should
be in a property of the gic binding?

> +#ifdef CONFIG_CACHE_L2X0
> +	l2x0_of_init(0, ~0UL);
> +#endif
> +}

Hmm, I missed that during the review of the patch that adds l2x0_of_init,
but I think the #ifdef should really be in the header file, not in the
user, so that calling l2x0_of_init when CONFIG_CACHE_L2X0 is not set
automatically turns into an empty stub.

> +static void __init highbank_timer_init(void)
> +{
> +	int irq;
> +	struct device_node *np;
> +	void __iomem *timer_base;
> +
> +	/* Map system registers */
> +	np = of_find_compatible_node(NULL, NULL, "calxeda,hb-sregs");
> +	sregs_base = of_iomap(np, 0);
> +
> +	np = of_find_compatible_node(NULL, NULL, "arm,sp804");
> +	timer_base = of_iomap(np, 0);
> +	irq = irq_of_parse_and_map(np, 0);
> +
> +	highbank_clocks_init();
> +
> +	sp804_clocksource_init(timer_base + 0x20, "timer1");
> +	sp804_clockevents_init(timer_base, irq, "timer0");
> +}

How about moving the sp804 initialization from device tree into the
arch/arm/common/timer-sp.c file?

Why do you initialize sregs_base from timer_init?

> diff --git a/arch/arm/mach-highbank/include/mach/timex.h b/arch/arm/mach-highbank/include/mach/timex.h
> new file mode 100644
> index 0000000..88dac7a
> --- /dev/null
> +++ b/arch/arm/mach-highbank/include/mach/timex.h
> @@ -0,0 +1,6 @@
> +#ifndef __MACH_TIMEX_H
> +#define __MACH_TIMEX_H
> +
> +#define CLOCK_TICK_RATE		1000000
> +
> +#endif

In 3.2, we shouldn't need this any more. We'll have to come up with a
way to remember removing the new definitions that come in in parallel
to the patch that removes the old ones.

> +#ifndef _MACH_HIGHBANK__SYSREGS_H_
> +#define _MACH_HIGHBANK__SYSREGS_H_
> +
> +extern void __iomem *sregs_base;
> +
> +#define HB_SREG_A9_PWR_REQ		0xf00
> +#define HB_SREG_A9_BOOT_STAT		0xf04
> +#define HB_SREG_A9_BOOT_DATA		0xf08
> +
> +#define HB_PWR_SUSPEND			0
> +#define HB_PWR_SOFT_RESET		1
> +#define HB_PWR_HARD_RESET		2
> +#define HB_PWR_SHUTDOWN			3
> +
> +#endif

Do these really need to be global?

I think it's better to put the base address and register definitions into a
single file and export functions to be used from elsewhere.

	Arnd

  parent reply	other threads:[~2011-08-18 15:34 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-08-16 20:34 [PATCH 0/6] Initial Calxeda Highbank support Rob Herring
2011-08-16 20:34 ` [PATCH 1/6] ARM: highbank: add devicetree source Rob Herring
2011-08-17  7:27   ` Shawn Guo
2011-08-17 13:49     ` Rob Herring
2011-08-17 14:51       ` Shawn Guo
2011-08-20 18:32         ` Rob Herring
2011-08-17 17:52       ` Will Deacon
2011-08-20 18:29         ` Rob Herring
2011-08-17  9:27   ` Mark Rutland
     [not found]   ` <4e4b8979.533fd80a.2ff3.1626SMTPIN_ADDED@mx.google.com>
2011-08-17 14:08     ` Rob Herring
2011-08-17 14:34       ` Will Deacon
2011-08-20  9:51   ` Shawn Guo
2011-08-20 18:19     ` Rob Herring
2011-08-16 20:34 ` [PATCH 2/6] ARM: add Highbank core platform support Rob Herring
2011-08-16 22:19   ` Jamie Iles
2011-08-25  2:19     ` Rob Herring
2011-08-17  7:43   ` Russell King - ARM Linux
2011-08-18 15:34   ` Arnd Bergmann [this message]
2011-08-18 15:40     ` Russell King - ARM Linux
2011-08-19 14:11       ` Arnd Bergmann
2011-08-20 19:24         ` Rob Herring
2011-08-20 23:05         ` Russell King - ARM Linux
2011-08-20 18:44     ` Rob Herring
2011-08-25  2:45       ` Rob Herring
2011-08-25  4:03         ` Shawn Guo
2011-08-25 15:59         ` Arnd Bergmann
2011-08-25 16:02       ` Arnd Bergmann
2011-08-25 18:03         ` Rob Herring
2011-08-25 21:44           ` Arnd Bergmann
2011-08-19  6:43   ` Shawn Guo
2011-08-19  7:17     ` Shawn Guo
2011-08-20 18:16       ` Rob Herring
2011-08-19  8:56     ` Dave Martin
2011-08-19 13:45       ` Arnd Bergmann
2011-08-20 14:48   ` Shawn Guo
2011-08-20 18:21     ` Rob Herring
2011-08-20 15:54   ` Shawn Guo
2011-08-20 16:10   ` Shawn Guo
2011-08-20 18:22     ` Rob Herring
2011-08-22  5:55   ` Shawn Guo
2011-08-22 10:01     ` Jamie Iles
2011-08-23  3:33       ` Shawn Guo
2011-08-22  8:35   ` Shawn Guo
2011-08-22  9:15     ` Shawn Guo
2011-08-22 13:23     ` Rob Herring
2011-08-16 20:34 ` [PATCH 3/6] MAINTAINERS: add Calxeda Highbank ARM platform Rob Herring
2011-08-16 20:34 ` [PATCH 4/6] ARM: highbank: add SMP support Rob Herring
2011-08-17  7:37   ` Russell King - ARM Linux
2011-08-17 14:01     ` Rob Herring
2011-08-17 18:52       ` Russell King - ARM Linux
2011-08-16 20:34 ` [PATCH 5/6] ARM: highbank: Add cpu hotplug support Rob Herring
2011-08-16 20:34 ` [PATCH 6/6] ARM: highbank: add suspend support Rob Herring
2011-08-25  1:17   ` Shawn Guo

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=201108181734.25397.arnd@arndb.de \
    --to=arnd@arndb.de \
    --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.