aboutsummaryrefslogtreecommitdiff
path: root/doc/opal-api/opal-flash-110-111-112.html
blob: 2dbe13f7177e7a9f8ca0599eeef2df5f1e8ae449 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>OPAL Flash calls &#8212; skiboot 5133e1e
 documentation</title>
    <link rel="stylesheet" href="../_static/classic.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    
    <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/underscore.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <script type="text/javascript" src="../_static/language_data.js"></script>
    
    <link rel="index" title="Index" href="../genindex.html" />
    <link rel="search" title="Search" href="../search.html" />
    <link rel="next" title="OPAL_GET_DEVICE_TREE" href="opal-get-device-tree-118.html" />
    <link rel="prev" title="OPAL_ELOG: Error logging" href="opal-elog-71-72-73-74-75.html" /> 
  </head><body>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="opal-get-device-tree-118.html" title="OPAL_GET_DEVICE_TREE"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="opal-elog-71-72-73-74-75.html" title="OPAL_ELOG: Error logging"
             accesskey="P">previous</a> |</li>
        <li class="nav-item nav-item-0"><a href="../index.html">skiboot 5133e1e
 documentation</a> &#187;</li>
          <li class="nav-item nav-item-1"><a href="index.html" accesskey="U">OPAL API Documentation</a> &#187;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body" role="main">
            
  <div class="section" id="opal-flash-calls">
<h1>OPAL Flash calls<a class="headerlink" href="#opal-flash-calls" title="Permalink to this headline"></a></h1>
<p>There are three OPAL calls for interacting with flash devices:</p>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_FLASH_READ        110</span>
<span class="cp">#define OPAL_FLASH_WRITE       111</span>
<span class="cp">#define OPAL_FLASH_ERASE       112</span>
</pre></div>
</div>
<p>Multiple flash devices are supported by OPAL - each of these calls takes an id
parameter, which must match an ID found in the corresponding <code class="docutils literal notranslate"><span class="pre">ibm,opal/flash&#64;n</span></code>
device tree node. See <a class="reference internal" href="../device-tree/ibm,opal/flash.html#device-tree-ibm-opal-flash"><span class="std std-ref">ibm,opal/flash device tree entries</span></a> for details of
the device tree bindings.</p>
<p>All operations on the flash device must be aligned to the block size of the
flash. This applies to both offset and size arguments.</p>
<p>This interface is asynchronous; all calls require a ‘token’ argument. On
success, the calls will return <a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a>, and an
opal_async_completion message will be sent (with the appropriate token
argument) when the operation completes.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last">These calls can have higher than normal latency, spending many
<strong>milliseconds</strong> inside OPAL. This is due to the OPAL_FLASH_* calls
typically being backed by flash on the other side of the LPC bus,
which has a maximum transfer rate of 5MB/sec, or to/from flash attached
to the ast2400/ast2500 (the typical setup for OpenPOWER systems) of
only 1.75MB/sec.</p>
</div>
<p>All calls share the same return values:</p>
<dl class="docutils">
<dt><a class="reference internal" href="return-codes.html#opal-async-completion"><span class="std std-ref">OPAL_ASYNC_COMPLETION</span></a></dt>
<dd>operation started, an async completion will be triggered with the <code class="docutils literal notranslate"><span class="pre">token</span></code> argument</dd>
<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
<dd>invalid flash id</dd>
<dt><a class="reference internal" href="return-codes.html#opal-parameter"><span class="std std-ref">OPAL_PARAMETER</span></a></dt>
<dd>invalid size or offset (alignment, or access beyond end of device)</dd>
<dt><a class="reference internal" href="return-codes.html#opal-busy"><span class="std std-ref">OPAL_BUSY</span></a></dt>
<dd>flash in use</dd>
<dt><a class="reference internal" href="return-codes.html#opal-hardware"><span class="std std-ref">OPAL_HARDWARE</span></a></dt>
<dd>error accessing flash device</dd>
</dl>
<div class="section" id="opal-flash-read">
<span id="id1"></span><h2>OPAL_FLASH_READ<a class="headerlink" href="#opal-flash-read" title="Permalink to this headline"></a></h2>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_FLASH_READ     110</span>

