Commit Graph
855 Commits
Author SHA1 Message Date
Daniel Golle 0f8cceb469 generic: mikrotik: avoid 64-bit module breakage
The use of a modulo operation on 64-bit integers broke the build on
32-bit targets which do not provide such operations.

Seen on the buildbots as:
mips-openwrt-linux-musl-ld: drivers/mtd/parsers/routerbootpart.o:
in function `routerboot_partitions_parse':
drivers/mtd/parsers/routerbootpart.c:
(.text.routerboot_partitions_parse+0x58c):
undefined reference to `__umoddi3'

Fix this by using mtd_mod_by_eb() instead of open-coding the alginment
check.

Fixes: ada1dcb2b4 ("generic: mikrotik: size RouterBoot partitions so they are usable")
Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-09-15 22:34:33 +01:00
André Valentin ada1dcb2b4 generic: mikrotik: size RouterBoot partitions so they are usable
Two fixes to the RouterBoot partition handling, both found on a MikroTik
Chateau 5G R17 ax but neither device specific.

hard_config is not guaranteed to fit within RB_BLOCK_SIZE. On this board
the tag list spans 5576 bytes, because the WLAN calibration tag alone
carries 5100 bytes of LZ77 compressed data, so truncating the partition
makes that tag unreadable. Walk the tag list to its terminating null node
and size the partition accordingly. The result never shrinks below
RB_BLOCK_SIZE, so devices whose tag list already fits are unaffected.

soft_config carries the boot settings and is the one RouterBoot segment
meant to be written, but at RB_BLOCK_SIZE (4 KiB) on a flash with 64 KiB
erase blocks MTD always forces it read-only. Grow it to a full erase
block where the space is free, checked against the following partition so
that erasing it cannot destroy a neighbour.

That growth alone would break the checksum, because rb_softconfig derives
everything from the partition size while RouterBoot validates the CRC32
over its own 4 KiB. Introduce RB_SC_CFG_SIZE and keep reads, CRC and write
back within it; the erase still covers the whole partition.

With both in place, writing boot_device followed by commit persists across
a reboot and "ethonce" triggers a real etherboot.

Signed-off-by: André Valentin <avalentin@marcant.net>
Link: https://github.com/openwrt/openwrt/pull/24335
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-09-15 13:21:07 +02:00
Rosen Penev 760fd341e3 treewide: remove fwnode_get_name in format strings
Use %pfwP to proper type checking.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/25141
Signed-off-by: Jonas Jelonek <jonas@jonasjelonek.de>
2026-09-13 12:48:56 +02:00
Matt Eaton 7161fa5814 generic: mikrotik: expose preboot etherboot settings in rb_softconfig
RouterBOOT can be told to look for a netboot server for a few seconds
before falling through to the configured boot device, optionally
restricted to a single Netinstall server. RouterOS calls these
preboot-etherboot and preboot-etherboot-server. Neither was modelled
here, so on a board running Linux rather than RouterOS they could not be
read or changed at all.

That matters most on a board where Linux has replaced RouterOS: without
these, the only way to arrange a netboot is boot_device=ethonce, which
is one-shot and must be rewritten before every attempt. preboot-etherboot
is persistent, needs no write per boot, and still falls through to the
boot device when no server answers.

Add both:

  preboot_etherboot         tag 0x24, 0..30 seconds, zero disabling the wait
  preboot_etherboot_server  tag 0x25, an IPv4 address, 0.0.0.0 for any

RouterBOOT has no interactive presentation of either setting to mimic:
neither appears in its setup menu, and both can only be written from
RouterOS. Rather than borrow the "disabled" and "any" keywords RouterOS
uses for zero, present both tags as they are stored. RouterOS rejects a
timeout of 31, which is where the upper bound comes from.

Note the server address is stored in network byte order, unlike every
other tag in this record, which is a little-endian u32. 192.168.1.142 is
held as c0 a8 01 8e, so reading it as a u32 would yield 142.1.168.192 -
a valid-looking address pointing at a different host.

Verified on a MikroTik E50UG (hEX refresh):

  - the show path decodes a server address written by RouterOS 7.24.2
  - a write of 10.20.30.40 lands in flash as 0a 14 1e 28
  - out-of-range timeouts and malformed addresses are rejected
  - with preboot_etherboot set to 5 from Linux and boot_device left at
    flasheth, RouterBOOT netboots; set back to zero, it boots from NAND

