Patchwork faster AP launch for recent AMD processors

login
register
about
Submitter Scott
Date 2010-10-18 16:38:55
Message ID <133458B4C40B45598D9C8042D34DAE4F@m3a78>
Download mbox | patch
Permalink /patch/2137/
State Superseded
Headers show

Comments

Scott - 2010-10-18 16:38:55
To reduce boot time, removing the double startup IPI and 10 ms
delay from lapic_cpu_init.c should be considered. Because I can
test this code only on recent AMD cpu models, it is only safe
to apply the change in those cases. The following patch uses
a compile time check to identify CPUs where the change is known
to work. Would a runtime check be better?

Thanks,
Scott

Signed-off-by: Scott Duplichan <scott@notabs.org>
Myles Watson - 2010-10-18 17:04:46
> To reduce boot time, removing the double startup IPI and 10 ms
> delay from lapic_cpu_init.c should be considered. Because I can
> test this code only on recent AMD cpu models, it is only safe
> to apply the change in those cases. The following patch uses
> a compile time check to identify CPUs where the change is known
> to work. Would a runtime check be better?
Until Fam10 and K8 can use the same image, compile time is probably the
correct way to do it.  If there ends up being a long list of processors that
don't need the wait, we could add a Kconfig option like
CONFIG_NO_LAPIC_DELAY.

> Signed-off-by: Scott Duplichan <scott@notabs.org>
Acked-by: Myles Watson <mylesgw@gmail.com>

> +   #if !defined (CONFIG_CPU_AMD_MODEL_10XXX) && !defined
> (CONFIG_CPU_AMD_MODEL_14XXX)
>         mdelay(10);
> +   #endif
> 
>         printk(BIOS_SPEW, "Deasserting INIT.\n");
> 
> @@ -144,6 +146,9 @@
>  #endif
> 
>         num_starts = 2;
> +   #if defined (CONFIG_CPU_AMD_MODEL_10XXX) || defined
> (CONFIG_CPU_AMD_MODEL_14XXX)
> +       num_starts = 1;
> +       #endif

I'd prefer it if they both used the same logic.  I think it will make it
easier to update in the future.  Maybe something like this:

#if !defined (CONFIG_CPU_AMD_MODEL_10XXX) && !defined
(CONFIG_CPU_AMD_MODEL_14XXX)
	num_starts = 2;
#else
	num_starts = 1;
#endif

Thanks,
Myles

Patch

Index: src/cpu/x86/lapic/lapic_cpu_init.c
===================================================================
--- src/cpu/x86/lapic/lapic_cpu_init.c  (revision 5965)
+++ src/cpu/x86/lapic/lapic_cpu_init.c  (working copy)
@@ -113,7 +113,9 @@ 
                }
                return 0;
        }
+   #if !defined (CONFIG_CPU_AMD_MODEL_10XXX) && !defined (CONFIG_CPU_AMD_MODEL_14XXX)
        mdelay(10);
+   #endif

        printk(BIOS_SPEW, "Deasserting INIT.\n");

@@ -144,6 +146,9 @@ 
 #endif

        num_starts = 2;
+   #if defined (CONFIG_CPU_AMD_MODEL_10XXX) || defined (CONFIG_CPU_AMD_MODEL_14XXX)
+       num_starts = 1;
+       #endif

        /*
         * Run STARTUP IPI loop.