<span class="kt">int64_t</span> <span class="nf">opal_flash_read</span><span class="p">(</span><span class="kt">uint64_t</span> <span class="n">id</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">offset</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">buf</span><span class="p">,</span>
                        <span class="kt">uint64_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">token</span><span class="p">);</span>
</pre></div>
</div>
<p>Reads from the specified flash id, at the specified offset, into the buffer.
Will trigger an async completion with token when completed.</p>
</div>
<div class="section" id="opal-flash-erase">
<span id="id2"></span><h2>OPAL_FLASH_ERASE<a class="headerlink" href="#opal-flash-erase" title="Permalink to this headline"></a></h2>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_FLASH_ERASE     112</span>

<span class="kt">int64_t</span> <span class="nf">opal_flash_erase</span><span class="p">(</span><span class="kt">uint64_t</span> <span class="n">id</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">offset</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">size</span><span class="p">,</span>
                         <span class="kt">uint64_t</span> <span class="n">token</span><span class="p">);</span>
</pre></div>
</div>
<p>Erases the specified flash id, at the specified offset and size.  Will trigger
an async completion with token when completed.</p>
</div>
<div class="section" id="opal-flash-write">
<span id="id3"></span><h2>OPAL_FLASH_WRITE<a class="headerlink" href="#opal-flash-write" title="Permalink to this headline"></a></h2>
<div class="highlight-c notranslate"><div class="highlight"><pre><span></span><span class="cp">#define OPAL_FLASH_WRITE     111</span>

<span class="kt">int64_t</span> <span class="nf">opal_flash_write</span><span class="p">(</span><span class="kt">uint64_t</span> <span class="n">id</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">offset</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">buf</span><span class="p">,</span>
                         <span class="kt">uint64_t</span> <span class="n">size</span><span class="p">,</span> <span class="kt">uint64_t</span> <span class="n">token</span><span class="p">);</span>
</pre></div>
</div>
<p>Writes buffer to the specified flash id, at the specified offset and size. The
flash must be erased before being written. Will trigger an async completion with
token when completed.</p>
</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
        <div class="sphinxsidebarwrapper">
  <h3><a href="../index.html">Table of Contents</a></h3>
  <ul>
<li><a class="reference internal" href="#">OPAL Flash calls</a><ul>
<li><a class="reference internal" href="#opal-flash-read">OPAL_FLASH_READ</a></li>
<li><a class="reference internal" href="#opal-flash-erase">OPAL_FLASH_ERASE</a></li>
<li><a class="reference internal" href="#opal-flash-write">OPAL_FLASH_WRITE</a></li>
</ul>
</li>
</ul>

  <h4>Previous topic</h4>
  <p class="topless"><a href="opal-elog-71-72-73-74-75.html"
                        title="previous chapter">OPAL_ELOG: Error logging</a></p>
  <h4>Next topic</h4>
  <p class="topless"><a href="opal-get-device-tree-118.html"
                        title="next chapter">OPAL_GET_DEVICE_TREE</a></p>
  <div role="note" aria-label="source link">
    <h3>This Page</h3>
    <ul class="this-page-menu">
      <li><a href="../_sources/opal-api/opal-flash-110-111-112.rst.txt"
            rel="nofollow">Show Source</a></li>
    </ul>
   </div>
<div id="searchbox" style="display: none" role="search">
  <h3>Quick search</h3>
    <div class="searchformwrapper">
    <form class="search" action="../search.html" method="get">
      <input type="text" name="q" />
      <input type="submit" value="Go" />
      <input type="hidden" name="check_keywords" value="yes" />
      <input type="hidden" name="area" value="default" />
    </form>
    </div>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related" role="navigation" aria-label="related navigation">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="opal-get-device-tree-118.html" title="OPAL_GET_DEVICE_TREE"
             >next</a> |</li>
        <li class="right" >
          <a href="opal-elog-71-72-73-74-75.html" title="OPAL_ELOG: Error logging"
             >previous</a> |</li>
        <li class="nav-item nav-item-0"><a href="../index.html">skiboot 5133e1e
 documentation</a> &#187;</li>
          <li class="nav-item nav-item-1"><a href="index.html" >OPAL API Documentation</a> &#187;</li> 
      </ul>
    </div>
    <div class="footer" role="contentinfo">
        &#169; Copyright 2016-2017, IBM, others.
      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.8.5.
    </div>
  </body>
</html>