Both tag numbers were confirmed by diffing the soft_config record before
and after changing each setting from RouterOS. They have not been
cross-checked against other MikroTik hardware.

Signed-off-by: Matt Eaton <git@divinehawk.com>
Link: https://github.com/openwrt/openwrt/pull/25044
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-09-08 18:20:49 +02:00
Andrey Trishin 5d18ba3714 kernel: rtl8367b: add support for RTL8367RB with ver:2000
This RTL8367RB variant was found in the ASUS RT-N65U v2.60.
The router revision `v2.60` is not tied to `num:6000 ver:2000`,
as units with `num:6000 ver:1000` have also been confirmed.

Reported-by: Andrej Valek <andy@skyrain.eu>
Tested-by: Andrej Valek <andy@skyrain.eu>
Signed-off-by: Andrey Trishin <zatrit@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/24343
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-08-13 23:04:23 +02:00
Nickolay SavchenkoandMieczyslaw Nalewaj 520d6d9784 dt-bindings: net: add Realtek RTL8367B switch binding
Document the existing properties supported by the legacy RTL8367B
switch driver, including MDIO and GPIO SMI access, optional reset and
internal MDIO bus descriptions, external interface configuration, and
board-specific post-initialization register/value pairs.

Co-authored-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Signed-off-by: Nickolay Savchenko <n.savchenko@axioma.lv>
Link: https://github.com/openwrt/openwrt/pull/24305
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-07-28 20:29:46 +02:00
Nickolay SavchenkoandMieczyslaw Nalewaj 11c77ce98c kernel: rtl8367b: support post-init register writes
Allow boards to provide optional register/value pairs through the
realtek,init-regs property. Apply them after the chip-specific
initialization table and before configuring the external interface.

Keep the property a no-op when absent. Reject malformed, oversized or
non-16-bit entries, and propagate register write failures. While at it,
remove a redundant trailing blank line at the end of the file.

Co-authored-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Signed-off-by: Nickolay Savchenko <n.savchenko@axioma.lv>
Link: https://github.com/openwrt/openwrt/pull/24305
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-07-28 20:29:45 +02:00
David Bauer f937146fa1 mtd mtdsplit-fit: fix potential out of bounds read
Account the offset_start in the bounds check of the for loop. This was
previously missing, differing in check and actual read.

Signed-off-by: David Bauer <mail@david-bauer.net>
2026-07-23 01:05:30 +02:00
David Bauer f8386008c0 mtd mtdsplit-fit: fix fit not found case
Attempting to parse the mtdsplit-fit device can lead in a out of bounds
read error, as the driver did not validate a fit was found at all.

This can happen if the fit size in the header at the last scan iteration
is non-zero. In this case, the dmesg reads:

[    6.563676] Creating 6 MTD partitions on "ec000000.nor":
[    6.569058] 0x000000000000-0x000003d60000 : "firmware"
[    6.579192] read error in "firmware" at offset 0x3d60000
[    6.584534] Failed to parse subpartitions: -22
[    6.589010] Deleting MTD partitions on "ec000000.nor":

Validate after the scan loop if a fit image was found and abort in this
stage if it is not found.

Signed-off-by: David Bauer <mail@david-bauer.net>
2026-07-23 01:05:30 +02:00
Rosen Penev 3978d4e5ee swconfig: fix portmap memory leak and hardening
Free the per-port segment strings on unregister to avoid leaking them
across device rebind. Drop the dead (phys < 0) check and guard the
kstrdup allocation against failure.

Move swconfig_create_led_trigger() before list_add_tail() in
register_switch so a failing registration never publishes the device on
the global swdevs list with dangling portmap/portbuf pointers (a
use-after-free for any swdevs iterator). Route both the LED trigger
failure and the -ENFILE (swdev id exhaustion) failure paths through a
shared cleanup that frees portbuf, portmap, and the per-port segment
strings instead of leaking them.

Reorder the frees in unregister_switch to run after list_del so the
buffers are not freed while the device is still reachable from swdevs.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/24246
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-07-21 09:11:05 +02:00
Mieczyslaw Nalewaj f31b65a870 ledtrig-network: default missing family to WLAN on non-DT LEDs
For LEDs that have no network trigger configuration in Device Tree
(no mode or family properties), net_activate() infers the family
from the LED name or function string. If that inference fails,
the trigger previously returned -EINVAL and refused to activate.

