aha/arch/m68knommu/Kconfig
H. Peter Anvin bdc807871d avoid overflows in kernel/time.c
When the conversion factor between jiffies and milli- or microseconds is
not a single multiply or divide, as for the case of HZ == 300, we currently
do a multiply followed by a divide.  The intervening result, however, is
subject to overflows, especially since the fraction is not simplified (for
HZ == 300, we multiply by 300 and divide by 1000).

This is exposed to the user when passing a large timeout to poll(), for
example.

This patch replaces the multiply-divide with a reciprocal multiplication on
32-bit platforms.  When the input is an unsigned long, there is no portable
way to do this on 64-bit platforms there is no portable way to do this
since it requires a 128-bit intermediate result (which gcc does support on
64-bit platforms but may generate libgcc calls, e.g.  on 64-bit s390), but
since the output is a 32-bit integer in the cases affected, just simplify
the multiply-divide (*3/10 instead of *300/1000).

The reciprocal multiply used can have off-by-one errors in the upper half
of the valid output range.  This could be avoided at the expense of having
to deal with a potential 65-bit intermediate result.  Since the intent is
to avoid overflow problems and most of the other time conversions are only
semiexact, the off-by-one errors were considered an acceptable tradeoff.

At Ralf Baechle's suggestion, this version uses a Perl script to compute
the necessary constants.  We already have dependencies on Perl for kernel
compiles.  This does, however, require the Perl module Math::BigInt, which
is included in the standard Perl distribution starting with version 5.8.0.
In order to support older versions of Perl, include a table of canned
constants in the script itself, and structure the script so that
Math::BigInt isn't required if pulling values from said table.

Running the script requires that the HZ value is available from the
Makefile.  Thus, this patch also adds the Kconfig variable CONFIG_HZ to the
architectures which didn't already have it (alpha, cris, frv, h8300, m32r,
m68k, m68knommu, sparc, v850, and xtensa.) It does *not* touch the sh or
sh64 architectures, since Paul Mundt has dealt with those separately in the
sh tree.

Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Cc: Ralf Baechle <ralf@linux-mips.org>,
Cc: Sam Ravnborg <sam@ravnborg.org>,
Cc: Paul Mundt <lethal@linux-sh.org>,
Cc: Richard Henderson <rth@twiddle.net>,
Cc: Michael Starvik <starvik@axis.com>,
Cc: David Howells <dhowells@redhat.com>,
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>,
Cc: Hirokazu Takata <takata@linux-m32r.org>,
Cc: Geert Uytterhoeven <geert@linux-m68k.org>,
Cc: Roman Zippel <zippel@linux-m68k.org>,
Cc: William L. Irwin <sparclinux@vger.kernel.org>,
Cc: Chris Zankel <chris@zankel.net>,
Cc: H. Peter Anvin <hpa@zytor.com>,
Cc: Jan Engelhardt <jengelh@computergmbh.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-02-08 09:22:39 -08:00

728 lines
15 KiB
Text

