<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=us-ascii">
<meta name=Generator content="Microsoft Word 12 (filtered medium)">
<style>
<!--
 /* Font Definitions */
 @font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
 /* Style Definitions */
 p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
span.E-MailFormatvorlage17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page Section1
        {size:612.0pt 792.0pt;
        margin:70.85pt 70.85pt 2.0cm 70.85pt;}
div.Section1
        {page:Section1;}
 /* List Definitions */
 @list l0
        {mso-list-id:2076589644;
        mso-list-type:hybrid;
        mso-list-template-ids:988308562 67567617 67567619 67567621 67567617 67567619 67567621 67567617 67567619 67567621;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
-->
</style>
<!--[if gte mso 9]><xml>
 <o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
 <o:shapelayout v:ext="edit">
  <o:idmap v:ext="edit" data="1" />
 </o:shapelayout></xml><![endif]-->
</head>

<body lang=DE link=blue vlink=purple>

<div class=Section1>

<p class=MsoNormal><span lang=EN-US>Hello<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>When I started my platform development, I
drew the okl4_2.1.tar.gz tarball from <a
href="http://wiki.ok-labs.com/FrontPage?action=AttachFile">http://wiki.ok-labs.com/FrontPage?action=AttachFile</a>.
Unzipping it, for some reason, I did not get out the core specific include
files &#8216;cache.h&#8217;, &#8216;cpu.h&#8217; and &#8216;syscon.h&#8217;
located at &#8216;arch/arm/pistachio/cpu/arm926ejs/include/&#8217;. Since there
is no example platform in the tarball using the ARM926EJ-S core, I thought they
were left out intentionally, and I created my own ones by combining the XSCALE
and ARM920T variants with ARM926EJ-S variants from OKL4 1.4.9. It just did not
occur to me that the unzip went wrong.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Meanwhile a colleague also used the
mentioned tarball and put it in our SVN repository. Recently I began to integrate
my new platform code into the SVN repository and discovered the missing header file.
Comparing them with my own creation showed that I have some insignificant differences
with &#8216;cpu.h&#8217; and &#8216;syscon.h&#8217;, but a significant
difference in the referenced header files with &#8216;cache.h&#8217;.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Here the include statements of the
original:<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#include
&lt;debug.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#include
&lt;cpu/syscon.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#include
&lt;cache.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#include
&lt;plat/platform.h&gt; /* Get cache size */<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Here the include statements of my private
version:<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include
&lt;kernel/debug.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:35.4pt'><span lang=EN-US>#include
&lt;kernel/arch/asm.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:35.4pt'><span lang=EN-US>#include
&lt;kernel/cpu/syscon.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Another difference is that the original
version contains the definition <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#8216;static
const word_t CACHE_LINE_MASK = (CACHE_LINE_SIZE &#8211; 1)&#8217; <br>
which does not exist in my private version, and I do not see that CACHE_LINE_MASK
is anywhere referenced.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>My private version compiles w/o a flaw, but
the original one files for the first compiled source file (asid.cc) with the
following multiple error:<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>sam/pistachio/include/kernel/cpu/cache.h:
In static member function `static void arm_cache::cache_flush_i()':<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>sam/pistachio/include/kernel/cpu/cache.h:150:
error: expected `)' before &quot;_&quot;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>sam/pistachio/include/kernel/cpu/cache.h:148:
warning: unused variable 'zero'<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>The relevant code lines are:<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
__asm__ __volatile__ (<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
&quot;&nbsp; mcr&nbsp;&nbsp;&nbsp;&nbsp; p15, 0, &quot;_(zero)&quot;, c7, c5,
0&nbsp;&nbsp;&nbsp; ;&quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* Flush I cache */<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#if
defined(__GNUC__)<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
:: [zero] &quot;r&quot; (zero)<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#endif<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>The problem is that &#8216;_()&#8217; is a preprocessor
macro defined in &#8216;kernel/arch/asm.h&#8217; which the original file
misses.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>I made the addition to the original file by
following its include path scheme:<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#include
&lt;debug.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='text-indent:35.4pt'><span lang=EN-US>#include &lt;arch/asm.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#include
&lt;cpu/syscon.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#include
&lt;cache.h&gt;<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>#include
&lt;plat/platform.h&gt; /* Get cache size */<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Surprisingly this correction does not work.
I get most of the files of the PISTACHIO kernel compiled until it comes to the
platform specific ones. With &#8216;platform/at91/pistachio/src/interrupt.cc&#8217;
the error reappears, and additionally the compiler claims that it does not find
the header files &#8216;debug.h&#8217;, &#8216;arch/asm.h&#8217;, &#8216;cpu/syscon.h&#8217;,
&#8216;cache.h&#8217; and &#8216;plat/platform.h&#8217;, the 5 ones included by
&#8216;&#8230;/arm926ejs/include/cache.h&#8217;. Something must we wrong the
the include paths seen by the compiler, and a view in the log shows the
difference.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>When compiling, for instance &#8216;asid.cc&#8217;,
the include paths are (&#8216;sam&#8217; is the build directory):<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>-Isam/pistachio/include
<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>-Isam/pistachio/object/pistachio/include
<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>-Ipistachio/include
<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>-Iarch/arm/pistachio/v5/include<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>However, for &#8216;interrupt.cc&#8217; the
include paths are:<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>-Isam/pistachio/include
<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>-Isam/pistachio/object/pistachio/src
<o:p></o:p></span></p>

<p class=MsoNormal style='margin-left:35.4pt'><span lang=EN-US>-Ipistachio/src<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Both files share only the first include
paths of both list. Checking this location shows that &#8216;asm.h&#8217; is
found at &#8216;sam/pistachio/include/kernel/arch&#8217;. That explains why my
private version of &#8216;cache.h&#8217; finds it. But when compiling &#8216;asid.cc&#8217;
the original version finds it too, and that is thru the second include path &#8216;sam/pistachio/object/pistachio/include&#8217;
under which copy of the arch directory exists. It looks as if there is a mix-up
of include paths versus header file copies in the build directory. The question
is:<o:p></o:p></span></p>

<p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
lang=EN-US style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-US>Why are there different include paths for the pistachio kernel
source files and for the platform-dependent source files?<o:p></o:p></span></p>

<p class=MsoListParagraph style='text-indent:-18.0pt;mso-list:l0 level1 lfo1'><![if !supportLists]><span
lang=EN-US style='font-family:Symbol'><span style='mso-list:Ignore'>&middot;<span
style='font:7.0pt "Times New Roman"'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><![endif]><span
lang=EN-US>Why are there two copies of the architectural-, cpu-, kdb- and platform-specific
header files, one set in &#8216;&lt;build_dir&gt;/pistachio/include/kernel&#8217;
and one set in &#8216;&lt;build_dir&gt;/pistachio/object/pistachio/include&#8217;?<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Although the copies are created by SCONS,
it is confusing regarding the correct set-up of #include directives in the
source file. If I had to write my platform source files totally from scratch, I&#8217;d
have had a hard time with this. Actually I made a test compilation with an
existing platform to figure out how the build directory looks like after a
successful build.<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US><o:p>&nbsp;</o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Regards<o:p></o:p></span></p>

<p class=MsoNormal><span lang=EN-US>Frank<o:p></o:p></span></p>

</div>

</body>

</html>