public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Processor autodetection (when configuring kernel)
@ 2000-12-29 13:39 Giacomo A. Catenazzi
  2000-12-29 14:09 ` David Relson
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Giacomo A. Catenazzi @ 2000-12-29 13:39 UTC (permalink / raw)
  To: torvalds; +Cc: linux-kernel, linux-kbuild

Hi Linus!

Here a first try to autodetect the processor when configure kernel.

How it works:
1) I add a CONFIG_CPU_CURRENT boolean.
2) If it is set, the next Makefile will call script/cpu_detect.sh
   and try to detect the processor (it return CONFIG_M386 if it fails)
3) Makefile sets the autodetected processor and CONFIG_CPU_CURRENT=n,
   so next time it will use the already detected CPU
4) it does a make oldconfig to configure the the other processor flags (
   and to be sure that it will be a correct configuration file)
4) The GNU make will automagically restart makefile, bacause and include
   (include .config) is changed.


I don't know well the non-intel processors, so addition for extra
processors are welcome.

	giacomo


The patch
=========


diff -urN old.linux/Makefile linux/Makefile
--- old.linux/Makefile  Fri Dec 29 11:26:55 2000
+++ linux/Makefile      Fri Dec 29 13:32:10 2000
@@ -65,6 +65,16 @@
 do-it-all:     config
 endif
 
+# Second stage configuration
+# Note that GNU make will read again this Makefile, so the CONFIG are
+# updated
+ifeq ($(CONFIG_CPU_CURRENT), y)
+CONFIGURATION = config2
+do-it-all:      config2
+.config:        config2
+       @echo "Rescanning the main Makefile"
+endif
+
 #
 # INSTALL_PATH specifies where to place the updated kernel and system
map
 # images.  Uncomment if you want to place them anywhere other than
root.
@@ -273,6 +283,14 @@
 
 config: symlinks
        $(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in
+
+config2:
+       echo "CONFIG_CPU_CURRENT=n" >> .config
+       echo `$(CONFIG_SHELL) $(TOPDIR)/scripts/cpu_detect.sh`=y >>
.config
+       $(MAKE) oldconfig
+
+config2.test:
+       echo "CONFIG_CPU_CURRENT=$(CONFIG_CPU_CURRENT)"
 
 include/config/MARKER: scripts/split-include include/linux/autoconf.h
        scripts/split-include include/linux/autoconf.h include/config
diff -urN old.linux/arch/i386/config.in linux/arch/i386/config.in
--- old.linux/arch/i386/config.in       Fri Dec 29 11:26:55 2000
+++ linux/arch/i386/config.in   Fri Dec 29 13:14:58 2000
@@ -26,7 +26,9 @@
 
 mainmenu_option next_comment
 comment 'Processor type and features'
-choice 'Processor family' \
+bool "Optimize for current CPU" CONFIG_CPU_CURRENT
+if [ "$CONFIG_CPU_CURRENT" != "y" ]; then
+   choice 'Processor family' \
        "386                            CONFIG_M386 \
         486                            CONFIG_M486 \
         586/K5/5x86/6x86/6x86MX        CONFIG_M586 \
@@ -41,6 +43,10 @@
         Winchip-C6                     CONFIG_MWINCHIPC6 \
         Winchip-2                      CONFIG_MWINCHIP2 \
         Winchip-2A/Winchip-3           CONFIG_MWINCHIP3D" Pentium-Pro
+else
+   # First configuration stage: Allow all possible processors deps
+   define_bool CONFIG_M386 y
+fi
 #
 # Define implied options from the CPU selection here
 #
diff -urN old.linux/scripts/cpu_detect.sh linux/scripts/cpu_detect.sh
--- old.linux/scripts/cpu_detect.sh     Thu Jan  1 01:00:00 1970
+++ linux/scripts/cpu_detect.sh Fri Dec 29 14:10:42 2000
@@ -0,0 +1,35 @@
+#! /bin/bash
+
+# Copyright (C) 2000  Giacomo Catenazzi  <cate@debian.org>
+# This is free software, see GNU General Public License 2 for details.
+
+# This script try to autodetect the CPU.
+# On SMP I assume that all processors are of the same type as the first
+
+
+if [ "$ARCH" = "i386" ] ; then
+  vendor=$(sed -n 's/^vendor_id.*: \([-A-Za-z0-9_]*\).*$/\1/pg'
/proc/cpuinfo)
+  cpu_fam=$(sed -n 's/^cpu family.*: \([0-9A-Za-z]*\).*$/\1/pg'
/proc/cpuinfo)
+  cpu_mod=$(sed -n 's/^model[^a-z]*: \([0-9A-Za-z]*\).*$/\1/pg'
/proc/cpuinfo)
+  cpu_id="$vendor:$cpu_fam:$cpu_mod"
+
+  #echo $cpu_id  # for debug
+
+  case $cpu_id in
+    GenuineIntel:5:[0123]      )  echo CONFIG_M586TSC   ;;
+    GenuineIntel:5:[48]        )  echo CONFIG_M586MMX   ;;
+    GenuineIntel:6:[01356]     )  echo CONFIG_M686      ;;
+    GenuineIntel:6:{8,9,11}    )  echo CONFIG_M686FXSR  ;;
+    AuthenticAMD:5:[0123]      )  echo CONFIG_M586      ;;
+    AuthenticAMD:5:{8,9,10,11} )  echo CONFIG_MK6       ;;
+    AuthenticAMD:6:[0124]      )  echo CONFIG_MK7       ;;
+    UMC:4:[12]                 )  echo CONFIG_M486      ;; # "UMC" !
+    NexGenDriven:5:0           )  echo CONFIG_M386      ;;
+    {TransmetaCPU,GenuineTMx86}:* ) echo CONFIG_MCROSUE ;;   
+
+    # some default values
+
+    *                          )  echo CONFIG_M386      ;;
+
+  esac
+fi
diff -urN old.linux/CREDITS linux/CREDITS
--- old.linux/CREDITS   Fri Dec 29 13:32:46 2000
+++ linux/CREDITS       Fri Dec 29 13:43:02 2000
@@ -458,6 +458,12 @@
 S: Fremont, California 94539
 S: USA
 
+N: Giacomo Catenazzi
+E: cate@debian.org
+D: Random kernel hack and fixes
+D: Author of scripts/cpu_detect.sh
+S: Switzerland
+
 N: Gordon Chaffee
 E: chaffee@cs.berkeley.edu
 W: http://bmrc.berkeley.edu/people/chaffee/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Processor autodetection (when configuring kernel)
  2000-12-29 13:39 [PATCH] Processor autodetection (when configuring kernel) Giacomo A. Catenazzi
@ 2000-12-29 14:09 ` David Relson
  2000-12-29 14:09 ` Jan-Benedict Glaw
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: David Relson @ 2000-12-29 14:09 UTC (permalink / raw)
  To: Giacomo A. Catenazzi; +Cc: linux-kernel, linux-kbuild

Giacomo,

I don't think cpu_info.sh is quite right.  It identified my 500 Mhz Pentium 
III as CONFIG_M386.  I think CONFIG_M686 is closer, but as I don't know the 
significance of all the flags (MMX, TSC, etc), I'm not certain.  Since the 
flags do include fxsr, the correct answer may be CONFIG_M686FXSR.

Anyhow, here are my results:

[relson@osage relson]$ cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 7
model name	: Pentium III (Katmai)
stepping	: 3
cpu MHz	: 501.147
cache size	: 512 KB
fdiv_bug	: no
hlt_bug	: no
sep_bug	: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 2
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 sep mtrr pge mca cmov pat pse36 
mmx fxsr xmm
bogomips	: 999.42

[relson@osage relson]$ ARCH=i386 ; . cpu_detect.sh
GenuineIntel:6:7
CONFIG_M386

Also, here's a patch to make the script echo CONFIG_M686:

diff -urN cpu_detect.sh.orig cpu_detect.sh
--- cpu_detect.sh.orig	Fri Dec 29 09:02:27 2000
+++ cpu_detect.sh	Fri Dec 29 09:01:14 2000
@@ -18,7 +18,7 @@
    case $cpu_id in
      GenuineIntel:5:[0123]      )  echo CONFIG_M586TSC   ;;
      GenuineIntel:5:[48]        )  echo CONFIG_M586MMX   ;;
-    GenuineIntel:6:[01356]     )  echo CONFIG_M686      ;;
+    GenuineIntel:6:[013567]    )  echo CONFIG_M686      ;;
      GenuineIntel:6:{8,9,11}    )  echo CONFIG_M686FXSR  ;;
      AuthenticAMD:5:[0123]      )  echo CONFIG_M586      ;;
      AuthenticAMD:5:{8,9,10,11} )  echo CONFIG_MK6       ;;

David

P.S.  I'm running 2.2.18, if it matters.
--------------------------------------------------------
David Relson                   Osage Software Systems, Inc.
relson@osagesoftware.com       Ann Arbor, MI 48103
www.osagesoftware.com          tel:  734.821.8800

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Processor autodetection (when configuring kernel)
  2000-12-29 13:39 [PATCH] Processor autodetection (when configuring kernel) Giacomo A. Catenazzi
  2000-12-29 14:09 ` David Relson