This is too strict for manual activation via sysfs (e.g.
echo "network" > /sys/class/leds/<led>/trigger) on LEDs that
were not declared for the network trigger in DT. In that case
the user expects the trigger to load with sensible defaults.

Change the non-DT activation path to fall back to NET_TRIG_WLAN
instead of failing, while keeping the condition visible via pr_warn().
Device Tree paths with dt_mode or dt_family are left unchanged
and continue to fail on invalid parameters

Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/24235
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-07-20 15:52:07 +02:00
Rosen Penev c6006b0447 kernel: replace strcpy/strcat with strscpy/strlcat
Replace deprecated strcpy/strcat calls with strscpy/strlcat for
bounds-checked string operations in swconfig_leds, clk-rtl83xx,
and UML pseudo-random MAC patch.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/24132
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-07-09 09:31:24 +02:00
Rosen Penev d78d2c784b treewide: various fwnode conversions
Avoid having to use of_fwnode_handle and use fwnode_handle directly.

Upstream prefers fwnode to of anyway.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/24039
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-07-05 23:35:05 +02:00
Mieczyslaw Nalewaj beb880855c rtl8367b: fix RTL8367S-VB vlan mc memory handling
The RTL8367S-VB (Family D) uses a software-emulated VLAN MC table
(emu_vlanmc) since it lacks hardware support for the VLAN MC registers
used by earlier chips.

- Add missing NULL check after kzalloc() in rtl8367b_init_regs() to
  prevent NULL pointer dereference on allocation failure.
- Add missing kfree(smi->emu_vlanmc) in rtl8367b_remove() to prevent
  memory leak on driver unload.

Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/23970
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-06-28 22:25:30 +02:00
Rosen Penev d6d6c309d8 kernel: use module_mtd_part_parser for mtdsplit
Remove boilerplate.

Also added deregister for bcm_wifi for consistency. Not needed as it's
builtin but still good to have.

There's a slight change from subsys_initcall to module_init. Not really
an issue for mtd drivers. No driver in linux upstream's drivers/mtd uses
subsys_initcall.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23893
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-06-23 09:00:59 +02:00
Rosen Penev 35ee4f8d31 kernel: replace strncpy with safer alternatives
strncpy is deprecated. Replace with:
- strscpy() for NUL-terminated destinations
- strscpy_pad() for NUL-terminated destinations with zero-padding
- memcpy() for fixed-length in-place overwrites (bootargs mangle/cmdline replacement)

Assisted-by: Opencode:Big-Pickle
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23892
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-06-22 11:06:47 +02:00
Rosen Penev 3372463999 kernel: replace open-coded arithmetic in allocators
Dynamic size calculations in allocator arguments can overflow,
leading to undersized allocations. Replace with:
- kcalloc() for count * sizeof() patterns
- devm_kcalloc() for managed allocations
- array_size()/size_add()/size_mul() for complex cases

Assisted-by: Opencode:Big-Pickle
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23892
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-06-22 11:06:47 +02:00
Rosen Penev 7aec4efba8 kernel: replace BUG_ON/BUG with WARN_ON/WARN_ON
BUG() and BUG_ON() are deprecated - they destabilize the system
and make debugging impossible. Replace with:
- WARN_ON() + return error for assertion failures
- WARN_ON_ONCE() for bounds checks
- WARN_ON() + return -EPERM for in_interrupt() guards

Assisted-by: Opencode:Big-Pickle
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23892
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-06-22 11:06:46 +02:00
Rosen Penev f83bddb9c0 treewide: use _scoped for loops
Done for local patches. Potential upstreaming will be using these
anyway.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/23872
Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
2026-06-20 10:03:00 +02:00
Mieczyslaw Nalewaj 2aa1185fb0 leds: add "network" LED trigger (lan/wan/wlan)
LED trigger for network interfaces.

 - Aggregated per-family (lan/wan/wlan).
 - Family and flags are taken from device tree properties:
   - "family" : simple family string "lan" | "wan" | "wlan"
   - "mode"   : any combination of "link", "tx", "rx" flags
  Priority/combination:
   * If "mode" present: flags come from "mode" and take precedence.
     Family is taken from "family" if present, otherwise from the LED name.
   * If only "family" present: use its family and default flags = link+tx+rx.
   * If neither present: fall back to LED device name parsing.

 - Suffix "-online" is valid ONLY in the LED name (label),
   e.g. "green:wlan-online". It indicates the online variant but is applied
   only when DT "mode" is absent.

