From: Tony Lindgren <tony@atomide.com>
To: Grazvydas Ignotas <notasas@gmail.com>
Cc: Matthijs van Duin <matthijsvanduin@gmail.com>,
Pavel Machek <pavel@ucw.cz>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
Ivaylo Dimitrov <ivo.g.dimitrov.75@gmail.com>,
Sebastian Reichel <sre@kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: ARM errata 430973 on multi platform kernels
Date: Fri, 10 Apr 2015 16:08:14 -0700 [thread overview]
Message-ID: <20150410230814.GX18048@atomide.com> (raw)
In-Reply-To: <CANOLnOMJ9oy_VhxGDyg9yx8XLVSZPf51eycP7-j=r4KVF6RX-A@mail.gmail.com>
* Grazvydas Ignotas <notasas@gmail.com> [150410 15:06]:
> On Fri, Apr 10, 2015 at 1:44 AM, Tony Lindgren <tony@atomide.com> wrote:
> > * Grazvydas Ignotas <notasas@gmail.com> [150409 15:37]:
> >> On Tue, Apr 7, 2015 at 5:23 AM, Tony Lindgren <tony@atomide.com> wrote:
> >> > * Matthijs van Duin <matthijsvanduin@gmail.com> [150406 11:15]:
> >> >>
> >> >> On 6 April 2015 at 19:42, Tony Lindgren <tony@atomide.com> wrote:
> >> >> > Hmm but it still seems to do something also on cortex-a8 r3p2 that
> >> >> > is supposedly not affected by 430973.. Based on my tests so far, at least
> >> >> > armhf running cpuburn-a8 in the background and doing apt-get update
> >> >> > segfaults constantly without flush BTAC/BTB. This seems to be the case
> >> >> > no matter how the aux ctrl reg bits are set..
> >> >>
> >> >> That sounds.... really odd. The TRM is fairly explicit about BTB
> >> >> flush executing as nop when IBE is not set. Of course the TRM is not
> >> >> exactly flawless, but still...
> >> >
> >> > Oops, sorry user error.. I was trying to clear IBE as a banked register
> >> > like L2 enable bit and of course it did not get cleared.. Clearing it
> >> > with a smc call really clears it. And in that case my test case seems to
> >> > work reliably on r3p2 without erratum 430973 enabled.
> >>
> >> May I ask how do you perform the smc call? I wanted to clear IBE too
> >> to experiment, but it just hangs my board, even if I just write back
> >> the same value. Here is what I do:
> >>
> >> asm ("mrc p15, 0, %0, c1, c0, 1" : "=r"(val));
> >>
> >> asm (".arch_extension sec\n\t"
> >> "mov r0, %0\n"
> >> "mov r12, #3\n"
> >> "smc #0\n"
> >> :: "r"(val) : "r0", "r12");
> >>
> >> I just run this from a sysfs write handler, does it need to be run on
> >> SRAM or something?
> >
> > Best done in the bootloader.. I just hacked it into the restore from
> > off-idle to test, see below. But for that you naturally need to have
> > a device with working idle and it's usable for just testing for lazy
> > people.
> >
> > Regards,
> >
> > Tony
> >
> > --- a/arch/arm/mach-omap2/sleep34xx.S
> > +++ b/arch/arm/mach-omap2/sleep34xx.S
> > @@ -516,6 +516,7 @@ l2_inv_gp:
> > ldr r4, scratchpad_base
> > ldr r3, [r4,#0xBC]
> > ldr r0, [r3,#4]
> > + bic r0, r1, #(1 << 6)
>
> Hmm did you mean r0 instead of r1 here? I hope your test results
> didn't come from some other random bit from r1 being written to
> aux_ctrl.
Oh right sorry, yeah it should be r0 above. Luck based coding :)
> And according to readback this doesn't seem to work for me, even when
> my board has idle working. Or is it not supposed to be visible in
> readback?
Hmm I've verified between apps segfaulting depending on how bit 6
is set on r3p2.
Anyways, did a retry just in case, below is an updated test patch.
For me aux ctrl changes after enabling idle stuff:
aux ctrl: 0x000000e2
...
aux ctrl: 0x000000a2
Did you enable the UART timeout etc so it really hits off mode
when testing?
> Anyway I've managed to clear that damn bit in the bootloader, but
> failed to measure any performance impact from clearing this bit and
> getting rid of BTB flush mcr in cpu_v7_switch_mm() (this is on DM3730
> with r3p2 A8). My test was to simply run 2 processes that would spin a
> counter (running more processes doesn't seem to increase context
> switches per second, so running 2 seemed enough).
Well that's a good test result :) It means it's OK to keep the
430973 enabled without a performance impatct.
Regards,
Tony
8< -----------------
--- a/arch/arm/mach-omap2/pm-debug.c
+++ b/arch/arm/mach-omap2/pm-debug.c
@@ -93,6 +93,7 @@ static int pwrdm_dbg_show_counter(struct powerdomain *pwrdm, void *user)
{
struct seq_file *s = (struct seq_file *)user;
int i;
+ u32 val;
if (strcmp(pwrdm->name, "emu_pwrdm") == 0 ||
strcmp(pwrdm->name, "wkup_pwrdm") == 0 ||
@@ -116,6 +117,9 @@ static int pwrdm_dbg_show_counter(struct powerdomain *pwrdm, void *user)
seq_printf(s, "\n");
+ asm ("mrc p15, 0, %0, c1, c0, 1" : "=r"(val));
+ seq_printf(s, "aux ctrl: 0x%08x\n", val);
+
return 0;
}
--- a/arch/arm/mach-omap2/sleep34xx.S
+++ b/arch/arm/mach-omap2/sleep34xx.S
@@ -516,6 +516,7 @@ l2_inv_gp:
ldr r4, scratchpad_base
ldr r3, [r4,#0xBC]
ldr r0, [r3,#4]
+ bic r0, r0, #(1 << 6)
mov r12, #0x3
smc #0 @ Call SMI monitor (smieq)
ldr r4, scratchpad_base
WARNING: multiple messages have this Message-ID (diff)
From: tony@atomide.com (Tony Lindgren)
To: linux-arm-kernel@lists.infradead.org
Subject: ARM errata 430973 on multi platform kernels
Date: Fri, 10 Apr 2015 16:08:14 -0700 [thread overview]
Message-ID: <20150410230814.GX18048@atomide.com> (raw)
In-Reply-To: <CANOLnOMJ9oy_VhxGDyg9yx8XLVSZPf51eycP7-j=r4KVF6RX-A@mail.gmail.com>
* Grazvydas Ignotas <notasas@gmail.com> [150410 15:06]:
> On Fri, Apr 10, 2015 at 1:44 AM, Tony Lindgren <tony@atomide.com> wrote:
> > * Grazvydas Ignotas <notasas@gmail.com> [150409 15:37]:
> >> On Tue, Apr 7, 2015 at 5:23 AM, Tony Lindgren <tony@atomide.com> wrote:
> >> > * Matthijs van Duin <matthijsvanduin@gmail.com> [150406 11:15]:
> >> >>
> >> >> On 6 April 2015 at 19:42, Tony Lindgren <tony@atomide.com> wrote:
> >> >> > Hmm but it still seems to do something also on cortex-a8 r3p2 that
> >> >> > is supposedly not affected by 430973.. Based on my tests so far, at least
> >> >> > armhf running cpuburn-a8 in the background and doing apt-get update
> >> >> > segfaults constantly without flush BTAC/BTB. This seems to be the case
> >> >> > no matter how the aux ctrl reg bits are set..
> >> >>
> >> >> That sounds.... really odd. The TRM is fairly explicit about BTB
> >> >> flush executing as nop when IBE is not set. Of course the TRM is not
> >> >> exactly flawless, but still...
> >> >
> >> > Oops, sorry user error.. I was trying to clear IBE as a banked register
> >> > like L2 enable bit and of course it did not get cleared.. Clearing it
> >> > with a smc call really clears it. And in that case my test case seems to
> >> > work reliably on r3p2 without erratum 430973 enabled.
> >>
> >> May I ask how do you perform the smc call? I wanted to clear IBE too
> >> to experiment, but it just hangs my board, even if I just write back
> >> the same value. Here is what I do:
> >>
> >> asm ("mrc p15, 0, %0, c1, c0, 1" : "=r"(val));
> >>
> >> asm (".arch_extension sec\n\t"
> >> "mov r0, %0\n"
> >> "mov r12, #3\n"
> >> "smc #0\n"
> >> :: "r"(val) : "r0", "r12");
> >>
> >> I just run this from a sysfs write handler, does it need to be run on
> >> SRAM or something?
> >
> > Best done in the bootloader.. I just hacked it into the restore from
> > off-idle to test, see below. But for that you naturally need to have
> > a device with working idle and it's usable for just testing for lazy
> > people.
> >
> > Regards,
> >
> > Tony
> >
> > --- a/arch/arm/mach-omap2/sleep34xx.S
> > +++ b/arch/arm/mach-omap2/sleep34xx.S
> > @@ -516,6 +516,7 @@ l2_inv_gp:
> > ldr r4, scratchpad_base
> > ldr r3, [r4,#0xBC]
> > ldr r0, [r3,#4]
> > + bic r0, r1, #(1 << 6)
>
> Hmm did you mean r0 instead of r1 here? I hope your test results
> didn't come from some other random bit from r1 being written to
> aux_ctrl.
Oh right sorry, yeah it should be r0 above. Luck based coding :)
> And according to readback this doesn't seem to work for me, even when
> my board has idle working. Or is it not supposed to be visible in
> readback?
Hmm I've verified between apps segfaulting depending on how bit 6
is set on r3p2.
Anyways, did a retry just in case, below is an updated test patch.
For me aux ctrl changes after enabling idle stuff:
aux ctrl: 0x000000e2
...
aux ctrl: 0x000000a2
Did you enable the UART timeout etc so it really hits off mode
when testing?
> Anyway I've managed to clear that damn bit in the bootloader, but
> failed to measure any performance impact from clearing this bit and
> getting rid of BTB flush mcr in cpu_v7_switch_mm() (this is on DM3730
> with r3p2 A8). My test was to simply run 2 processes that would spin a
> counter (running more processes doesn't seem to increase context
> switches per second, so running 2 seemed enough).
Well that's a good test result :) It means it's OK to keep the
430973 enabled without a performance impatct.
Regards,
Tony
8< -----------------
--- a/arch/arm/mach-omap2/pm-debug.c
+++ b/arch/arm/mach-omap2/pm-debug.c
@@ -93,6 +93,7 @@ static int pwrdm_dbg_show_counter(struct powerdomain *pwrdm, void *user)
{
struct seq_file *s = (struct seq_file *)user;
int i;
+ u32 val;
if (strcmp(pwrdm->name, "emu_pwrdm") == 0 ||
strcmp(pwrdm->name, "wkup_pwrdm") == 0 ||
@@ -116,6 +117,9 @@ static int pwrdm_dbg_show_counter(struct powerdomain *pwrdm, void *user)
seq_printf(s, "\n");
+ asm ("mrc p15, 0, %0, c1, c0, 1" : "=r"(val));
+ seq_printf(s, "aux ctrl: 0x%08x\n", val);
+
return 0;
}
--- a/arch/arm/mach-omap2/sleep34xx.S
+++ b/arch/arm/mach-omap2/sleep34xx.S
@@ -516,6 +516,7 @@ l2_inv_gp:
ldr r4, scratchpad_base
ldr r3, [r4,#0xBC]
ldr r0, [r3,#4]
+ bic r0, r0, #(1 << 6)
mov r12, #0x3
smc #0 @ Call SMI monitor (smieq)
ldr r4, scratchpad_base
next prev parent reply other threads:[~2015-04-10 23:11 UTC|newest]
Thread overview: 123+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-03-01 19:07 [PATCH RESEND] ARM: dts: OMAP3-N900: Add microphone bias voltages Jarkko Nikula
2015-03-30 16:30 ` Jarkko Nikula
[not found] ` <55197A12.1050009-FVTvWyuFUl3QT0dZR+AlfA@public.gmane.org>
2015-03-30 16:42 ` Tony Lindgren
2015-03-30 17:45 ` Jarkko Nikula
[not found] ` <55198BA4.5010207-FVTvWyuFUl3QT0dZR+AlfA@public.gmane.org>
2015-03-30 17:50 ` Tony Lindgren
2015-03-31 12:32 ` Sebastian Reichel
2015-04-01 19:47 ` Tony Lindgren
2015-04-03 16:35 ` ARM errata 430973 on multi platform kernels (was: OMAP3-N900: Add microphone bias voltages) Sebastian Reichel
2015-04-03 18:39 ` Tony Lindgren
2015-04-03 18:39 ` Tony Lindgren
2015-04-03 19:21 ` Robert Nelson
2015-04-03 19:21 ` Robert Nelson
2015-04-05 13:00 ` Sebastian Reichel
2015-04-05 13:00 ` Sebastian Reichel
2015-04-05 13:26 ` Pali Rohár
2015-04-05 13:26 ` Pali Rohár
2015-04-05 13:45 ` Sebastian Reichel
2015-04-05 13:45 ` Sebastian Reichel
2015-04-05 13:52 ` Pali Rohár
2015-04-05 13:52 ` Pali Rohár
2015-04-06 17:38 ` Sebastian Reichel
2015-04-06 17:38 ` Sebastian Reichel
2015-04-03 20:42 ` Pavel Machek
2015-04-03 20:42 ` Pavel Machek
2015-04-03 22:08 ` ARM errata 430973 on multi platform kernels Ivaylo Dimitrov
2015-04-03 22:08 ` Ivaylo Dimitrov
2015-04-03 22:15 ` Tony Lindgren
2015-04-03 22:15 ` Tony Lindgren
2015-04-03 22:47 ` Ivaylo Dimitrov
2015-04-03 22:47 ` Ivaylo Dimitrov
2015-04-03 22:52 ` Tony Lindgren
2015-04-03 22:52 ` Tony Lindgren
2015-04-05 4:13 ` Matthijs van Duin
2015-04-05 4:13 ` Matthijs van Duin
2015-04-05 7:23 ` Ivaylo Dimitrov
2015-04-05 7:23 ` Ivaylo Dimitrov
2015-04-05 16:50 ` Matthijs van Duin
2015-04-05 16:50 ` Matthijs van Duin
2015-04-05 16:52 ` Matthijs van Duin
2015-04-05 16:52 ` Matthijs van Duin
2015-04-05 21:08 ` Ivaylo Dimitrov
2015-04-05 21:08 ` Ivaylo Dimitrov
2015-04-05 23:52 ` Matthijs van Duin
2015-04-05 23:52 ` Matthijs van Duin
2015-04-06 15:19 ` Tony Lindgren
2015-04-06 15:19 ` Tony Lindgren
2015-04-06 15:40 ` Tony Lindgren
2015-04-06 15:40 ` Tony Lindgren
2015-04-06 17:14 ` Ivaylo Dimitrov
2015-04-06 17:14 ` Ivaylo Dimitrov
2015-04-06 17:42 ` Tony Lindgren
2015-04-06 17:42 ` Tony Lindgren
2015-04-06 18:14 ` Matthijs van Duin
2015-04-06 18:14 ` Matthijs van Duin
2015-04-07 2:23 ` Tony Lindgren
2015-04-07 2:23 ` Tony Lindgren
2015-04-07 3:12 ` Sebastian Reichel
2015-04-07 3:12 ` Sebastian Reichel
2015-04-07 3:49 ` Matthijs van Duin
2015-04-07 3:49 ` Matthijs van Duin
2015-04-07 14:48 ` Tony Lindgren
2015-04-07 14:48 ` Tony Lindgren
2015-04-09 22:37 ` Grazvydas Ignotas
2015-04-09 22:37 ` Grazvydas Ignotas
2015-04-09 22:44 ` Tony Lindgren
2015-04-09 22:44 ` Tony Lindgren
2015-04-09 23:44 ` Nishanth Menon
2015-04-09 23:44 ` Nishanth Menon
2015-04-10 22:05 ` Grazvydas Ignotas
2015-04-10 22:05 ` Grazvydas Ignotas
2015-04-10 23:08 ` Tony Lindgren [this message]
2015-04-10 23:08 ` Tony Lindgren
2015-04-16 16:53 ` Matthijs van Duin
2015-04-16 16:53 ` Matthijs van Duin
2015-04-07 13:58 ` Russell King - ARM Linux
2015-04-07 13:58 ` Russell King - ARM Linux
2015-04-07 13:57 ` Russell King - ARM Linux
2015-04-07 13:57 ` Russell King - ARM Linux
2015-04-07 15:22 ` Tony Lindgren
2015-04-07 15:22 ` Tony Lindgren
2015-04-07 15:44 ` Tony Lindgren
2015-04-07 15:44 ` Tony Lindgren
2015-04-08 23:08 ` Russell King - ARM Linux
2015-04-08 23:08 ` Russell King - ARM Linux
2015-04-08 23:15 ` Tony Lindgren
2015-04-08 23:15 ` Tony Lindgren
2015-04-08 23:06 ` Russell King - ARM Linux
2015-04-08 23:06 ` Russell King - ARM Linux
2015-04-09 13:48 ` Russell King - ARM Linux
2015-04-09 13:48 ` Russell King - ARM Linux
2015-04-09 15:09 ` Tony Lindgren
2015-04-09 15:09 ` Tony Lindgren
2015-04-09 15:30 ` Russell King - ARM Linux
2015-04-09 15:30 ` Russell King - ARM Linux
2015-04-15 16:31 ` Sebastian Reichel
2015-04-15 16:31 ` Sebastian Reichel
2015-04-16 16:08 ` Tony Lindgren
2015-04-16 16:08 ` Tony Lindgren
2015-04-17 18:41 ` Sebastian Reichel
2015-04-17 18:41 ` Sebastian Reichel
2015-04-20 23:40 ` Tony Lindgren
2015-04-20 23:40 ` Tony Lindgren
2015-04-23 10:25 ` Russell King - ARM Linux
2015-04-23 10:25 ` Russell King - ARM Linux
2015-04-23 14:17 ` Tony Lindgren
2015-04-23 14:17 ` Tony Lindgren
2015-04-28 18:13 ` Russell King - ARM Linux
2015-04-28 18:13 ` Russell King - ARM Linux
2015-04-29 14:40 ` Tony Lindgren
2015-04-29 14:40 ` Tony Lindgren
2015-05-04 14:24 ` Tony Lindgren
2015-05-04 14:24 ` Tony Lindgren
2015-04-24 8:54 ` Matthijs van Duin
2015-04-24 8:54 ` Matthijs van Duin
2015-04-28 18:11 ` Russell King - ARM Linux
2015-04-28 18:11 ` Russell King - ARM Linux
2015-05-02 6:51 ` Matthijs van Duin
2015-05-02 6:51 ` Matthijs van Duin
2015-04-05 13:39 ` Sebastian Reichel
2015-04-05 13:39 ` Sebastian Reichel
2015-04-06 15:24 ` Tony Lindgren
2015-04-06 15:24 ` Tony Lindgren
2015-05-04 16:07 ` [PATCH RESEND] ARM: dts: OMAP3-N900: Add microphone bias voltages 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=20150410230814.GX18048@atomide.com \
--to=tony@atomide.com \
--cc=ivo.g.dimitrov.75@gmail.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=matthijsvanduin@gmail.com \
--cc=notasas@gmail.com \
--cc=pavel@ucw.cz \
--cc=sre@kernel.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.