@ 2000-12-29 14:09 ` Jan-Benedict Glaw
  2000-12-29 14:41 ` David Relson
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Jan-Benedict Glaw @ 2000-12-29 14:09 UTC (permalink / raw)
  To: linux-kernel, linux-kbuild

On Fri, Dec 29, 2000 at 02:39:42PM +0100, Giacomo A. Catenazzi wrote:
> +  case $cpu_id in
> +    GenuineIntel:5:[0123]      )  echo CONFIG_M586TSC   ;;
> +    GenuineIntel:5:[48]        )  echo CONFIG_M586MMX   ;;
> +    GenuineIntel:6:[01356]     )  echo CONFIG_M686      ;;
> +    GenuineIntel:6:{8,9,11}    )  echo CONFIG_M686FXSR  ;;
> +    AuthenticAMD:5:[0123]      )  echo CONFIG_M586      ;;
> +    AuthenticAMD:5:{8,9,10,11} )  echo CONFIG_MK6       ;;
> +    AuthenticAMD:6:[0124]      )  echo CONFIG_MK7       ;;
> +    UMC:4:[12]                 )  echo CONFIG_M486      ;; # "UMC" !
> +    NexGenDriven:5:0           )  echo CONFIG_M386      ;;
> +    {TransmetaCPU,GenuineTMx86}:* ) echo CONFIG_MCROSUE ;;   