Behaviour:
 - wlan (normal): blink/solid driven by throughput table
 - lan/wan (normal): one-shot blink on TX/RX packet change
 - *-online variants: steady ON while any interface of the family has carrier

 Interfaces are auto-tracked by name match (lan0, wan1, wlan2, phy0, wl1,
 ath0, ra0...). Up to MAX_IFACES (16) interfaces per family

This trigger is intended for board/device authors and drivers to provide simple
network-activity LED behaviour without per-interface wiring in userspace.

Refresh bcm27xx patches in the same commit to account for line shifts in
drivers/leds/trigger/Kconfig and Makefile, ensuring clean applies for
bisectability.

Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/19903
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-06-05 20:30:34 +02:00
Rosen Penev 9586b75358 ar8216: use devm for mdiobus consistently
devm_mdiobus_alloc is already used. Be consistent and use
devm_of_mdiobus_register.

Also add a missing of_node_put for the mdio node.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22998
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-25 00:36:10 +02:00
Rosen Penev 816bd659c3 ar8327: convert LEDs to a flexible array member
Reduces allocations by 1.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22998
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-05-25 00:36:10 +02:00
Daniel Golle 8c264cf222 generic: 6.18: drop downstream RTL8261N driver
Now that the upstream RealTek PHY driver is patched to support also
the new 5G and 10G PHYs we can start to phase-out the messy downstream
driver.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
2026-05-21 17:04:55 +01:00
Jonas Jelonek 51992c87c8 kernel: rtl8261n: add post-reset MDIO stabilization delay
After the RTL8261N asserts a reset, the MDIO bus becomes temporarily
unavailable during the chip's reinitialization sequence. Any subsequent
read or write issued before the PHY has stabilized will fail.

Add a 30ms delay after triggering the reset to ensure the chip is reachable
via MDIO before resuming communication.

Signed-off-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Link: https://github.com/openwrt/openwrt/pull/23076
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-25 19:56:08 +02:00
Sven EckelmannandJonas Jelonek dd5bd85a1f kernel: rtl8261n: always configure as USXGMII
In the past, all the configuration of SerDes and PHYs on the realtek
switches were done  using u-boot (`rtk init`). But since RTL930x switched
to SerDes configuration under Linux, the SoC side is no longer using the
Realtek-proprietary variant of USXGMII. The communication to the RTL8261N
PHYs on those switches broke because of this incompatibility.

Enabling the full initialization on `CONFIG_MACH_REALTEK_RTL` converts also
the PHY side to the standard USXGMII and therefore ensures that both sides
speak the same dialect.

Co-authored-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Link: https://github.com/openwrt/openwrt/pull/23076
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-25 19:56:08 +02:00
Sven EckelmannandJonas Jelonek 017bf1c37e kernel: rtl8261n: drop unreachable PHY register patch
The PHY register patch in question is gated by `CONFIG_MACH_REALTEK_RTL`,
has no documented/expected behavior, and is in practice unreachable:
`phy_patch()` is only called from `rtkphy_config_init()`, which is exits
(too) early for `CONFIG_MACH_REALTEK_RTL` builds.

Remove it as a cleanup step before enabling standard USXGMII configuration
for these PHYs.

Fixes: b77fa45d12 ("kernel: fix rtl8261n driver for realtek")
Co-authored-by: Jonas Jelonek <jelonek.jonas@gmail.com>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Link: https://github.com/openwrt/openwrt/pull/23076
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-25 19:56:08 +02:00
Rosen Penev 669a7375a6 treewide: use _scoped for loop
Avoids refcount problems and slightly simplifies code.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21176
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-16 21:17:43 +02:00
Shiji Yang 76eb777766 generic: phy: adm6996: fix build on 6.18 kernel
devm_gpio_request() was removed since kernel 6.17. Convert it to
devm_gpio_request_one() to fix:

target/linux/generic/files/drivers/net/phy/adm6996.c: In function 'adm6996_gpio_probe':
target/linux/generic/files/drivers/net/phy/adm6996.c:1183:15: error: implicit declaration of function 'devm_gpio_request'; did you mean 'devm_gpio_request_one'? [-Wimplicit-function-declaration]
 1183 |         ret = devm_gpio_request(&pdev->dev, priv->eecs, "adm_eecs");
      |               ^~~~~~~~~~~~~~~~~
      |               devm_gpio_request_one

