Odin3 bringup - #10229
#10229Conversation
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughAdds AYN Odin3 support on SM8750, covering build and boot integration, kernel configuration, device-tree hardware descriptions, peripheral drivers, wireless support, firmware packaging, and platform-specific kernel changes. ChangesAYN Odin3 platform
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
🚫 Missing required board assetsThis PR adds new board configuration(s). Required assets must already exist in github/armbian/armbian.github.io.
Missing items
Once the missing files are added (or a PR is opened in armbian/armbian.github.io), re-run this check. |
There was a problem hiding this comment.
Actionable comments posted: 13
🧹 Nitpick comments (5)
config/boards/ayn-odin3.csc (3)
65-73: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick winAdd
-ftocurlso HTTP errors are treated as failures.
curl -L -o temp.zip ...without-fwon't return a non-zero exit code on HTTP 4xx/5xx responses; it will write the error page totemp.zipand letunzipfail later with a less clear error.🛡️ Fix
- curl -L -o temp.zip "${GITHUB_SOURCE}/AYNTechnologies/alsa-ucm-conf/archive/refs/heads/ayn/v1.2.15.3.zip" + curl -fL -o temp.zip "${GITHUB_SOURCE}/AYNTechnologies/alsa-ucm-conf/archive/refs/heads/ayn/v1.2.15.3.zip"🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@config/boards/ayn-odin3.csc` around lines 65 - 73, Update the curl invocation in the ALSA archive download block to include the fail-on-HTTP-error option while preserving the existing redirect-following and output behavior.
36-40: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winDead commented-out download line + fragile sed patch of an apt-installed script.
Line 36 is leftover debug code. Separately, the
sedon line 38 silently no-ops if the installedmkbootimgpackage's source no longer contains that exact import line (e.g. after a package upgrade), and the failure only surfaces later when/tmp/mkbootimgis actually invoked.♻️ Suggested cleanup
- `#wget` https://launchpadlibrarian.net/810765814/mkbootimg -O /tmp/mkbootimg cp /usr/bin/mkbootimg /tmp/mkbootimg - sed -i 's/from gki.generate_gki_certificate import generate_gki_certificate/# &/' /tmp/mkbootimg + sed -i 's/from gki.generate_gki_certificate import generate_gki_certificate/# &/' /tmp/mkbootimg || display_alert "mkbootimg gki patch pattern not found, package may have changed" "" "wrn" chmod +x /tmp/mkbootimg🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@config/boards/ayn-odin3.csc` around lines 36 - 40, Remove the dead commented-out wget line and make the mkbootimg patch step validate that the expected import exists before modifying /tmp/mkbootimg; fail immediately with a clear error if the installed script no longer contains that exact line, while preserving the existing copy and executable-permission flow.
46-52: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winBoot
--cmdlineis hardcoded identically in two disconnected places, bypassingBOOTIMG_CMDLINE_EXTRA. Both the build-time boot-image creation and the on-device kernel-update hook independently hardcode the same--cmdlinestring; a future change to boot arguments (e.g. adding a console option) requires remembering to edit both, and neither actually consumesBOOTIMG_CMDLINE_EXTRAdeclared inayn-odin3.csc.
config/boards/ayn-odin3.csc#L46-L52: derive the--cmdlinevalue fromBOOTIMG_CMDLINE_EXTRA(or a shared helper) instead of a separate hardcoded string, so it stays in sync with the value on line 25.packages/bsp/ayn-odin3/zz-update-abl-kernel#L12-L19: source the same cmdline value (e.g. embed it via a template/env file written at build time into/boot/armbianEnv.txt, which this script already sources) instead of re-hardcoding it.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@config/boards/ayn-odin3.csc` around lines 46 - 52, The boot cmdline is duplicated and does not consume BOOTIMG_CMDLINE_EXTRA, allowing the build image and kernel-update hook to diverge. In config/boards/ayn-odin3.csc lines 46-52, derive the --cmdline from BOOTIMG_CMDLINE_EXTRA or a shared helper instead of hardcoding it; in packages/bsp/ayn-odin3/zz-update-abl-kernel lines 12-19, source that same generated value through the existing armbianEnv.txt mechanism or equivalent rather than duplicating the string.patch/kernel/archive/sm8750-7.1/0500-ROCKNIX-set-boot-fanspeed.patch (2)
1-1: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUndocumented numeric coupling between boot PWM and cooling-levels table.
0500hardcodes the boot PWM to70, which only makes sense because0601later defines state index 4 incooling-levelsas70— but neither patch references the other, so the mapping is implicit and easy to desync.
patch/kernel/archive/sm8750-7.1/0500-ROCKNIX-set-boot-fanspeed.patch#L1-13: add a comment noting70corresponds tocooling-levelsindex 4 defined in0601-ROCKNIX-odin3-pwm-fan-sysfs.patch, or derive the boot value from the cooling-levels table instead of hardcoding it.patch/kernel/archive/sm8750-7.1/0601-ROCKNIX-odin3-pwm-fan-sysfs.patch#L11-22: add a comment noting that index 4 (70) is relied upon as the hardcoded boot-time PWM value set in0500-ROCKNIX-set-boot-fanspeed.patch.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@patch/kernel/archive/sm8750-7.1/0500-ROCKNIX-set-boot-fanspeed.patch` at line 1, Document the coupling between the boot PWM value and cooling-levels table: in the boot fan-speed change from 0500, note that 70 corresponds to cooling-levels index 4 defined by 0601; in the table change from 0601, note that index 4’s value of 70 is required by the hardcoded boot-time PWM in 0500. Preserve the existing values and behavior.
1-13: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winHardcoded boot PWM (70) is fragile and undocumented.
This replaces the driver-computed
initial_pwmwith a bare magic number in the shared, genericpwm-fandriver. The value70isn't documented as being tied to state index 4 of thecooling-levelsarray added in0601-ROCKNIX-odin3-pwm-fan-sysfs.patch; if that table changes, this silently stops matching the intended boot state.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@patch/kernel/archive/sm8750-7.1/0500-ROCKNIX-set-boot-fanspeed.patch` around lines 1 - 13, Replace the hardcoded 70 passed to set_pwm in pwm_fan_probe with a documented, named value derived from the intended cooling-levels boot state, such as the existing state-index-4 value. Keep the generic driver behavior unchanged for platforms without that configuration and ensure future cooling-levels changes cannot silently desynchronize the boot PWM.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@config/boards/ayn-odin3.csc`:
- Around line 84-90: Update the executable script and initramfs hook installs in
the board configuration from mode 655 to 755, including
usb-gadget-initramfs-hook, usb-gadget-initramfs-premount, dropbear, and
kill-dropbear, so the owner retains execute permission; leave the 644 service
install unchanged.
- Around line 32-34: Replace the fragile rootfs_image_uuid pipeline with
validated extraction from the actual fstab entry: locate a non-comment line
containing a UUID= field and extract its value without assuming the first line
is valid. Fail the build immediately with a clear error if no valid UUID is
found, before rootfs_image_uuid is used in the boot --cmdline.
In `@config/sources/families/sm8750.conf`:
- Around line 16-23: Add a `current)` clause to the `case $BRANCH` block
alongside `edge)` and initialize `KERNEL_MAJOR_MINOR`, `KERNELBRANCH`, and
`KERNEL_GIT_CACHE_TTL` with the appropriate current-kernel values so
`KERNEL_TEST_TARGET="current"` builds receive all required settings.
In `@packages/bsp/ayn-odin3/HiFi.conf`:
- Line 1: Update the header comment in HiFi.conf to identify the configuration
as intended for AYN Odin3 instead of AYN Odin2; leave the audio routing
configuration unchanged.
In `@packages/bsp/ayn-odin3/rocknix_abl/SM8750/flash_abl.sh`:
- Around line 5-6: Harden the ABL toolchain: in
packages/bsp/ayn-odin3/rocknix_abl/SM8750/flash_abl.sh (lines 5-6), enable
fail-fast handling and verify abl_signed-SM8750.elf with
abl_signed-SM8750.elf.sha256 before either abl_a or abl_b dd write; in
backup_abl.sh (lines 5-6) and restore_backup_abl.sh (lines 5-6), ensure every dd
failure terminates the script; update the README to document checksum
verification. The checksum file at
packages/bsp/ayn-odin3/rocknix_abl/SM8750/abl_signed-SM8750.elf.sha256 (line 1)
requires no direct change, but must be referenced by flash_abl.sh.
In `@packages/bsp/ayn-odin3/zz-update-abl-kernel`:
- Around line 3-11: Update the kernel artifact references in the postinst script
to use the ABI version passed as $1, selecting /boot/vmlinuz-$1,
/boot/initrd.img-$1, and the matching sm8750 DTB instead of wildcard paths.
Remove the unused source /boot/armbianEnv.txt statement while preserving the
existing gzip and mkbootimg flow.
In
`@patch/kernel/archive/sm8750-7.1/0028-drm-panel-Add-panel-driver-for-Chipone-ICNA35XX-base.patch`:
- Around line 121-141: Update icna35xx_get_current_mode() to check whether
pinfo->connector is NULL before accessing connector->state, returning the
default mode index 0 when no connector is available. Preserve the existing
checks and mode-matching behavior for initialized connectors.
In
`@patch/kernel/archive/sm8750-7.1/0030-leds-Add-driver-for-HEROIC-HTR3212.patch`:
- Around line 288-290: Update the sdb acquisition error handling in the probe
function around devm_gpiod_get so every error pointer is returned, while
preserving -EPROBE_DEFER propagation. Treat the mandatory sdb descriptor as
valid only when the call succeeds, preventing subsequent
gpiod_set_value_cansleep and regulator-related paths from receiving an ERR_PTR.
In
`@patch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patch`:
- Around line 483-492: Balance regulator enables on probe failures in both
drivers: update the RSInput probe flow after regulator_enable(drv->vdd) and the
HTR3212 probe flow after regulator_enable(priv->vdd) so every listed later error
path disables the supply before returning, preferably by using
devm_regulator_get_enable() where compatible. In the HTR3212 paths, also drive
sdb low before returning. Apply changes in
patch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patch
lines 483-492 and
patch/kernel/archive/sm8750-7.1/0030-leds-Add-driver-for-HEROIC-HTR3212.patch
lines 298-301; cover RSInput failures from serdev_device_open, baudrate setup,
input allocation/registration, and rsinput_init_commands, plus HTR3212 failures
from regmap initialization, htr3212_init_regs, and htr3212_parse_dt.
- Around line 298-370: Update handle_cmd_status to validate that payload_length
covers every field accessed through FRAME_POS_DATA_14 before reading status
data. Reject shorter payloads through the existing invalid-length path, while
preserving the current key and axis reporting behavior for complete frames.
In `@patch/kernel/archive/sm8750-7.1/0501-ROCKNIX-fix-wifi-and-bt-mac.patch`:
- Around line 116-141: Update qca_uart_setup so generate_bdaddr_from_serial
failure does not return early or disable Bluetooth; instead, preserve the
existing qca_check_bdaddr fallback path for unavailable or malformed
qcom_serial_number values. Only apply qca_set_bdaddr and update hdev addresses
after successful serial derivation, while retaining the current error handling
for failures setting a successfully generated address.
In `@patch/kernel/archive/sm8750-7.1/0503-ROCKNIX-battery-name.patch`:
- Around line 10-22: Revert the `.name` change in `sm8550_bat_psy_desc` so the
shared qcom_battmgr power supply continues using `qcom-battmgr-bat`; do not
rename it to `battery`. If a board-specific name is required, implement it
through a separate board-scoped path rather than modifying this shared
descriptor.
In
`@patch/kernel/archive/sm8750-7.1/0504-Enable-64-bit-processes-to-use-compat-input-syscalls.patch`:
- Around line 44-52: Update the condition in input_ff_effect_from_user() to
select the compat ff_effect_compat conversion whenever current->compat_input or
in_compat_syscall() is true, removing the !COMPAT_USE_64BIT_TIME gate. Preserve
the existing size validation and conversion logic.
---
Nitpick comments:
In `@config/boards/ayn-odin3.csc`:
- Around line 65-73: Update the curl invocation in the ALSA archive download
block to include the fail-on-HTTP-error option while preserving the existing
redirect-following and output behavior.
- Around line 36-40: Remove the dead commented-out wget line and make the
mkbootimg patch step validate that the expected import exists before modifying
/tmp/mkbootimg; fail immediately with a clear error if the installed script no
longer contains that exact line, while preserving the existing copy and
executable-permission flow.
- Around line 46-52: The boot cmdline is duplicated and does not consume
BOOTIMG_CMDLINE_EXTRA, allowing the build image and kernel-update hook to
diverge. In config/boards/ayn-odin3.csc lines 46-52, derive the --cmdline from
BOOTIMG_CMDLINE_EXTRA or a shared helper instead of hardcoding it; in
packages/bsp/ayn-odin3/zz-update-abl-kernel lines 12-19, source that same
generated value through the existing armbianEnv.txt mechanism or equivalent
rather than duplicating the string.
In `@patch/kernel/archive/sm8750-7.1/0500-ROCKNIX-set-boot-fanspeed.patch`:
- Line 1: Document the coupling between the boot PWM value and cooling-levels
table: in the boot fan-speed change from 0500, note that 70 corresponds to
cooling-levels index 4 defined by 0601; in the table change from 0601, note that
index 4’s value of 70 is required by the hardcoded boot-time PWM in 0500.
Preserve the existing values and behavior.
- Around line 1-13: Replace the hardcoded 70 passed to set_pwm in pwm_fan_probe
with a documented, named value derived from the intended cooling-levels boot
state, such as the existing state-index-4 value. Keep the generic driver
behavior unchanged for platforms without that configuration and ensure future
cooling-levels changes cannot silently desynchronize the boot PWM.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 17a4f4e3-6ffc-459f-8fe9-196f296ab813
📒 Files selected for processing (43)
config/boards/ayn-odin3.cscconfig/kernel/linux-sm8750-edge.configconfig/sources/families/sm8750.confpackages/bsp/ayn-odin3/HiFi.confpackages/bsp/ayn-odin3/rocknix_abl/READMEpackages/bsp/ayn-odin3/rocknix_abl/SM8750/abl_signed-SM8750.elfpackages/bsp/ayn-odin3/rocknix_abl/SM8750/abl_signed-SM8750.elf.sha256packages/bsp/ayn-odin3/rocknix_abl/SM8750/backup_abl.shpackages/bsp/ayn-odin3/rocknix_abl/SM8750/flash_abl.shpackages/bsp/ayn-odin3/rocknix_abl/SM8750/restore_backup_abl.shpackages/bsp/ayn-odin3/zz-update-abl-kernelpatch/kernel/archive/sm8750-7.1/0026-dt-bindings-arm-qcom-ids-Add-SoC-ID-for-CQ8725S.patchpatch/kernel/archive/sm8750-7.1/0027-soc-qcom-socinfo-Add-CQ8725S-SoC-ID.patchpatch/kernel/archive/sm8750-7.1/0028-drm-panel-Add-panel-driver-for-Chipone-ICNA35XX-base.patchpatch/kernel/archive/sm8750-7.1/0029-Input-edt-ft5x06-add-no_regmap_bulk_read-option.patchpatch/kernel/archive/sm8750-7.1/0030-leds-Add-driver-for-HEROIC-HTR3212.patchpatch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patchpatch/kernel/archive/sm8750-7.1/0032-ASoC-codecs-aw88166-AYN-Products-Specific-modificati.patchpatch/kernel/archive/sm8750-7.1/0033-arm64-dts-qcom-sm8750-gpu-clock-controllers.patchpatch/kernel/archive/sm8750-7.1/0034-arm64-dts-qcom-sm8750-Add-UART15.patchpatch/kernel/archive/sm8750-7.1/0038-arm64-dts-qcom-sm8750-add-GPU-nodes.patchpatch/kernel/archive/sm8750-7.1/0039-wifi-ath12k-add-initial-hardware-definition-for-WCN7.patchpatch/kernel/archive/sm8750-7.1/0040-wifi-ath12k-send-QDSS-config-when-CNSS_QDSS_CFG_MISS.patchpatch/kernel/archive/sm8750-7.1/0041-wifi-ath12k-disable-CNSS_QDSS_CFG_MISS_V01-for-the-W.patchpatch/kernel/archive/sm8750-7.1/0042-PCI-pwrctrl-pwrseq-add-support-for-WCN7860.patchpatch/kernel/archive/sm8750-7.1/0043-power-sequencing-qcom-wcn-add-support-for-WCN7860.patchpatch/kernel/archive/sm8750-7.1/0044-clk-qcom-gcc-sm8750-Do-not-turn-off-PCIe-GDSCs-durin.patchpatch/kernel/archive/sm8750-7.1/0045-Bluetooth-qca-add-WCN7860-support.patchpatch/kernel/archive/sm8750-7.1/0046-arm64-dts-qcom-Add-AYN-CQ8725S-Common.patchpatch/kernel/archive/sm8750-7.1/0047-arm64-dts-qcom-Add-AYN-Odin3.patchpatch/kernel/archive/sm8750-7.1/0048-drm-msm-dsi-reparent-byte-pixel-src-to-xo-on-disable.patchpatch/kernel/archive/sm8750-7.1/0049-drm-msm-a8xx-add-adreno-830-catalog.patchpatch/kernel/archive/sm8750-7.1/0050-clk-qcom-gxclkctl-kaanapali-fix-gx-gdsc-collapse.patchpatch/kernel/archive/sm8750-7.1/0051-drm-msm-a6xx-limit-gxpd-votes-to-recovery-in-a8x.patchpatch/kernel/archive/sm8750-7.1/0500-ROCKNIX-set-boot-fanspeed.patchpatch/kernel/archive/sm8750-7.1/0501-ROCKNIX-fix-wifi-and-bt-mac.patchpatch/kernel/archive/sm8750-7.1/0503-ROCKNIX-battery-name.patchpatch/kernel/archive/sm8750-7.1/0504-Enable-64-bit-processes-to-use-compat-input-syscalls.patchpatch/kernel/archive/sm8750-7.1/0504-wakeup-qcom-ipcc-remove-IRQF-NO-SUSPEND.patchpatch/kernel/archive/sm8750-7.1/0505-msm_gem-lock-before-put_iova_spaces.patchpatch/kernel/archive/sm8750-7.1/0508-input-rsinput-add-pm-resume-to-reinit-mcu-after-suspend.patchpatch/kernel/archive/sm8750-7.1/0601-ROCKNIX-odin3-pwm-fan-sysfs.patchpatch/kernel/archive/sm8750-7.1/1300-input-rsinput-ranges.patch
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
patch/kernel/archive/sm8750-7.1/0030-leds-Add-driver-for-HEROIC-HTR3212.patch (1)
157-158: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value
HTR3212_ENABLE_BITreused as both a GENMASK bit index and a divisor.
GENMASK(HTR3212_ENABLE_BIT, 0)andHTR3212_CHANNELS / HTR3212_ENABLE_BITyield the intended0x3and12only becauseHTR3212_ENABLE_BIT == 1. Overloading the same macro for two unrelated meanings is fragile — any future retune of the enable width silently corrupts the register count. Consider distinct constants (e.g. an enable mask and a channels-per-control-register value) to make the intent explicit.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@patch/kernel/archive/sm8750-7.1/0030-leds-Add-driver-for-HEROIC-HTR3212.patch` around lines 157 - 158, Separate the enable-bit mask from the register-channel divisor in the initialization using distinct constants or macros. Update the GENMASK expression to use the enable-width symbol and the num_regs calculation to use an explicit channels-per-control-register value, preserving the resulting mask and register count.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@patch/kernel/archive/sm8750-7.1/0030-leds-Add-driver-for-HEROIC-HTR3212.patch`:
- Around line 283-284: Update htr3212_parse_dt() to reject child counts greater
than HTR3212_CHANNELS before indexing priv->leds, and allocate the driver state
with sizeof(*priv) rather than struct_size using the unbounded count. Preserve
normal parsing for valid counts and return an appropriate error for oversized
device trees.
---
Nitpick comments:
In
`@patch/kernel/archive/sm8750-7.1/0030-leds-Add-driver-for-HEROIC-HTR3212.patch`:
- Around line 157-158: Separate the enable-bit mask from the register-channel
divisor in the initialization using distinct constants or macros. Update the
GENMASK expression to use the enable-width symbol and the num_regs calculation
to use an explicit channels-per-control-register value, preserving the resulting
mask and register count.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 3ac6dfff-2227-434e-8840-b0a2fb21f0af
📒 Files selected for processing (44)
config/boards/ayn-odin3.cscconfig/kernel/linux-sm8750-current.configconfig/kernel/linux-sm8750-edge.configconfig/sources/families/sm8750.confpackages/bsp/ayn-odin3/HiFi.confpackages/bsp/ayn-odin3/rocknix_abl/READMEpackages/bsp/ayn-odin3/rocknix_abl/SM8750/abl_signed-SM8750.elfpackages/bsp/ayn-odin3/rocknix_abl/SM8750/abl_signed-SM8750.elf.sha256packages/bsp/ayn-odin3/rocknix_abl/SM8750/backup_abl.shpackages/bsp/ayn-odin3/rocknix_abl/SM8750/flash_abl.shpackages/bsp/ayn-odin3/rocknix_abl/SM8750/restore_backup_abl.shpackages/bsp/ayn-odin3/zz-update-abl-kernelpatch/kernel/archive/sm8750-7.1/0026-dt-bindings-arm-qcom-ids-Add-SoC-ID-for-CQ8725S.patchpatch/kernel/archive/sm8750-7.1/0027-soc-qcom-socinfo-Add-CQ8725S-SoC-ID.patchpatch/kernel/archive/sm8750-7.1/0028-drm-panel-Add-panel-driver-for-Chipone-ICNA35XX-base.patchpatch/kernel/archive/sm8750-7.1/0029-Input-edt-ft5x06-add-no_regmap_bulk_read-option.patchpatch/kernel/archive/sm8750-7.1/0030-leds-Add-driver-for-HEROIC-HTR3212.patchpatch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patchpatch/kernel/archive/sm8750-7.1/0032-ASoC-codecs-aw88166-AYN-Products-Specific-modificati.patchpatch/kernel/archive/sm8750-7.1/0033-arm64-dts-qcom-sm8750-gpu-clock-controllers.patchpatch/kernel/archive/sm8750-7.1/0034-arm64-dts-qcom-sm8750-Add-UART15.patchpatch/kernel/archive/sm8750-7.1/0038-arm64-dts-qcom-sm8750-add-GPU-nodes.patchpatch/kernel/archive/sm8750-7.1/0039-wifi-ath12k-add-initial-hardware-definition-for-WCN7.patchpatch/kernel/archive/sm8750-7.1/0040-wifi-ath12k-send-QDSS-config-when-CNSS_QDSS_CFG_MISS.patchpatch/kernel/archive/sm8750-7.1/0041-wifi-ath12k-disable-CNSS_QDSS_CFG_MISS_V01-for-the-W.patchpatch/kernel/archive/sm8750-7.1/0042-PCI-pwrctrl-pwrseq-add-support-for-WCN7860.patchpatch/kernel/archive/sm8750-7.1/0043-power-sequencing-qcom-wcn-add-support-for-WCN7860.patchpatch/kernel/archive/sm8750-7.1/0044-clk-qcom-gcc-sm8750-Do-not-turn-off-PCIe-GDSCs-durin.patchpatch/kernel/archive/sm8750-7.1/0045-Bluetooth-qca-add-WCN7860-support.patchpatch/kernel/archive/sm8750-7.1/0046-arm64-dts-qcom-Add-AYN-CQ8725S-Common.patchpatch/kernel/archive/sm8750-7.1/0047-arm64-dts-qcom-Add-AYN-Odin3.patchpatch/kernel/archive/sm8750-7.1/0048-drm-msm-dsi-reparent-byte-pixel-src-to-xo-on-disable.patchpatch/kernel/archive/sm8750-7.1/0049-drm-msm-a8xx-add-adreno-830-catalog.patchpatch/kernel/archive/sm8750-7.1/0050-clk-qcom-gxclkctl-kaanapali-fix-gx-gdsc-collapse.patchpatch/kernel/archive/sm8750-7.1/0051-drm-msm-a6xx-limit-gxpd-votes-to-recovery-in-a8x.patchpatch/kernel/archive/sm8750-7.1/0500-ROCKNIX-set-boot-fanspeed.patchpatch/kernel/archive/sm8750-7.1/0501-ROCKNIX-fix-wifi-and-bt-mac.patchpatch/kernel/archive/sm8750-7.1/0503-ROCKNIX-battery-name.patchpatch/kernel/archive/sm8750-7.1/0504-Enable-64-bit-processes-to-use-compat-input-syscalls.patchpatch/kernel/archive/sm8750-7.1/0504-wakeup-qcom-ipcc-remove-IRQF-NO-SUSPEND.patchpatch/kernel/archive/sm8750-7.1/0505-msm_gem-lock-before-put_iova_spaces.patchpatch/kernel/archive/sm8750-7.1/0508-input-rsinput-add-pm-resume-to-reinit-mcu-after-suspend.patchpatch/kernel/archive/sm8750-7.1/0601-ROCKNIX-odin3-pwm-fan-sysfs.patchpatch/kernel/archive/sm8750-7.1/1300-input-rsinput-ranges.patch
🚧 Files skipped from review as they are similar to previous changes (40)
- packages/bsp/ayn-odin3/rocknix_abl/SM8750/backup_abl.sh
- packages/bsp/ayn-odin3/rocknix_abl/SM8750/flash_abl.sh
- packages/bsp/ayn-odin3/rocknix_abl/README
- patch/kernel/archive/sm8750-7.1/0026-dt-bindings-arm-qcom-ids-Add-SoC-ID-for-CQ8725S.patch
- patch/kernel/archive/sm8750-7.1/0044-clk-qcom-gcc-sm8750-Do-not-turn-off-PCIe-GDSCs-durin.patch
- packages/bsp/ayn-odin3/rocknix_abl/SM8750/restore_backup_abl.sh
- patch/kernel/archive/sm8750-7.1/0508-input-rsinput-add-pm-resume-to-reinit-mcu-after-suspend.patch
- packages/bsp/ayn-odin3/zz-update-abl-kernel
- packages/bsp/ayn-odin3/rocknix_abl/SM8750/abl_signed-SM8750.elf
- patch/kernel/archive/sm8750-7.1/0027-soc-qcom-socinfo-Add-CQ8725S-SoC-ID.patch
- patch/kernel/archive/sm8750-7.1/0043-power-sequencing-qcom-wcn-add-support-for-WCN7860.patch
- patch/kernel/archive/sm8750-7.1/0503-ROCKNIX-battery-name.patch
- patch/kernel/archive/sm8750-7.1/0504-wakeup-qcom-ipcc-remove-IRQF-NO-SUSPEND.patch
- patch/kernel/archive/sm8750-7.1/0041-wifi-ath12k-disable-CNSS_QDSS_CFG_MISS_V01-for-the-W.patch
- patch/kernel/archive/sm8750-7.1/0050-clk-qcom-gxclkctl-kaanapali-fix-gx-gdsc-collapse.patch
- patch/kernel/archive/sm8750-7.1/0042-PCI-pwrctrl-pwrseq-add-support-for-WCN7860.patch
- patch/kernel/archive/sm8750-7.1/0048-drm-msm-dsi-reparent-byte-pixel-src-to-xo-on-disable.patch
- patch/kernel/archive/sm8750-7.1/0601-ROCKNIX-odin3-pwm-fan-sysfs.patch
- patch/kernel/archive/sm8750-7.1/0500-ROCKNIX-set-boot-fanspeed.patch
- patch/kernel/archive/sm8750-7.1/0033-arm64-dts-qcom-sm8750-gpu-clock-controllers.patch
- patch/kernel/archive/sm8750-7.1/0051-drm-msm-a6xx-limit-gxpd-votes-to-recovery-in-a8x.patch
- patch/kernel/archive/sm8750-7.1/0034-arm64-dts-qcom-sm8750-Add-UART15.patch
- packages/bsp/ayn-odin3/HiFi.conf
- patch/kernel/archive/sm8750-7.1/1300-input-rsinput-ranges.patch
- config/kernel/linux-sm8750-edge.config
- patch/kernel/archive/sm8750-7.1/0049-drm-msm-a8xx-add-adreno-830-catalog.patch
- config/sources/families/sm8750.conf
- patch/kernel/archive/sm8750-7.1/0039-wifi-ath12k-add-initial-hardware-definition-for-WCN7.patch
- patch/kernel/archive/sm8750-7.1/0038-arm64-dts-qcom-sm8750-add-GPU-nodes.patch
- patch/kernel/archive/sm8750-7.1/0504-Enable-64-bit-processes-to-use-compat-input-syscalls.patch
- patch/kernel/archive/sm8750-7.1/0501-ROCKNIX-fix-wifi-and-bt-mac.patch
- patch/kernel/archive/sm8750-7.1/0505-msm_gem-lock-before-put_iova_spaces.patch
- patch/kernel/archive/sm8750-7.1/0047-arm64-dts-qcom-Add-AYN-Odin3.patch
- patch/kernel/archive/sm8750-7.1/0032-ASoC-codecs-aw88166-AYN-Products-Specific-modificati.patch
- patch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patch
- patch/kernel/archive/sm8750-7.1/0040-wifi-ath12k-send-QDSS-config-when-CNSS_QDSS_CFG_MISS.patch
- patch/kernel/archive/sm8750-7.1/0045-Bluetooth-qca-add-WCN7860-support.patch
- patch/kernel/archive/sm8750-7.1/0046-arm64-dts-qcom-Add-AYN-CQ8725S-Common.patch
- config/boards/ayn-odin3.csc
- patch/kernel/archive/sm8750-7.1/0028-drm-panel-Add-panel-driver-for-Chipone-ICNA35XX-base.patch
|
all of rabbits concerns must be addressed or dismissed |
|
@kasimling Please don't replace the stock ABL with the Rocknix custom ABL only. Keep compatibility with both, otherwise users will lose the ability to boot Android. |
@SuperKali The rocknix_abl provides a script for backing up the stock ABL and another one to restore it. In addition, after flashing the rocknix ABL, users still can boot Android by setting ABL boot mode to "Android". |
It’s not really like that, and I tried it with my Odin 3, once I flashed their ABL I found myself with the Android broken partition. Rocknix ABL breaks FOTA updates on Android. Stock ABL support UEFI and I have a local branch where I made your similar work and that works with the stock one. |
I verified that using the rocknix_abl within the PR and I can boot Android after setting the ABL boot mode to "Android". I know the early version of rocknix ABL does break Android data partition and it needs a data clean up to boot Android. Now this issue has been fixed. I got this rocknix_abl from the Armada project. |
I prefer to use the ABL stock; you don't have to force a user to install that ABL, so it would be convenient if it supported both—what's the difference to you? I don't think it would be very difficult to integrate dual support.
I don't really agree with that, I think it's too complicated. |
|
I'd also add that, at the moment, support for Mesa drivers, and the ecosystem in general, is still very limited. Because of that, I don't think it makes sense to remove something stable like Android, whether you're using Armbian or Rocknix. If a user simply wants to test things without modifying anything and keep the device completely stock with the original ABL, booting only from the SD card makes perfect sense. In that scenario, supporting the stock ABL is valuable because someone like me, who also uses the console for gaming, doesn't want to replace or dismantle the existing setup any more than necessary. I think that's how most people approach it as well. |
|
@SuperKali are you saying we should keep the stock ABL unchanged and make the device be able to boot from SD card? My understanding is the stock ABL cannot do that and that is why we need to use a modified ABL. Am I miss anything? |
|
Not correct, stock ABL can boot without any issue an UEFI image. I tried myself and it works without any issue. |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
patch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patch (2)
410-440: 🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy liftReassemble the UART byte stream before validating frames.
receive_bufdelivers arbitrary byte chunks, not whole frames. The current handler discards arrivals shorter thanMCU_PKT_SIZE_MINeven when only a prefix of a valid frame is present, and checksums overlong buffers as a single packet. Buffer incoming bytes, validate each complete frame individually, preserve any incomplete tail across callbacks, and return the number of bytes consumed.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@patch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patch` around lines 410 - 440, The rsinput_rx handler must reassemble the UART stream instead of treating each callback as one frame: append incoming bytes to persistent RX state, process and checksum each complete frame individually, retain incomplete trailing bytes for the next callback, and handle overflow without discarding valid buffered data. Update rsinput_rx and the driver’s RX-buffer state accordingly, and return count to report all received bytes consumed.
494-513: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winDo not continue with failed GPIO acquisitions.
gpiod_get_optional()returns either a valid desc orNULL; on acquisition failure it returns anERR_PTR(...). The checks useif (drv->..._gpio), so error pointers also pass through togpiod_set_value_cansleep()in probe, remove, and command initialization. Propagate GPIO acquisition failures through the probe path, including-EPROBE_DEFER; optional GPIOs simply stayNULLwhen absent.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@patch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patch` around lines 494 - 513, Update the GPIO acquisition checks in the probe path for boot_gpio, enable_gpio, and reset_gpio to detect ERR_PTR values and immediately return the corresponding PTR_ERR result, preserving -EPROBE_DEFER. Keep absent optional GPIOs as NULL, and only continue to initialization and later gpiod_set_value_cansleep calls after all acquisitions succeed.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In
`@patch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patch`:
- Around line 300-365: Move prev_states from function-local static storage into
the per-device struct rsinput_driver, then update the button-state comparison
and assignment in the report path to use drv->prev_states. Keep button
transition tracking independent for each RSInput device.
---
Outside diff comments:
In
`@patch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patch`:
- Around line 410-440: The rsinput_rx handler must reassemble the UART stream
instead of treating each callback as one frame: append incoming bytes to
persistent RX state, process and checksum each complete frame individually,
retain incomplete trailing bytes for the next callback, and handle overflow
without discarding valid buffered data. Update rsinput_rx and the driver’s
RX-buffer state accordingly, and return count to report all received bytes
consumed.
- Around line 494-513: Update the GPIO acquisition checks in the probe path for
boot_gpio, enable_gpio, and reset_gpio to detect ERR_PTR values and immediately
return the corresponding PTR_ERR result, preserving -EPROBE_DEFER. Keep absent
optional GPIOs as NULL, and only continue to initialization and later
gpiod_set_value_cansleep calls after all acquisitions succeed.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 2cad1249-f1ac-4d2f-b29a-a8b7005fe8dd
📒 Files selected for processing (1)
patch/kernel/archive/sm8750-7.1/0031_input--Add-driver-for-RSInput-Gamepad.patch
@EvilOlaf I think all comments are addressed. Please check it again. Thanks! |
|
I don't agree that I asked you something and you're ignoring me. |
@SuperKali , I'm sorry if I let you feel that. I'm not going to ignore you. Actually I don't see there's a question I need to answer. |
Description
This PR adds support for running Armbian on AYN Odin3. It is largely based on Odin 3's ROCKNIX and Armada support.
Documentation summary for feature / change
How Has This Been Tested?
Built both minimal and kde-plasma (Ubuntu 26.04 based) images and verified following features working
Things not working
HDMI output via USB Type-CSummary by CodeRabbit
Summary by CodeRabbit