summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--documentation/LinuxBIOS-AMD64.tex144
1 files changed, 78 insertions, 66 deletions
diff --git a/documentation/LinuxBIOS-AMD64.tex b/documentation/LinuxBIOS-AMD64.tex
index c1007fdda0..0fadee9ad8 100644
--- a/documentation/LinuxBIOS-AMD64.tex
+++ b/documentation/LinuxBIOS-AMD64.tex
@@ -32,7 +32,7 @@
\title{LinuxBIOS on AMD64}
\author{Stefan Reinauer $<$stepan@openbios.org$>$}
-\date{February 10th, 2004}
+\date{June 2nd, 2004}
\begin{document}
@@ -50,7 +50,7 @@
\section{Abstract}
-This document targets porting LinuxBIOS to new Motherboards and creating
+This document targets porting LinuxBIOS to new mainboards and creating
custom firmware images using LinuxBIOS. It describes how to build
LinuxBIOS images for the AMD64 platform, including hypertransport
configuration and pertinent utilities. If you are missing information or
@@ -64,8 +64,9 @@ find errors in the following descriptions, contact
\section{Changes}
\begin{itemize}
- \item 2003/11/18 initial release
+ \item 2004/06/02 url and language fixes from Ken Fuchs $<$kfuchs@winternet.com$>$
\item 2004/02/10 acpi and option rom updates
+ \item 2003/11/18 initial release
\end{itemize}
@@ -116,12 +117,21 @@ The following toolchain is recommended:
\section{Getting the Sources}
The latest LinuxBIOS sources are available via CVS. The CVS repository
-is maintained at SourceForge.net (the project name is \emph{FreeBIOS}). You
-can get the entire source tree via CVS:
+is maintained at SourceForge.net (the project name is \emph{FreeBIOS}).
+First you should create a directory for your LinuxBIOS trees:
+
+{ \small
+\begin{verbatim}
+$ mkdir linuxbios
+$ cd linuxbios
+\end{verbatim}
+}
+
+You can get the entire source tree via CVS:
{ \small
\begin{verbatim}
-% cvs -d:pserver:anonymous@cvs.freebios.sourceforge.net:/cvsroot/freebios login
+$ cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/freebios login
\end{verbatim}
}
@@ -130,7 +140,7 @@ the freebios source tree as follows:
{ \small
\begin{verbatim}
-% cvs -z3 -d:pserver:anonymous@cvs.freebios.sourceforge.net:/cvsroot/freebios co freebios2
+$ cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/freebios co freebios2
\end{verbatim}
}
@@ -163,18 +173,18 @@ lot of configuration options that can be tweaked in several ways:
\item
Firmware image specific configuration options can be set in the image
configuration file which is usually found in
-\texttt{freebios2/targets/$<$vendor$>$/$<$motherboard$>$/}. Such
+\texttt{freebios2/targets/$<$vendor$>$/$<$mainboard$>$/}. Such
options are the default amount of output verbosity during bootup, image
size, use of fallback mechanisms, firmware image size and payloads
(Linux Kernel, Bootloader...) The default configuration file name is
\texttt{Config.lb}, but LinuxBIOS allows multiple configurations to
reside in that directory.
-\item Motherboard specific configuration options can be set in the
-motherboard configuration file placed in
-\texttt{freebios2/src/mainboard/$<$vendor$>$/$<$motherboard$>$}. The
-motherboard configuration file is always called \texttt{Config.lb}. It
-contains information on the onboard components of the motherboard like
+\item Mainboard specific configuration options can be set in the
+mainboard configuration file placed in
+\texttt{freebios2/src/mainboard/$<$vendor$>$/$<$mainboard$>$}. The
+mainboard configuration file is always called \texttt{Config.lb}. It
+contains information on the onboard components of the mainboard like
CPU type, northbridge, southbridge, hypertransport configuration and
SuperIO configuration. This configuration file also allows to include
addon code to hook into the LinuxBIOS initialization mechanism at
@@ -191,8 +201,8 @@ LinuxBIOS source tree when building for AMD64.
\section{Building LinuxBIOS}
One of the design goals for building LinuxBIOS was to keep object files
-out of the source tree in a seperate place. This is mandatory for
-building parallel LinuxBIOS images for several distinct motherboards
+out of the source tree in a separate place. This is mandatory for
+building parallel LinuxBIOS images for several distinct mainboards
and/or platforms. Therefore building LinuxBIOS consists of two steps:
\begin{itemize}
\item
@@ -204,7 +214,7 @@ compiling the LinuxBIOS code and creating a flashable firmware image.
The first of these two steps is accomplished by the \texttt{buildtarget}
script found in \texttt{freebios2/targets/}. To build LinuxBIOS for
-instance for the AMD Solo Athlon64 motherboard enter:
+instance for the AMD Solo Athlon64 mainboard enter:
\begin{verbatim}
% cd freebios2/targets
@@ -214,7 +224,7 @@ instance for the AMD Solo Athlon64 motherboard enter:
This will create a directory containing a Makefile and other software
components needed for this build. The directory name is defined in the
firmware image specific configuration file. In the case of AMD's Solo
-motherboard the default directory resides in
+mainboard the default directory resides in
\texttt{freebios2/targets/amd/solo/solo}. To build the LinuxBIOS image, do
\begin{verbatim}
@@ -223,7 +233,7 @@ motherboard the default directory resides in
\end{verbatim}
The LinuxBIOS image filename is specified in the firmware image specific
-configuration file. The default filename for AMD's Solo motherboard is
+configuration file. The default filename for AMD's Solo mainboard is
\texttt{solo.rom}.
%
@@ -239,7 +249,7 @@ software flash programming, find detailed information:
\begin{itemize}
\item \url{http://www.openbios.org/development/devbios.html} (/dev/bios)
-\item \url{http://www.linuxmtd.infradead.org/} (Memory Technology Device Subsystem MTD)
+\item \url{http://www.linux-mtd.infradead.org/} (Memory Technology Device Subsystem MTD)
\end{itemize}
\newpage
@@ -265,7 +275,7 @@ LinuxBIOS distinguishes between statements and options. Statements cause
the LinuxBIOS configuration mechanism to act, whereas options set
variables that are used by the build scripts or source code.
\item
-Default configuration values can be set in the motherboard configuration
+Default configuration values can be set in the mainboard configuration
files (keyword default)
\item
Option overrides to the default configuration can only be specified in
@@ -294,7 +304,7 @@ variable is known.
\item \begin{verbatim}default\end{verbatim}
The \texttt{default} statement is used to set a configuration variable
-with an overridable default value. It is commonly used in motherboard
+with an overridable default value. It is commonly used in mainboard
configuration files.
Example:
@@ -330,7 +340,7 @@ The \texttt{option} statement basically behaves identically to the
build target configuration files
(\texttt{freebios2/targets/$<$vendor$>$/$<$mainboard$>$}). The option
statement allows either to set new options or to override default values
-set with the default statement in a motherboard configuration file.
+set with the default statement in a mainboard configuration file.
Syntax and application are the same as with default.
\end{itemize}
@@ -340,8 +350,8 @@ LinuxBIOS allows to create different firmware images for the same
hardware. Such images can differ in the amount of output they produce,
the payload, the number of subimages they consist of etc.
-The firmware image specific configuration file can be found in
-\texttt{freebios2/targets/$<$vendor$>$/<motherboard$>$}.
+The firmware image specific configuration file can be found in \\
+\texttt{freebios2/targets/$<$vendor$>$/<mainboard$>$}.
\subsubsection{Firmware image specific keywords}
In addition to the above described keywords the following statements are
@@ -389,7 +399,7 @@ the images and the final image size:
In addition to the definitions described above there are a number of
commonly used options. Configuration options set in the firmware image
specific configuration file can override default selections from the
-Motherboard specific configuration. See above examples about
+Mainboard specific configuration. See above examples about
option on how to set them.
\begin{itemize}
@@ -403,7 +413,7 @@ machine.
\item \begin{verbatim}CONFIG_CHIP_CONFIGURE \end{verbatim}
Use new \textit{chip\_configure} method for configuring (nonpci)
-devices. Set to \texttt{1} for all AMD64 motherboards.
+devices. Set to \texttt{1} for all AMD64 mainboards.
\item \begin{verbatim}MAXIMUM_CONSOLE_LOGLEVEL\end{verbatim}
@@ -433,7 +443,7 @@ This does not include the fallback payload.
\item \begin{verbatim}HAVE_OPTION_TABLE\end{verbatim}
Export CMOS option table. Default is \texttt{0}. Set to \texttt{1} if
-your motherboard has CMOS memory and you want to use it to store
+your mainboard has CMOS memory and you want to use it to store
LinuxBIOS parameters (Loglevel, serial line speed, ...)
\item \begin{verbatim}CONFIG_ROM_STREAM\end{verbatim}
@@ -470,29 +480,29 @@ to any string to add an extra version string to your LinuxBIOS build.
\newpage
-\subsection{Motherboard specific configuration}
+\subsection{Mainboard specific configuration}
-Motherboard specific configuration files describe the onboard
-motherboard components, i.e. bridges, number and type of CPUs. They also
+Mainboard specific configuration files describe the onboard
+mainboard components, i.e. bridges, number and type of CPUs. They also
contain rules for building the low level start code which is translated
using romcc and/or the GNU assembler. This code enables caches and
registers, early mtrr settings, fallback mechanisms, dram init and
possibly more.
-\textbf{NOTE:} The option keyword can not be used in motherboard specific
-configuration files. Options shall instead be set using the default
-keyword so that they can be overridden by the image specific
-configuration files if needed.
+\textbf{NOTE:} The \texttt{option} keyword can not be used in mainboard
+specific configuration files. Options shall instead be set using the
+\texttt{default} keyword so that they can be overridden by the image
+specific configuration files if needed.
-\subsubsection{Motherboard specific keywords}
+\subsubsection{Mainboard specific keywords}
-The following statements are used in motherboard specific configuration
+The following statements are used in mainboard specific configuration
files:
\begin{itemize}
\item \begin{verbatim}arch\end{verbatim}
-Sets the CPU architecture. This should be \texttt{i386} for AMD64 boards.
+Sets the CPU architecture. This should be \texttt{i386} for AMD64 boards.\\
Example:
\begin{verbatim}
@@ -551,9 +561,9 @@ makerule ./auto.inc
end
\end{verbatim}
-Each makerule section contains file dependencies (using the depend
-keyword) and an action that is taken when the dependencies are satisfied
-(using the action keyword).
+Each \texttt{makerule} section contains file dependencies (using the
+texttt{depends} keyword) and an action that is taken when the dependencies
+are satisfied (using the \texttt{action} keyword).
\item \begin{verbatim}mainboardinit\end{verbatim}
@@ -583,8 +593,8 @@ creation. Example:
\item \begin{verbatim}dir\end{verbatim}
LinuxBIOS reuses as much code between the different ports as possible.
-To achieve this, commonly used code can be stored in a seperate
-directory. For a new motherboard, it is enough to know that the code in
+To achieve this, commonly used code can be stored in a separate
+directory. For a new mainboard, it is enough to know that the code in
that directory can be used as is.
LinuxBIOS will also read a \texttt{Config.lb} file stored in that
@@ -606,7 +616,8 @@ used as:
\item \begin{verbatim}register\end{verbatim}
The \texttt{register} keyword can occur in any section, passing
-additional parameters to the code handling the according device.
+additional \\
+parameters to the code handling the associated device.
Example:
\begin{verbatim}
@@ -619,7 +630,8 @@ The \texttt{northbridge} keyword describes a system northbridge. Some
systems, like AMD64, can have more than one northbridge, i.e. one per
CPU node. Each northbridge is described by the path to the northbridge
code in LinuxBIOS (relative to \texttt{freebios2/src/northbridge}), i.e.
-\texttt{amd/amdk8} and a unique name (i.e ´mc0' ) Example:
+\texttt{amd/amdk8} and a unique name (i.e \texttt{mc0}) \\
+Example:
\begin{verbatim}
northbridge amd/amdk8 "mc0"
@@ -732,9 +744,9 @@ end
\newpage
-\subsubsection{Motherboard specific configuration options}
+\subsubsection{Mainboard specific configuration options}
-The following options are commonly used in motherboard specific
+The following options are commonly used in mainboard specific
configuration files.
They should be set using the \texttt{default} keyword:
@@ -818,9 +830,9 @@ decompression is needed).
\section{Tweaking the source code}
Besides configuring the existing code it is sometimes necessary or
-wished to tweak certain parts of LinuxBIOS by direct changes to the
+desirable to tweak certain parts of LinuxBIOS by direct changes to the
code. This chapter covers some possible enhancements and changes that
-are needed when porting LinuxBIOS to a new motherboard or just come
+are needed when porting LinuxBIOS to a new mainboard or just come
handy now and then.
\subsection{Hypertransport configuration}
@@ -829,9 +841,9 @@ attached to these CPUs (and thus, see all devices attached to the
system) it has to initialize the coherent hypertransport devices.
The current algorithms to do coherent hypertransport initialization are
-not fully automatically evaluating the hypertransport chain graph.
+not fully, automatically evaluating the hypertransport chain graph.
Therefore the code needs to be adapted when porting LinuxBIOS to a new
-AMD64 motherboard. An example arrangement of hypertransport devices
+AMD64 mainboard. An example arrangement of hypertransport devices
looks like this:
\begin{figure}[htb]
@@ -989,7 +1001,7 @@ timings, size and other properties. The SPD data is usually read
utilizing the I2C SMBUS interface of the southbridge.
There is one central data structure that describes the RAM controllers
-available on an AMD64 system and the concerned devices:
+available on an AMD64 system and the associated devices:
\begin{verbatim}
struct mem_controller {
@@ -1000,15 +1012,15 @@ struct mem_controller {
};
\end{verbatim}
-Available motherboard implementations and CPUs create the need to add
+Available mainboard implementations and CPUs create the need to add
special setup code to RAM initialization in a number of places.
LinuxBIOS provides hooks to easily add code in these places without
having to change the generic code. Whether these hooks have to be used
-depends on the motherboard design. In many cases the functions executed
+depends on the mainboard design. In many cases the functions executed
by the hooks just carry out trivial default settings or they are even
empty.
-Some motherboard/CPU combinations need to trigger an additional memory
+Some mainboard/CPU combinations need to trigger an additional memory
controller reset before the memory can be initialized properly. This is,
for example, used to get memory working on preC stepping AMD64
processors. LinuxBIOS provides two hooks for triggering onboard memory
@@ -1020,7 +1032,7 @@ reset logic:
mem_controller *ctrl)\end{verbatim}
\end{itemize}
-Some motherboards utilize an SMBUS hub or possibly other mechanisms to
+Some mainboards utilize an SMBUS hub or possibly other mechanisms to
allow using a large number of SPDROMs and thus ram sockets. The result
is that only the SPDROM information of one cpu node is visible at a
time. The following function, defined in \texttt{auto.c}, is called every time
@@ -1032,13 +1044,13 @@ static inline void activate_spd_rom (const struct mem_controller *ctrl)
\end{verbatim}
The way SMBUS hub information is coded into the \texttt{mem\_controller}
-structure is motherboard implementation specific and not closer
+structure is mainboard implementation specific and not
described here. See \texttt{freebios2/src/mainboard/amd/quartet/auto.c}
for an example.
LinuxBIOS folks have agreed on SPD data being the central information
-source for RAM specific information. But not all motherboards/RAM
-modules feature a physical SPD ROM. To still allow an easytouse SPD
+source for RAM specific information. But not all mainboards/RAM
+modules feature a physical SPD ROM. To still allow an easy to use SPD
driven setup, there is a hook that abstracts reading the SPD ROM
ingredients that are used by the memory initialization mechanism:
@@ -1065,7 +1077,7 @@ as indices to this array.
\subsection {IRQ Tables}
-Motherboards that provide an IRQ table should have the following two
+Mainboards that provide an IRQ table should have the following two
variables set in their \texttt{Config.lb} file:
\begin{verbatim}
@@ -1073,8 +1085,8 @@ default HAVE_PIRQ_TABLE=1
default IRQ_SLOT_COUNT=7
\end{verbatim}
-This will make LinuxBIOS look for the file
-\texttt{freebios2/src/mainboard/<vendor>/<motherboard>/irq\_tables.c} which
+This will make LinuxBIOS look for the file \\
+\texttt{freebios2/src/mainboard/<vendor>/<mainboard>/irq\_tables.c} which
contains the source code definition of the IRQ table. LinuxBIOS corrects
small inconsistencies in the IRQ table during startup (checksum and
number of entries), but it is not yet writing IRQ tables in a completely
@@ -1208,7 +1220,7 @@ initialize and operate the device:
By separating the two structures above, M:N relations between compatible
devices and drivers can be described. The driver source code containing
above data structures and code have to be added to a LinuxBIOS image
-using the driver keyword in the motherboard specific configuration file
+using the driver keyword in the mainboard specific configuration file \\
\texttt{freebios2/src/mainboard/<vendor>/<mainboard>/Config.lb}:
\begin{verbatim}
@@ -1309,7 +1321,7 @@ initialization can be factored and reused more easily among mainboards
and platforms.
Since no memory is available during this early initialization point,
-romcc has to map all used variables in registers for their time being.
+romcc has to map all used variables in registers for the time being.
Same applies for their stack usage. Generally the less registers are
used up by the algorithms, the better code can be factored, resulting in
a smaller object size. Since getting the best register usage is an NP
@@ -1318,7 +1330,7 @@ time. If you run out of registers during compilation, try to refactor
your code.
\subsection{CMOS handling}
-LinuxBIOS can use the motherboard's CMOS memory to store information
+LinuxBIOS can use the mainboard's CMOS memory to store information
defined in a data structure called the CMOS table . This information
contains serial line speed, fallback boot control, output verbosity,
default boot device, ECC control, and more. It can be easily enhanced by
@@ -1401,7 +1413,7 @@ the following line in \texttt{/etc/inetd.conf}:
tftp dgram udp wait root /usr/sbin/in.tftpd in.tftpd -s /tftpboot
\end{verbatim}
-Then put your kernel image \texttt{vmlinuz.elf} to \texttt{/tftpboot} on
+Then put your kernel image \texttt{vmlinuz.elf} in \texttt{/tftpboot} on
the \texttt{tftp} server.
@@ -1415,7 +1427,7 @@ the \texttt{tftp} server.
Like software, today's hardware is getting more and more complex. To
stay flexible many hardware vendors start breaking hardware
-compatibility to old standards as VGA. Thus, VGA is still supported by
+compatibility to old standards like VGA. Thus, VGA is still supported by
most cards, but emulation has to be enabled by the firmware for the
device to operate properly. Also, many expansion cards are small
discrete systems that have to initialize attached ram, download