Link: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=linux-6.18.y&id=a5589313383074c48a1b3751d592a6e084ae0573
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/22917
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-04-14 11:52:35 +02:00
Rosen Penev c1fa85f659 treewide: use of_device_get_match_data
Simplifies code slightly.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21599
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-04-12 18:18:28 +02:00
Rosen Penev 0278e25d67 ar8327: use flex array for name
Simplifies allocation.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22069
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-03-31 11:44:27 +02:00
Rosen Penev 96a8957b7d ar8327: remove unused code
This code seems to predate OF.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22069
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-03-31 11:44:27 +02:00
Rosen Penev fcd06f5915 ar8327: remove platform data support
All targets using ar8327 use OF.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22069
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-03-31 11:44:27 +02:00
Mieczyslaw Nalewaj 6b37b04f90 platform/mikrotik: adjust hc_wlan read-callback for 6.18
Include <linux/version.h> and use preprocessor checks to select the appropriate
prototype and definition for hc_wlan_data_bin_read. The third parameter of bin_attribute
read callbacks was changed to 'const struct bin_attribute *' in Linux 6.18; this
change prevents compilation errors on newer kernels while preserving compatibility
with older ones

Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/21078
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-03-28 11:51:10 +01:00
Mieczyslaw Nalewaj 7f97b2665c generic: net: phy: adapt to kernel 6.18
- change phy_driver_register and phy_driver_unregister function calls
   to phy_drivers_register and phy_drivers_unregister for compatibility
   with kernel 6.18
 - replace PHY_ANY_ID with "MATCH ANY PHY"

Signed-off-by: Mieczyslaw Nalewaj <namiltd@yahoo.com>
Link: https://github.com/openwrt/openwrt/pull/21078
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-03-28 11:51:10 +01:00
Rosen Penev 63e0c89038 treewide: constify mdio_bus
In generic, there's a backport from 6.14 that makes this change. Do so
in downstream locations as well.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21167
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-03-13 19:56:20 +01:00
Rosen Penev eadd81b17e kernel: ssb: fallback-sprom: check deferred probe
When NVMEM is not ready, of_get_mac_address fails. Handle this.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22305
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2026-03-10 13:35:31 +01:00
Rosen Penev 04ed8c94ce kernel: bcma: fallback-sprom: check defered probe
When NVMEM is not ready, of_get_mac_address fails. Handle this.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/22305
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2026-03-10 13:35:31 +01:00
Linus Walleij 5ac8f14ccb kernel: mtdsplit: create executable prolog splitter
The problem is the following: we have three fixed partitions
in a RedBoot partition for kernel, initrd and rootfs. On the
surface this looks good.

But we have little flash and want to use it efficiently. We want
to use the OpenWrt "firmware" partition scheme where the kernel,
initramfs and sqashfs+jffs2 rootfs is appended, leaving maximum
space for a writeable rootfs.

To do this we will override the existing RedBoot partition table
with one that merges the three separate partitions into one
"firmware" partition.

RedBoot is still booting the system. It still needs to read the
first two parts "as if" these were the kernel and initrd. This
works fine, because the kernel still comes first.

We already have hacks in place to merge the two kernel and initrd
into one binary image and execute it. This is done by prepending
a "prolog" to the kernel that does the necessary copying in
memory and then jumps to execute the kernel.

Since this "prolog" copying routine is just 92 bytes but has 512
bytes allocated, we can trivially create a firmware format that
can be used for splitting the image into kernel and rootfs
using a tagging scheme that can be done directly by scripting
so we don't need any special binary programs.

This splitter implements that idea.

This will be used on the Gemini platform and was tested on the
Raidsonic IB-4220-B.

Link: https://github.com/openwrt/openwrt/pull/21820
Signed-off-by: Linus Walleij <linusw@kernel.org>
2026-02-03 13:33:12 +01:00
Andrew LaMarche 268a0cb363 kernel: fix rtl8261n driver for non-realtek chips
Part of the phy patch process breaks functionality on non-Realtek
platforms. Only apply this on Realtek SoCs to fix functionality
everywhere else.

Signed-off-by: Andrew LaMarche <andrewjlamarche@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21777
Signed-off-by: Robert Marko <robimarko@gmail.com>
2026-01-30 10:28:22 +01:00
Rosen Penev 9934c716ed treewide: replace remove_new with remove
Preparation for kernel 6.18. It removes the former.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/21226
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2026-01-03 17:27:25 +01:00
Shiji Yang f36e9e9888 kernel: rtl836x: convert to gpiod API
This is the recommended way for the OF based platform.

