From: Catalin Marinas <catalin.marinas@arm.com>
To: Russell King - ARM Linux <linux@arm.linux.org.uk>
Cc: Tony Lindgren <tony@atomide.com>,
linux-omap@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
bryan.wu@canonical.com
Subject: Re: [PATCH 0/4] Hacks to allow booting ARM SMP kernel on UP ARMv7
Date: Mon, 06 Sep 2010 16:16:30 +0100 [thread overview]
Message-ID: <1283786190.12076.106.camel@e102109-lin.cambridge.arm.com> (raw)
In-Reply-To: <20100906104413.GD20903@n2100.arm.linux.org.uk>
Russell,
On Mon, 2010-09-06 at 11:44 +0100, Russell King - ARM Linux wrote:
> +#ifdef CONFIG_SMP_ON_UP
> +__fixup_smp:
> + mov r7, #0x00070000
> + orr r6, r7, #0xff000000 @ mask 0xff070000
> + orr r7, r7, #0x41000000 @ val 0x41070000
> + and r0, r9, r6
> + teq r0, r7 @ ARM CPU and ARMv6/v7?
> + bne __fixup_smp_on_up @ no, assume UP
> +
> + orr r6, r6, #0x0000ff00
> + orr r6, r6, #0x000000f0 @ mask 0xff07fff0
> + orr r7, r7, #0x0000b000
> + orr r7, r7, #0x00000020 @ val 0x4107b020
> + and r0, r9, r6
> + teq r0, r7 @ ARM 11MPCore?
> + moveq pc, lr @ yes, assume SMP
> +
> + mrc p15, 0, r0, c0, c0, 5 @ read MIDR
> + tst r0, #1 << 31
> + movne pc, lr @ bit 31 => SMP
An alternative would be to check for hardware coherency support in the
shareability domain using the MMFR0 register. If we have the new CPUID
format (all MP systems):
if (ID_MMFR0<15:12> == 0)
HWCoherency = (ID_MMFR0<11:8> == 1)
else
HWCoherency = (ID_MMFR0<31:28> == 1)
The hw coherency is built for MP systems and this register should be
valid for both ARMv6 and ARMv7 configurations.
Something like below, untested:
mov r6, #0x000f0000 @ mask/val new CPUID
and r0, r9, r6
teq r0, r6 @ ARMv6/v7 new CPUID
bne __fixup_smp_on_up @ no, assume UP
mrc p15, 0, r0, c0, c1, 4 @ MMFR0
mov r6, #0x0000f000 @ mask shareability levels
tst r0, r6
moveq r0, r0, lsr #8 @ outermost shareability
movne r0, r0, lsr #28 @ innermost shareability
and r0, r0, #15
cmp r0, #1 @ check hw coherency support
bne __fixup_smp_on_up @ no, assume UP
We still cannot optimise the case where you have an MP capable processor
but in a UP-only configuration (maxcpus=1).
For the availability of the Inner Shareable cache and TLB operations, we
would need to check for the MMFR3<15:12> bits.
--
Catalin
WARNING: multiple messages have this Message-ID (diff)
From: catalin.marinas@arm.com (Catalin Marinas)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 0/4] Hacks to allow booting ARM SMP kernel on UP ARMv7
Date: Mon, 06 Sep 2010 16:16:30 +0100 [thread overview]
Message-ID: <1283786190.12076.106.camel@e102109-lin.cambridge.arm.com> (raw)
In-Reply-To: <20100906104413.GD20903@n2100.arm.linux.org.uk>
Russell,
On Mon, 2010-09-06 at 11:44 +0100, Russell King - ARM Linux wrote:
> +#ifdef CONFIG_SMP_ON_UP
> +__fixup_smp:
> + mov r7, #0x00070000
> + orr r6, r7, #0xff000000 @ mask 0xff070000
> + orr r7, r7, #0x41000000 @ val 0x41070000
> + and r0, r9, r6
> + teq r0, r7 @ ARM CPU and ARMv6/v7?
> + bne __fixup_smp_on_up @ no, assume UP
> +
> + orr r6, r6, #0x0000ff00
> + orr r6, r6, #0x000000f0 @ mask 0xff07fff0
> + orr r7, r7, #0x0000b000
> + orr r7, r7, #0x00000020 @ val 0x4107b020
> + and r0, r9, r6
> + teq r0, r7 @ ARM 11MPCore?
> + moveq pc, lr @ yes, assume SMP
> +
> + mrc p15, 0, r0, c0, c0, 5 @ read MIDR
> + tst r0, #1 << 31
> + movne pc, lr @ bit 31 => SMP
An alternative would be to check for hardware coherency support in the
shareability domain using the MMFR0 register. If we have the new CPUID
format (all MP systems):
if (ID_MMFR0<15:12> == 0)
HWCoherency = (ID_MMFR0<11:8> == 1)
else
HWCoherency = (ID_MMFR0<31:28> == 1)
The hw coherency is built for MP systems and this register should be
valid for both ARMv6 and ARMv7 configurations.
Something like below, untested:
mov r6, #0x000f0000 @ mask/val new CPUID
and r0, r9, r6
teq r0, r6 @ ARMv6/v7 new CPUID
bne __fixup_smp_on_up @ no, assume UP
mrc p15, 0, r0, c0, c1, 4 @ MMFR0
mov r6, #0x0000f000 @ mask shareability levels
tst r0, r6
moveq r0, r0, lsr #8 @ outermost shareability
movne r0, r0, lsr #28 @ innermost shareability
and r0, r0, #15
cmp r0, #1 @ check hw coherency support
bne __fixup_smp_on_up @ no, assume UP
We still cannot optimise the case where you have an MP capable processor
but in a UP-only configuration (maxcpus=1).
For the availability of the Inner Shareable cache and TLB operations, we
would need to check for the MMFR3<15:12> bits.
--
Catalin
next prev parent reply other threads:[~2010-09-06 15:16 UTC|newest]
Thread overview: 230+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-17 10:53 [PATCH 0/4] Hacks to allow booting ARM SMP kernel on UP ARMv7 Tony Lindgren
2010-08-17 10:53 ` Tony Lindgren
2010-08-17 10:53 ` [PATCH 1/4] ARM: Add SMP_ON_UP Kconfig option for booting SMP kernel on UP Tony Lindgren
2010-08-17 10:53 ` Tony Lindgren
2010-08-17 10:53 ` [PATCH 2/4] ARM: Allow optional UP processor functions for SMP kernels Tony Lindgren
2010-08-17 10:53 ` Tony Lindgren
2010-08-17 11:08 ` Russell King - ARM Linux
2010-08-17 11:08 ` Russell King - ARM Linux
2010-08-17 11:20 ` Tony Lindgren
2010-08-17 11:20 ` Tony Lindgren
2010-08-17 10:53 ` [PATCH 3/4] ARM: Set separate proc-v7 functions for SMP Tony Lindgren
2010-08-17 10:53 ` Tony Lindgren
2010-08-17 10:53 ` [PATCH 4/4] omap: Fix SMP on UP interrupt handling for multi-omap Tony Lindgren
2010-08-17 10:53 ` Tony Lindgren
2010-08-17 11:07 ` srinidhi
2010-08-17 11:07 ` srinidhi
2010-08-17 11:30 ` Tony Lindgren
2010-08-17 11:30 ` Tony Lindgren
2010-08-17 12:14 ` srinidhi
2010-08-17 12:14 ` srinidhi
2010-08-17 14:14 ` Tony Lindgren
2010-08-17 14:14 ` Tony Lindgren
2010-08-17 15:07 ` Shilimkar, Santosh
2010-08-17 15:07 ` Shilimkar, Santosh
2010-09-02 16:27 ` Tony Lindgren
2010-09-02 16:27 ` Tony Lindgren
2010-08-17 13:52 ` [PATCH 0/4] Hacks to allow booting ARM SMP kernel on UP ARMv7 Russell King - ARM Linux
2010-08-17 13:52 ` Russell King - ARM Linux
2010-08-17 14:12 ` Tony Lindgren
2010-08-17 14:12 ` Tony Lindgren
2010-08-17 15:40 ` Russell King - ARM Linux
2010-08-17 15:40 ` Russell King - ARM Linux
2010-08-19 7:38 ` Tony Lindgren
2010-08-19 7:38 ` Tony Lindgren
2010-08-19 9:38 ` Bryan Wu
2010-08-19 9:38 ` Bryan Wu
2010-08-19 9:57 ` Tony Lindgren
2010-08-19 9:57 ` Tony Lindgren
2010-08-19 10:20 ` Russell King - ARM Linux
2010-08-19 10:20 ` Russell King - ARM Linux
2010-08-20 12:06 ` Tony Lindgren
2010-08-20 12:06 ` Tony Lindgren
2010-08-30 22:55 ` Tony Lindgren
2010-08-30 22:55 ` Tony Lindgren
2010-09-02 13:36 ` Russell King - ARM Linux
2010-09-02 13:36 ` Russell King - ARM Linux
2010-09-02 16:16 ` Tony Lindgren
2010-09-02 16:16 ` Tony Lindgren
2010-09-02 16:18 ` [PATCH 1/6] ARM: Add inline function smp_on_up() for early init testing Tony Lindgren
2010-09-02 16:18 ` Tony Lindgren
2010-09-02 17:08 ` Russell King - ARM Linux
2010-09-02 17:08 ` Russell King - ARM Linux
2010-09-02 17:15 ` [PATCH 0/6] " Tony Lindgren
2010-09-02 17:15 ` Tony Lindgren
2010-09-02 17:42 ` [PATCH 1/6] " Tony Lindgren
2010-09-02 17:42 ` Tony Lindgren
2010-09-02 19:26 ` [PATCH 1/6] ARM: Add inline function smp_cpu() " Tony Lindgren
2010-09-02 19:26 ` Tony Lindgren
2010-09-03 0:08 ` Tony Lindgren
2010-09-03 0:08 ` Tony Lindgren
2010-09-03 2:22 ` Tony Lindgren
2010-09-03 2:22 ` Tony Lindgren
2010-09-03 8:58 ` Will Deacon
2010-09-03 9:02 ` Russell King - ARM Linux
2010-09-03 9:02 ` Russell King - ARM Linux
2010-09-03 9:07 ` Will Deacon
2010-09-03 9:07 ` Will Deacon
2010-09-03 8:58 ` Will Deacon
2010-09-03 12:12 ` Shilimkar, Santosh
2010-09-03 12:12 ` Shilimkar, Santosh
2010-09-03 12:23 ` Will Deacon
2010-09-03 12:23 ` Will Deacon
2010-09-03 12:31 ` Shilimkar, Santosh
2010-09-03 12:31 ` Shilimkar, Santosh
2010-09-05 1:53 ` Michał Nazarewicz
2010-09-05 1:53 ` Michał Nazarewicz
2010-09-03 12:09 ` [PATCH 1/6] ARM: Add inline function smp_on_up() " Shilimkar, Santosh
2010-09-03 12:09 ` Shilimkar, Santosh
2010-09-06 10:17 ` Bryan Wu
2010-09-06 10:17 ` Bryan Wu
2010-09-08 3:26 ` Tony Lindgren
2010-09-08 3:26 ` Tony Lindgren
2010-09-08 20:26 ` Tony Lindgren
2010-09-08 20:26 ` Tony Lindgren
2010-09-09 3:45 ` Bryan Wu
2010-09-09 3:45 ` Bryan Wu
2010-09-02 16:19 ` [PATCH 2/6] ARM: Use SMP and UP macros for cacheflush Tony Lindgren
2010-09-02 16:19 ` Tony Lindgren
2010-09-03 11:57 ` Shilimkar, Santosh
2010-09-03 11:57 ` Shilimkar, Santosh
2010-09-04 10:57 ` Russell King - ARM Linux
2010-09-04 10:57 ` Russell King - ARM Linux
2010-09-04 11:01 ` Shilimkar, Santosh
2010-09-04 11:01 ` Shilimkar, Santosh
2010-09-02 16:20 ` [PATCH 3/6] ARM: Fix v7wbi_tlb_flags for SMP on UP Tony Lindgren
2010-09-02 16:20 ` Tony Lindgren
2010-09-02 16:25 ` Russell King - ARM Linux
2010-09-02 16:25 ` Russell King - ARM Linux
2010-09-02 16:34 ` Tony Lindgren
2010-09-02 16:34 ` Tony Lindgren
2010-09-02 23:47 ` Tony Lindgren
2010-09-02 23:47 ` Tony Lindgren
2010-09-03 9:07 ` Russell King - ARM Linux
2010-09-03 9:07 ` Russell King - ARM Linux
2010-09-03 9:10 ` Russell King - ARM Linux
2010-09-03 9:10 ` Russell King - ARM Linux
2010-09-03 17:04 ` Tony Lindgren
2010-09-03 17:04 ` Tony Lindgren
2010-09-03 19:36 ` Russell King - ARM Linux
2010-09-03 19:36 ` Russell King - ARM Linux
2010-09-06 11:46 ` Catalin Marinas
2010-09-06 11:46 ` Catalin Marinas
2010-09-06 15:34 ` Russell King - ARM Linux
2010-09-06 15:34 ` Russell King - ARM Linux
2010-09-06 15:53 ` Catalin Marinas
2010-09-06 15:53 ` Catalin Marinas
2010-09-06 16:36 ` Russell King - ARM Linux
2010-09-06 16:36 ` Russell King - ARM Linux
2010-09-06 17:11 ` Catalin Marinas
2010-09-06 17:11 ` Catalin Marinas
2010-09-02 16:21 ` [PATCH 4/6] ARM: Do not call test_for_ipi or test_for_ltrirq on UP systems Tony Lindgren
2010-09-02 16:21 ` Tony Lindgren
2010-09-03 12:00 ` Shilimkar, Santosh
2010-09-03 12:00 ` Shilimkar, Santosh
2010-09-04 10:55 ` Russell King - ARM Linux
2010-09-04 10:55 ` Russell King - ARM Linux
2010-09-04 10:55 ` Russell King - ARM Linux
2010-09-04 10:55 ` Russell King - ARM Linux
2010-09-02 16:22 ` [PATCH 5/6] ARM: Don't set TLB ops broadcasting on UP ARMv7 Tony Lindgren
2010-09-02 16:22 ` Tony Lindgren
2010-09-02 16:57 ` Russell King - ARM Linux
2010-09-02 16:57 ` Russell King - ARM Linux
2010-09-02 17:21 ` Tony Lindgren
2010-09-02 17:21 ` Tony Lindgren
2010-09-02 18:01 ` Russell King - ARM Linux
2010-09-02 18:01 ` Russell King - ARM Linux
2010-09-02 18:13 ` Tony Lindgren
2010-09-02 18:13 ` Tony Lindgren
2010-09-02 18:18 ` Russell King - ARM Linux
2010-09-02 18:18 ` Russell King - ARM Linux
2010-09-02 16:23 ` [PATCH 6/6] omap: Fix SMP on UP interrupt handling for multi-omap Tony Lindgren
2010-09-02 16:23 ` Tony Lindgren
2010-09-02 19:30 ` Tony Lindgren
2010-09-02 19:30 ` Tony Lindgren
2010-09-03 12:15 ` Shilimkar, Santosh
2010-09-03 12:15 ` Shilimkar, Santosh
2010-09-08 3:30 ` Tony Lindgren
2010-09-08 3:30 ` Tony Lindgren
2010-09-03 12:06 ` Shilimkar, Santosh
2010-09-03 12:06 ` Shilimkar, Santosh
2010-09-04 11:05 ` Russell King - ARM Linux
2010-09-04 11:05 ` Russell King - ARM Linux
2010-09-04 11:22 ` Shilimkar, Santosh
2010-09-04 11:22 ` Shilimkar, Santosh
2010-09-03 4:20 ` [PATCH 0/4] Hacks to allow booting ARM SMP kernel on UP ARMv7 Bryan Wu
2010-09-03 4:20 ` Bryan Wu
2010-09-03 7:46 ` Russell King - ARM Linux
2010-09-03 7:46 ` Russell King - ARM Linux
2010-09-06 9:28 ` Catalin Marinas
2010-09-06 9:28 ` Catalin Marinas
2010-09-06 9:34 ` Russell King - ARM Linux
2010-09-06 9:34 ` Russell King - ARM Linux
2010-09-06 9:38 ` Catalin Marinas
2010-09-06 9:38 ` Catalin Marinas
2010-09-06 10:06 ` Russell King - ARM Linux
2010-09-06 10:06 ` Russell King - ARM Linux
2010-09-06 10:39 ` Catalin Marinas
2010-09-06 10:39 ` Catalin Marinas
2010-09-02 13:33 ` Russell King - ARM Linux
2010-09-02 13:33 ` Russell King - ARM Linux
2010-09-03 1:39 ` Tony Lindgren
2010-09-03 1:39 ` Tony Lindgren
2010-08-23 16:59 ` Will Deacon
2010-08-23 16:59 ` Will Deacon
2010-08-30 22:53 ` Tony Lindgren
2010-08-30 22:53 ` Tony Lindgren
2010-09-06 10:44 ` Russell King - ARM Linux
2010-09-06 10:44 ` Russell King - ARM Linux
2010-09-06 15:16 ` Catalin Marinas [this message]
2010-09-06 15:16 ` Catalin Marinas
2010-09-06 18:03 ` Tony Lindgren
2010-09-06 18:03 ` Tony Lindgren
2010-09-08 3:09 ` Tony Lindgren
2010-09-08 3:09 ` Tony Lindgren
2010-09-08 3:12 ` [PATCH] ARM: Check for is_smp for tlb_ops and cache_ops boardcast Tony Lindgren
2010-09-08 3:12 ` Tony Lindgren
2010-09-08 3:14 ` [PATCH] ARM: Don't try to send IPI on UP systems with CONFIG_SMP Tony Lindgren
2010-09-08 3:14 ` Tony Lindgren
2010-09-08 3:17 ` [PATCH] omap: Fix CONFIG_LOCAL_TIMERS initialization for multi-omap Tony Lindgren
2010-09-08 3:17 ` Tony Lindgren
2010-09-08 7:26 ` Shilimkar, Santosh
2010-09-08 7:26 ` Shilimkar, Santosh
2010-09-08 7:30 ` [PATCH] ARM: Don't try to send IPI on UP systems with CONFIG_SMP Shilimkar, Santosh
2010-09-08 7:30 ` Shilimkar, Santosh
2010-09-08 8:56 ` Russell King - ARM Linux
2010-09-08 8:56 ` Russell King - ARM Linux
2010-09-08 19:32 ` Tony Lindgren
2010-09-08 19:32 ` Tony Lindgren
2010-10-05 22:19 ` [PATCH] ARM: Check for is_smp for tlb_ops and cache_ops boardcast Tony Lindgren
2010-10-05 22:19 ` Tony Lindgren
2010-10-05 22:33 ` Russell King - ARM Linux
2010-10-05 22:33 ` Russell King - ARM Linux
2010-10-06 14:44 ` Tony Lindgren
2010-10-06 14:44 ` Tony Lindgren
2010-10-06 22:33 ` Russell King - ARM Linux
2010-10-06 22:33 ` Russell King - ARM Linux
2010-10-06 23:07 ` Tony Lindgren
2010-10-06 23:07 ` Tony Lindgren
2010-09-14 18:59 ` [PATCH] ARM: Handle __flush_icache_all for CONFIG_SMP_ON_UP Tony Lindgren
2010-09-14 18:59 ` Tony Lindgren
2010-09-14 19:03 ` [PATCH] omap: Update omap3_defconfig to work with SMP_ON_UP Tony Lindgren
2010-09-14 19:03 ` Tony Lindgren
2010-09-14 19:05 ` [PATCH] omap: Update omap3_defconfig for omap2 Tony Lindgren
2010-09-14 19:05 ` Tony Lindgren
2010-09-14 19:17 ` [PATCH] omap: Update omap3_defconfig to work with SMP_ON_UP Shilimkar, Santosh
2010-09-14 19:17 ` Shilimkar, Santosh
2010-09-14 20:27 ` Tony Lindgren
2010-09-14 20:27 ` Tony Lindgren
2010-09-15 6:11 ` Shilimkar, Santosh
2010-09-15 6:11 ` Shilimkar, Santosh
2010-09-15 16:11 ` Tony Lindgren
2010-09-15 16:11 ` Tony Lindgren
2010-09-15 18:25 ` Shilimkar, Santosh
2010-09-15 18:25 ` Shilimkar, Santosh
2010-09-15 23:15 ` Tony Lindgren
2010-09-15 23:15 ` Tony Lindgren
2010-09-16 17:05 ` [PATCH] ARM: Handle __flush_icache_all for CONFIG_SMP_ON_UP Catalin Marinas
2010-09-16 17:05 ` Catalin Marinas
2010-09-21 16:16 ` Tony Lindgren
2010-09-21 16:16 ` Tony Lindgren
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=1283786190.12076.106.camel@e102109-lin.cambridge.arm.com \
--to=catalin.marinas@arm.com \
--cc=bryan.wu@canonical.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=tony@atomide.com \
/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.