#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#
mainmenu "uClinux/68k (w/o MMU) Kernel Configuration"
config M68K
bool
default y
config MMU
bool
default n
config FPU
bool
default n
config ZONE_DMA
bool
default y
config RWSEM_GENERIC_SPINLOCK
bool
default y
config RWSEM_XCHGADD_ALGORITHM
bool
default n
config ARCH_HAS_ILOG2_U32
bool
default n
config ARCH_HAS_ILOG2_U64
bool
default n
config GENERIC_FIND_NEXT_BIT
bool
default y
config GENERIC_HWEIGHT
bool
default y
config GENERIC_HARDIRQS
bool
default y
config GENERIC_CALIBRATE_DELAY
bool
default y
config GENERIC_TIME
bool
default y
config TIME_LOW_RES
bool
default y
config NO_IOPORT
def_bool y
config ARCH_SUPPORTS_AOUT
def_bool y
source "init/Kconfig"
menu "Processor type and features"
choice
prompt "CPU"
default M68EZ328
config M68328
bool "MC68328"
help
Motorola 68328 processor support.
config M68EZ328
bool "MC68EZ328"
help
Motorola 68EX328 processor support.
config M68VZ328
bool "MC68VZ328"
help
Motorola 68VZ328 processor support.
config M68360
bool "MC68360"
help
Motorola 68360 processor support.
config M5206
bool "MCF5206"
help
Motorola ColdFire 5206 processor support.
config M5206e
bool "MCF5206e"
help
Motorola ColdFire 5206e processor support.
config M520x
bool "MCF520x"
help
Freescale Coldfire 5207/5208 processor support.
config M523x
bool "MCF523x"
help
Freescale Coldfire 5230/1/2/4/5 processor support
config M5249
bool "MCF5249"
help
Motorola ColdFire 5249 processor support.
config M5271
bool "MCF5271"
help
Freescale (Motorola) ColdFire 5270/5271 processor support.
config M5272
bool "MCF5272"
help
Motorola ColdFire 5272 processor support.
config M5275
bool "MCF5275"
help
Freescale (Motorola) ColdFire 5274/5275 processor support.
config M528x
bool "MCF528x"
help
Motorola ColdFire 5280/5282 processor support.
config M5307
bool "MCF5307"
help
Motorola ColdFire 5307 processor support.
config M532x
bool "MCF532x"
help
Freescale (Motorola) ColdFire 532x processor support.
config M5407
bool "MCF5407"
help
Motorola ColdFire 5407 processor support.
endchoice
config M527x
bool
depends on (M5271 || M5275)
default y
config COLDFIRE
bool
depends on (M5206 || M5206e || M520x || M523x || M5249 || M527x || M5272 || M528x || M5307 || M532x || M5407)
default y
config CLOCK_SET
bool "Enable setting the CPU clock frequency"
default n
help
On some CPU's you do not need to know what the core CPU clock
frequency is. On these you can disable clock setting. On some
traditional 68K parts, and on all ColdFire parts you need to set
the appropriate CPU clock frequency. On these devices many of the
onboard peripherals derive their timing from the master CPU clock
frequency.
config CLOCK_FREQ
int "Set the core clock frequency"
default "66666666"
depends on CLOCK_SET
help
Define the CPU clock frequency in use. This is the core clock
frequency, it may or may not be the same as the external clock
crystal fitted to your board. Some processors have an internal
PLL and can have their frequency programmed at run time, others
use internal dividers. In general the kernel won't setup a PLL
if it is fitted (there are some exceptions). This value will be
specific to the exact CPU that you are using.
config CLOCK_DIV
int "Set the core/bus clock divide ratio"
default "1"
depends on CLOCK_SET
help
On many SoC style CPUs the master CPU clock is also used to drive
on-chip peripherals. The clock that is distributed to these
peripherals is sometimes a fixed ratio of the master clock
frequency. If so then set this to the divider ratio of the
master clock to the peripheral clock. If not sure then select 1.
config OLDMASK
bool "Old mask 5307 (1H55J) silicon"
depends on M5307
help
Build support for the older revision ColdFire 5307 silicon.
Specifically this is the 1H55J mask revision.
comment "Platform"
config PILOT3
bool "Pilot 1000/5000, PalmPilot Personal/Pro, or PalmIII support"
depends on M68328
help
Support for the Palm Pilot 1000/5000, Personal/Pro and PalmIII.
config XCOPILOT_BUGS
bool "(X)Copilot support"
depends on PILOT3
help
Support the bugs of Xcopilot.
config UC5272
bool 'Arcturus Networks uC5272 dimm board support'
depends on M5272
help
Support for the Arcturus Networks uC5272 dimm board.
config UC5282
bool "Arcturus Networks uC5282 board support"
depends on M528x
help
Support for the Arcturus Networks uC5282 dimm board.
config UCSIMM
bool "uCsimm module support"
depends on M68EZ328
help
Support for the Arcturus Networks uCsimm module.
config UCDIMM
bool "uDsimm module support"
depends on M68VZ328
help
Support for the Arcturus Networks uDsimm module.
config DRAGEN2
bool "DragenEngine II board support"
depends on M68VZ328
help
Support for the DragenEngine II board.
config DIRECT_IO_ACCESS
bool "Allow user to access IO directly"
depends on (UCSIMM || UCDIMM || DRAGEN2)
help
Disable the CPU internal registers protection in user mode,
to allow a user application to read/write them.
config INIT_LCD
bool "Initialize LCD"
depends on (UCSIMM || UCDIMM || DRAGEN2)
help
Initialize the LCD controller of the 68x328 processor.
config MEMORY_RESERVE
int "Memory reservation (MiB)"
depends on (UCSIMM || UCDIMM)
help
Reserve certain memory regions on 68x328 based boards.
config UCQUICC
bool "Lineo uCquicc board support"
depends on M68360
help
Support for the Lineo uCquicc board.
config ARN5206
bool "Arnewsh 5206 board support"
depends on M5206
help
Support for the Arnewsh 5206 board.
config M5206eC3
bool "Motorola M5206eC3 board support"
depends on M5206e
help
Support for the Motorola M5206eC3 board.
config ELITE
bool "Motorola M5206eLITE board support"
depends on M5206e
help
Support for the Motorola M5206eLITE board.
config M5208EVB
bool "Freescale M5208EVB board support"
depends on M520x
help
Support for the Freescale Coldfire M5208EVB.
config M5235EVB
bool "Freescale M5235EVB support"
depends on M523x
help
Support for the Freescale M5235EVB board.
config M5249C3
bool "Motorola M5249C3 board support"
depends on M5249
help
Support for the Motorola M5249C3 board.
config M5271EVB
bool "Freescale (Motorola) M5271EVB board support"
depends on M5271
help
Support for the Freescale (Motorola) M5271EVB board.
config M5275EVB
bool "Freescale (Motorola) M5275EVB board support"
depends on M5275
help
Support for the Freescale (Motorola) M5275EVB board.
config M5272C3
bool "Motorola M5272C3 board support"
depends on M5272
help
Support for the Motorola M5272C3 board.
config COBRA5272
bool "senTec COBRA5272 board support"
depends on M5272
help
Support for the senTec COBRA5272 board.
config AVNET5282
bool "Avnet 5282 board support"
depends on M528x
help
Support for the Avnet 5282 board.
config M5282EVB
bool "Motorola M5282EVB board support"
depends on M528x
help
Support for the Motorola M5282EVB board.
config COBRA5282
bool "senTec COBRA5282 board support"
depends on M528x
help
Support for the senTec COBRA5282 board.
config SOM5282EM
bool "EMAC.Inc SOM5282EM board support"
depends on M528x
help
Support for the EMAC.Inc SOM5282EM module.
config WILDFIRE
bool "Intec Automation Inc. WildFire board support"
depends on M528x
help
Support for the Intec Automation Inc. WildFire.
config WILDFIREMOD
bool "Intec Automation Inc. WildFire module support"
depends on M528x
help
Support for the Intec Automation Inc. WildFire module.
config ARN5307
bool "Arnewsh 5307 board support"
depends on M5307
help
Support for the Arnewsh 5307 board.
config M5307C3
bool "Motorola M5307C3 board support"
depends on M5307
help
Support for the Motorola M5307C3 board.
config eLIA
bool "Moreton Bay eLIA board support"
depends on M5307
help
Support for the Moreton Bay eLIA board.
config SECUREEDGEMP3
bool "SnapGear SecureEdge/MP3 platform support"
depends on M5307
help
Support for the SnapGear SecureEdge/MP3 platform.
config M5329EVB
bool "Freescale (Motorola) M5329EVB board support"
depends on M532x
help
Support for the Freescale (Motorola) M5329EVB board.
config COBRA5329
bool "senTec COBRA5329 board support"
depends on M532x
help
Support for the senTec COBRA5329 board.
config M5407C3
bool "Motorola M5407C3 board support"
depends on M5407
help
Support for the Motorola M5407C3 board.
config CLEOPATRA
bool "Feith CLEOPATRA board support"
depends on (M5307 || M5407)
help
Support for the Feith Cleopatra boards.
config CANCam
bool "Feith CANCam board support"
depends on M5272
help
Support for the Feith CANCam board.
config SCALES
bool "Feith SCALES board support"
depends on M5272
help
Support for the Feith SCALES board.
config NETtel
bool "SecureEdge/NETtel board support"
depends on (M5206e || M5272 || M5307)
help
Support for the SnapGear NETtel/SecureEdge/SnapGear boards.
config SNAPGEAR
bool "SnapGear router board support"
depends on NETtel
help
Special additional support for SnapGear router boards.
config CPU16B
bool "Sneha Technologies S.L. Sarasvati board support"
depends on M5272
help
Support for the SNEHA CPU16B board.
config MOD5272
bool "Netburner MOD-5272 board support"
depends on M5272
help
Support for the Netburner MOD-5272 board.
config SAVANTrosie1
bool "Savant Rosie1 board support"
depends on M523x
help
Support for the Savant Rosie1 board.
config ROMFS_FROM_ROM
bool "ROMFS image not RAM resident"
depends on (NETtel || SNAPGEAR)
help
The ROMfs filesystem will stay resident in the FLASH/ROM, not be
moved into RAM.
config PILOT
bool
default y
depends on (PILOT3 || PILOT5)
config ARNEWSH
bool
default y
depends on (ARN5206 || ARN5307)
config FREESCALE
bool
default y
depends on (M5206eC3 || M5208EVB || M5235EVB || M5249C3 || M5271EVB || M5272C3 || M5275EVB || M5282EVB || M5307C3 || M5329EVB || M5407C3)
config HW_FEITH
bool
default y
depends on (CLEOPATRA || CANCam || SCALES)
config senTec
bool
default y
depends on (COBRA5272 || COBRA5282)
config EMAC_INC
bool
default y
depends on (SOM5282EM)
config SNEHA
bool
default y
depends on CPU16B
config SAVANT
bool
default y
depends on SAVANTrosie1
config AVNET
bool
default y
depends on (AVNET5282)
config 4KSTACKS
bool "Use 4Kb for kernel stacks instead of 8Kb"
default y
help
If you say Y here the kernel will use a 4Kb stacksize for the
kernel stack attached to each process/thread. This facilitates
running more threads on a system and also reduces the pressure
on the VM subsystem for higher order allocations.
config HZ
int
default 1000 if CLEOPATRA
default 100
comment "RAM configuration"
config RAMBASE
hex "Address of the base of RAM"
default "0"
help
Define the address that RAM starts at. On many platforms this is
0, the base of the address space. And this is the default. Some
platforms choose to setup their RAM at other addresses within the
processor address space.
config RAMSIZE
hex "Size of RAM (in bytes)"
default "0x400000"
help
Define the size of the system RAM. If you select 0 then the
kernel will try to probe the RAM size at runtime. This is not
supported on all CPU types.
config VECTORBASE
hex "Address of the base of system vectors"
default "0"
help
Define the address of the system vectors. Commonly this is
put at the start of RAM, but it doesn't have to be. On ColdFire
platforms this address is programmed into the VBR register, thus
actually setting the address to use.
config KERNELBASE
hex "Address of the base of kernel code"
default "0x400"
help
Typically on m68k systems the kernel will not start at the base
of RAM, but usually some small offset from it. Define the start
address of the kernel here. The most common setup will have the
processor vectors at the base of RAM and then the start of the
kernel. On some platforms some RAM is reserved for boot loaders
and the kernel starts after that. The 0x400 default was based on
a system with the RAM based at address 0, and leaving enough room
for the theoretical maximum number of 256 vectors.
choice
prompt "RAM bus width"
default RAMAUTOBIT
config RAMAUTOBIT
bool "AUTO"
help
Select the physical RAM data bus size. Not needed on most platforms,
so you can generally choose AUTO.
config RAM8BIT
bool "8bit"
help
Configure RAM bus to be 8 bits wide.
config RAM16BIT
bool "16bit"
help
Configure RAM bus to be 16 bits wide.
config RAM32BIT
bool "32bit"
help
Configure RAM bus to be 32 bits wide.
endchoice
comment "ROM configuration"
config ROM
bool "Specify ROM linker regions"
default n
help
Define a ROM region for the linker script. This creates a kernel
that can be stored in flash, with possibly the text, and data
regions being copied out to RAM at startup.
config ROMBASE
hex "Address of the base of ROM device"
default "0"
depends on ROM
help
Define the address that the ROM region starts at. Some platforms
use this to set their chip select region accordingly for the boot
device.
config ROMVEC
hex "Address of the base of the ROM vectors"
default "0"
depends on ROM
help
This is almost always the same as the base of the ROM. Since on all
68000 type variants the vectors are at the base of the boot device
on system startup.
config ROMVECSIZE
hex "Size of ROM vector region (in bytes)"
default "0x400"
depends on ROM
help
Define the size of the vector region in ROM. For most 68000
variants this would be 0x400 bytes in size. Set to 0 if you do
not want a vector region at the start of the ROM.
config ROMSTART
hex "Address of the base of system image in ROM"
default "0x400"
depends on ROM
help
Define the start address of the system image in ROM. Commonly this
is strait after the ROM vectors.
config ROMSIZE
hex "Size of the ROM device"
default "0x100000"
depends on ROM
help
Size of the ROM device. On some platforms this is used to setup
the chip select that controls the boot ROM device.
choice
prompt "Kernel executes from"
---help---
Choose the memory type that the kernel will be running in.
config RAMKERNEL
bool "RAM"
help
The kernel will be resident in RAM when running.
config ROMKERNEL
bool "ROM"
help
The kernel will be resident in FLASH/ROM when running. This is
often referred to as Execute-in-Place (XIP), since the kernel
code executes from the position it is stored in the FLASH/ROM.
endchoice
source "mm/Kconfig"
endmenu
config ISA_DMA_API
bool
depends on !M5272
default y
menu "Bus options (PCI, PCMCIA, EISA, MCA, ISA)"
config PCI
bool "PCI support"
help
Support for PCI bus.
config COMEMPCI
bool "CO-MEM lite PCI controller support"
depends on (M5307 || M5407)
source "drivers/pci/Kconfig"
source "drivers/pcmcia/Kconfig"
source "drivers/pci/hotplug/Kconfig"
endmenu
menu "Executable file formats"
source "fs/Kconfig.binfmt"
endmenu
menu "Power management options"
config PM
bool "Power Management support"
help
Support processor power management modes
endmenu
source "net/Kconfig"
source "drivers/Kconfig"
source "fs/Kconfig"
source "arch/m68knommu/Kconfig.debug"
source "security/Kconfig"
source "crypto/Kconfig"
source "lib/Kconfig"