Tested-on TP-Link TL-WR2543N with RTL8367 switch:
```
root@OpenWrt:~# dmesg |grep -i rtl
[    7.941126] rtl8367 rtl8367: cannot find mdio node phandle
[    7.947562] rtl8367 rtl8367: RTL8367R ver. 0 chip found
[    9.056830] rtl8367 rtl8367: cpu_port:9, assigned to extif0
root@OpenWrt:~# cat /sys/kernel/debug/gpio
gpiochip0: GPIOs 512-529, parent: platform/18040000.gpio, 18040000.gpio:
 gpio-512 (                    |lime:status         ) out lo ACTIVE LOW
 gpio-513 (                    |rtl836x-sda         ) in  hi
 gpio-518 (                    |rtl836x-sck         ) in  lo
 gpio-520 (                    |lime:usb            ) out hi ACTIVE LOW
 gpio-523 (                    |reset               ) in  hi IRQ ACTIVE LOW
 gpio-524 (                    |wps                 ) in  hi IRQ ACTIVE LOW
```

Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21143
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-12-23 18:22:02 +01:00
Shiji Yang f8af185ec5 kernel: rtl836x: change missing mdio node log level to info
mdio node is optional for the rtl836x switch. Some devices use GPIO to
control the switch chip. Missing mdio is a normal behavior.

Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21143
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-12-23 18:22:01 +01:00
Shiji Yang 52924bf194 kernel: rtl836x: directly defer probe when mdio is missing
If the switch is directly controlled by the mdio bus, we must ensure
that the mdio bus is ready instead of trying GPIO simulated bus.

Fixes: d4ac26ec49 ("kernel: rtl8366-smi: add Realtek switch management via mii-bus")
Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21143
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-12-23 18:22:01 +01:00
Shiji Yang 852d17ed82 kernel: rtl836x: remove legacy platform_data support
There are no platform_data based devices using it anymore. Also move
header files to the driver folder.

Signed-off-by: Shiji Yang <yangshiji66@outlook.com>
Link: https://github.com/openwrt/openwrt/pull/21138
Signed-off-by: Robert Marko <robimarko@gmail.com>
2025-12-15 09:31:20 +01:00
Rosen Penev 4ffd5aa239 treewide: fix coccinelle checks
Unneeded semicolon

WARNING comparing pointer to 0

WARNING: NULL check before some freeing functions is not needed.

WARNING: casting value returned by memory allocation function to (u32 *)

ERROR: allocation function on line 378 returns NULL not ERR_PTR on failure

Signed-off-by: Rosen Penev <rosenp@gmail.com>
Link: https://github.com/openwrt/openwrt/pull/19932
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-12-02 23:32:42 +01:00
Hauke Mehrtens 4f8f0bfeef kernel: mtdsplit_h3c_vfs: Fix build
Fix a recently introduces compile problem.

Fixes: 2acf18bf4d ("kernel: mtdsplit_h3c_vfs: use -ENOENT instead of -ENODEV")
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
2025-11-21 21:35:32 +01:00
Christian Marangi f9eaa1cf1f kernel: mtdsplit_minor: use -ENOENT instead of -ENODEV
New linux version will check the return code of parser on subpartitions.
The only valid case for skipping a parser with an error is -ENOENT.

Change the relevant entry to -ENOENT.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2025-11-20 23:42:12 +01:00
Christian Marangi 91a9fb7460 Revert "kernel: mtdsplit_minor: return 0 if not fatal"
This reverts commit ade045084b.

Skipping parser for subpartition will be handled now with -ENOENT.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2025-11-20 23:42:12 +01:00
Christian Marangi d21262edcf kernel: mtdsplit_uimage: use -ENOENT instead of -ENODEV
New linux version will check the return code of parser on subpartitions.
The only valid case for skipping a parser with an error is -ENOENT.

Change the relevant entry to -ENOENT.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2025-11-20 23:42:11 +01:00
Christian Marangi 8e6c6928da Revert "kernel: mtdsplit_uimage: return 0 if not fatal"
This reverts commit a51359aafd.

Skipping parser for subpartition will be handled now with -ENOENT.

Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
2025-11-20 23:42:11 +01:00