Files

366 lines
24 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Meteor Lake Platforms &mdash; Slim Bootloader 1.0 documentation</title>
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
<link rel="stylesheet" href="../_static/graphviz.css" type="text/css" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<link rel="shortcut icon" href="../_static/sbl_logo_blue_32x32_icon.ico"/>
<!--[if lt IE 9]>
<script src="../_static/js/html5shiv.min.js"></script>
<![endif]-->
<script src="../_static/jquery.js"></script>
<script src="../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/sphinx_highlight.js"></script>
<script src="../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="QEMU Virtual Platform" href="qemu.html" />
<link rel="prev" title="McLaren Island Board" href="mtl-mcl.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../index.html" class="icon icon-home">
Slim Bootloader
<img src="../_static/sbl_logo_white_200x200.png" class="logo" alt="Logo"/>
</a>
<div class="version">
1.0
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../getting-started/index.html">Getting Started</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html">Supported Hardware</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="adl-rvp.html">Alder Lake Platforms</a></li>
<li class="toctree-l2"><a class="reference internal" href="apollo-lake-crb.html">Apollo Lake CRB Boards</a></li>
<li class="toctree-l2"><a class="reference internal" href="arl-rvp.html">Arrow Lake Platforms</a></li>
<li class="toctree-l2"><a class="reference internal" href="arlh-ari.html">Arrow Island Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="cfl-crb.html">Coffee Lake Refresh CRB Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="cml-rvp.html">Comet Lake RVP Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="ehl-crb.html">Elkhart Lake CRB Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="icdx-crb.html">Ice Lake -D CRB Boards</a></li>
<li class="toctree-l2"><a class="reference internal" href="mtl-mcl.html">McLaren Island Board</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Meteor Lake Platforms</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#supported-boards">Supported Boards</a></li>
<li class="toctree-l3"><a class="reference internal" href="#debug-uart">Debug UART</a></li>
<li class="toctree-l3"><a class="reference internal" href="#building">Building</a></li>
<li class="toctree-l3"><a class="reference internal" href="#stitching">Stitching</a></li>
<li class="toctree-l3"><a class="reference internal" href="#flashing">Flashing</a></li>
<li class="toctree-l3"><a class="reference internal" href="#capsule-image-for-mtl">Capsule image for Meteor Lake</a></li>
<li class="toctree-l3"><a class="reference internal" href="#triggering-firmware-update">Triggering Firmware Update</a></li>
<li class="toctree-l3"><a class="reference internal" href="#booting-yocto-linux">Booting Yocto Linux</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="qemu.html">QEMU Virtual Platform</a></li>
<li class="toctree-l2"><a class="reference internal" href="qsp.html">Simics® QSP Virtual Platform</a></li>
<li class="toctree-l2"><a class="reference internal" href="raptor-lake.html">Raptor Lake Platforms</a></li>
<li class="toctree-l2"><a class="reference internal" href="rplp-rki.html">Rock Island Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="tgl-rvp.html">Tiger Lake RVP Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="up2.html">UP<sup>2</sup> Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="up2-6000.html">UP<sup>2</sup> 6000 Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="up7000adln50.html">UP Squared Pro 7000 Edge Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="upxtreme.html">UP Xtreme Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="upxtremei11.html">UP Xtreme i11 Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="upxtremei12.html">UP Xtreme i12 Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="upxtremei12rplp.html">UP Xtreme i12 13th Board</a></li>
<li class="toctree-l2"><a class="reference internal" href="whl-crb.html">Whiskey Lake CRB Board</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../developer-guides/index.html">Developers Guide</a></li>
<li class="toctree-l1"><a class="reference internal" href="../security/index.html">Security Features</a></li>
<li class="toctree-l1"><a class="reference internal" href="../how-tos/index.html">How-Tos</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tools/index.html">Tools</a></li>
<li class="toctree-l1"><a class="reference internal" href="../tutorials/index.html">Tutorials</a></li>
<li class="toctree-l1"><a class="reference internal" href="../specs/index.html">Specifications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../references/references.html">References and Links</a></li>
<li class="toctree-l1"><a class="reference internal" href="../references/terminology.html">Terminology and Acronyms</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../index.html">Slim Bootloader</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="index.html">Supported Hardware</a></li>
<li class="breadcrumb-item active">Meteor Lake Platforms</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="meteor-lake-platforms">
<h1>Meteor Lake Platforms<a class="headerlink" href="#meteor-lake-platforms" title="Permalink to this heading"></a></h1>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>14th Generation Intel® Core™ Processor, formally known as Meteor Lake family.</p>
</div>
<section id="supported-boards">
<h2>Supported Boards<a class="headerlink" href="#supported-boards" title="Permalink to this heading"></a></h2>
<p>SBL supports various platforms corresponding to Meteor Lake-P and Meteor Lake-PS.</p>
<p>Each Meteor Lake board is assigned with a unique platform ID.</p>
<blockquote>
<div><table class="docutils align-default">
<tbody>
<tr class="row-odd"><td><p>Board</p></td>
<td><p>Platform ID</p></td>
<td><p>SPI Programmer</p></td>
<td><p>UART</p></td>
<td><p>PLAT</p></td>
</tr>
<tr class="row-even"><td><p>MTL-P DDR5 RVP</p></td>
<td><p>0x0012</p></td>
<td><p>J1G2</p></td>
<td><p>J9B2</p></td>
<td><p>mtlp</p></td>
</tr>
<tr class="row-odd"><td><p>MTL-P DDR5 CRB</p></td>
<td><p>0x0013</p></td>
<td><p>J1C1</p></td>
<td><p>J1</p></td>
<td><p>mtlp</p></td>
</tr>
<tr class="row-even"><td><p>MTL-P LPDDR5</p></td>
<td><p>0x0010</p></td>
<td><p>J1G2</p></td>
<td><p>J9B2</p></td>
<td><p>mtlp</p></td>
</tr>
<tr class="row-odd"><td><p>MTL-PS DDR5 RVP</p></td>
<td><p>0x000B</p></td>
<td><p>J1C1</p></td>
<td><p>J9W1</p></td>
<td><p>mtlps</p></td>
</tr>
<tr class="row-even"><td><p>MTL-PS DDR5 CRB</p></td>
<td><p>0x000D</p></td>
<td><p>J2B1</p></td>
<td><p>J9V1</p></td>
<td><p>mtlps</p></td>
</tr>
</tbody>
</table>
</div></blockquote>
</section>
<section id="debug-uart">
<h2>Debug UART<a class="headerlink" href="#debug-uart" title="Permalink to this heading"></a></h2>
<p>For Meteor Lake platforms, serial port connector location can be found from the above table for each supported target board.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Configure host PuTTY or minicom to 115200bps, 8N1, no hardware flow control.</p>
</div>
</section>
<section id="building">
<h2>Building<a class="headerlink" href="#building" title="Permalink to this heading"></a></h2>
<p>To build SBL for any Meteor Lake platform:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">BuildLoader</span><span class="o">.</span><span class="n">py</span> <span class="n">build</span> <span class="o">&lt;</span><span class="n">PLAT</span><span class="o">&gt;</span>
<span class="o">&lt;</span><span class="n">PLAT</span><span class="o">&gt;</span> <span class="o">=</span> <span class="n">mtl</span>
</pre></div>
</div>
<p>Note: Only one SBL image can support for all sku (eg. mtlp and mtlps)
The output images are generated under <code class="docutils literal notranslate"><span class="pre">Outputs</span></code> directory.</p>
</section>
<section id="stitching">
<h2>Stitching<a class="headerlink" href="#stitching" title="Permalink to this heading"></a></h2>
<ol class="arabic simple">
<li><p>Gather Meteor Lake IFWI firmware image</p></li>
</ol>
<blockquote>
<div><p>Users can either download the full IFWI image if the IFWI image release is available or read the existing IFWI image on the board using SPI programmer.
This image contains additional firmware ingredients that are required boot on Meteor Lake.</p>
</div></blockquote>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p><code class="docutils literal notranslate"><span class="pre">StitchLoader.py</span></code> currently does not support stitching with boot guard feature <strong>enabled</strong>.
To stitch with Boot Guard enabled, please use <code class="docutils literal notranslate"><span class="pre">StitchIfwi.py</span></code>.</p>
</div>
<ol class="arabic" start="2">
<li><p>Stitch SBL images into downloaded BIOS image:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">Platform</span><span class="o">/</span><span class="n">MeteorlakeBoardPkg</span><span class="o">/</span><span class="n">Script</span><span class="o">/</span><span class="n">StitchLoader</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">i</span> <span class="o">&lt;</span><span class="n">BIOS_IMAGE_NAME</span><span class="o">&gt;</span> <span class="o">-</span><span class="n">s</span> <span class="n">Outputs</span><span class="o">/&lt;</span><span class="n">plat</span><span class="o">&gt;/</span><span class="n">SlimBootloader</span><span class="o">.</span><span class="n">bin</span> <span class="o">-</span><span class="n">o</span> <span class="o">&lt;</span><span class="n">SBL_IFWI_IMAGE_NAME</span><span class="o">&gt;</span>
</pre></div>
</div>
</li>
</ol>
<blockquote>
<div><p>where -i = Input file, -o = Output file, plat = mtl</p>
</div></blockquote>
<p>For example, to stitch SBL IFWI image <code class="docutils literal notranslate"><span class="pre">sbl_mtl_ifwi.bin</span></code> from MTL-P downloaded firmware images:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">Platform</span><span class="o">/</span><span class="n">MeteorlakeBoardPkg</span><span class="o">/</span><span class="n">Script</span><span class="o">/</span><span class="n">StitchLoader</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">i</span> <span class="n">xxxx</span><span class="o">.</span><span class="n">bin</span> <span class="o">-</span><span class="n">s</span> <span class="n">Outputs</span><span class="o">/</span><span class="n">mtl</span><span class="o">/</span><span class="n">SlimBootloader</span><span class="o">.</span><span class="n">bin</span> <span class="o">-</span><span class="n">o</span> <span class="n">sbl_mtlp_ifwi</span><span class="o">.</span><span class="n">bin</span>
</pre></div>
</div>
<p>For more details on stitch tool, see <a class="reference internal" href="../tools/StitchTool.html#stitch-tool"><span class="std std-ref">Stitch Tool</span></a> on how to stitch the IFWI image with SBL.</p>
</section>
<section id="flashing">
<h2>Flashing<a class="headerlink" href="#flashing" title="Permalink to this heading"></a></h2>
<p>Flash the generated <code class="docutils literal notranslate"><span class="pre">sbl_mtl_ifwi.bin</span></code> to the target board using a DediProg SF100 or SF600 programmer.</p>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>Refer the table above to identify the connector on the target board for SPI flash programmer. When using such device, please ensure:</p>
<ol class="arabic simple">
<li><p>The alignment/polarity when connecting Dediprog to the board.</p></li>
<li><p>The power to the board is turned <strong>off</strong> while the programmer is connected (even when not in use).</p></li>
<li><p>The programmer is set to update the flash from offset 0x0.</p></li>
</ol>
</div>
</section>
<section id="capsule-image-for-mtl">
<h2>Capsule image for Meteor Lake<a class="headerlink" href="#capsule-image-for-mtl" title="Permalink to this heading"></a></h2>
<p>The Slimbootloader.bin image generated from the build steps above can be used to create a capsule image.
Please refer to <a class="reference internal" href="../tools/BuildTool.html#build-tool"><span class="std std-ref">Build Tool</span></a> on generating SBL image.</p>
<p>For all Meteor Lake platforms, the below command can be used:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="o">./</span><span class="n">BootloaderCorePkg</span><span class="o">/</span><span class="n">Tools</span><span class="o">/</span><span class="n">GenCapsuleFirmware</span><span class="o">.</span><span class="n">py</span> <span class="o">-</span><span class="n">p</span> <span class="n">BIOS</span> <span class="n">Outputs</span><span class="o">/&lt;</span><span class="n">plat</span><span class="o">&gt;/</span><span class="n">SlimBootloader</span><span class="o">.</span><span class="n">bin</span> <span class="o">-</span><span class="n">k</span> <span class="o">&lt;</span><span class="n">Keys</span><span class="o">&gt;</span> <span class="o">-</span><span class="n">o</span> <span class="n">FwuImage</span><span class="o">.</span><span class="n">bin</span>
</pre></div>
</div>
<p>For more details on generating capsule image, please refer <a class="reference internal" href="../security/firmware-update.html#generate-capsule"><span class="std std-ref">Generating capsule</span></a>.</p>
</section>
<section id="triggering-firmware-update">
<h2>Triggering Firmware Update<a class="headerlink" href="#triggering-firmware-update" title="Permalink to this heading"></a></h2>
<p>SBL for Meteor Lake uses BIT16 of PMC I/O register (Over-Clocking WDT Control (OC_WDT_CTL) - Offset 54h) to trigger firmware update. When BIT16 is set, SBL will set the boot mode to FLASH_UPDATE.
Please refer to <a class="reference internal" href="../security/firmware-update.html#firmware-update"><span class="std std-ref">Firmware Update</span></a> on how to trigger firmware update flow.
Below is an example:</p>
<p>To trigger firmware update in SBL shell:</p>
<ol class="arabic">
<li><p>Copy <code class="docutils literal notranslate"><span class="pre">FwuImage.bin</span></code> into root directory on FAT partition of a USB key</p></li>
<li><p>Boot and press any key to enter SBL shell</p></li>
<li><p>Type command <code class="docutils literal notranslate"><span class="pre">fwupdate</span></code> from shell</p>
<p>SBL will reset the platform and initiate firmware update flow. The platform will reset <em>multiple</em> times to complete the update process.</p>
<p>A sample boot messages from console:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Shell</span><span class="o">&gt;</span> <span class="n">fwupdate</span>
<span class="o">...</span>
<span class="o">=============</span> <span class="n">Intel</span> <span class="n">Slim</span> <span class="n">Bootloader</span> <span class="n">STAGE1A</span> <span class="o">=============</span>
<span class="o">...</span>
<span class="o">=============</span> <span class="n">Intel</span> <span class="n">Slim</span> <span class="n">Bootloader</span> <span class="n">STAGE1B</span> <span class="o">=============</span>
<span class="o">...</span>
<span class="n">BOOT</span><span class="p">:</span> <span class="n">BP0</span>
<span class="n">MODE</span><span class="p">:</span> <span class="mi">18</span>
<span class="o">...</span>
<span class="o">=============</span> <span class="n">Intel</span> <span class="n">Slim</span> <span class="n">Bootloader</span> <span class="n">STAGE2</span> <span class="o">=============</span>
<span class="o">...</span>
<span class="n">Jump</span> <span class="n">to</span> <span class="n">payload</span>
<span class="o">...</span>
<span class="n">Starting</span> <span class="n">Firmware</span> <span class="n">Update</span>
<span class="o">...</span>
<span class="o">=================</span><span class="n">Read</span> <span class="n">Capsule</span> <span class="n">Image</span><span class="o">==============</span>
<span class="o">...</span>
<span class="o">................</span>
<span class="n">Finished</span> <span class="mi">1</span><span class="o">%</span>
<span class="o">...</span>
<span class="n">Finished</span> <span class="mi">99</span><span class="o">%</span>
<span class="o">...</span>
<span class="o">...</span>
<span class="n">Reset</span> <span class="n">required</span> <span class="n">to</span> <span class="n">proceed</span> <span class="k">with</span> <span class="n">the</span> <span class="n">firmware</span> <span class="n">update</span><span class="o">.</span>
<span class="o">=============</span> <span class="n">Intel</span> <span class="n">Slim</span> <span class="n">Bootloader</span> <span class="n">STAGE1A</span> <span class="o">=============</span>
<span class="o">...</span>
<span class="o">=============</span> <span class="n">Intel</span> <span class="n">Slim</span> <span class="n">Bootloader</span> <span class="n">STAGE1B</span> <span class="o">=============</span>
<span class="o">...</span>
<span class="n">BOOT</span><span class="p">:</span> <span class="n">BP1</span>
<span class="n">MODE</span><span class="p">:</span> <span class="mi">18</span>
<span class="o">...</span>
<span class="o">=============</span> <span class="n">Intel</span> <span class="n">Slim</span> <span class="n">Bootloader</span> <span class="n">STAGE2</span> <span class="o">=============</span>
<span class="o">...</span>
<span class="o">=================</span><span class="n">Read</span> <span class="n">Capsule</span> <span class="n">Image</span><span class="o">==============</span>
<span class="o">...</span>
<span class="o">................</span>
<span class="n">Finished</span> <span class="mi">1</span><span class="o">%</span>
<span class="o">...</span>
<span class="n">Finished</span> <span class="mi">99</span><span class="o">%</span>
<span class="n">Updating</span> <span class="mh">0x002B1000</span><span class="p">,</span> <span class="n">Size</span><span class="p">:</span><span class="mh">0x0A000</span>
<span class="o">...............</span>
<span class="n">Finished</span> <span class="mi">100</span><span class="o">%</span>
<span class="n">Set</span> <span class="nb">next</span> <span class="n">FWU</span> <span class="n">state</span><span class="p">:</span> <span class="mh">0x7C</span>
<span class="n">Firmware</span> <span class="n">Update</span> <span class="n">status</span> <span class="n">updated</span> <span class="n">to</span> <span class="n">reserved</span> <span class="n">region</span>
<span class="n">Set</span> <span class="nb">next</span> <span class="n">FWU</span> <span class="n">state</span><span class="p">:</span> <span class="mh">0x77</span>
<span class="n">Reset</span> <span class="n">required</span> <span class="n">to</span> <span class="n">proceed</span> <span class="k">with</span> <span class="n">the</span> <span class="n">firmware</span> <span class="n">update</span><span class="o">.</span>
<span class="o">...</span>
<span class="o">====================</span> <span class="n">OS</span> <span class="n">Loader</span> <span class="o">====================</span>
<span class="n">Starting</span> <span class="n">Kernel</span> <span class="o">...</span>
</pre></div>
</div>
</li>
</ol>
</section>
<section id="booting-yocto-linux">
<h2>Booting Yocto Linux<a class="headerlink" href="#booting-yocto-linux" title="Permalink to this heading"></a></h2>
<p>You may need to change boot options to boot from USB. See <a class="reference internal" href="../how-tos/change-boot-option.html#change-boot-options"><span class="std std-ref">Change Boot Options</span></a>.</p>
<ol class="arabic simple">
<li><p>Download Yocto Linux</p></li>
<li><p>Create bootable USB key. For example: In Windows, Rufus can be used. In Linux, etcher app can be used.</p></li>
<li><p>Boot the bootable OS image from USB key on the board.</p></li>
</ol>
<p>See <a class="reference internal" href="../developer-guides/configuration.html#dynamic-platform-id"><span class="std std-ref">Platform ID Detection using GPIOs</span></a> for more details.</p>
<p>To customize board configurations in <code class="docutils literal notranslate"><span class="pre">*.dlt</span></code> file, make sure to specify <code class="docutils literal notranslate"><span class="pre">PlatformId</span></code> to the corresponding values for the board.</p>
<p>See <a class="reference internal" href="../tools/ConfigTools.html#configuration-tool"><span class="std std-ref">Configuration Tools</span></a> for more details.</p>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="mtl-mcl.html" class="btn btn-neutral float-left" title="McLaren Island Board" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="qemu.html" class="btn btn-neutral float-right" title="QEMU Virtual Platform" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2018 - 2025, Intel Corporation.
<span class="lastupdated">Last updated on Jun 27, 2025.
</span></p>
</div>
Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a
<a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a>
provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>