What about non-ia32 processor based systems? I'd ivolunteer to
extend the patch, but I'd need *your* /proc/cpuinfo... I think
that's worth it...

MfG, JBG

-- 
Fehler eingestehen, Größe zeigen: Nehmt die Rechtschreibreform zurück!!!
/* Jan-Benedict Glaw <jbglaw@lug-owl.de> -- +49-177-5601720 */
keyID=0x8399E1BB fingerprint=250D 3BCF 7127 0D8C A444 A961 1DBD 5E75 8399 E1BB
     "insmod vi.o and there we go..." (Alexander Viro on linux-kernel)
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Processor autodetection (when configuring kernel)
  2000-12-29 13:39 [PATCH] Processor autodetection (when configuring kernel) Giacomo A. Catenazzi
  2000-12-29 14:09 ` David Relson
  2000-12-29 14:09 ` Jan-Benedict Glaw
@ 2000-12-29 14:41 ` David Relson
  2000-12-29 15:41 ` Ingo Oeser
  2000-12-29 16:46 ` Re:[PATCH, v2] " Giacomo A. Catenazzi
  4 siblings, 0 replies; 6+ messages in thread
From: David Relson @ 2000-12-29 14:41 UTC (permalink / raw)
  To: Giacomo A. Catenazzi; +Cc: linux-kernel, linux-kbuild

Giacomo,

Further experimentation has revealed another problem with the script.  The 
use of curly braces in the case statement, i.e.

      GenuineIntel:6:{8,9,11}    )  echo CONFIG_M686FXSR  ;;

does not work.  The construct below works, but I don't like it because of 
its length:

     GenuineIntel:6:8|GenuineIntel:6:9|GenuineIntel:6:11 	) echo 
CONFIG_M686FXSR  ;;


David
--------------------------------------------------------
David Relson                   Osage Software Systems, Inc.
relson@osagesoftware.com       Ann Arbor, MI 48103
www.osagesoftware.com          tel:  734.821.8800

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] Processor autodetection (when configuring kernel)
  2000-12-29 13:39 [PATCH] Processor autodetection (when configuring kernel) Giacomo A. Catenazzi
                   ` (2 preceding siblings ...)
  2000-12-29 14:41 ` David Relson
@ 2000-12-29 15:41 ` Ingo Oeser
  2000-12-29 16:46 ` Re:[PATCH, v2] " Giacomo A. Catenazzi
  4 siblings, 0 replies; 6+ messages in thread
From: Ingo Oeser @ 2000-12-29 15:41 UTC (permalink / raw)
  To: Giacomo A. Catenazzi; +Cc: linux-kernel, linux-kbuild

On Fri, Dec 29, 2000 at 02:39:42PM +0100, Giacomo A. Catenazzi wrote:
> +    {TransmetaCPU,GenuineTMx86}:* ) echo CONFIG_MCROSUE ;;   
+    {TransmetaCPU,GenuineTMx86}:* ) echo CONFIG_MCRUSOE ;;   

This is just a typo, right? ;-)

Regards

Ingo Oeser
-- 
10.+11.03.2001 - 3. Chemnitzer LinuxTag <http://www.tu-chemnitz.de/linux/tag>
         <<<<<<<<<<<<       come and join the fun       >>>>>>>>>>>>
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re:[PATCH, v2] Processor autodetection (when configuring kernel)
  2000-12-29 13:39 [PATCH] Processor autodetection (when configuring kernel) Giacomo A. Catenazzi
                   ` (3 preceding siblings ...)
  2000-12-29 15:41 ` Ingo Oeser
@ 2000-12-29 16:46 ` Giacomo A. Catenazzi
  4 siblings, 0 replies; 6+ messages in thread
