---
updatedAt: 2026-09-17T11:17:33.000Z
agentTools:
  projectIndex: https://docs.sixfab.com/llms.txt
---

# System Monitoring

A command reference for monitoring the DEEPX NPU across Sixfab AI HAT+, Edge AI Expansion Board, and ALPON X5 AI, covering real-time utilization with dxtop, hardware status with dxrt-cli, and kernel-level diagnostics.

<HTMLBlock>{`


<style>
/* ═══════════════════════════════════════════════════════════════════════════
   1) FONTS — Gilroy + JetBrains Mono (DESIGN.md dual pairing)
═══════════════════════════════════════════════════════════════════════════ */
@font-face{font-family:'Gilroy';src:url('https://sixfab.com/wp-content/fonts/Gilroy-Regular.woff2')   format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:'Gilroy';src:url('https://sixfab.com/wp-content/fonts/Gilroy-Medium.woff2')    format('woff2');font-weight:500;font-display:swap}
@font-face{font-family:'Gilroy';src:url('https://sixfab.com/wp-content/fonts/Gilroy-SemiBold.woff2')  format('woff2');font-weight:600;font-display:swap}
@font-face{font-family:'Gilroy';src:url('https://sixfab.com/wp-content/fonts/Gilroy-Bold.woff2')      format('woff2');font-weight:700;font-display:swap}
@font-face{font-family:'Gilroy';src:url('https://sixfab.com/wp-content/fonts/Gilroy-ExtraBold.woff2') format('woff2');font-weight:800;font-display:swap}
@font-face{font-family:'JetBrains Mono';src:url('https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono@2.304/fonts/webfonts/JetBrainsMono-Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:'JetBrains Mono';src:url('https://cdn.jsdelivr.net/gh/JetBrains/JetBrainsMono@2.304/fonts/webfonts/JetBrainsMono-Medium.woff2') format('woff2');font-weight:500;font-style:normal;font-display:swap}

/* ═══════════════════════════════════════════════════════════════════════════
   2) DESIGN TOKENS — DESIGN.md 6-tier system, scoped to .sf-doc
═══════════════════════════════════════════════════════════════════════════ */
.sf-doc {
  /* Tier 1 — Core Brand */
  --primary:       #034860;
  --secondary:     #00E0B8;
  --tertiary:      #1B2D45;
  --neutral:       #E8F5F0;

  /* Tier 2 — Neutral & Interface */
  --white:         #FFFFFF;
  --light:         #F6F8F9;
  --line:          #DDE6EC;
  --slate-light:   #94A8B5;
  --slate:         #52667A;
  --deep-ink:      #10202E;

  /* Tier 3 — AI / Product Accent */
  --ai-iris:       #6B47F0;
  --ai-iris-hover: #5638E0;
  --ai-mist:       #F0EDFF;

  /* Tier 5 — Semantic */
  --success:       #00B894;
  --warning:       #F59E0B;
  --danger:        #DC2626;
  --info:          #429CBF;
  --success-text:  #047857;
  --warning-text:  #92400E;
  --danger-text:   #B91C1C;
  --info-text:     #0E4A66;
  --success-bg:    #E0F5EE;
  --warning-bg:    #FDF1DC;
  --danger-bg:     #FBE5E5;
  --info-bg:       #DCEFF7;

  /* On-color */
  --on-primary:    #FFFFFF;
  --on-secondary:  #1B2D45;
  --on-neutral:    #10202E;

  /* Spacing (DESIGN.md 4px base, 8-step scale) */
  --xs: 4px; --sm: 8px; --md: 16px; --lg: 24px; --xl: 32px;
  --2xl: 48px; --3xl: 64px; --4xl: 96px;

  /* Radii */
  --r-sm: 4px; --r-md: 6px; --r-lg: 8px; --r-xl: 12px; --r-2xl: 16px; --r-full: 9999px;

  /* Shadows */
  --shadow-sm: 0 1px 2px rgba(10,23,33,.04);
  --shadow-md: 0 4px 12px rgba(10,23,33,.06);
  --shadow-lg: 0 8px 24px rgba(10,23,33,.08);

  /* Typography stacks */
  --font-sans: 'Gilroy', 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
  --font-mono: 'JetBrains Mono', 'SF Mono', Menlo, Consolas, monospace;

  /* Wrapper base */
  font-family: var(--font-sans);
  font-size: 1rem;
  line-height: 1.6;
  color: var(--deep-ink);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  padding: 0 0 80px;
  width: 100%;
  max-width: none;
}
.sf-doc *, .sf-doc *::before, .sf-doc *::after { box-sizing: border-box; }

/* ═══════════════════════════════════════════════════════════════════════════
   3) DARK MODE — token overrides (derived per design language §3.5)
═══════════════════════════════════════════════════════════════════════════ */
[data-color-mode="dark"] .sf-doc {
  --primary:       #034860;
  --secondary:     #00E0B8;
  --tertiary:      #1B2D45;
  --neutral:       #E8F5F0;
  --white:         #FFFFFF;
  --light:         #14222F;
  --line:          #2A3A4D;
  --slate-light:   #94A8B5;
  --slate:         #B5C3CE;
  --deep-ink:      #E8F5F0;
  --success-bg:    #052E1B;
  --warning-bg:    #2A1F05;
  --danger-bg:     #2A0E0E;
  --info-bg:       #0A2E3F;
  --success-text:  #34D399;
  --warning-text:  #FBBF24;
  --danger-text:   #F87171;
  --info-text:     #5CD3EE;
  --ai-mist:       #1F1838;
  --shadow-sm:     0 1px 2px rgba(0,0,0,.30);
  --shadow-md:     0 4px 12px rgba(0,0,0,.40);
}
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc {
    --primary:       #034860;
    --secondary:     #00E0B8;
    --tertiary:      #1B2D45;
    --neutral:       #E8F5F0;
    --white:         #FFFFFF;
    --light:         #14222F;
    --line:          #2A3A4D;
    --slate-light:   #94A8B5;
    --slate:         #B5C3CE;
    --deep-ink:      #E8F5F0;
    --success-bg:    #052E1B;
    --warning-bg:    #2A1F05;
    --danger-bg:     #2A0E0E;
    --info-bg:       #0A2E3F;
    --success-text:  #34D399;
    --warning-text:  #FBBF24;
    --danger-text:   #F87171;
    --info-text:     #5CD3EE;
    --ai-mist:       #1F1838;
    --shadow-sm:     0 1px 2px rgba(0,0,0,.30);
    --shadow-md:     0 4px 12px rgba(0,0,0,.40);
  }
}

/* ═══════════════════════════════════════════════════════════════════════════
   4) BASE TYPOGRAPHY — DESIGN.md canonical scale
═══════════════════════════════════════════════════════════════════════════ */
.sf-doc h1 {
  font-family: var(--font-sans);
  font-size: 3rem; font-weight: 800; letter-spacing: -0.03em;
  line-height: 1.08; color: var(--deep-ink);
  margin: 0 0 var(--md);
}
.sf-doc h2 {
  font-family: var(--font-sans);
  font-size: 2.25rem; font-weight: 700; letter-spacing: -0.025em;
  line-height: 1.15; color: var(--primary);
  margin: var(--3xl) 0 var(--md);
  padding: 0; border: 0;
}
.sf-doc h2:first-of-type { margin-top: 0; }
.sf-doc h2 { scroll-margin-top: 24px; }
[data-color-mode="dark"] .sf-doc h2 { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc h2 { color: var(--secondary); }
}
.sf-doc .sf-h2--compact,
.sf-doc h3.sf-h2--compact {
  font-size: 1.5rem; letter-spacing: -0.02em; line-height: 1.2;
  margin-top: var(--2xl); padding-bottom: var(--sm);
  border-bottom: 1px solid var(--line);
  color: var(--deep-ink);
}
.sf-doc h3 {
  font-family: var(--font-sans);
  font-size: 1.5rem; font-weight: 700; letter-spacing: -0.02em;
  line-height: 1.2; color: var(--deep-ink);
  margin: var(--xl) 0 var(--md);
}
.sf-doc h4 {
  font-family: var(--font-sans);
  font-size: 1.125rem; font-weight: 600; letter-spacing: -0.015em;
  line-height: 1.3; color: var(--deep-ink);
  margin: var(--lg) 0 var(--sm);
}
.sf-doc p {
  font-size: 1rem; font-weight: 400; line-height: 1.6;
  letter-spacing: -0.005em;
  color: var(--deep-ink); margin: 0 0 var(--md);
}
.sf-doc p:last-child { margin-bottom: 0; }
.sf-doc .sf-lead {
  font-size: 1.125rem; font-weight: 400; line-height: 1.6;
  color: var(--deep-ink); margin: 0 0 var(--lg);
}

.sf-doc a { color: var(--primary); text-decoration: none; }
.sf-doc a:hover { text-decoration: underline; }
[data-color-mode="dark"] .sf-doc a { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc a { color: var(--secondary); }
}

.sf-doc ul, .sf-doc ol { padding-left: 22px; margin: 0 0 var(--md); }
.sf-doc li { margin-bottom: 6px; }
.sf-doc li::marker { color: var(--primary); }
[data-color-mode="dark"] .sf-doc li::marker { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc li::marker { color: var(--secondary); }
}

.sf-doc code {
  font-family: var(--font-mono); font-size: 0.875em; font-weight: 400;
  background: var(--light); color: var(--primary);
  padding: 2px 6px; border-radius: var(--r-sm);
  border: 1px solid var(--line); white-space: nowrap;
}
[data-color-mode="dark"] .sf-doc code { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc code { color: var(--secondary); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   5) EYEBROW
═══════════════════════════════════════════════════════════════════════════ */
.sf-eyebrow {
  font-family: var(--font-mono);
  font-size: 0.6875rem; font-weight: 500;
  line-height: 1; letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--primary); display: block; margin-bottom: 12px;
}
[data-color-mode="dark"] .sf-doc .sf-eyebrow { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-eyebrow { color: var(--secondary); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   6) ICON HELPER
═══════════════════════════════════════════════════════════════════════════ */
.sf-icon {
  display: inline-flex; align-items: center; justify-content: center;
  flex-shrink: 0; vertical-align: middle; fill: currentColor; overflow: visible;
}

/* ═══════════════════════════════════════════════════════════════════════════
   7) HERO — sf-hero (compact, default Tier 1)
═══════════════════════════════════════════════════════════════════════════ */
.sf-hero {
  padding: var(--xl);
  margin: 0 0 24px;
  background: var(--light);
  border: 1px solid var(--line);
  border-radius: var(--r-2xl);
}
.sf-hero__copy { min-width: 0; }
.sf-doc .sf-hero p.sf-hero__title,
.sf-doc .sf-hero .sf-hero__title {
  font-family: var(--font-sans);
  font-size: 2.5rem; font-weight: 800; line-height: 1.08; letter-spacing: -0.03em;
  color: var(--deep-ink); margin: 0 0 14px;
}
.sf-doc .sf-hero p.sf-hero__lead,
.sf-doc .sf-hero .sf-hero__lead {
  font-size: 1.0625rem; line-height: 1.6;
  color: var(--deep-ink); margin: 0 0 18px;
}
.sf-hero__chips { display: flex; flex-wrap: wrap; gap: 6px; }

/* ═══════════════════════════════════════════════════════════════════════════
   8) META BAR
═══════════════════════════════════════════════════════════════════════════ */
.sf-meta {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: var(--sm);
  font-family: var(--font-mono);
  font-size: 0.75rem; color: var(--slate);
  margin: 0 0 var(--lg);
}
.sf-meta__badge {
  font-family: var(--font-sans);
  font-weight: 700; font-size: 0.75rem;
  padding: 3px 8px; border-radius: var(--r-sm);
  background: var(--light); color: var(--primary);
  border: 1px solid var(--line);
}
.sf-meta__badge--mint {
  background: var(--neutral); color: var(--primary); border-color: var(--neutral);
}
.sf-meta__sep { color: var(--line); }

/* ═══════════════════════════════════════════════════════════════════════════
   9) AEO — sf-aeo--ai (Tier 3 AI Iris)
═══════════════════════════════════════════════════════════════════════════ */
.sf-aeo {
  position: relative;
  background: var(--light);
  border: 1px solid var(--line);
  border-left: 4px solid var(--primary);
  border-radius: var(--r-md);
  padding: var(--lg) var(--xl);
  margin: 0 0 var(--xl);
}
.sf-aeo--ai {
  background: var(--ai-mist);
  border-color: rgba(107,71,240,0.20);
  border-left-color: var(--ai-iris);
}
.sf-aeo__label {
  display: block;
  font-family: var(--font-sans);
  font-size: 1.375rem; font-weight: 700;
  line-height: 1.25; letter-spacing: -0.015em;
  text-transform: none;
  color: var(--primary);
  margin: 0 0 var(--sm);
}
.sf-aeo--ai .sf-aeo__label { color: var(--ai-iris); }
.sf-aeo__text { font-size: 1rem; line-height: 1.6; color: var(--deep-ink); margin: 0; }
.sf-aeo__text strong { color: var(--primary); font-weight: 600; }
.sf-aeo--ai .sf-aeo__text strong { color: var(--ai-iris); }

/* ═══════════════════════════════════════════════════════════════════════════
   10) TOC — sf-toc default Tier 1
═══════════════════════════════════════════════════════════════════════════ */
.sf-toc {
  display: flex; align-items: center; flex-wrap: wrap;
  gap: 6px;
  padding: var(--md) var(--lg);
  background: var(--light);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  margin: 0 0 var(--xl);
}
.sf-toc__label {
  font-family: var(--font-mono);
  font-size: 0.6875rem; font-weight: 500;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--slate);
  margin-right: var(--sm);
}
.sf-toc__item {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 6px 12px;
  background: var(--white); border: 1px solid var(--line);
  border-radius: var(--r-sm);
  font-size: 0.8125rem; font-weight: 600;
  color: var(--deep-ink);
  text-decoration: none !important;
  transition: border-color .15s, box-shadow .15s; white-space: nowrap;
}
.sf-doc .sf-toc .sf-toc__item:hover,
.sf-doc .sf-toc .sf-toc__item:focus {
  background: var(--primary);
  color: var(--white) !important;
  border-color: var(--primary);
  text-decoration: none !important;
}
.sf-doc .sf-toc .sf-toc__item:hover .sf-toc__num,
.sf-doc .sf-toc .sf-toc__item:focus .sf-toc__num {
  color: var(--secondary);
}
.sf-toc__num {
  font-family: var(--font-mono);
  font-size: 0.6875rem; font-weight: 500; color: var(--slate);
}

/* ═══════════════════════════════════════════════════════════════════════════
   11) PILL / BADGE
═══════════════════════════════════════════════════════════════════════════ */
.sf-pill {
  display: inline-flex; align-items: center; gap: var(--xs);
  font-family: var(--font-sans);
  font-size: 0.75rem; font-weight: 600;
  padding: 4px 10px; border-radius: var(--r-sm);
  background: var(--light); color: var(--deep-ink);
  border: 1px solid var(--line);
  white-space: nowrap; vertical-align: middle; line-height: 1.4;
}

/* ═══════════════════════════════════════════════════════════════════════════
   12) CALLOUT — Tier 5 semantic + AI
═══════════════════════════════════════════════════════════════════════════ */
.sf-callout {
  display: flex; flex-direction: column; gap: 6px;
  border-radius: var(--r-md); padding: 12px 16px;
  margin: 20px 0; border-left: 4px solid;
}
.sf-callout__header {
  display: flex; align-items: center; gap: 8px;
  font-size: 0.875rem; font-weight: 600; line-height: 1;
}
.sf-callout__content { font-size: 0.9375rem; line-height: 1.6; color: var(--deep-ink); }
.sf-callout__content p { margin: 0 0 6px; font-size: 0.9375rem; color: inherit; }
.sf-callout__content p:last-child { margin-bottom: 0; }
.sf-callout__content a { color: inherit; text-decoration: underline; }
.sf-callout__content code { background: rgba(0,0,0,0.06); border: 0; }
.sf-callout__content ul { margin: 6px 0 0; padding-left: 22px; }
.sf-callout__content ul li { margin-bottom: 4px; font-size: 0.9375rem; }

.sf-callout--info     { background: var(--info-bg);    border-left-color: var(--info); }
.sf-callout--info     .sf-callout__header { color: var(--info-text); }
.sf-callout--success  { background: var(--success-bg); border-left-color: var(--success); }
.sf-callout--success  .sf-callout__header { color: var(--success-text); }
.sf-callout--warning  { background: var(--warning-bg); border-left-color: var(--warning); }
.sf-callout--warning  .sf-callout__header { color: var(--warning-text); }
.sf-callout--danger   { background: var(--danger-bg);  border-left-color: var(--danger); }
.sf-callout--danger   .sf-callout__header { color: var(--danger-text); }
.sf-callout--ai       { background: var(--ai-mist);    border-left-color: var(--ai-iris); }
.sf-callout--ai       .sf-callout__header { color: var(--ai-iris); }
[data-color-mode="dark"] .sf-doc .sf-callout--ai .sf-callout__header { color: #B59CFF; }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-callout--ai .sf-callout__header { color: #B59CFF; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   13) SOFTWARE STACK — sf-stack
═══════════════════════════════════════════════════════════════════════════ */
.sf-stack {
  display: flex; flex-direction: column;
  border: 1px solid var(--line); border-radius: var(--r-xl);
  overflow: hidden; margin: var(--md) 0 var(--lg);
  background: var(--white);
}
.sf-stack__layer {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 18px;
  border-bottom: 1px solid var(--line);
}
.sf-stack__layer:last-child { border-bottom: 0; }
.sf-stack__num {
  width: 28px; height: 28px; border-radius: var(--r-full);
  display: flex; align-items: center; justify-content: center;
  font-family: var(--font-mono); font-size: 0.75rem; font-weight: 700;
  color: var(--white); flex-shrink: 0;
}
.sf-stack__layer--app    { background: rgba(3,72,96,0.05); }
.sf-stack__layer--app    .sf-stack__num { background: var(--primary); }
.sf-stack__layer--runtime { background: rgba(0,184,148,0.07); }
.sf-stack__layer--runtime .sf-stack__num { background: var(--success); }
.sf-stack__layer--driver  { background: rgba(245,158,11,0.07); }
.sf-stack__layer--driver  .sf-stack__num { background: var(--warning); color: var(--deep-ink); }
.sf-stack__layer--kernel  { background: var(--light); }
.sf-stack__layer--kernel  .sf-stack__num { background: var(--slate); }

.sf-stack__name { font-size: 0.9375rem; font-weight: 700; color: var(--deep-ink); }
.sf-stack__desc { font-size: 0.8125rem; color: var(--slate); margin-top: 2px; line-height: 1.5; }
.sf-stack__pkg, .sf-stack__cmd {
  flex-shrink: 0; font-family: var(--font-mono);
  font-size: 0.6875rem; font-weight: 500;
  padding: 3px 9px; border-radius: var(--r-sm);
  border: 1px solid var(--line);
  white-space: nowrap;
}
.sf-stack__pkg { margin-left: auto; background: var(--white); color: var(--slate); }
.sf-stack__cmd { background: var(--light); color: var(--primary); }
[data-color-mode="dark"] .sf-doc .sf-stack__cmd { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-stack__cmd { color: var(--secondary); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   14) TABLE — sf-table
═══════════════════════════════════════════════════════════════════════════ */
.sf-table-wrap {
  display: block; width: 100%; overflow-x: auto;
  border: 1px solid var(--line); border-radius: var(--r-lg);
  background: var(--white); margin: var(--md) 0 var(--lg);
}
.sf-table {
  width: 100%; border-collapse: separate; border-spacing: 0;
  font-size: 0.9375rem; margin: 0 !important;
}
.sf-table thead { background: var(--primary) !important; }
.sf-table th {
  padding: 12px 16px;
  font-family: var(--font-sans) !important;
  font-size: 0.875rem !important;
  font-weight: 700 !important;
  letter-spacing: 0.03em !important;
  text-transform: uppercase !important;
  color: #FFFFFF !important;
  background: var(--primary) !important;
  text-align: left !important;
  border-bottom: 1px solid var(--primary) !important;
  white-space: nowrap;
}
.sf-doc .sf-table th { color: #FFFFFF !important; }
.sf-doc table.sf-table thead th { color: #FFFFFF !important; background: var(--primary) !important; }
.sf-table th:first-child { border-top-left-radius: var(--r-md); }
.sf-table th:last-child  { border-top-right-radius: var(--r-md); }
.sf-table td {
  padding: 11px 16px; border-bottom: 1px solid var(--line);
  font-size: 0.875rem; color: var(--deep-ink); vertical-align: top;
  line-height: 1.55;
}
.sf-table td:nth-child(2) { white-space: nowrap; }
.sf-table td:nth-child(3) { text-align: justify; }
.sf-table tbody tr:nth-child(even) td { background: var(--light); }
.sf-table tr:last-child td { border-bottom: 0; }
.sf-table td code { font-size: 0.8125rem; }
[data-color-mode="dark"] .sf-doc .sf-table thead,
[data-color-mode="dark"] .sf-doc .sf-table th {
  background: var(--tertiary) !important;
  color: #FFFFFF !important;
}
[data-color-mode="dark"] .sf-doc .sf-table tbody tr:nth-child(even) td { background: rgba(255,255,255,0.03); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-table thead,
  html:not([data-color-mode="light"]) .sf-doc .sf-table th {
    background: var(--tertiary) !important;
    color: #FFFFFF !important;
  }
  html:not([data-color-mode="light"]) .sf-doc .sf-table tbody tr:nth-child(even) td { background: rgba(255,255,255,0.03); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   15) CARD — sf-card + variants for tool, cmd
═══════════════════════════════════════════════════════════════════════════ */
.sf-card {
  background: var(--white); color: var(--deep-ink);
  border: 1px solid var(--line); border-radius: var(--r-xl);
  padding: var(--lg);
  margin: 0 0 var(--md);
  transition: border-color .15s, box-shadow .15s;
}
.sf-card:hover { border-color: var(--slate-light); }
.sf-card-grid > .sf-card { margin-bottom: 0; }
[data-color-mode="dark"] .sf-doc .sf-card { background: rgba(255,255,255,0.04); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-card { background: rgba(255,255,255,0.04); }
}
.sf-card-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: var(--md); margin: var(--md) 0 var(--lg);
}

.sf-tool__name {
  font-family: var(--font-mono); font-size: 0.875rem; font-weight: 700;
  color: var(--primary); margin-bottom: 6px;
}
[data-color-mode="dark"] .sf-doc .sf-tool__name { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-tool__name { color: var(--secondary); }
}
.sf-tool__desc { font-size: 0.875rem; color: var(--slate); line-height: 1.55; }

/* ═══════════════════════════════════════════════════════════════════════════
   16) QUICK GRID — sf-quick-grid
═══════════════════════════════════════════════════════════════════════════ */
.sf-quick-grid {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(160px, 1fr));
  gap: var(--sm); margin: var(--md) 0 var(--lg);
}
.sf-quick {
  background: var(--white); border: 1px solid var(--line);
  border-radius: var(--r-xl); padding: 14px 16px;
}
.sf-quick__lbl {
  font-family: var(--font-mono); font-size: 0.6875rem; font-weight: 500;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--slate); margin-bottom: 4px;
}
.sf-quick__val {
  font-family: var(--font-mono); font-size: 1.125rem; font-weight: 700;
  color: var(--deep-ink); line-height: 1.1;
}
.sf-quick__sub { font-size: 0.75rem; color: var(--slate); margin-top: 4px; line-height: 1.4; }
[data-color-mode="dark"] .sf-doc .sf-quick { background: rgba(255,255,255,0.04); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-quick { background: rgba(255,255,255,0.04); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   17) COMMAND CARD — sf-cmd
═══════════════════════════════════════════════════════════════════════════ */
.sf-cmd { padding: 0; overflow: hidden; }
.sf-cmd__head {
  display: flex; align-items: center; justify-content: space-between; gap: 12px;
  padding: 12px 16px;
  background: var(--light);
  border-bottom: 1px solid var(--line);
}
.sf-cmd__name {
  font-family: var(--font-mono); font-size: 0.875rem; font-weight: 700;
  color: var(--primary);
}
[data-color-mode="dark"] .sf-doc .sf-cmd__name { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-cmd__name { color: var(--secondary); }
}
.sf-cmd__purpose { font-size: 0.8125rem; color: var(--slate); flex-shrink: 0; text-align: right; }
.sf-cmd__body { padding: var(--md); }
.sf-cmd__body > p { font-size: 0.9375rem; color: var(--deep-ink); margin: 0 0 10px; }
.sf-cmd__body > p:last-child { margin-bottom: 0; }
.sf-cmd__body .sf-terminal:last-child,
.sf-cmd__body .sf-output:last-child { margin-bottom: 0; }

/* ═══════════════════════════════════════════════════════════════════════════
   18) TERMINAL — sf-terminal (always dark)
═══════════════════════════════════════════════════════════════════════════ */
.sf-terminal {
  --t-bg:#0d1117; --t-hd:#161b22; --t-bdc:#30363d; --t-tx:#e6edf3;
  --t-dm:#8B949E; --t-gn:#56d364; --t-bl:#79c0ff; --t-yl:#e3b341;
  --t-pp:#d2a8ff; --t-rd:#ff7b72;
  background: var(--t-bg) !important;
  border: 1px solid var(--t-bdc) !important;
  border-radius: var(--r-lg) !important;
  overflow: hidden;
  margin: var(--md) 0 var(--lg);
}
.sf-terminal__header {
  display: flex; align-items: center; gap: 8px;
  padding: 10px 14px;
  background: var(--t-hd) !important;
  border-bottom: 1px solid var(--t-bdc) !important;
}
.sf-terminal__dot {
  width: 11px; height: 11px;
  border-radius: var(--r-full);
  display: inline-block; flex-shrink: 0;
}
.sf-terminal__title {
  margin-left: 6px;
  font-family: var(--font-mono); font-size: 0.6875rem; font-weight: 500;
  letter-spacing: 0.05em; text-transform: uppercase;
  color: var(--t-dm) !important;
}
.sf-terminal__badge {
  margin-left: auto;
  font-family: var(--font-sans); font-size: 0.6875rem; font-weight: 700;
  padding: 2px 8px; border-radius: var(--r-sm);
  background: rgba(86,211,100,0.15);
  color: var(--t-gn) !important;
  border: 1px solid rgba(86,211,100,0.30);
  white-space: nowrap;
}
.sf-terminal__body { padding: 14px 16px; overflow-x: auto; }
.sf-terminal pre, .sf-terminal__body pre {
  margin: 0 !important;
  background: transparent !important;
  border: 0 !important;
  padding: 0 !important;
  color: var(--t-tx) !important;
  font-family: var(--font-mono) !important;
  font-size: 0.8125rem !important;
  line-height: 1.7 !important;
  white-space: pre;
  overflow-x: auto;
}
.sf-terminal .t-dim { color: var(--t-dm) !important; }
.sf-terminal .t-gn  { color: var(--t-gn) !important; font-weight: 600; }
.sf-terminal .t-bl  { color: var(--t-bl) !important; }
.sf-terminal .t-yl  { color: var(--t-yl) !important; }
.sf-terminal .t-pp  { color: var(--t-pp) !important; }
.sf-terminal .t-rd  { color: var(--t-rd) !important; }
.sf-terminal .t-tx  { color: var(--t-tx) !important; font-weight: 700; }

/* ═══════════════════════════════════════════════════════════════════════════
   19) OUTPUT BLOCK — sf-output (page-themed)
═══════════════════════════════════════════════════════════════════════════ */
.sf-output {
  background: var(--light);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  margin: var(--md) 0 var(--lg);
  overflow: hidden;
}
.sf-output__head {
  display: flex; align-items: center; justify-content: space-between;
  padding: 10px 14px;
  background: var(--white);
  border-bottom: 1px solid var(--line);
}
[data-color-mode="dark"] .sf-doc .sf-output__head { background: rgba(255,255,255,0.04); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-output__head { background: rgba(255,255,255,0.04); }
}
.sf-output__label {
  font-family: var(--font-mono); font-size: 0.6875rem; font-weight: 500;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--slate);
}
.sf-output__body { padding: 12px 16px; overflow-x: auto; }
.sf-output pre, .sf-output__body pre {
  margin: 0; background: transparent; border: 0; padding: 0;
  font-family: var(--font-mono); font-size: 0.8125rem;
  color: var(--deep-ink); line-height: 1.65; white-space: pre;
  overflow-x: auto;
}
.sf-output .o-ok   { color: var(--success-text); font-weight: 600; }
.sf-output .o-hl   { color: var(--primary);      font-weight: 600; }
.sf-output .o-warn { color: var(--warning-text); font-weight: 600; }
[data-color-mode="dark"] .sf-doc .sf-output .o-hl { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-output .o-hl { color: var(--secondary); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   20) DIAGNOSTIC FLOW — sf-flow (numbered ordered list for the 5-step
       troubleshooting starting points)
═══════════════════════════════════════════════════════════════════════════ */
.sf-flow {
  counter-reset: sf-flow-counter;
  list-style: none !important;
  padding-left: 0 !important;
  margin: var(--sm) 0 0 !important;
}
.sf-flow li {
  counter-increment: sf-flow-counter;
  position: relative;
  padding: 8px 8px 8px 44px;
  border-bottom: 1px solid rgba(245,158,11,0.20);
  font-size: 0.9375rem; color: var(--deep-ink);
  line-height: 1.5;
}
.sf-flow li:last-child { border-bottom: 0; }
.sf-flow li::before {
  content: counter(sf-flow-counter);
  position: absolute;
  left: 8px; top: 8px;
  width: 26px; height: 26px;
  background: var(--warning);
  color: var(--deep-ink);
  font-family: var(--font-mono);
  font-size: 0.75rem; font-weight: 700;
  border-radius: var(--r-full);
  display: flex; align-items: center; justify-content: center;
}
.sf-flow li code { background: rgba(0,0,0,0.06); border: 0; }

/* ═══════════════════════════════════════════════════════════════════════════
   21) RELATED LINKS — sf-related (used for the per-product troubleshooting
       cross-links at the bottom of the page)
═══════════════════════════════════════════════════════════════════════════ */
.sf-related__grid {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
  gap: var(--md);
  margin: var(--md) 0 var(--lg);
}
.sf-related__card {
  display: block;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: var(--md) var(--lg);
  text-decoration: none !important;
  transition: border-color .15s, transform .15s, box-shadow .15s;
}
.sf-related__card:hover {
  border-color: var(--primary);
  transform: translateY(-1px);
  box-shadow: var(--shadow-md);
}
.sf-related__eyebrow {
  display: block;
  font-family: var(--font-mono);
  font-size: 0.6875rem; font-weight: 500;
  letter-spacing: 0.18em; text-transform: uppercase;
  color: var(--slate); margin-bottom: 6px;
}
.sf-related__title {
  display: block;
  font-family: var(--font-sans);
  font-size: 1rem; font-weight: 700;
  color: var(--primary);
  line-height: 1.3;
  margin-bottom: 4px;
}
.sf-related__desc {
  display: block;
  font-size: 0.8125rem; color: var(--slate);
  line-height: 1.5;
}
[data-color-mode="dark"] .sf-doc .sf-related__card { background: rgba(255,255,255,0.04); }
[data-color-mode="dark"] .sf-doc .sf-related__title { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-related__card { background: rgba(255,255,255,0.04); }
  html:not([data-color-mode="light"]) .sf-doc .sf-related__title { color: var(--secondary); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   22) METHODOLOGY DISCLOSURE — sf-method (AI Iris head)
═══════════════════════════════════════════════════════════════════════════ */
.sf-method {
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-lg);
  margin: var(--md) 0 var(--lg);
  overflow: hidden;
}
.sf-method__head {
  display: flex; align-items: center; gap: var(--md);
  padding: var(--md) var(--lg);
  background: var(--ai-mist);
  border-bottom: 2px solid var(--ai-iris);
}
.sf-doc .sf-method__head h3.sf-method__title {
  margin: 0;
  font-family: var(--font-sans);
  font-size: 1.0625rem; font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--ai-iris);
  line-height: 1.3;
}
.sf-method__head .sf-icon {
  width: 22px; height: 22px;
  color: var(--ai-iris);
  flex-shrink: 0;
}
.sf-method__head .sf-icon svg { width: 22px; height: 22px; }
.sf-method__grid { display: block; margin: 0; padding: 0; font-size: 0.875rem; }
.sf-method__row {
  display: grid;
  grid-template-columns: minmax(180px, 240px) 1fr;
  gap: var(--lg);
  align-items: center;
  padding: 10px var(--lg);
  border-bottom: 1px solid var(--line);
  transition: border-color .12s;
}
.sf-method__row:nth-child(even) { background: var(--light); }
.sf-method__row:last-child { border-bottom: 0; }
.sf-method__row:hover { background: rgba(3,72,96,0.04); }
.sf-method__label {
  font-family: var(--font-sans); font-weight: 700;
  color: var(--deep-ink); font-size: 0.875rem; line-height: 1.4;
}
.sf-method__value {
  font-family: var(--font-sans); color: var(--deep-ink);
  font-size: 0.875rem; line-height: 1.5;
  display: flex; align-items: center; gap: var(--sm);
  flex-wrap: wrap;
}
.sf-method__value code {
  font-size: 0.8125rem;
  background: var(--white);
  border: 1px solid var(--line);
  color: var(--primary);
}
.sf-method__row:nth-child(even) .sf-method__value code { background: var(--white); }

[data-color-mode="dark"] .sf-doc .sf-method { background: rgba(255,255,255,0.04); border-color: var(--line); }
[data-color-mode="dark"] .sf-doc .sf-method__head { background: rgba(107,71,240,0.18); border-bottom-color: var(--ai-iris); }
[data-color-mode="dark"] .sf-doc .sf-method__head h3.sf-method__title { color: #B59CFF; }
[data-color-mode="dark"] .sf-doc .sf-method__head .sf-icon { color: #B59CFF; }
[data-color-mode="dark"] .sf-doc .sf-method__row { border-bottom-color: rgba(255,255,255,0.08); }
[data-color-mode="dark"] .sf-doc .sf-method__row:nth-child(even) { background: rgba(255,255,255,0.03); }
[data-color-mode="dark"] .sf-doc .sf-method__row:hover { background: rgba(0,224,184,0.06); }
[data-color-mode="dark"] .sf-doc .sf-method__label { color: var(--neutral); }
[data-color-mode="dark"] .sf-doc .sf-method__value { color: var(--neutral); }
[data-color-mode="dark"] .sf-doc .sf-method__value code { background: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.10); color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-method { background: rgba(255,255,255,0.04); border-color: var(--line); }
  html:not([data-color-mode="light"]) .sf-doc .sf-method__head { background: rgba(107,71,240,0.18); border-bottom-color: var(--ai-iris); }
  html:not([data-color-mode="light"]) .sf-doc .sf-method__head h3.sf-method__title { color: #B59CFF; }
  html:not([data-color-mode="light"]) .sf-doc .sf-method__head .sf-icon { color: #B59CFF; }
  html:not([data-color-mode="light"]) .sf-doc .sf-method__row { border-bottom-color: rgba(255,255,255,0.08); }
  html:not([data-color-mode="light"]) .sf-doc .sf-method__row:nth-child(even) { background: rgba(255,255,255,0.03); }
  html:not([data-color-mode="light"]) .sf-doc .sf-method__row:hover { background: rgba(0,224,184,0.06); }
  html:not([data-color-mode="light"]) .sf-doc .sf-method__label { color: var(--neutral); }
  html:not([data-color-mode="light"]) .sf-doc .sf-method__value { color: var(--neutral); }
  html:not([data-color-mode="light"]) .sf-doc .sf-method__value code { background: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.10); color: var(--secondary); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   23) DARK MODE — remaining tokens (meta, toc, aeo--ai)
═══════════════════════════════════════════════════════════════════════════ */
[data-color-mode="dark"] .sf-doc .sf-meta__badge { background: rgba(255,255,255,0.06); color: var(--secondary); border-color: var(--line); }
[data-color-mode="dark"] .sf-doc .sf-meta__badge--mint { background: rgba(0,224,184,0.14); color: var(--secondary); border-color: rgba(0,224,184,0.30); }
[data-color-mode="dark"] .sf-doc .sf-toc { background: rgba(255,255,255,0.04); }
[data-color-mode="dark"] .sf-doc .sf-toc__item { background: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.10); color: var(--neutral); }
[data-color-mode="dark"] .sf-doc .sf-aeo--ai { background: rgba(107,71,240,0.12); }
[data-color-mode="dark"] .sf-doc .sf-aeo--ai .sf-aeo__label { color: #B59CFF; }
[data-color-mode="dark"] .sf-doc .sf-aeo--ai .sf-aeo__text strong { color: #B59CFF; }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-meta__badge { background: rgba(255,255,255,0.06); color: var(--secondary); border-color: var(--line); }
  html:not([data-color-mode="light"]) .sf-doc .sf-meta__badge--mint { background: rgba(0,224,184,0.14); color: var(--secondary); border-color: rgba(0,224,184,0.30); }
  html:not([data-color-mode="light"]) .sf-doc .sf-toc { background: rgba(255,255,255,0.04); }
  html:not([data-color-mode="light"]) .sf-doc .sf-toc__item { background: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.10); color: var(--neutral); }
  html:not([data-color-mode="light"]) .sf-doc .sf-aeo--ai { background: rgba(107,71,240,0.12); }
  html:not([data-color-mode="light"]) .sf-doc .sf-aeo--ai .sf-aeo__label { color: #B59CFF; }
  html:not([data-color-mode="light"]) .sf-doc .sf-aeo--ai .sf-aeo__text strong { color: #B59CFF; }
}

/* ═══════════════════════════════════════════════════════════════════════════
   24b) QUICK REFERENCE GRID — sf-cmdref (replaces table for the at-a-glance
        command-to-layer-to-purpose map; scannable, layer-coded cards)
═══════════════════════════════════════════════════════════════════════════ */
.sf-cmdref {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
  gap: var(--md);
  margin: var(--md) 0 var(--lg);
}
.sf-cmdref__card {
  position: relative;
  background: var(--white);
  border: 1px solid var(--line);
  border-radius: var(--r-xl);
  padding: 16px 18px 14px;
  display: flex; flex-direction: column;
  gap: 10px;
  transition: border-color .15s, transform .15s, box-shadow .15s;
  overflow: hidden;
}
.sf-cmdref__card::before {
  content: "";
  position: absolute;
  inset: 0 auto 0 0;
  width: 4px;
  background: var(--slate-light);
}
.sf-cmdref__card:hover {
  border-color: var(--slate-light);
  transform: translateY(-1px);
  box-shadow: var(--shadow-md);
}
.sf-cmdref__head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 10px;
  flex-wrap: wrap;
}
.sf-cmdref__name {
  font-family: var(--font-mono);
  font-size: 0.9375rem; font-weight: 700;
  color: var(--primary);
  letter-spacing: -0.01em;
}
.sf-cmdref__layer {
  display: inline-flex; align-items: center; gap: 6px;
  font-family: var(--font-sans);
  font-size: 0.6875rem; font-weight: 700;
  letter-spacing: 0.06em; text-transform: uppercase;
  padding: 3px 8px;
  border-radius: var(--r-sm);
  background: var(--light);
  color: var(--slate);
  border: 1px solid var(--line);
  white-space: nowrap;
}
.sf-cmdref__layer::before {
  content: "";
  width: 6px; height: 6px;
  border-radius: var(--r-full);
  background: currentColor;
  display: inline-block;
}
.sf-cmdref__rows {
  display: flex; flex-direction: column;
  gap: 6px;
  margin-top: 2px;
}
.sf-cmdref__row {
  display: grid;
  grid-template-columns: 70px 1fr;
  gap: 10px;
  align-items: baseline;
  font-size: 0.875rem;
  line-height: 1.5;
  color: var(--deep-ink);
}
.sf-cmdref__label {
  font-family: var(--font-mono);
  font-size: 0.6875rem; font-weight: 500;
  letter-spacing: 0.14em; text-transform: uppercase;
  color: var(--slate);
}
.sf-cmdref__value { color: var(--deep-ink); }

/* Layer color-coding (matches the diagnostic flow: hardware, kernel, runtime, application) */
.sf-cmdref__card--hw      { /* layer 1 — slate accent (hardware/PCIe) */ }
.sf-cmdref__card--hw::before     { background: var(--slate); }
.sf-cmdref__card--hw      .sf-cmdref__layer { background: rgba(82,102,122,0.10); color: var(--slate); border-color: rgba(82,102,122,0.30); }

.sf-cmdref__card--kernel::before { background: var(--warning); }
.sf-cmdref__card--kernel  .sf-cmdref__layer { background: var(--warning-bg); color: var(--warning-text); border-color: rgba(245,158,11,0.30); }

.sf-cmdref__card--runtime::before { background: var(--success); }
.sf-cmdref__card--runtime .sf-cmdref__layer { background: var(--success-bg); color: var(--success-text); border-color: rgba(0,184,148,0.30); }

.sf-cmdref__card--app::before    { background: var(--primary); }
.sf-cmdref__card--app     .sf-cmdref__layer { background: rgba(3,72,96,0.08); color: var(--primary); border-color: rgba(3,72,96,0.25); }

[data-color-mode="dark"] .sf-doc .sf-cmdref__card { background: rgba(255,255,255,0.04); }
[data-color-mode="dark"] .sf-doc .sf-cmdref__name { color: var(--secondary); }
[data-color-mode="dark"] .sf-doc .sf-cmdref__layer { background: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.10); }
[data-color-mode="dark"] .sf-doc .sf-cmdref__value { color: var(--neutral); }
[data-color-mode="dark"] .sf-doc .sf-cmdref__card--app .sf-cmdref__layer { color: var(--secondary); }
@media (prefers-color-scheme: dark) {
  html:not([data-color-mode="light"]) .sf-doc .sf-cmdref__card { background: rgba(255,255,255,0.04); }
  html:not([data-color-mode="light"]) .sf-doc .sf-cmdref__name { color: var(--secondary); }
  html:not([data-color-mode="light"]) .sf-doc .sf-cmdref__layer { background: rgba(255,255,255,0.06); border-color: rgba(255,255,255,0.10); }
  html:not([data-color-mode="light"]) .sf-doc .sf-cmdref__value { color: var(--neutral); }
  html:not([data-color-mode="light"]) .sf-doc .sf-cmdref__card--app .sf-cmdref__layer { color: var(--secondary); }
}

/* ═══════════════════════════════════════════════════════════════════════════
   24) RESPONSIVE
═══════════════════════════════════════════════════════════════════════════ */
@media (max-width: 820px) {
  .sf-hero { padding: var(--lg); }
  .sf-doc .sf-hero p.sf-hero__title,
  .sf-doc .sf-hero .sf-hero__title { font-size: 2rem; }
  .sf-doc .sf-hero p.sf-hero__lead,
  .sf-doc .sf-hero .sf-hero__lead { font-size: 1rem; }
  .sf-related__grid { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 640px) {
  .sf-doc h1 { font-size: 2rem; }
  .sf-doc h2 { font-size: 1.625rem; margin-top: 48px; }
  .sf-doc h3 { font-size: 1.25rem; }
  .sf-doc .sf-hero p.sf-hero__title,
  .sf-doc .sf-hero .sf-hero__title { font-size: 1.75rem; }
  .sf-aeo__label { font-size: 1.1875rem; }
  .sf-stack__layer { flex-wrap: wrap; }
  .sf-stack__pkg, .sf-stack__cmd { margin-left: 42px; }
  .sf-card-grid  { grid-template-columns: 1fr 1fr; }
  .sf-quick-grid { grid-template-columns: 1fr 1fr; }
  .sf-cmdref     { grid-template-columns: 1fr; }
  .sf-cmdref__row { grid-template-columns: 60px 1fr; gap: 8px; }
  .sf-related__grid { grid-template-columns: 1fr; }
  .sf-table th, .sf-table td { padding: 9px 12px; font-size: 0.8125rem; }
  .sf-table th { font-size: 0.75rem !important; }
  .sf-terminal pre { font-size: 0.75rem !important; }
  .sf-cmd__head { flex-direction: column; align-items: flex-start; gap: 4px; }
  .sf-cmd__purpose { text-align: left; }
  .sf-method__head { padding: 10px var(--md); }
  .sf-method__row {
    grid-template-columns: 1fr;
    gap: 4px;
    padding: 10px var(--md);
  }
  .sf-method__value { font-size: 0.875rem; }
  .sf-toc { gap: 4px; padding: 8px 10px; }
  .sf-toc__item { padding: 5px 10px; font-size: 0.75rem; }
}
@media (max-width: 400px) {
  .sf-card-grid  { grid-template-columns: 1fr; }
  .sf-quick-grid { grid-template-columns: 1fr; }
  .sf-doc .sf-hero p.sf-hero__title,
  .sf-doc .sf-hero .sf-hero__title { font-size: 1.625rem; }
}
</style>


<div class="sf-doc">

  
  <header class="sf-hero">
    <div class="sf-hero__copy">
      <span class="sf-eyebrow">AI Model Deployment</span>
      <p class="sf-hero__title">System Monitoring</p>
      <p class="sf-hero__lead">
        From real-time NPU utilisation down to kernel-level driver diagnostics, this is the canonical reference
        for every monitoring command on Sixfab edge AI hardware. The same DEEPX runtime, the same four
        commands, across Sixfab AI HAT+ for Raspberry Pi 5, Sixfab Edge AI Expansion Board, and ALPON X5 AI.
      </p>
      <div class="sf-hero__chips">
        <span class="sf-pill">dxtop</span>
        <span class="sf-pill">dxrt-cli</span>
        <span class="sf-pill">lspci</span>
        <span class="sf-pill">journalctl</span>
        <span class="sf-pill">DEEPX DX-M1 family</span>
      </div>
    </div>
  </header>


  
  <div class="sf-meta">
    <span class="sf-meta__badge">AI Model Deployment</span>
    <span class="sf-meta__sep">·</span>
    <span class="sf-meta__badge sf-meta__badge--mint">Operations</span>
    <span class="sf-meta__sep">·</span>
    <span>System Monitoring</span>
    <span class="sf-meta__sep">·</span>
    <span>Updated 2026-05-16</span>
  </div>


  
  <div class="sf-aeo sf-aeo--ai">
    <span class="sf-aeo__label">How do I monitor the DEEPX NPU on Sixfab edge AI hardware?</span>
    <p class="sf-aeo__text">
      <strong>Sixfab edge AI products expose monitoring at four stack layers.</strong>
      Use <code>dxtop</code> for live NPU utilisation, <code>dxrt-cli -s</code> for a full hardware snapshot,
      <code>lspci</code> to confirm PCIe enumeration, and <code>journalctl -xeu dxrt.service</code> for runtime logs.
      Each command targets one layer of the DEEPX software stack, and the layer mapping is identical on AI HAT+,
      Edge AI Expansion Board, and ALPON X5 AI.
    </p>
  </div>


  
  <nav class="sf-toc" aria-label="On this page">
    <span class="sf-toc__label">In this guide</span>
    <a href="#reference"   class="sf-toc__item"><span class="sf-toc__num">01</span>Quick reference</a>
    <a href="#tools"       class="sf-toc__item"><span class="sf-toc__num">02</span>Installed CLI tools</a>
    <a href="#dxtop"       class="sf-toc__item"><span class="sf-toc__num">03</span>dxtop</a>
    <a href="#dxrt-cli"    class="sf-toc__item"><span class="sf-toc__num">04</span>dxrt-cli</a>
    <a href="#diagnostic"  class="sf-toc__item"><span class="sf-toc__num">05</span>Diagnostic commands</a>
  </nav>


  
  <h2 id="reference">Quick reference</h2>
  <p>
    Six commands cover monitoring across all three Sixfab edge AI products. Each maps to one layer of the
    DEEPX software stack: hardware, kernel driver, runtime, or application. The grid below is your starting
    point; the rest of this page walks each command in detail.
  </p>

  <div class="sf-cmdref" role="list" aria-label="Quick reference of monitoring commands">
    
    <div class="sf-cmdref__card sf-cmdref__card--runtime" role="listitem">
      <div class="sf-cmdref__head">
        <span class="sf-cmdref__name">dxtop</span>
        <span class="sf-cmdref__layer">Runtime</span>
      </div>
      <div class="sf-cmdref__rows">
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Shows</span>
          <span class="sf-cmdref__value">Real-time NPU utilisation, temperature, voltage, and clock per core.</span>
        </div>
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Use when</span>
          <span class="sf-cmdref__value">Watching performance during active inference.</span>
        </div>
      </div>
    </div>

    
    <div class="sf-cmdref__card sf-cmdref__card--runtime" role="listitem">
      <div class="sf-cmdref__head">
        <span class="sf-cmdref__name">dxrt-cli -s</span>
        <span class="sf-cmdref__layer">Runtime</span>
      </div>
      <div class="sf-cmdref__rows">
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Shows</span>
          <span class="sf-cmdref__value">Full hardware snapshot: device, versions, firmware, memory, PCIe link.</span>
        </div>
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Use when</span>
          <span class="sf-cmdref__value">Verifying the full stack is healthy after install or before debugging.</span>
        </div>
      </div>
    </div>

    
    <div class="sf-cmdref__card sf-cmdref__card--hw" role="listitem">
      <div class="sf-cmdref__head">
        <span class="sf-cmdref__name">lspci</span>
        <span class="sf-cmdref__layer">Hardware</span>
      </div>
      <div class="sf-cmdref__rows">
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Shows</span>
          <span class="sf-cmdref__value">PCIe device enumeration; confirms the host has detected the NPU.</span>
        </div>
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Use when</span>
          <span class="sf-cmdref__value">First check if anything in the stack isn't responding.</span>
        </div>
      </div>
    </div>

    
    <div class="sf-cmdref__card sf-cmdref__card--kernel" role="listitem">
      <div class="sf-cmdref__head">
        <span class="sf-cmdref__name">lsmod | grep -i dx</span>
        <span class="sf-cmdref__layer">Kernel</span>
      </div>
      <div class="sf-cmdref__rows">
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Shows</span>
          <span class="sf-cmdref__value">Whether the DEEPX kernel module is loaded into the running kernel.</span>
        </div>
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Use when</span>
          <span class="sf-cmdref__value"><code>dxrt-cli</code> fails to find a device.</span>
        </div>
      </div>
    </div>

    
    <div class="sf-cmdref__card sf-cmdref__card--kernel" role="listitem">
      <div class="sf-cmdref__head">
        <span class="sf-cmdref__name">dmesg | grep -i dx</span>
        <span class="sf-cmdref__layer">Kernel</span>
      </div>
      <div class="sf-cmdref__rows">
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Shows</span>
          <span class="sf-cmdref__value">Kernel messages from the DEEPX driver during initialisation.</span>
        </div>
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Use when</span>
          <span class="sf-cmdref__value">Diagnosing driver init errors or PCIe link failures.</span>
        </div>
      </div>
    </div>

    
    <div class="sf-cmdref__card sf-cmdref__card--app" role="listitem">
      <div class="sf-cmdref__head">
        <span class="sf-cmdref__name">journalctl -xeu dxrt.service</span>
        <span class="sf-cmdref__layer">Application</span>
      </div>
      <div class="sf-cmdref__rows">
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Shows</span>
          <span class="sf-cmdref__value">Full systemd service log for the runtime daemon.</span>
        </div>
        <div class="sf-cmdref__row">
          <span class="sf-cmdref__label">Use when</span>
          <span class="sf-cmdref__value">The runtime starts but inference fails or behaves unexpectedly.</span>
        </div>
      </div>
    </div>
  </div>


  
  <h2 id="tools">Installed CLI tools</h2>
  <p>
    Three command-line tools ship alongside the DEEPX kernel driver and runtime. Each one targets a
    different monitoring or diagnostic job.
  </p>

  <div class="sf-card-grid">
    <div class="sf-card">
      <div class="sf-tool__name">dxrt-cli</div>
      <p class="sf-tool__desc">Hardware status, firmware version, and firmware update. First command to run when diagnosing any issue.</p>
    </div>
    <div class="sf-card">
      <div class="sf-tool__name">dxtop</div>
      <p class="sf-tool__desc">Real-time NPU monitor with per-core utilisation, temperature, voltage, and clock. Like <code>htop</code> for the NPU.</p>
    </div>
    <div class="sf-card">
      <div class="sf-tool__name">run_model</div>
      <p class="sf-tool__desc">Headless model runner. Test any compiled <code>.dxnn</code> file without writing application code.</p>
    </div>
  </div>

  <div class="sf-terminal">
    <div class="sf-terminal__header">
      <span class="sf-terminal__dot" style="background:#ff5f57"></span>
      <span class="sf-terminal__dot" style="background:#febc2e"></span>
      <span class="sf-terminal__dot" style="background:#28c840"></span>
      <span class="sf-terminal__title">bash</span>
      <span class="sf-terminal__badge">Quick reference</span>
    </div>
    <div class="sf-terminal__body">
<pre><span class="t-dim"># 1. Full hardware status</span>
<span class="t-gn">dxrt-cli</span> <span class="t-bl">-s</span>

<span class="t-dim"># 2. Real-time NPU utilisation (q to quit)</span>
<span class="t-gn">dxtop</span>

<span class="t-dim"># 3. Test a compiled model</span>
<span class="t-gn">run_model</span> <span class="t-bl">--model_path</span> <span class="t-yl">&lt;model_path&gt;.dxnn</span>

<span class="t-dim"># 4. Update NPU firmware (only when a new fw.bin is released)</span>
<span class="t-gn">dxrt-cli</span> <span class="t-bl">-u</span> <span class="t-yl">&lt;firmware_path&gt;.bin</span></pre>
    </div>
  </div>

  
  <div class="sf-callout sf-callout--info">
    <div class="sf-callout__header">
      <svg class="sf-icon" width="16" height="16" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
        <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
      </svg>
      <span>Where these tools come from on each product</span>
    </div>
    <div class="sf-callout__content">
      <p>
        On Sixfab AI HAT+ for Raspberry Pi 5 and Sixfab Edge AI Expansion Board, the <code>sixfab-dx</code> APT package
        installs the runtime, kernel driver, and all three CLI tools together. It handles DKMS builds against the
        running kernel and pulls in <code>raspberrypi-kernel-headers</code> automatically.
      </p>
      <p>
        On ALPON X5 AI, the driver and runtime are already part of the ALPON OS image. The CLI tools are
        pre-installed and no APT installation step is required. The commands on this page work identically
        on either path.
      </p>
    </div>
  </div>

  
  <div class="sf-callout sf-callout--ai">
    <div class="sf-callout__header">
      <svg class="sf-icon" width="16" height="16" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
        <path d="M5 5h14v14H5z" fill="none" stroke="currentColor" stroke-width="1.6"/>
        <path d="M9 9h6v6H9z" fill="none" stroke="currentColor" stroke-width="1.6"/>
        <path d="M3 10h2M3 14h2M19 10h2M19 14h2M10 3v2M14 3v2M10 19v2M14 19v2" stroke="currentColor" stroke-width="1.6"/>
      </svg>
      <span>NPU-specific metrics</span>
    </div>
    <div class="sf-callout__content">
      <p>
        <code>dxtop</code> and <code>dxrt-cli</code> are the only tools that surface NPU-internal telemetry:
        per-core utilisation, voltage, clock, and on-die temperature. Standard Linux tools (<code>top</code>,
        <code>htop</code>, <code>sensors</code>) cannot see inside the DEEPX silicon. For NPU-aware monitoring
        in a production fleet, scrape <code>dxrt-cli -s</code> output or the <code>dxtop</code> machine-readable
        feed and ship it to your time-series store of choice.
      </p>
    </div>
  </div>


  
  <h2 id="dxtop">dxtop: real-time NPU monitor</h2>
  <p class="sf-lead">
    <code>dxtop</code> is a live terminal dashboard for the NPU, the equivalent of <code>htop</code> for the AI
    accelerator. It shows per-core utilisation, memory, voltage, clock speed, and temperature, updating
    continuously.
  </p>

  <div class="sf-terminal">
    <div class="sf-terminal__header">
      <span class="sf-terminal__dot" style="background:#ff5f57"></span>
      <span class="sf-terminal__dot" style="background:#febc2e"></span>
      <span class="sf-terminal__dot" style="background:#28c840"></span>
      <span class="sf-terminal__title">bash</span>
    </div>
    <div class="sf-terminal__body">
<pre><span class="t-gn">dxtop</span></pre>
    </div>
  </div>

  <p>Press <code>q</code> to quit, <code>n</code> / <code>p</code> to page through devices, <code>h</code> for help.</p>

  <h3 class="sf-h2--compact">Output at idle</h3>
  <p>
    The example below was captured on Sixfab AI HAT+ for Raspberry Pi 5 with no inference running. Output on
    Edge AI Expansion Board and ALPON X5 AI looks the same; only the <code>Variant</code> field changes per product.
  </p>
  <div class="sf-terminal">
    <div class="sf-terminal__header">
      <span class="sf-terminal__dot" style="background:#ff5f57"></span>
      <span class="sf-terminal__dot" style="background:#febc2e"></span>
      <span class="sf-terminal__dot" style="background:#28c840"></span>
      <span class="sf-terminal__title">dxtop · idle state</span>
    </div>
    <div class="sf-terminal__body">
<pre><span class="t-dim">DX-RT: v3.2.0   NPU Device driver: v2.1.0   DX-TOP: v1.0.1</span>

Device :0  Variant: <span class="t-tx">M1</span>  PCIe Bus Number: 01:00:00  Firmware: <span class="t-bl">v2.5.0</span>
NPU Memory: [<span class="t-gn">3.98 MiB / 3.82 GiB (0.05%)</span>]
  Core :0  Util: <span class="t-dim"> 0.0%</span>  Temp: <span class="t-bl">49 °C</span>  Voltage: <span class="t-gn">750 mV</span>  Clock: <span class="t-gn">1000 MHz</span>
  Core :1  Util: <span class="t-dim"> 0.0%</span>  Temp: <span class="t-bl">48 °C</span>  Voltage: <span class="t-gn">750 mV</span>  Clock: <span class="t-gn">1000 MHz</span>
  Core :2  Util: <span class="t-dim"> 0.0%</span>  Temp: <span class="t-bl">49 °C</span>  Voltage: <span class="t-gn">750 mV</span>  Clock: <span class="t-gn">1000 MHz</span></pre>
    </div>
  </div>

  <h3 class="sf-h2--compact">Output under inference load</h3>
  <p>
    With a model running and frames being submitted to the NPU, all three cores climb to 80–95 % utilisation
    and temperatures rise into the low 50 °C range at room ambient. The capture below is from YOLOv8n at
    640×640 on AI HAT+ (DEEPX DX-M1M, 25 TOPS at INT8) on <code>dxrt-runtime</code> v3.2.0.
  </p>
  <div class="sf-terminal">
    <div class="sf-terminal__header">
      <span class="sf-terminal__dot" style="background:#ff5f57"></span>
      <span class="sf-terminal__dot" style="background:#febc2e"></span>
      <span class="sf-terminal__dot" style="background:#28c840"></span>
      <span class="sf-terminal__title">dxtop · inference running (YOLOv8n)</span>
      <span class="sf-terminal__badge">Live</span>
    </div>
    <div class="sf-terminal__body">
<pre>Device :0  Variant: <span class="t-tx">M1</span>  PCIe Bus Number: 01:00:00  Firmware: <span class="t-bl">v2.5.0</span>
NPU Memory: [<span class="t-gn">1.20 GiB / 3.82 GiB (31.4%)</span>]
  Core :0  Util: <span class="t-gn">87.0%</span>  Temp: <span class="t-yl">52 °C</span>  Voltage: <span class="t-gn">750 mV</span>  Clock: <span class="t-gn">1000 MHz</span>
  Core :1  Util: <span class="t-gn">92.0%</span>  Temp: <span class="t-yl">51 °C</span>  Voltage: <span class="t-gn">750 mV</span>  Clock: <span class="t-gn">1000 MHz</span>
  Core :2  Util: <span class="t-gn">89.0%</span>  Temp: <span class="t-yl">52 °C</span>  Voltage: <span class="t-gn">750 mV</span>  Clock: <span class="t-gn">1000 MHz</span></pre>
    </div>
  </div>

  
  <div class="sf-callout sf-callout--info">
    <div class="sf-callout__header">
      <svg class="sf-icon" width="16" height="16" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
        <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
      </svg>
      <span>The <code>Variant</code> field per product</span>
    </div>
    <div class="sf-callout__content">
      <p>The <code>Variant</code> field in <code>dxtop</code> identifies the DEEPX silicon family on the device:</p>
      <ul>
        <li>Sixfab AI HAT+ for Raspberry Pi 5: <code>M1M</code> (25 TOPS at INT8) or <code>M1ML</code> (13 TOPS at INT8), depending on the variant you bought.</li>
        <li>Sixfab Edge AI Expansion Board: <code>M1</code> (25 TOPS at INT8).</li>
        <li>ALPON X5 AI: <code>M1</code> (25 TOPS at INT8).</li>
      </ul>
    </div>
  </div>

  <h3 class="sf-h2--compact">Typical values at a glance</h3>
  <div class="sf-quick-grid">
    <div class="sf-quick">
      <div class="sf-quick__lbl">Idle temp</div>
      <div class="sf-quick__val">46–49 °C</div>
      <div class="sf-quick__sub">No inference running</div>
    </div>
    <div class="sf-quick">
      <div class="sf-quick__lbl">Core voltage</div>
      <div class="sf-quick__val">750 mV</div>
      <div class="sf-quick__sub">Idle and inference</div>
    </div>
    <div class="sf-quick">
      <div class="sf-quick__lbl">Core clock</div>
      <div class="sf-quick__val">1000 MHz</div>
      <div class="sf-quick__sub">Normal operating speed</div>
    </div>
    <div class="sf-quick">
      <div class="sf-quick__lbl">NPU power (DX-M1 family)</div>
      <div class="sf-quick__val">2–5 W</div>
      <div class="sf-quick__sub">NPU alone, supported AI models</div>
    </div>
    <div class="sf-quick">
      <div class="sf-quick__lbl">Thermal throttle</div>
      <div class="sf-quick__val">~90 °C</div>
      <div class="sf-quick__sub">Per DEEPX silicon spec</div>
    </div>
  </div>

  <div class="sf-callout sf-callout--warning">
    <div class="sf-callout__header">
      <svg class="sf-icon" width="16" height="16" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
        <path d="M12 2 1 21h22L12 2zm0 6 7.5 13H4.5L12 8zm-1 4v4h2v-4h-2zm0 6v2h2v-2h-2z"/>
      </svg>
      <span>Temperatures climbing toward 65–70 °C during sustained inference?</span>
    </div>
    <div class="sf-callout__content">
      <p>
        Without active cooling, the DEEPX silicon can reach the upper limit and begin to throttle around 90 °C.
        On Sixfab AI HAT+ for Raspberry Pi 5, add a heatsink or connect a 3.3 V micro fan to the AI HAT+ JST fan
        connector. On Sixfab Edge AI Expansion Board, the integrated cooler handles steady-state load; verify
        airflow is not blocked. ALPON X5 AI is a sealed fanless industrial enclosure designed for its own
        thermal envelope; monitor and place the device per your ambient operating conditions.
      </p>
    </div>
  </div>


  
  <h2 id="dxrt-cli">dxrt-cli: hardware status &amp; firmware</h2>
  <p class="sf-lead">
    The <code>dxrt-cli</code> tool is the primary interface for querying hardware state and managing NPU
    firmware. Use it any time you need a full snapshot of the stack.
  </p>

  <div class="sf-card sf-cmd">
    <div class="sf-cmd__head">
      <span class="sf-cmd__name">dxrt-cli -s</span>
      <span class="sf-cmd__purpose">Full hardware and firmware status report</span>
    </div>
    <div class="sf-cmd__body">
      <p>
        Displays device type, runtime version, driver versions, firmware version, memory spec, board revision,
        PCIe link speed, and per-core voltage / clock / temperature. Use this as the first diagnostic command
        after installation or when something behaves unexpectedly.
      </p>
      <div class="sf-terminal">
        <div class="sf-terminal__header">
          <span class="sf-terminal__dot" style="background:#ff5f57"></span>
          <span class="sf-terminal__dot" style="background:#febc2e"></span>
          <span class="sf-terminal__dot" style="background:#28c840"></span>
          <span class="sf-terminal__title">bash</span>
        </div>
        <div class="sf-terminal__body">
<pre><span class="t-gn">dxrt-cli</span> <span class="t-bl">-s</span></pre>
        </div>
      </div>
      <div class="sf-output">
        <div class="sf-output__head">
          <span class="sf-output__label">Expected output · Sixfab Edge AI Expansion Board</span>
          <span class="sf-pill" style="background:var(--success-bg);color:var(--success-text);border-color:var(--success-bg)">OK</span>
        </div>
        <div class="sf-output__body">
<pre><span class="o-hl">DXRT v3.3.0</span>
=======================================================
 * Device 0: <span class="o-hl">M1</span>, Accelerator type
---------------------   Version   ---------------------
 * RT Driver version  : v2.4.0
 * PCIe Driver version: v2.2.0
-------------------------------------------------------
 * FW version         : v2.5.6
--------------------- Device Info ---------------------
 * Memory : LPDDR5 5600 Mbps, 3.92 GiB
 * Board  : M.2, Rev 1.0
 * Chip Offset : 0
 * PCIe   : <span class="o-ok">Gen3 X1</span> [01:00:00]
<span class="o-ok">NPU 0: voltage 750 mV, clock 1000 MHz, temperature 45 °C</span>
<span class="o-ok">NPU 1: voltage 750 mV, clock 1000 MHz, temperature 45 °C</span>
<span class="o-ok">NPU 2: voltage 750 mV, clock 1000 MHz, temperature 45 °C</span>
=======================================================</pre>
        </div>
      </div>
    </div>
  </div>

  
  <div class="sf-callout sf-callout--info">
    <div class="sf-callout__header">
      <svg class="sf-icon" width="16" height="16" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
        <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
      </svg>
      <span>What changes per product</span>
    </div>
    <div class="sf-callout__content">
      <p>The structure of <code>dxrt-cli -s</code> is the same across all three products. Three fields shift:</p>
      <ul>
        <li><strong>Device variant:</strong> <code>M1M</code> or <code>M1ML</code> on AI HAT+; <code>M1</code> on Edge AI Expansion Board and ALPON X5 AI.</li>
        <li><strong>Memory speed:</strong> LPDDR5x 6000 Mbps on AI HAT+; LPDDR5 5600 Mbps on Edge AI Expansion Board. NPU memory capacity is 4 GB (DEEPX DX-M1 family on-chip memory) on all three.</li>
        <li><strong>Runtime / firmware version:</strong> Whatever is current on the product when the page was captured. Run <code>dxrt-cli -s</code> on your own device to see the versions installed there.</li>
      </ul>
      <p>
        The <code>PCIe Gen3 X1 [01:00:00]</code> link line is the same on AI HAT+ and Edge AI Expansion Board
        (after the <code>dtparam=pciex1_gen=3</code> Raspberry Pi configuration is applied during install).
        On ALPON X5 AI the link is configured at the factory.
      </p>
    </div>
  </div>

  <div class="sf-card sf-cmd">
    <div class="sf-cmd__head">
      <span class="sf-cmd__name">dxrt-cli -u &lt;fw.bin&gt;</span>
      <span class="sf-cmd__purpose">Update NPU firmware</span>
    </div>
    <div class="sf-cmd__body">
      <p>
        Flashes a firmware binary to the onboard NPU flash. Download the firmware file from
        <a href="https://deepx.ai" target="_blank" rel="noopener">deepx.ai</a> first, then point
        <code>dxrt-cli -u</code> at it.
      </p>
      <div class="sf-terminal">
        <div class="sf-terminal__header">
          <span class="sf-terminal__dot" style="background:#ff5f57"></span>
          <span class="sf-terminal__dot" style="background:#febc2e"></span>
          <span class="sf-terminal__dot" style="background:#28c840"></span>
          <span class="sf-terminal__title">bash</span>
        </div>
        <div class="sf-terminal__body">
<pre><span class="t-gn">dxrt-cli</span> <span class="t-bl">-u</span> <span class="t-yl">&lt;firmware_path&gt;.bin</span>

<span class="t-dim"># Verify the new firmware version</span>
<span class="t-gn">dxrt-cli</span> <span class="t-bl">-s</span></pre>
        </div>
      </div>
      <div class="sf-callout sf-callout--info" style="margin-top:14px;margin-bottom:0">
        <div class="sf-callout__header">
          <svg class="sf-icon" width="16" height="16" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
            <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
          </svg>
          <span>When to update firmware</span>
        </div>
        <div class="sf-callout__content">
          <p>
            If the installed firmware already meets the DEEPX SDK requirements, there is no need to update the
            runtime separately. Download the latest firmware from the DEEPX website and update with
            <code>dxrt-cli -u fw.bin</code>. If SDK requirements are not met after the firmware update, the
            runtime must also be updated.
          </p>
        </div>
      </div>
    </div>
  </div>


  
  <h2 id="diagnostic">Diagnostic commands</h2>
  <p>
    These standard Linux utilities complement the DEEPX-specific tools. Use them to verify hardware detection
    and kernel-level driver state when something higher up the stack isn't responding.
  </p>

  <div class="sf-card sf-cmd">
    <div class="sf-cmd__head">
      <span class="sf-cmd__name">lspci</span>
      <span class="sf-cmd__purpose">Verify NPU is detected on PCIe bus</span>
    </div>
    <div class="sf-cmd__body">
      <p>
        Confirms the host has enumerated the DEEPX NPU over PCIe. If this line is missing from the output,
        the hardware connection has a problem; see the per-product callout below.
      </p>
      <div class="sf-output">
        <div class="sf-output__head">
          <span class="sf-output__label">Expected line in output</span>
        </div>
        <div class="sf-output__body">
<pre><span class="o-hl">0001:01:00.0</span>  Processing accelerators: DEEPX Co., Ltd. DX_M1A</pre>
        </div>
      </div>
      <div class="sf-callout sf-callout--info" style="margin-top:14px;margin-bottom:0">
        <div class="sf-callout__header">
          <svg class="sf-icon" width="16" height="16" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
            <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
          </svg>
          <span>Nothing listed?</span>
        </div>
        <div class="sf-callout__content">
          <p>
            On Sixfab AI HAT+ for Raspberry Pi 5, check the 16-pin FFC cable connections on both the AI HAT+
            and Raspberry Pi 5 ends. A loose latch is the most common cause. On Sixfab Edge AI Expansion Board,
            confirm the M.2 module is fully seated in the AI slot and the PCIe FFC is connected; verify the
            board is reaching the Pi 5 by inspecting <code>dmesg | grep -i dx</code>. On ALPON X5 AI there
            is no removable PCIe cabling; if <code>lspci</code> shows no DEEPX device, this indicates a
            system-level hardware fault. Contact Sixfab support.
          </p>
        </div>
      </div>
    </div>
  </div>

  <div class="sf-card sf-cmd">
    <div class="sf-cmd__head">
      <span class="sf-cmd__name">lsmod | grep -i dx</span>
      <span class="sf-cmd__purpose">Confirm kernel driver is loaded</span>
    </div>
    <div class="sf-cmd__body">
      <p>
        The DEEPX kernel module must be loaded for the runtime to communicate with the NPU. Empty output means
        the module is not loaded. On AI HAT+ or Edge AI Expansion Board, reboot or reinstall
        <code>sixfab-dx</code>. On ALPON X5 AI, this points to an OS image issue. Reboot first; if the module
        still doesn't load, contact Sixfab support.
      </p>
      <div class="sf-terminal">
        <div class="sf-terminal__header">
          <span class="sf-terminal__dot" style="background:#ff5f57"></span>
          <span class="sf-terminal__dot" style="background:#febc2e"></span>
          <span class="sf-terminal__dot" style="background:#28c840"></span>
          <span class="sf-terminal__title">bash</span>
        </div>
        <div class="sf-terminal__body">
<pre><span class="t-gn">lsmod</span> | <span class="t-gn">grep</span> <span class="t-bl">-i</span> dx</pre>
        </div>
      </div>
    </div>
  </div>

  <div class="sf-card sf-cmd">
    <div class="sf-cmd__head">
      <span class="sf-cmd__name">dmesg | grep -i dx</span>
      <span class="sf-cmd__purpose">View kernel messages from the DEEPX driver</span>
    </div>
    <div class="sf-cmd__body">
      <p>
        Shows kernel ring buffer messages from driver initialisation. Look for PCIe link errors, firmware
        load failures, or device enumeration issues here. Use <code>sudo dmesg</code> if output is empty
        without elevated permissions.
      </p>
      <div class="sf-terminal">
        <div class="sf-terminal__header">
          <span class="sf-terminal__dot" style="background:#ff5f57"></span>
          <span class="sf-terminal__dot" style="background:#febc2e"></span>
          <span class="sf-terminal__dot" style="background:#28c840"></span>
          <span class="sf-terminal__title">bash</span>
        </div>
        <div class="sf-terminal__body">
<pre><span class="t-gn">dmesg</span> | <span class="t-gn">grep</span> <span class="t-bl">-i</span> dx</pre>
        </div>
      </div>
      <div class="sf-output">
        <div class="sf-output__head">
          <span class="sf-output__label">Healthy boot output</span>
          <span class="sf-pill" style="background:var(--success-bg);color:var(--success-text);border-color:var(--success-bg)">OK</span>
        </div>
        <div class="sf-output__body">
<pre>[    2.102285] <span class="o-hl">dx_dma</span>: loading out-of-tree module taints kernel.
[    2.112716] <span class="o-hl">dx_dma_pcie</span> 0001:01:00.0: enabling device (0100 -&gt; 0102)
[    2.112830] <span class="o-hl">dx_dma_pcie</span> 0001:01:00.0: dw-&gt;dx_ver: 3
[    2.182700] <span class="o-hl">dx_dma_pcie</span> 0001:01:00.0: [dx_dma_pcie_probe] <span class="o-ok">Probe Done!!</span>
[    2.799076] <span class="o-ok">dxrt_driver_cdev_init: 1 devices</span></pre>
        </div>
      </div>
    </div>
  </div>

  <div class="sf-card sf-cmd">
    <div class="sf-cmd__head">
      <span class="sf-cmd__name">journalctl -xeu dxrt.service</span>
      <span class="sf-cmd__purpose">View runtime service logs</span>
    </div>
    <div class="sf-cmd__body">
      <p>
        Full systemd log for the DEEPX runtime daemon. Use when the runtime starts but inference jobs fail
        or behave unexpectedly. Add <code>-f</code> to follow the log live, or <code>--since "10 minutes ago"</code>
        to limit output.
      </p>
      <div class="sf-terminal">
        <div class="sf-terminal__header">
          <span class="sf-terminal__dot" style="background:#ff5f57"></span>
          <span class="sf-terminal__dot" style="background:#febc2e"></span>
          <span class="sf-terminal__dot" style="background:#28c840"></span>
          <span class="sf-terminal__title">bash</span>
        </div>
        <div class="sf-terminal__body">
<pre><span class="t-gn">journalctl</span> <span class="t-bl">-xeu</span> <span class="t-yl">dxrt.service</span>

<span class="t-dim"># Follow live</span>
<span class="t-gn">journalctl</span> <span class="t-bl">-xeuf</span> <span class="t-yl">dxrt.service</span>

<span class="t-dim"># Only last 10 minutes</span>
<span class="t-gn">journalctl</span> <span class="t-bl">-xeu</span> <span class="t-yl">dxrt.service</span> <span class="t-bl">--since</span> <span class="t-pp">"10 minutes ago"</span></pre>
        </div>
      </div>
    </div>
  </div>

  <div class="sf-callout sf-callout--info">
    <div class="sf-callout__header">
      <svg class="sf-icon" width="16" height="16" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
        <path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"/>
      </svg>
      <span>Permissions</span>
    </div>
    <div class="sf-callout__content">
      <p>
        Some <code>dmesg</code> and <code>journalctl</code> commands may require <code>sudo</code> on
        restricted systems. If you see empty output or a permission error, prefix the command with
        <code>sudo</code>.
      </p>
    </div>
  </div>


  
  <h2>Troubleshooting starting points</h2>
  <p>
    When something isn't working as expected, run these five commands in order. Each one moves down the
    stack. If the first answers your question, you don't need the rest. This flow is the canonical
    Sixfab + DEEPX diagnostic sequence and applies identically on all three products.
  </p>

  <div class="sf-callout sf-callout--warning">
    <div class="sf-callout__header">
      <svg class="sf-icon" width="16" height="16" fill="currentColor" viewBox="0 0 24 24" aria-hidden="true">
        <path d="M12 2 1 21h22L12 2zm0 6 7.5 13H4.5L12 8zm-1 4v4h2v-4h-2zm0 6v2h2v-2h-2z"/>
      </svg>
      <span>Run these in order</span>
    </div>
    <div class="sf-callout__content">
      <ol class="sf-flow">
        <li><code>dxrt-cli -s</code>: does the runtime see a healthy device with the expected versions?</li>
        <li><code>lspci</code>: does the host enumerate the DEEPX NPU on PCIe?</li>
        <li><code>lsmod | grep -i dx</code>: is the kernel module loaded?</li>
        <li><code>dmesg | grep -i dx</code>: did driver initialisation complete without errors?</li>
        <li><code>journalctl -xeu dxrt.service</code>: did the runtime daemon start cleanly and stay up?</li>
      </ol>
    </div>
  </div>

  <p>
    All three products are Linux systems with systemd and <code>journalctl</code> available out of the box:
    on Raspberry Pi OS for AI HAT+ and Edge AI Expansion Board, and on ALPON OS for ALPON X5 AI. The diagnostic
    commands and their output formats are identical; OS-specific differences (path locations, supplementary
    services, recovery paths for the device image) are documented on each product's Troubleshooting page.
  </p>

  <h3>Per-product Troubleshooting pages</h3>
  <div class="sf-related__grid">
    <a class="sf-related__card" href="/docs/ai-hat-plus-raspberry-pi-5-troubleshooting" target="_blank" rel="noopener">
      <span class="sf-related__eyebrow">AI HAT+ · Pi 5</span>
      <span class="sf-related__title">AI HAT+ Troubleshooting</span>
      <span class="sf-related__desc">FFC cable diagnostics, DKMS reinstall, kernel-mismatch recovery, thermal throttling on Pi 5.</span>
    </a>
    <a class="sf-related__card" href="/docs/edge-ai-expansion-board-raspberry-pi-5-troubleshooting" target="_blank" rel="noopener">
      <span class="sf-related__eyebrow">Edge AI Expansion Board · Pi 5</span>
      <span class="sf-related__title">Edge AI Expansion Board Troubleshooting</span>
      <span class="sf-related__desc">M.2 slot diagnostics, USB-C PD power, cellular and NVMe sibling subsystems, PCIe Gen3 enablement.</span>
    </a>
    <a class="sf-related__card" href="/docs/alpon-x5-ai-edge-computer-troubleshooting" target="_blank" rel="noopener">
      <span class="sf-related__eyebrow">ALPON X5 AI</span>
      <span class="sf-related__title">ALPON X5 AI Troubleshooting</span>
      <span class="sf-related__desc">ALPON OS recovery, image reflash via Boot/Burn switch, watchdog behaviour, sealed-enclosure thermal monitoring.</span>
    </a>
  </div>

</div>



`}</HTMLBlock>

<br />