]> git.kernelconcepts.de Git - karo-tx-redboot.git/blobdiff - doc/html/ref/hal-porting-variant.html
Initial revision
[karo-tx-redboot.git] / doc / html / ref / hal-porting-variant.html
diff --git a/doc/html/ref/hal-porting-variant.html b/doc/html/ref/hal-porting-variant.html
new file mode 100644 (file)
index 0000000..ff1f547
--- /dev/null
@@ -0,0 +1,443 @@
+<!-- Copyright (C) 2003 Red Hat, Inc.                                -->
+<!-- This material may be distributed only subject to the terms      -->
+<!-- and conditions set forth in the Open Publication License, v1.0  -->
+<!-- or later (the latest version is presently available at          -->
+<!-- http://www.opencontent.org/openpub/).                           -->
+<!-- Distribution of the work or derivative of the work in any       -->
+<!-- standard (paper) book form is prohibited unless prior           -->
+<!-- permission is obtained from the copyright holder.               -->
+<HTML
+><HEAD
+><TITLE
+>Variant HAL Porting</TITLE
+><meta name="MSSmartTagsPreventParsing" content="TRUE">
+<META
+NAME="GENERATOR"
+CONTENT="Modular DocBook HTML Stylesheet Version 1.76b+
+"><LINK
+REL="HOME"
+TITLE="eCos Reference Manual"
+HREF="ecos-ref.html"><LINK
+REL="UP"
+TITLE="        Porting Guide"
+HREF="hal-porting-guide.html"><LINK
+REL="PREVIOUS"
+TITLE="Platform HAL Porting"
+HREF="hal-porting-platform.html"><LINK
+REL="NEXT"
+TITLE="Architecture HAL Porting"
+HREF="hal-porting-architecture.html"></HEAD
+><BODY
+CLASS="SECTION"
+BGCOLOR="#FFFFFF"
+TEXT="#000000"
+LINK="#0000FF"
+VLINK="#840084"
+ALINK="#0000FF"
+><DIV
+CLASS="NAVHEADER"
+><TABLE
+SUMMARY="Header navigation table"
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TH
+COLSPAN="3"
+ALIGN="center"
+>eCos Reference Manual</TH
+></TR
+><TR
+><TD
+WIDTH="10%"
+ALIGN="left"
+VALIGN="bottom"
+><A
+HREF="hal-porting-platform.html"
+ACCESSKEY="P"
+>Prev</A
+></TD
+><TD
+WIDTH="80%"
+ALIGN="center"
+VALIGN="bottom"
+>Chapter 11. Porting Guide</TD
+><TD
+WIDTH="10%"
+ALIGN="right"
+VALIGN="bottom"
+><A
+HREF="hal-porting-architecture.html"
+ACCESSKEY="N"
+>Next</A
+></TD
+></TR
+></TABLE
+><HR
+ALIGN="LEFT"
+WIDTH="100%"></DIV
+><DIV
+CLASS="SECTION"
+><H1
+CLASS="SECTION"
+><A
+NAME="HAL-PORTING-VARIANT">Variant HAL Porting</H1
+><P
+>A variant port can be a fairly limited job, but can also
+require quite a lot of work. A variant HAL describes how a specific
+CPU variant differs from the generic CPU architecture. The variant HAL
+can re-define cache, MMU, interrupt, and other features which override
+the default implementation provided by the architecture HAL.</P
+><P
+>Doing a variant port requires a preexisting architecture HAL port. It
+is also likely that a platform port will have to be done at the same
+time if it is to be tested.</P
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="AEN9745">HAL Variant Porting Process</H2
+><P
+>The easiest way to make a new variant HAL is simply to copy an
+existing variant HAL and change all the files to match the new
+variant. If this is the first variant for an architecture, it may be
+hard to decide which parts should be put in the variant - knowledge of
+other variants of the architecture is required.</P
+><P
+>Looking at existing variant HALs (e.g., MIPS tx39, tx49) may be a
+help - usually things such as caching, interrupt and exception
+handling differ between variants. Initialization code, and code for
+handling various core components (FPU, DSP, MMU, etc.) may also differ
+or be missing altogether on some variants. Linker scripts may also require
+specific variant versions.</P
+><DIV
+CLASS="NOTE"
+><BLOCKQUOTE
+CLASS="NOTE"
+><P
+><B
+>Note: </B
+>Some CPU variants may require specific compiler
+support. That support must be in place before you can undertake the
+eCos variant port.</P
+></BLOCKQUOTE
+></DIV
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="AEN9752">HAL Variant CDL</H2
+><P
+>The CDL in a variant HAL tends to depend on the exact functionality
+supported by the variant. If it implements some of the devices
+described in the platform HAL, then the CDL for those will be here
+rather than there (for example the real-time clock).</P
+><P
+>There may also be CDL to select options in the architecture HAL to
+configure it to a particular architectural variant.</P
+><P
+>Each variant needs an entry in the <TT
+CLASS="FILENAME"
+>ecos.db</TT
+>
+file. This is the one for the SH3:</P
+><TABLE
+BORDER="5"
+BGCOLOR="#E0E0F0"
+WIDTH="70%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>package CYGPKG_HAL_SH_SH3 {
+    alias         { "SH3 architecture" hal_sh_sh3 }
+    directory     hal/sh/sh3
+    script        hal_sh_sh3.cdl
+    hardware
+    description   "
+        The SH3 (SuperH 3) variant HAL package provides generic
+        support for SH3 variant CPUs."
+}</PRE
+></TD
+></TR
+></TABLE
+><P
+>As you can see, it is very similar to the platform entry.</P
+><P
+>The variant CDL file will contain a package entry named for the
+architecture and variant, matching the package name in the
+<TT
+CLASS="FILENAME"
+>ecos.db</TT
+> file. Here is the initial part of the
+MIPS VR4300 CDL file:</P
+><TABLE
+BORDER="5"
+BGCOLOR="#E0E0F0"
+WIDTH="70%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>cdl_package CYGPKG_HAL_MIPS_VR4300 {
+    display       "VR4300 variant"
+    parent        CYGPKG_HAL_MIPS
+    implements    CYGINT_HAL_MIPS_VARIANT
+    hardware
+    include_dir   cyg/hal
+    define_header hal_mips_vr4300.h
+    description   "
+           The VR4300 variant HAL package provides generic support
+           for this processor architecture. It is also necessary to
+           select a specific target platform HAL package."</PRE
+></TD
+></TR
+></TABLE
+><P
+>This defines the package, placing it under the MIPS architecture
+package in the hierarchy. The <TT
+CLASS="LITERAL"
+>implements</TT
+> line
+indicates that this is a MIPS variant. The architecture package uses
+this to check that exactly one variant is configured in.</P
+><P
+>The variant defines some options that cause the architecture HAL to
+configure itself to support this variant.</P
+><TABLE
+BORDER="5"
+BGCOLOR="#E0E0F0"
+WIDTH="70%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>    cdl_option CYGHWR_HAL_MIPS_64BIT {
+        display    "Variant 64 bit architecture support"
+        calculated 1
+    }
+
+    cdl_option CYGHWR_HAL_MIPS_FPU {
+        display    "Variant FPU support"
+        calculated 1
+    }
+
+    cdl_option CYGHWR_HAL_MIPS_FPU_64BIT {
+        display    "Variant 64 bit FPU support"
+        calculated 1
+    }</PRE
+></TD
+></TR
+></TABLE
+><P
+>These tell the architecture that this is a 64 bit MIPS architecture,
+that it has a floating point unit, and that we are going to use it in
+64 bit mode rather than 32 bit mode.</P
+><P
+>The CDL file finishes off with some build options.</P
+><TABLE
+BORDER="5"
+BGCOLOR="#E0E0F0"
+WIDTH="70%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>    define_proc {
+        puts $::cdl_header "#include &lt;pkgconf/hal_mips.h&gt;"
+    }
+
+    compile       var_misc.c
+
+    make {
+        &lt;PREFIX&gt;/lib/target.ld: &lt;PACKAGE&gt;/src/mips_vr4300.ld
+        $(CC) -E -P -Wp,-MD,target.tmp -DEXTRAS=1 -xc $(INCLUDE_PATH) $(CFLAGS) -o $@ $&lt;
+        @echo $@ ": \\" &gt; $(notdir $@).deps
+        @tail +2 target.tmp &gt;&gt; $(notdir $@).deps
+        @echo &gt;&gt; $(notdir $@).deps
+        @rm target.tmp
+    }
+
+    cdl_option CYGBLD_LINKER_SCRIPT {
+        display "Linker script"
+        flavor data
+       no_define
+        calculated  { "src/mips_vr4300.ld" }
+    }
+
+}</PRE
+></TD
+></TR
+></TABLE
+><P
+>The <TT
+CLASS="LITERAL"
+>define_proc</TT
+> causes the architecture
+configuration file to be included into the configuration file for the
+variant. The <TT
+CLASS="LITERAL"
+>compile</TT
+> causes the single source file
+for this variant, <TT
+CLASS="FILENAME"
+>var_misc.c</TT
+> to be compiled. The
+<TT
+CLASS="LITERAL"
+>make</TT
+> command emits makefile rules to combine the
+linker script with the <TT
+CLASS="FILENAME"
+>.ldi</TT
+> file to generate
+<TT
+CLASS="LITERAL"
+>target.ld</TT
+>. Finally, in the MIPS HALs, the main
+linker script is defined in the variant, rather than the architecture,
+so <TT
+CLASS="LITERAL"
+>CYGBLD_LINKER_SCRIPT</TT
+> is defined here.</P
+></DIV
+><DIV
+CLASS="SECTION"
+><H2
+CLASS="SECTION"
+><A
+NAME="AEN9778">Cache Support</H2
+><P
+>The main area where the variant is likely to be involved is in cache
+support. Often the only thing that distinguishes one CPU variant from
+another is the size of its caches.</P
+><P
+>In architectures such as the MIPS and PowerPC where cache instructions
+are part of the ISA, most of the actual cache operations are
+implemented in the architecture HAL. In this case the variant HAL only
+needs to define the cache dimensions. The following are the cache
+dimensions defined in the MIPS VR4300 variant
+<TT
+CLASS="FILENAME"
+>var_cache.h</TT
+>.</P
+><TABLE
+BORDER="5"
+BGCOLOR="#E0E0F0"
+WIDTH="70%"
+><TR
+><TD
+><PRE
+CLASS="PROGRAMLISTING"
+>// Data cache
+#define HAL_DCACHE_SIZE                 (8*1024)        // Size of data cache in bytes
+#define HAL_DCACHE_LINE_SIZE            16              // Size of a data cache line
+#define HAL_DCACHE_WAYS                 1               // Associativity of the cache
+
+// Instruction cache
+#define HAL_ICACHE_SIZE                 (16*1024)       // Size of cache in bytes
+#define HAL_ICACHE_LINE_SIZE            32              // Size of a cache line
+#define HAL_ICACHE_WAYS                 1               // Associativity of the cache
+
+#define HAL_DCACHE_SETS (HAL_DCACHE_SIZE/(HAL_DCACHE_LINE_SIZE*HAL_DCACHE_WAYS))
+#define HAL_ICACHE_SETS (HAL_ICACHE_SIZE/(HAL_ICACHE_LINE_SIZE*HAL_ICACHE_WAYS))</PRE
+></TD
+></TR
+></TABLE
+><P
+>Additional cache macros, or overrides for the defaults, may also
+appear in here. While some architectures have instructions for
+managing cache lines, overall enable/disable operations may be handled
+via variant specific registers. If so then
+<TT
+CLASS="FILENAME"
+>var_cache.h</TT
+> should also define the
+<TT
+CLASS="LITERAL"
+>HAL_XCACHE_ENABLE()</TT
+> and
+<TT
+CLASS="LITERAL"
+>HAL_XCACHE_DISABLE()</TT
+> macros.</P
+><P
+>If there are any generic features that the variant does not support
+(cache locking is a typical example) then
+<TT
+CLASS="LITERAL"
+>var_cache.h</TT
+> may need to disable definitions of
+certain operations. It is architecture dependent exactly how this is
+done.</P
+></DIV
+></DIV
+><DIV
+CLASS="NAVFOOTER"
+><HR
+ALIGN="LEFT"
+WIDTH="100%"><TABLE
+SUMMARY="Footer navigation table"
+WIDTH="100%"
+BORDER="0"
+CELLPADDING="0"
+CELLSPACING="0"
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+><A
+HREF="hal-porting-platform.html"
+ACCESSKEY="P"
+>Prev</A
+></TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="ecos-ref.html"
+ACCESSKEY="H"
+>Home</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+><A
+HREF="hal-porting-architecture.html"
+ACCESSKEY="N"
+>Next</A
+></TD
+></TR
+><TR
+><TD
+WIDTH="33%"
+ALIGN="left"
+VALIGN="top"
+>Platform HAL Porting</TD
+><TD
+WIDTH="34%"
+ALIGN="center"
+VALIGN="top"
+><A
+HREF="hal-porting-guide.html"
+ACCESSKEY="U"
+>Up</A
+></TD
+><TD
+WIDTH="33%"
+ALIGN="right"
+VALIGN="top"
+>Architecture HAL Porting</TD
+></TR
+></TABLE
+></DIV
+></BODY
+></HTML
+>
\ No newline at end of file