From: Giacomo A. Catenazzi @ 2000-12-29 16:46 UTC (permalink / raw)
  To: Giacomo A. Catenazzi; +Cc: torvalds, linux-kernel, linux-kbuild

Version 2:
. Added a PIII
. Corrected the name of Crusoe
. Added the generic Intel and AMD 486
. Corrected the braces {,} (wrong syntax)

	giacomo


diff -urN old.linux/CREDITS linux/CREDITS
--- old.linux/CREDITS   Fri Dec 29 13:32:46 2000
+++ linux/CREDITS       Fri Dec 29 13:43:02 2000
@@ -458,6 +458,12 @@
 S: Fremont, California 94539
 S: USA
 
+N: Giacomo Catenazzi
+E: cate@debian.org
+D: Random kernel hack and fixes
+D: Author of scripts/cpu_detect.sh
+S: Switzerland
+
 N: Gordon Chaffee
 E: chaffee@cs.berkeley.edu
 W: http://bmrc.berkeley.edu/people/chaffee/
diff -urN old.linux/Makefile linux/Makefile
--- old.linux/Makefile  Fri Dec 29 11:26:55 2000
+++ linux/Makefile      Fri Dec 29 13:32:10 2000
@@ -65,6 +65,16 @@
 do-it-all:     config
 endif
 
+# Second stage configuration
+# Note that GNU make will read again this Makefile, so the CONFIG are
+# updated
+ifeq ($(CONFIG_CPU_CURRENT), y)
+CONFIGURATION = config2
+do-it-all:      config2
+.config:        config2
+       @echo "Rescanning the main Makefile"
+endif
+
 #
 # INSTALL_PATH specifies where to place the updated kernel and system
map
 # images.  Uncomment if you want to place them anywhere other than
root.
@@ -273,6 +283,14 @@
 
 config: symlinks
        $(CONFIG_SHELL) scripts/Configure arch/$(ARCH)/config.in
+
+config2:
+       echo "CONFIG_CPU_CURRENT=n" >> .config
+       echo `$(CONFIG_SHELL) $(TOPDIR)/scripts/cpu_detect.sh`=y >>
.config
+       $(MAKE) oldconfig
+
+config2.test:
+       echo "CONFIG_CPU_CURRENT=$(CONFIG_CPU_CURRENT)"
 
 include/config/MARKER: scripts/split-include include/linux/autoconf.h
        scripts/split-include include/linux/autoconf.h include/config
