<feed xmlns='http://www.w3.org/2005/Atom'>
<title>staging/stintel/scripts, branch master</title>
<subtitle>Staging tree of Stijn Tintel</subtitle>
<id>https://git-03.infra.openwrt.org/openwrt/staging/stintel/atom?h=master</id>
<link rel='self' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/'/>
<updated>2026-10-06T00:05:39Z</updated>
<entry>
<title>scripts/ext-tools.sh: refresh the stamps with a sub-second timestamp</title>
<updated>2026-10-06T00:05:39Z</updated>
<author>
<name>Hauke Mehrtens</name>
</author>
<published>2026-10-04T21:25:25Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=c459c71c4a778eac007f7e541cc9831fadde2a3c'/>
<id>urn:sha1:c459c71c4a778eac007f7e541cc9831fadde2a3c</id>
<content type='text'>
The GitHub CI spends 10 to 18 minutes rebuilding all host tools in most
"Check Kernel patches" jobs, although the tools container ships them
prebuilt. Before, the "Build tools" step took about 10 seconds.

The refresh sets all stamps to one time given to touch -t, which has a
resolution of a full second, so the fraction is zero. The CI job runs the
refresh about 0.2 seconds after actions/checkout finished, and git writes
the tools directory last. Its files therefore often get a timestamp in
the same second as the stamps, but after the full second. Since
timestamp.pl compares the fraction of a second, these source files are
newer than the stamps and every tool gets cleaned and built again.

Take the time from a freshly created temporary file and set all stamps
to it with touch -r. They still share one timestamp, but it now includes
the fraction and is always later than the checkout.

Fixes: 3cf47c5c17dc ("build: compare timestamps with a fraction of a second")
Assisted-by: Claude:claude-opus-5-5
Link: https://github.com/openwrt/openwrt/pull/25626
Signed-off-by: Hauke Mehrtens &lt;hauke@hauke-m.de&gt;
</content>
</entry>
<entry>
<title>qualcommax: add support for TP-Link RE700X</title>
<updated>2026-10-03T18:17:43Z</updated>
<author>
<name>Eduard Hart</name>
</author>
<published>2026-06-29T17:43:57Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=a20047f6ee25725a97063af0517aa5c254931a8b'/>
<id>urn:sha1:a20047f6ee25725a97063af0517aa5c254931a8b</id>
<content type='text'>
TP-Link RE700X is a dual-band Wi-Fi 6 (AX3000) range extender based on
Qualcomm IPQ5018 (2.4 GHz) with a QCN6122 (5 GHz) companion radio.

Specifications:
- SoC: Qualcomm IPQ5018 (dual-core ARM Cortex-A53)
- RAM: 256 MiB
- Flash: 128 MiB SPI-NAND (ESMT F50D1G41LB)
- Wi-Fi: IPQ5018 2.4 GHz + QCN6122 5 GHz, both 802.11ax
- Ethernet: 1x Gigabit - IPQ5018 MAC1 (DWMAC) via SGMII/uniphy0 to a
  Realtek RTL8211F (MDIO1 addr 6). The SoC internal GE PHY (MAC0/gmac0)
  is not wired to any external port and stays disabled.
- LEDs: 5, Buttons: reset + WPS
- Power: 100-240 V AC, 50/60 Hz, 0.4 A (internal PSU, wall-plug)
- UART: 3.3 V serial console, 115200 8N1; on-board 4-pad header,
  pinout from top: TX, RX, GND, VCC

MAC addresses (factory_data UBI volume, file default-mac, mounted
read-only in preinit like on the EAP650):
- LAN (label MAC): default-mac
- 2.4 GHz: default-mac + 1
- 5 GHz: default-mac + 2

Calibration data is extracted from the 0:art partition (IPQ5018 at
0x1000, QCN6122 at 0x26800).

Installation:
- From OpenWrt (or after a RAM-boot of the initramfs via U-Boot/TFTP):
  sysupgrade.
- From the stock firmware: openwrt-...-squashfs-factory-webflash.bin via
  the TP-Link web UI (System -&gt; Firmware Upgrade).
  scripts/tplink-re700x-factory.py wraps the rootfs UBI into the stock
  "nvrammanager" upload container (the same "tplink2022"/safeloader
  family as scripts/tplink-mkimage-2022.py); the stock flasher writes it
  into the inactive dual-boot slot. This path has not been tested end to
  end (no unit on stock firmware was left), so keep UART at hand for a
  first install.

The stock U-Boot passes a slot-correct ubi.mtd= (rootfs / rootfs_1 per the
dual-boot index) but with an unmountable root=mtd:ubi_rootfs. The DTS /chosen
inherits ubi.mtd= and appends root=/dev/ubiblock0_1, so OpenWrt boots from
whichever slot the flasher wrote. Like on the EAP650, sysupgrade installs
into the inactive slot and then points tp_boot_idx at it, keeping the
running slot as a fallback; the U-Boot environment is on 0:appsblenv.

The QCN6122/IPQ5018 board-2.bin (BDF) data is supplied via
ipq-wifi-tplink_re700x (openwrt/firmware_qca-wireless).

Wi-Fi is disabled in the DTS for now: with the default ath11k DP ring
sizes both radios exhaust the 256 MiB of RAM. It will be enabled in a
follow-up together with the ath11k patch that selects smaller rings on
low-memory boards, once that has been accepted upstream.

Signed-off-by: Eduard Hart &lt;eduard.hart@etik.com&gt;
Link: https://github.com/openwrt/openwrt/pull/23982
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>package-metadata: drop self-referencing rank from depends-on gates</title>
<updated>2026-10-02T13:13:40Z</updated>
<author>
<name>Mario Andrés Pérez</name>
</author>
<published>2026-09-08T17:14:27Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=87215b42ce7cfd2f43a9423788184a74e09917f0'/>
<id>urn:sha1:87215b42ce7cfd2f43a9423788184a74e09917f0</id>
<content type='text'>
Based on:
- 218aad6e2fb604ec79deff99d1aebc87189f005a re-emit a provider's depends
- 38824a13516db2b51067e6851b763b9846209b90 fold the select condition onto re-emitted deps
- 47d6b05ad328e80e4ee05e48aa95462f3518c014 provides-based dep resolution(%vpackage/@vdeps machinery)
- 1fd50531cac9c41334d8f57e2dbc1f50c3572445 "&lt;" rank comparison on provider selection

The provider-selection rank ('A&lt;B', born in 1fd50531) is RHS-anchored
on the stanza owner. When a consumer +selects a provider of a PROVIDES
target served by &gt;=2 providers, the provider's dependencies are
re-emitted into the consumer's kconfig block under this rank. A bare
@() arch/feature dep folded under it becomes:

  depends on !(PACKAGE_librespeed-cli-rust&lt;PACKAGE_librespeed-common)
              || (aarch64||arm||i386||i686||loongarch64||mips||...)

Kconfig treats any occurrence of a symbol in a dependency edge as an
edge, even negated under '!() ||', so PACKAGE_librespeed-common lands
in its own dir_dep: a recursive dependency self-loop.

The self-reference reaches the owner's stanza through any re-emitted
dependency emitted as depends-on: provider '@()' arch gates, plain
deps on a second virtual that '||'-expand, and plain deps on ordinary
packages inheriting the rank-bearing parent. Rank is therefore
generated only for select emission: it is built into a separate
variable and folded into the select gate alone, while re-emission
carries the pre-rank negation instead (!OTHER / !(A||B) over all
leftovers, exactly as before 1fd50531). Within a stanza no depends-on
gate can therefore self-reference, except for self-providing
consumers (provide and depend on the same name), which keep
historical behavior; user conditions, parent conditions and all
select arbitration remain untouched.

Fixes: 1fd50531cac9 ("metadata: ensure one dependency provider to be y if a package is y")
Signed-off-by: Mario Andrés Pérez &lt;mapb_@outlook.com&gt;
</content>
</entry>
<entry>
<title>scripts: add Mercusys fwup image generator</title>
<updated>2026-10-02T09:09:30Z</updated>
<author>
<name>Johan Alvarado</name>
</author>
<published>2026-08-26T16:30:43Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=b5a84a3323584b47f4dd7a7ebf1bae73630a3af0'/>
<id>urn:sha1:b5a84a3323584b47f4dd7a7ebf1bae73630a3af0</id>
<content type='text'>
Mercusys devices whose stock web UI expects an fwup container reject the
tplink-image-2022 container: the loader picks its verification algorithm
from the fw-type string at offset 0x14, which that container does not
write.

Build the container the loader accepts, with the fw-type string, the
support list and the MD5 placeholder digest in place.

This is a separate script rather than a flag on tplink-mkimage-2022.py
because only the first 0x14 bytes match, the BE length and the salted MD5
over file[4:]. That script writes 0xff filler up to 0x1014, a table there
(&gt;2I rootfs_size/num_items, then &gt;I32s2I entries), data at a fixed 0x1814
base, the rootfs first and a packed &gt;4B1I2I soft version. The fwup
container has no table: 0x2c records of name[32] + &gt;III base, next_off,
size, each followed by its own data and chained through next_off until 0,
the rootfs appended after the last record, and the soft version as ASCII
soft_ver: in an ordinary record.

Signed-off-by: Johan Alvarado &lt;contact@c127.dev&gt;
Link: https://github.com/openwrt/openwrt/pull/24919
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>build: remove the AUDIO_SUPPORT and DISPLAY_SUPPORT symbols</title>
<updated>2026-09-29T14:29:43Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-09-26T20:41:59Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=da6323e54c9cb75479eb5be5c83d43a15d5c3c34'/>
<id>urn:sha1:da6323e54c9cb75479eb5be5c83d43a15d5c3c34</id>
<content type='text'>
Nothing tests either symbol any more. AUDIO_SUPPORT was also selected by
PCI_SUPPORT and USB_SUPPORT, which stood for "a sound card could be
plugged in here": audio hardware sits behind MMC, SPI, a Bluetooth UART
or an SoC PCM block just as often, so the inference never held. The
display feature was derived from a literal CONFIG_VGA_CONSOLE or CONFIG_FB
in a kernel fragment, which misses every target whose fbdev came from DRM
emulation.

Delete both symbols, the two selects, the feature translations and the
derivation.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>build: order the Hardware support menu before Base system</title>
<updated>2026-09-29T14:29:43Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-09-27T18:08:43Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=6e638524eed4c7ca316043a9c2d8309282369fca'/>
<id>urn:sha1:6e638524eed4c7ca316043a9c2d8309282369fca</id>
<content type='text'>
Categories other than Base system are emitted in alphabetical order, so
a category describing the hardware a device has would land halfway down
the package menu among unrelated ones. Emit Hardware support first
instead, ahead of Base system, since which device classes an image
supports is the first thing to choose and everything else follows from
it.

print_package_config_category() returns early for a category no package
uses, so this has no effect until such a package exists.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>build: gate the VM image formats on their target features</title>
<updated>2026-09-24T21:33:28Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-09-21T13:37:28Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=ad1b1f2d36aacf13e3f983a1bdf4d699ef929ae3'/>
<id>urn:sha1:ad1b1f2d36aacf13e3f983a1bdf4d699ef929ae3</id>
<content type='text'>
The x86 and armsr targets declare the vdi, vmdk and vhdx features, but
VDI_IMAGES, VMDK_IMAGES and VHDX_IMAGES depend on a hardcoded target
list instead, so the features select nothing and a target opting in has
to edit config/Config-images.in.

Give them USES_VDI, USES_VMDK and USES_VHDX in the same shape as the
other image formats and depend on those. The set of targets offering
each format is unchanged.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>build: indent the generated PWM_SUPPORT select</title>
<updated>2026-09-24T21:33:28Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-09-21T13:40:32Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=1b85ec12b37dcc70be71671be5773d2e3e2c3f06'/>
<id>urn:sha1:1b85ec12b37dcc70be71671be5773d2e3e2c3f06</id>
<content type='text'>
"\s" is not an escape sequence in a Perl double-quoted string, so the
pwm feature emits its select statement without the leading tab that
every other feature gets. Kconfig accepts the unindented line, but the
generated target/Config.in is inconsistent.

Fixes: f6fbc397066e ("build: define PWM_SUPPORT arch feature flag")
Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>realtek: take the Belkin header time from SOURCE_DATE_EPOCH</title>
<updated>2026-09-24T11:36:49Z</updated>
<author>
<name>Paul Spooren</name>
</author>
<published>2026-09-23T13:26:40Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=98bc30d154f67557598a2114463e9b97c915463d'/>
<id>urn:sha1:98bc30d154f67557598a2114463e9b97c915463d</id>
<content type='text'>
The factory images of the Linksys LGS3xxC switches differ between
builds in the Belkin header:

  -00000000: 0780 0001 7917 f807 6ab3 0fe3 0058 2000  ....y...j....X .
  +00000000: 0780 0001 2a5a 3f79 6ab3 d0c7 0058 2000  ....*Z?yj....X .

belkin-header.py stores time.time() as the image time, which also
changes the header checksum. Use SOURCE_DATE_EPOCH when it is set, like
linksys-image.sh does for the tarball inside.

Link: https://github.com/openwrt/openwrt/pull/25355
Signed-off-by: Paul Spooren &lt;mail@aparcar.org&gt;
</content>
</entry>
<entry>
<title>build: create reproducible CycloneDX SBOMs</title>
<updated>2026-09-22T16:46:30Z</updated>
<author>
<name>John Crispin</name>
</author>
<published>2026-09-21T19:56:35Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=712ff7ca89f76f6fdcb3289f78b7176174013a1e'/>
<id>urn:sha1:712ff7ca89f76f6fdcb3289f78b7176174013a1e</id>
<content type='text'>
Both SBOM generators produce a different file on every run, so the
published .bom.cdx.json of an image and of a package feed never match a
rebuild.

dump_cyclonedxsbom_json() in scripts/package-metadata.pl has three
causes. It draws the serial number from rand(), it takes the timestamp
from the wall clock, and encode_json() follows the Perl hash order, which
changes with the hash seed of each run. The last one alone reorders every
key in the file.

scripts/make-sbom.py has the first two causes, through uuid.uuid4() and
datetime.utcnow().

Take the timestamp from SOURCE_DATE_EPOCH, which the build exports. Derive
the serial number from the timestamp and the component list, so it stays a
valid RFC 4122 identifier and still changes when the content changes. Sort
the keys of the Perl output.

Tested with the package index and the image manifest of an ipq40xx build.
Two runs with the same SOURCE_DATE_EPOCH are now identical, two runs with
different values differ, and the scripts exit with an error when the value
is not a number. Both files differ between two runs without the change.

Signed-off-by: John Crispin &lt;john@phrozen.org&gt;
</content>
</entry>
</feed>
