Add the label-mac-device alias to the device dts.
Signed-off-by: Christoph Krapp <achterin@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23134
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 9c2e0ba8d8)
Stop overriding CCACHE_COMPILERCHECK from rules.mk and rely on
ccache's default, which hashes the compiler binary's mtime and
size.
For a local tree that is enough: the toolchain only changes when
it is rebuilt, and a rebuild updates mtime and size. Users who
want a stricter check can still set CCACHE_COMPILERCHECK in their
environment.
CI does not depend on this export either. The workflow writes a
secondary ccache.conf with
compiler_check=string:<toolchain-commit-sha>
so the cache key is tied to the toolchain source revision. That
is both stricter than the previous "%compiler% -v -c" setting
and portable across runners, where compiler mtimes would not
match after restoring a cache archive.
Link: https://github.com/openwrt/openwrt/pull/22995
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 3956287514)
The sama5d4_xplained_nandflash target incorrectly references microchip_sama5d3-xplained as its BUILD_DEVICES value.
This appears to be a copy-paste error, as all other SAMA5D4 Xplained targets (e.g. mmc and spiflash) correctly use microchip_sama5d4-xplained. The target name itself also clearly refers to the SAMA5D4 platform.
In addition, the SAMA5D3 Xplained and SAMA5D4 Xplained boards use different NAND flash hardware and configurations, so pointing the nandflash target to a SAMA5D3 device is incorrect and may lead to invalid builds or runtime issues.
Fix the inconsistency by updating BUILD_DEVICES to microchip_sama5d4-xplained, aligning the nandflash target with the rest of the SAMA5D4 definitions and ensuring the correct device mapping.
Signed-off-by: Cerrone Diamant <cerrone@tutamail.com>
Link: https://github.com/openwrt/openwrt/pull/23022
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 39f528e440)
Backport patch merged upstream that optimize the QDMA rx queue descriptor
setup by configuring the CPU IDX only when needed.
(cherry picked from commit 70ad03e0ac)
Link: https://github.com/openwrt/openwrt/pull/23046
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
It seems that upstream one of the patch had a compilation erro caused by
merging net and net-next and it was fixed silently in a merge commit.
Fix this error in the affected patch.
Fixes: 155c610962 ("airoha: backport additional patch for memory leak and multi-serdes rework")
(cherry picked from commit 3187113c8a)
Link: https://github.com/openwrt/openwrt/pull/23046
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Backport upstream memory leak patch merged upstream and even more
preliminary patch for multi-serdes rewrk.
(cherry picked from commit 155c610962)
Link: https://github.com/openwrt/openwrt/pull/23046
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Backport minor fixup merged upstream for Ethernet driver on Offload
Scenario. This is to continue the effort of keeping the Airoha Ethernet
driver synced with the upstream version.
(cherry picked from commit 2f52b8f724)
Link: https://github.com/openwrt/openwrt/pull/23046
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Drop duplicated patch that weren't dropped by the backport commit.
Affected patch:
- 910-01-v7.0 (duplicate of 121-v7.0)
- 910-02-v7.0 (duplicate of 123-v7.0)
Signed-off-by: YaleiZang <yalei.zang@airoha.com>
(improve commit description and title)
Link: https://github.com/openwrt/openwrt/pull/23046
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
This patch backports a small but important part of the upstream commit:
b3f1b9e2aa07 build: Remove INCLUDE_MEMORY [PR117737]
Its original commit message fails to mention that the commit also moves
the `#include <memory>` to an earlier position within system.h,
which is the actual change that we're after in this patch.
Building our GCC 14.3 with host GCC 16, the inclusion order starts to matter,
which is an issue that was also touched upon by the upstream commits:
9970b576b7e4 Include safe-ctype.h after C++ standard headers, to avoid over-poisoning
f6e00226a4ca build: Move sstream include above safe-ctype.h {PR117771]
Signed-off-by: Lars Gierth <larsg@systemli.org>
Link: https://github.com/openwrt/openwrt/pull/23095
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit a32a367259)
libcody will fail to build if building using a GCC16 host compiler, so
backport the upstream fix.
Signed-off-by: Robert Marko <robert.marko@sartura.hr>
(cherry picked from commit e7e5d470c1)
The Xiaomi AX6000 has three radios:
- IPQ5018 integrated 2.4 GHz (ath11k AHB, wifi0)
- QCN9024 on PCIe0 (ath11k PCI, QCA8074-class 5 GHz)
- QCA9887 on PCIe1 (ath10k, 5 GHz)
The DTS previously kept pcie1 disabled because the controller
could not bring the link up. The real cause was the PERST GPIO
polarity: the stock device-tree uses GPIO_ACTIVE_HIGH on GPIO18
for the QCA9887 card, while OpenWrt had GPIO_ACTIVE_LOW, leaving
the card held in reset.
With the correct polarity the PCIe1 link trains and the QCA9887
enumerates at 01:00.0. ath10k loads firmware-2.bin, registers
phy0 with mac80211, and provides a functional 5 GHz AP.
Tested on a reworked Xiaomi AX6000 with QCA9887 soldered in.
All three radios enumerate, load firmware and beacon
successfully; scan, association and data traffic confirmed on
each radio.
Signed-off-by: chinawrj <chinawrj@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23047
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 1bc03924db)
Backport new field_prep()/get() particularly useful to handle case where a
bitmask is not const and FIELD_PREP can't be used. This permit to replace
manual shift with these macro. (also needed to permit backport of some
patch without modification)
Backport reworked patch that drop the local field_prep()/get() macro in
favor of the global one.
Link: https://github.com/openwrt/openwrt/pull/22479
(cherry picked from commit 25f92aaae1)
Link: https://github.com/openwrt/openwrt/pull/22820
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
- Refreshed existing patches
- Removed patch '128-v7.1-net-airoha-Remove-airoha_dev_stop-in-airoha_remove.patch', as it has been upstreamed.
Signed-off-by: YaleiZang <yalei.zang@airoha.com>
Link: https://github.com/openwrt/openwrt/pull/22820
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Backport additional upstream patch in preparation for multi-serdes and
proper PCS support.
Automatically refresh all affected patch.
(cherry picked from commit 25de25827e)
Link: https://github.com/openwrt/openwrt/pull/22820
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Backport more upstream patch to include all the fixes pushed upstream and
add all the preliminary patch for multi-serdes support.
While at it also move 2 patch in the 6xx numbering to the 000-1xx backport
numbering to keep things tidy.
All the affected patch manually and automatically refreshed.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
[ add comment, renumber patch, add more patch, fix PCS patch ]
Link: https://github.com/openwrt/openwrt/pull/22479
(cherry picked from commit c5a8ddd0ac)
Link: https://github.com/openwrt/openwrt/pull/22820
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Backport a patch that reduces the quality of HWRNG. HWRNG has lower
entropy than expected. Thanks to this patch, it has a lower priority.
Signed-off-by: Aleksander Jan Bajkowski <olek2@wp.pl>
Link: https://github.com/openwrt/openwrt/pull/21722
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 5cd176925e)
Link: https://github.com/openwrt/openwrt/pull/22820
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Due to confusing Documentation, the SPI and SLIC base clock and
register location for Airoha AN7583 SoC were wrong.
Fix them with new updated Documentation source to provide correct
clock support.
Fixes: c5b12fc02a ("airoha: Introduce support for Airoha AN7583 SoC")
(cherry picked from commit 6c4c988a5f)
Link: https://github.com/openwrt/openwrt/pull/22820
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
Add patches to fix build failures on musl-based toolchains:
0002-xdpsock-fix-struct-ethhdr-redefinition-on-musl.patch:
xdpsock.c included <net/ethernet.h> and <netinet/ether.h> alongside
<linux/if_ether.h>, triggering a struct ethhdr redefinition on musl.
Replace BSD-style ether_header/ether_addr with struct ethhdr and drop
the conflicting includes.
0003-build-use-gnu2x-to-avoid-stdbool.h-dependency.patch:
Switch CFLAGS and BPF_CFLAGS from -std=gnu11 to -std=gnu2x. In C23,
bool is a native keyword, fixing "stdbool.h: No such file or directory"
errors with a clang lacking its resource directory (e.g. llvm-bpf built
with LLVM_INSTALL_TOOLCHAIN_ONLY=ON on musl targets).
Link: https://github.com/openwrt/openwrt/pull/22983
(cherry picked from commit d16758d2d3)
Link: https://github.com/openwrt/openwrt/pull/23015
Signed-off-by: Nick Hainke <vincent@systemli.org>
Add a patch that avoids including <stddef.h> in BPF headers, fixing
build failures on OpenWrt toolchains where the header is unavailable:
In file included from xdpfilt_dny_udp.c:10:
In file included from ./xdpfilt_prog.h:24:
../lib/../headers/xdp/parsing_helpers.h:18:10: fatal error: 'stddef.h' file not found
18 | #include <stddef.h>
| ^~~~~~~~~~
1 error generated.
make[5]: *** [../lib/common.mk:111: xdpfilt_dny_udp.o] Error 1
make[4]: *** [Makefile:40: xdp-filter] Error 2
Link: https://github.com/openwrt/openwrt/pull/21972
(cherry picked from commit c752525511)
Link: https://github.com/openwrt/openwrt/pull/23015
Signed-off-by: Nick Hainke <vincent@systemli.org>
The DFI ASL553 is a 3.5" SBC very similar to the ADN553. The network
topology is identical, so both boards share the same network
configuration.
Differences from the ADN553:
* CPU: Intel Atom x7835RE (8C, 12W) / x7433RE (4C, 9W) /
x7213RE (2C, 9W) / x7211RE (2C, 6W)
(Amston Lake / x7000RE series instead of Alder Lake-N)
* Ethernet: Intel I226IT instead of I226V
* Audio: Realtek ALC888S instead of ALC888
For installation and board detection details, see commit b6b09a2ad8
("x86: add support for DFI ADN553").
Link: https://github.com/openwrt/openwrt/pull/23003
(cherry picked from commit bc391dd8ed)
Link: https://github.com/openwrt/openwrt/pull/23015
Signed-off-by: Nick Hainke <vincent@systemli.org>
The DFI ADN553 is a 3.5" SBC based on Intel Atom Alder Lake-N
processors with three Intel I226V 2.5GbE ports.
Specs:
* CPU: Intel Atom x7425E (4C, 12W) / x7213E (2C, 10W) /
x7211E (2C, 6W)
* RAM: 1x DDR5 SO-DIMM, up to 16GB
* Storage: 1x M.2 M key 2242/2280 (PCIe Gen3 x1/SATA3),
1x SATA 3.0
* Ethernet: 3x 2.5GbE RJ-45 (Intel I226V)
* USB: 4x USB 3.2 (rear), 2x USB 2.0 (internal)
* Expansion: 1x M.2 B key 3052 (USB3/USB2, opt. PCIe x1, SIM),
1x M.2 E key 2230 (USB/PCIe x1, CNVi)
* Display: 1x HDMI, 1x Type-C DP Alt. Mode, 1x LVDS/eDP
* Power: 9-36V DC wide range input
* TPM: dTPM 2.0 (NPCT750AADYX)
* Form factor: 3.5" SBC (146mm x 102mm)
Installation:
1. Write the combined-efi.img to a USB drive:
dd if=combined-efi.img of=/dev/sdX conv=fdatasync
2. Boot the ADN553 from the USB drive via the UEFI boot menu.
3. For permanent installation, write the image to the M.2 or
SATA storage device.
The board uses "Default string" as DMI sys_vendor and product_name
placeholders, so board detection is fixed by filtering these out and
falling through to board_vendor (DFI Inc.) and board_name (ADN553).
The three I226V NICs are pinned to their PCIe paths to ensure
consistent interface ordering matching the physical left-to-right
port layout. eth0 is assigned as WAN and eth1/eth2 as LAN.
Link: https://github.com/openwrt/openwrt/pull/22980
(cherry picked from commit b6b09a2ad8)
Link: https://github.com/openwrt/openwrt/pull/23015
Signed-off-by: Nick Hainke <vincent@systemli.org>
This device has a redundant configuration. Important when writing to it.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22882
Signed-off-by: Robert Marko <robimarko@gmail.com>
This is apparently a redundant u-boot config split between cfg1 and
cfg2. The size is also 0x10000 instead of the full amount.
This is needed in order to fix ethernet probing.
Fixes: 3faa3a04bb ("ath79: enterasys,ws-ap3805i: use nvmem")
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22882
Signed-off-by: Robert Marko <robimarko@gmail.com>
Commit b4d7263bc3 ("kernel: of: avoid some unnecessary bad cell count
warnings") backported Linux commit 6e5773d52f4a ("of/address: Fix WARN
when attempting translating non-translatable addresses"), which started
requiring #address-cells for a device's parent if we want to use the
reg resource in a device node.
Many Chromium devices use a /firmware/coreboot device node that is
patched in by the boot firmware. These structures look something like:
# find /sys/firmware/devicetree/base/firmware/
/sys/firmware/devicetree/base/firmware/
/sys/firmware/devicetree/base/firmware/scm
/sys/firmware/devicetree/base/firmware/scm/compatible
/sys/firmware/devicetree/base/firmware/scm/name
/sys/firmware/devicetree/base/firmware/ranges
/sys/firmware/devicetree/base/firmware/chromeos
/sys/firmware/devicetree/base/firmware/chromeos/fmap-offset
/sys/firmware/devicetree/base/firmware/chromeos/compatible
/sys/firmware/devicetree/base/firmware/chromeos/readonly-firmware-version
/sys/firmware/devicetree/base/firmware/chromeos/nonvolatile-context-storage
/sys/firmware/devicetree/base/firmware/chromeos/hardware-id
/sys/firmware/devicetree/base/firmware/chromeos/firmware-type
/sys/firmware/devicetree/base/firmware/chromeos/vboot-shared-data
/sys/firmware/devicetree/base/firmware/chromeos/nonvolatile-context-offset
/sys/firmware/devicetree/base/firmware/chromeos/firmware-version
/sys/firmware/devicetree/base/firmware/chromeos/nonvolatile-context-size
/sys/firmware/devicetree/base/firmware/chromeos/name
/sys/firmware/devicetree/base/firmware/coreboot
/sys/firmware/devicetree/base/firmware/coreboot/compatible
/sys/firmware/devicetree/base/firmware/coreboot/board-id
/sys/firmware/devicetree/base/firmware/coreboot/reg
/sys/firmware/devicetree/base/firmware/coreboot/name
/sys/firmware/devicetree/base/firmware/name
Notably, there is no #{address,size}-cells in /firmware.
This breaks any driver relying on a device under /firmware, such as the
coreboot_table driver.
This is technically an ill-formatted FDT, and so we might as well just
add the properties ourselves.
Signed-off-by: Brian Norris <computersforpeace@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22951
(cherry picked from commit a94c020f38)
Link: https://github.com/openwrt/openwrt/pull/22957
Signed-off-by: Robert Marko <robimarko@gmail.com>
commit eaa82118ea missed kmod change for clearfog base/pro
Fixes: eaa82118ea ("mvebu: Switch to use a module for mv88e6xxx")
Signed-off-by: Sven Friedmann <sf.github@okay.ms>
Link: https://github.com/openwrt/openwrt/pull/22918
Signed-off-by: Robert Marko <robimarko@gmail.com>
(cherry picked from commit 92259bcf1e)
The check of files from packages was only checking opkg files.
Check for apk as well and fail if both are missing.
Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17847
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 37c5aade23)
The list of files excluded from backup was outdated.
Signed-off-by: Luiz Angelo Daros de Luca <luizluca@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/17847
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
(cherry picked from commit 2c146f29e8)
Hardware:
- SoC: MediaTek MT7628AN (MIPS 580MHz)
- Flash: 16 MiB NOR
- RAM: 64 MiB DDR2
- WLAN: 2.4 GHz (MT7628)
- Ethernet: 1x 10/100 Mbps WAN/LAN, 1x 10/100 LAN (MT7628)
- Build-in LTE Modem: MeigLink SLM770A
4G Cat. 4 (150/50 Mbps)
- Buttons: 1x Reset, 1x wps
- LEDs: Front: 1x Red, 1x White,
Back: 3x White 4G signal strengh
- Serial console: unpopulated header, 115200 8n1
- Power: USB-C
MAC addresses:
+---------+-------------------+-----------+
| | MAC | Algorithm |
+---------+-------------------+-----------+
| WAN | 80:af:ca:xx:xx:x1 | label+1 |
| LAN | 80:af:ca:xx:xx:x0 | label |
| WLAN 2g | 80:af:ca:xx:xx:x2 | label+2 |
+---------+-------------------+-----------+
Migration to OpenWrt:
- Download the RSA signed intermediate firmware from the Cudy website:
`openwrt-ramips-mt76x8-cudy_lt300-v3-squashfs-flash.bin`
- Connect computer to LAN and flash the intermediate firmware via OEM web interface
- OpenWrt is now accessible via 192.168.1.1
Revert back to OEM firmware:
- Set up a TFTP server on IP 192.168.1.88 and connect to the WAN port (upper port)
- Provide the Cudy firmware as recovery.bin in the TFTP server
- Press the reset button while powering on the device
- Recovery process is started now
- When recovery process is done, OEM firmware is accessible via 192.168.10.1 again
General information:
- No possibility to load a initramfs image via U-Boot because there is no option to interrupt U-Boot
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21982
(cherry picked from commit b4a5e57bde)
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22772
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Some Banana Pi BPI-R4 BE14 WiFi modules are shipped with zeroed
tx_power fields in EEPROM (2G/5G/6G). This leads to low transmit power
on affected bands.
This overlay provides known-good EEPROM data (including correct tx_power
values for 2G/5G/6G bands) dumped from a working BE14 module.
To enable BE14 overlay, add into u-boot bootconf_extra
parameter: 'mt7988a-bananapi-bpi-r4-wifi-be14'.
You can use example script:
overlay="mt7988a-bananapi-bpi-r4-wifi-be14"
current="$(fw_printenv -n bootconf_extra 2>/dev/null)"
if [ -n "${current}" ]; then
fw_setenv bootconf_extra "${current}#${overlay}"
else
fw_setenv bootconf_extra "${overlay}"
fi
Earlier proposal proposed in [1] was fallback to default values if
invalid EEPROM content is detected.
[1] https://github.com/openwrt/openwrt/pull/19503/
Fixes: https://github.com/openwrt/openwrt/issues/17489
Signed-off-by: Daniel Pawlik <pawlik.dan@gmail.com>
(cherry picked from commit 561e3cf678)
Link: https://github.com/openwrt/openwrt/pull/22842
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit adds support for Huasifei WH3000 Pro NAND version.
There is an eMMC already supported in OpenWrt. The only difference is NAND chip.
This commit adds common .dtsi and separate .dts
for eMMC and nand versions.
**Huasifei WH3000 Pro NAND**
Portable Wi-Fi 6 travel router based on MediaTek MT7981A SoC. MT7981B+MT7976CN+RTL8221B Dual Core 1.3GHZ with 5G modems module and PWM Fan.
**Specifications**
SoC: Filogic 820 MT7981A (1.3GHz)
RAM: DDR4 1GB
Flash: 256mb Winbond SPI NAND
WiFi: 2.4GHz and 5GHz with 3 antennas
Ethernet:
1x WAN (10/100/1000M)
1x LAN (10/100/1000/2500M)
USB: 1x USB 3.0 port
Two buttons: reset and mode (BTN_0)
LEDS: blue, red, blue+red=pink
UART: 3.3V, TX, RX, GND / 115200 8N1
M.2 (WWAN) slot
**Installation via U-Boot rescue**
1. Set static IP 192.168.1.2 on your computer and default route as 192.168.1.1
2. Connect to the WAN port and hold the reset button while booting the device.
3. Wait for the LED to blink 5 times, and release the reset button.
4. Open U-boot web page on your browser at http://192.168.1.1
5. Select the OpenWRT sysupgrade image, upload it, and start the upgrade.
6. Wait for the router to flash the new firmware.
7. Wait for the router to reboot itself.
**Installation via sysupgrade**
Just flash sysupgrade file via [LuCI upgrade page](http://192.168.1.1/cgi-bin/luci/admin/system/flash) without saving the settings.
**Installation via SSH**
Upload the file to the router `/tmp` directory, `ssh root@192.168.1.1` and issue a command:
```
sysupgrade -n /tmp/openwrt-mediatek-filogic-huasifei_wh3000-pro-nand-squashfs-sysupgrade.bin
```
Signed-off-by: Fil Dunsky <filipp.dunsky@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22694
(cherry picked from commit f4c211f635)
Link: https://github.com/openwrt/openwrt/pull/22819
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
These patches stop secondary CPUs before restart and wait for them
to go offline, fixing the mt7621 reboot deadlock without needing to
disable CONFIG_LIST_HARDENED.
Signed-off-by: Rany Hany <rany_hany@riseup.net>
Link: https://github.com/openwrt/openwrt/pull/22724
(cherry picked from commit 3166710fc9)
Link: https://github.com/openwrt/openwrt/pull/22673
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Initialize NPU Block Ack memory region if reserved via DTS.
Block Ack memory region is used by NPU MT7996 (Eagle) offloading.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://github.com/openwrt/openwrt/pull/22289
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 305f685f83)
Link: https://github.com/openwrt/openwrt/pull/22372
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Introduce the capability to read the firmware binary names from device-tree
using the firmware-name property if available.
This is a preliminary patch to enable NPU offloading for MT7996 (Eagle)
chipset since it requires a different binary with respect to the one
used for MT7992 on the EN7581 SoC.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Link: https://github.com/openwrt/openwrt/pull/22289
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
(cherry picked from commit 123557f0e2)
Link: https://github.com/openwrt/openwrt/pull/22372
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>