diff -urN old.linux/arch/i386/config.in linux/arch/i386/config.in
--- old.linux/arch/i386/config.in       Fri Dec 29 11:26:55 2000
+++ linux/arch/i386/config.in   Fri Dec 29 13:14:58 2000
@@ -26,7 +26,9 @@
 
 mainmenu_option next_comment
 comment 'Processor type and features'
-choice 'Processor family' \
+bool "Optimize for current CPU" CONFIG_CPU_CURRENT
+if [ "$CONFIG_CPU_CURRENT" != "y" ]; then
+   choice 'Processor family' \
        "386                            CONFIG_M386 \
         486                            CONFIG_M486 \
         586/K5/5x86/6x86/6x86MX        CONFIG_M586 \
@@ -41,6 +43,10 @@
         Winchip-C6                     CONFIG_MWINCHIPC6 \
         Winchip-2                      CONFIG_MWINCHIP2 \
         Winchip-2A/Winchip-3           CONFIG_MWINCHIP3D" Pentium-Pro
+else
+   # First configuration stage: Allow all possible processors deps
+   define_bool CONFIG_M386 y
+fi
 #
 # Define implied options from the CPU selection here
 #
diff -urN old.linux/scripts/cpu_detect.sh linux/scripts/cpu_detect.sh
--- old.linux/scripts/cpu_detect.sh     Thu Jan  1 01:00:00 1970
+++ linux/scripts/cpu_detect.sh Fri Dec 29 17:10:23 2000
@@ -0,0 +1,38 @@
+#! /bin/bash
+
+# Copyright (C) 2000  Giacomo Catenazzi  <cate@debian.org>
+# This is free software, see GNU General Public License 2 for details.
+
+# This script try to autodetect the CPU.
+# On SMP I assume that all processors are of the same type as the first
+
+
+if [ "$ARCH" = "i386" ] ; then
+  vendor=$(sed -n 's/^vendor_id.*: \([-A-Za-z0-9_]*\).*$/\1/pg'
/proc/cpuinfo)
+  cpu_fam=$(sed -n 's/^cpu family.*: \([0-9A-Za-z]*\).*$/\1/pg'
/proc/cpuinfo)
+  cpu_mod=$(sed -n 's/^model[^a-z]*: \([0-9A-Za-z]*\).*$/\1/pg'
/proc/cpuinfo)
+  cpu_id="$vendor:$cpu_fam:$cpu_mod"
+
+  #echo $cpu_id  # for debug
+
+  case $cpu_id in
+    GenuineIntel:4:*            )  echo CONFIG_M486      ;; # exists ?
+    GenuineIntel:5:[0123]       )  echo CONFIG_M586TSC   ;;
+    GenuineIntel:5:[48]         )  echo CONFIG_M586MMX   ;;
+    GenuineIntel:6:[01356]      )  echo CONFIG_M686      ;;
+    GenuineIntel:6:[789]        )  echo CONFIG_M686FXSR  ;;
+    GenuineIntel:6:1[1]         )  echo CONFIG_M686FXSR  ;;
+    AuthenticAMD:4:*            )  echo CONFIG_M486      ;;
+    AuthenticAMD:5:[0123]       )  echo CONFIG_M586      ;;
+    AuthenticAMD:5:[89]         )  echo CONFIG_MK6       ;;
+    AuthenticAMD:5:1[01]        )  echo CONFIG_MK6       ;;
+    AuthenticAMD:6:[0124]       )  echo CONFIG_MK7       ;;
+    UMC:4:[12]                  )  echo CONFIG_M486      ;; # "UMC" !
+    NexGenDriven:5:0            )  echo CONFIG_M386      ;;
+    TransmetaCPU:*              )  echo CONFIG_MCRUSOE   ;;   
+    GenuineTMx86:*              )  echo CONFIG_MCRUSOE   ;;   
+
+    # default value
+    *                           )  echo CONFIG_M386      ;;
+  esac
+fi
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2000-12-29 17:19 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2000-12-29 13:39 [PATCH] Processor autodetection (when configuring kernel) Giacomo A. Catenazzi
2000-12-29 14:09 ` David Relson
2000-12-29 14:09 ` Jan-Benedict Glaw
2000-12-29 14:41 ` David Relson
2000-12-29 15:41 ` Ingo Oeser
2000-12-29 16:46 ` Re:[PATCH, v2] " Giacomo A. Catenazzi

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox