jetson-customize-clocks
Use to lock/cap Jetson CPU/GPU/EMC clocks, toggle EMC/CPU DVFS, or change cpufreq governors by editing BPMP DTB and nvpower.sh pre-flash. Do NOT use for live tuning or nvpmodel edits.
Install / Use
npx skills add NVIDIA/skills --skill jetson-customize-clocksInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Development & EngineeringSupported Platforms
Tags
Our assessment of jetson-customize-clocks
jetson-customize-clocks scores 92/100 on our quality scale, 620th of 3,356 Development & Engineering skills we index (top 19%).
Its SKILL.md is 19 KB long, well organised into 20 sections with 1 code example: a thorough specification that gives an agent plenty to work with.
With 3,421 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 5 days ago, so jetson-customize-clocks is actively maintained.
- It is released under the Apache-2.0 license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
jetson-customize-clocks compared with similar skills
All 4 of these similar skills score higher than jetson-customize-clocks; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| jetson-customize-clocks (this skill)by NVIDIA | 92 | 3.4k | 5d ago | SKILL.md |
| ai-job-searchby MadsLorentzen | 100 | 44.4k | today | CLAUDE.md |
| claude-howtoby luongnv89 | 100 | 41.7k | 2d ago | CLAUDE.md |
| algorithmic-artby anthropics | 100 | 177.9k | 6d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 6d ago | SKILL.md |
Frequently asked questions
- How do I install jetson-customize-clocks?
- Run
npx skills add NVIDIA/skills --skill jetson-customize-clocks. The install tabs above show the steps for each supported agent. - Which AI agents does jetson-customize-clocks work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is jetson-customize-clocks safe to use?
- It is Apache-2.0-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is jetson-customize-clocks still maintained?
- The repository was last updated 5 days ago, so jetson-customize-clocks is actively maintained.
Skill content
View source on GitHubname: jetson-customize-clocks description: Use to lock/cap Jetson CPU/GPU/EMC clocks, toggle EMC/CPU DVFS, or change cpufreq governors by editing BPMP DTB and nvpower.sh pre-flash. Do NOT use for live tuning or nvpmodel edits. version: 0.0.1 license: "Apache-2.0" metadata: data-classification: public author: "Jetson Team" tags: - clocks - cpu - gpu - emc - dvfs - bwmgr - bpmp - nvpower - cpufreq - devfreq domain: clocks
Customize Clocks
Purpose
Customize CPU, GPU, and EMC clock behavior on a Jetson target by editing files under Linux_for_Tegra/ before flashing the image. Two layers are in scope:
- The BPMP DTB at
Linux_for_Tegra/bootloader/<BPFDTB_FILE>— per-clockmax-rate-customceilings, plus the EMC DVFS gate (bwmgr + cactmon on all SoCs; osp-controller on T26x only). - nvpower.sh at
Linux_for_Tegra/rootfs/etc/systemd/nvpower.sh— cpufreq / devfreq governors and (optionally) per-device min / max / static rates written to sysfs at boot.
Common triggers: "lock CPU/GPU/EMC frequency", "pin GPU to Fmax", "pin EMC to MAXN", "disable/enable EMC DVFS", "disable/enable CPU DVFS", "set CPU/GPU max rate", "change cpufreq governor".
Out of scope: runtime clock tuning on a live target (no flash step), nvpmodel power-mode edits (use the sibling skill /jetson-customize-nvpmodel), and silicon-ceiling overrides (max-rate-maxn is read-only).
Prerequisites
Resolve the active profile per
../../context/target-platform-contract.md.
Refuse and route in these cases:
| Condition | Refuse with |
|---|---|
| No active profile, or active: NA | Route to /jetson-set-target or /jetson-init-target. |
| Profile lacks bsp_image: block | Route to /jetson-init-image. |
| <bsp_image.root_path>/Linux_for_Tegra/ missing | Route to /jetson-init-image. |
| <source.root_path>/Linux_for_Tegra/ missing or not a git repo | Route to /jetson-init-source. |
Resolve paths:
<bsp_image.root_path>frombsp_image.root_path:if present, else<workspace>/Image.<source.root_path>fromsource.root_path:if present, else<workspace>/Source.
<bsp_image.root_path> is read-only for this skill; every write
(Operation 1's BPMP DTB and Operation 2's nvpower.sh) lands under
<source.root_path> (the overlay tracker). This is the workflow
invariant in
../../context/bsp-customization-workflow.md#workflow-invariants —
hand-editing upstream silently destroys the diff trail and makes
/jetson-promote-image a noop.
Instructions
- Resolve the prerequisites above (active profile, BSP image extracted, source overlay tracker initialized).
- Pick the operation from the table below.
- Follow the linked procedure section — Operation 1 (BPMP DTB), Operation 2 (
nvpower.sh), or the MAXN recipe for both. - Commit the edit inside the overlay tracker per each Operation's commit convention.
- Deploy with
/jetson-promote-image→/jetson-flash-image. The new BPMP DTB andnvpower.shtake effect on the next boot.
Supported operations
| Operation | Where the edit lives | Procedure section |
|---|---|---|
| Lock a CPU / GPU clock to a specific rate | BPMP DTB max-rate-custom on the clock node + nvpower.sh governor performance | "Content edit: max-rate-custom" + "Pick the edit" |
| Lock EMC at its init rate (disable EMC DVFS) | BPMP DTB: bwmgr.enabled = 0, cactmon.enabled = 0, plus /delete-node/ osp-controller on T26x only | "Content edit: EMC DVFS disable / enable" |
| Re-enable EMC DVFS | BPMP DTB: bwmgr.enabled = 1, cactmon.enabled = 1, restore osp-controller on T26x | "Content edit: EMC DVFS disable / enable" |
| Pin everything to MAXN for stress runs | Combine the above + nvpmodel MAXN as boot default | see Recipe |
| Lower a clock's hard ceiling without locking | BPMP DTB max-rate-custom only | "Content edit: max-rate-custom" |
| Bound a device's rate without pinning | nvpower.sh min/max via sysfs | "Pick the edit" |
Operation 1 — BPMP DTB edits
Follow the BPMP-DTB customization protocol in
../../references/bsp-customization-bpmp-dtb.md.
The protocol owns the mechanics — pristine import on first touch,
dtc decompile, recompile, sanity-check, commit. This skill
supplies only the clock-specific content (which nodes and
properties to edit during the protocol's "Edit the DTS" step).
The edited .dtb lands in the <source.root_path>/Linux_for_Tegra/
overlay tracker. /jetson-promote-image's channel A walks the
tracker and copies the file into bsp_image. Do not edit
<bsp_image.root_path>/Linux_for_Tegra/bootloader/<bpmp-dtb>
directly — that's the promote output, not an input.
Resolve the SKU-correct BPMP DTB
Per the protocol's "Resolving the active BPMP DTB" section, read
BPFDTB_FILE from the active flash conf. For the common Thor /
single-SKU conf shapes this is the static BPFDTB_FILE=... line
in the per-board .conf and the value is authoritative as-is.
For SKU-multiplexed conf shapes (Orin AGX devkit conf chain
that selects a different BPMP DTB per board_sku/board_FAB
via update_flash_args_common — see
../../context/bsp-customization-software-layers.md#per-board-conf-dispatch--update_flash_args_common),
walk the dispatch chain with board_sku=<module.sku> and
board_FAB=<module.revision or empty> from the active profile,
and read BPFDTB_FILE from the dispatch output — not from
the static line of the per-board .conf. Static and dispatched
values match for non-multiplexed confs; the dispatch is
mandatory only when the conf chain conditionally overrides
BPFDTB_FILE.
List effective max rates (inspection)
Inspect both layers of the runtime ceiling — see references/clock-control-model.md#effective-runtime-ceiling — before deciding on a max-rate-custom value.
Inspection cookbook (BPMP-side decompile + grep; nvpmodel-side awk over the boot default mode) is in references/bpmp-dtb-clock-edits.md#inspection-cookbook.
For the nvpmodel layer see /jetson-customize-nvpmodel.
This step does not mutate state — it's a precondition for sizing
the edit in the "Content edit: max-rate-custom on a named clock node" step.
Content edit: max-rate-custom on a named clock node
During the "Edit the DTS" step of the protocol, modify the property
inside the named clock node — never lateinit. max-rate-custom
must be strictly below the clock's hard cap (max-rate-maxn if
defined, otherwise the live max_rate from a running target of
the same chip / SKU).
DTS edit form, semantics, and the nvpmodel ↔ BPMP clock-node
mapping live in references/bpmp-dtb-clock-edits.md.
Then hand control back to the protocol — its "Recompile", "Sanity-check
the recompiled blob", "Stage in the overlay tracker", and "Cleanup"
steps cover the rest.
Commit-message convention per the protocol:
<BPMP_BASENAME>: jetson-customize-clocks — <clock-node> max-rate-custom = <value>.
Content edit: EMC DVFS disable / enable
Default behavior (EMC DVFS on) requires no edit. Disabling EMC
DVFS is a multi-node edit applied inside the same "Edit the DTS" step of
the protocol, not a bwmgr toggle:
| # | Edit | Scope |
|---|---|---|
| 1 | bwmgr.enabled = <0x00> | All SoCs, mandatory |
| 2 | cactmon.enabled = <0x00> | All SoCs, mandatory |
| 3 | /delete-node/ osp-controller | T26x (Thor) mandatory — T23x (Orin) has no such node, skip |
Detection: dtc -I dtb -O dts <bpmp-dtb> | grep -c osp-controller
— zero hits ⇒ T23x path. Full DTS snippets, the surviving-paths
failure modes, and the re-enable procedure are in
references/emc-dvfs-disable.md.
Apply the protocol's "Recompile" through "Cleanup" steps once the multi-node edit is in
place. Commit-message convention:
<BPMP_BASENAME>: jetson-customize-clocks — EMC DVFS disable (bwmgr + cactmon[+ osp-controller]).
Disabling raises idle power; intended for stress / performance tests, not production rootfs.
Re-run + idempotency
Per the protocol's "Re-runnability" section, re-running this
skill with the same target value produces a no-op commit. Re-
running with a different value rewrites the same property — git log -- $BPMP_REL shows the per-run history. To return a clock
to its max-rate-maxn ceiling, edit the DTS to remove the
max-rate-custom line and recompile.
Operation 2 — nvpower.sh edits
Edits nvpower.sh, which runs at boot via nvpower.service to set
cpufreq / devfreq governors and rates.
The per-script file
The script this Operation edits has the relative path:
Linux_for_Tegra/rootfs/etc/systemd/nvpower.sh
It lives in two roots; the Operation walks both:
| Role | Location | Skill writes? |
|---|---|---|
| Detection + pristine source | <bsp_image.root_path>/Linux_for_Tegra/rootfs/etc/systemd/ | no — read-only |
| Overlay edit target + git commit | <source.root_path>/Linux_for_Tegra/rootfs/etc/systemd/ | yes |
Subsequent sub-steps refer to the per-script file to mean the overlay
copy under <source.root_path>. The <bsp_image.root_path> copy is read
once during the pristine-import step below, then never touched again.
Overlay edit recipe (apply before editing nvpower.sh)
Follow the canonical
Off-skill edits recipe
in the workflow doc — pristine import + customization commit pair, both
gated by the preview gate. nvpower.sh is a single file with no
propagation set; one pristine commit + one customization commit covers
the entire change.
Concrete substitutions for this skill:
<rel>/<file>isrootfs/etc/systemd/nvpower.sh.- Suggested pristine-import message:
import pristine: rootfs/etc/systemd/nvpower.sh, bodySource: <bsp_image.root_path>/Linux_for_Tegra/ (BSP <bsp_image.version>). - Suggested customization-commit header:
jetson-customize-clocks: nvpower.sh <summary>, body lines likeset_cpufreq_governor: desired_cpufreq_gov "schedutil" -> "performance".
Pick the edit
Function locations (set_cpufreq_governor, set_devfreq_governor), common-edit recipes (pin to Fmax, static rate, min/max bounds), and the nvidia-l4t-init package-upgrade caveat live in references/nvpower-sh-edits.md.
Deploy
The customization commit in the overlay tracker does not reach the device on its own. The Deploy chain:
/jetson-promote-image— copies every tracked file in the overlay into<bsp_image.root_path>/Linux_for_Tegra/. Diff-aware (skip byte-identical); usessudo cp -pforrootfs/*destinations./jetson-flash-image— flashes the updatedbsp_imageto the device.nvpower.serviceruns the new script on the next boot.- (Alternate, no flash) Copy
<source.root_path>/Linux_for_Tegra/rootfs/etc/systemd/nvpower.shdirectly to the running target's/etc/systemd/nvpower.sh, thensudo systemctl restart nvpower.service(or reboot).
Editing <source.root_path>/... without committing — or editing
<bsp_image.root_path>/... directly — does nothing for /jetson-promote-image
and is silently lost on the next /jetson-init-image re-extract.
Recipe — pin everything to MAXN for stress / performance runs
Combines Operations 1 + 2. Operation 1's BPMP edits all flow
through one round of the protocol (a single decompile / multi-node
edit / recompile / commit cycle — don't round-trip the protocol
twice for the same .dtb):
- BPMP DTB (the "Content edit: `m
Truncated for display — read the full file on GitHub.
Related Skills
ai-job-search
44.4kThe job search that runs on your machine. AI job application framework built on Claude Code: evaluate postings, tailor CVs, write cover letters, prep interviews. Fork it and own it.
claude-howto
41.7kA visual, example-driven guide to Claude Code — from basic concepts to advanced agents, with copy-paste templates that bring immediate value.
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
