From 4d8ccbccd95be31b16a2d80c2c4f5cca3931cce2 Mon Sep 17 00:00:00 2001 From: "github-action[bot]" Date: Thu, 20 Nov 2025 19:39:45 +0100 Subject: [PATCH] Update On Thu Nov 20 19:39:44 CET 2025 --- .github/update.log | 1 + clash-nyanpasu/frontend/nyanpasu/package.json | 2 +- clash-nyanpasu/pnpm-lock.yaml | 10 +- filebrowser/.github/workflows/ci.yaml | 10 +- filebrowser/.github/workflows/docs.yml | 4 +- filebrowser/.golangci.yml | 5 + filebrowser/cmd/docs.go | 2 +- filebrowser/cmd/root.go | 4 +- filebrowser/cmd/utils.go | 11 +- filebrowser/diskcache/file_cache_test.go | 6 +- filebrowser/frontend/package.json | 2 +- filebrowser/frontend/pnpm-lock.yaml | 446 ++--- filebrowser/go.mod | 4 +- filebrowser/go.sum | 8 +- lede/package/boot/uboot-mediatek/Makefile | 147 +- ...22-enable-environment-for-mt7622_rfb.patch | 33 - .../007-ARM-dts-build-DT-for-MT7987-RFB.patch | 26 + ...upport-for-MediaTek-SPI-NAND-flash-.patch} | 32 +- ...2-mtd-mtk-snand-add-support-for-SPL.patch} | 4 +- ...-add-a-new-mtd-device-type-for-NMBM.patch} | 8 +- ...v-add-support-for-generic-MTD-device.patch | 390 ----- ...-mtd-add-core-facility-code-of-NMBM.patch} | 179 ++- ...100-05-mtd-nmbm-add-support-for-mtd.patch} | 4 +- ...d-support-to-initialize-NMBM-after-.patch} | 20 +- ...atch => 100-07-cmd-add-nmbm-command.patch} | 21 +- ...markbad-subcommand-for-NMBM-testing.patch} | 16 +- ...-mtk-snand-add-NMBM-support-for-SPL.patch} | 39 +- ...ew-command-for-NAND-flash-debugging.patch} | 12 +- ...add-support-for-NMBM-upper-MTD-layer.patch | 55 +- ...add-support-to-read-flash-unique-ID.patch} | 12 +- ...add-support-to-read-flash-unique-ID.patch} | 28 +- ...nd-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch} | 6 +- ...oard-mt7622-use-new-spi-nand-driver.patch} | 34 +- ...d-ability-to-select-item-by-shortkey.patch | 323 ---- ...reference-board-using-new-spi-nand-.patch} | 19 +- ...dd-support-for-booting-from-SPI-NAND.patch | 274 ---- ...0-18-mtd-spi-nor-add-more-flash-ids.patch} | 36 +- ...mtd-spi-nand-add-more-spi-nand-chips.patch | 296 ++++ ...and-add-support-for-FudanMicro-chips.patch | 154 ++ ...upport-to-display-verbose-error-log.patch} | 10 +- ...i-nand-backport-from-upstream-kernel.patch | 549 ------- ...lume-find-create-remove-APIs-public.patch} | 12 +- ...reating-volume-with-all-free-spaces.patch} | 4 +- ...rt-to-create-environment-volume-if-.patch} | 20 +- ...rt-for-UBI-end-of-filesystem-marker.patch} | 4 +- ...d-add-support-for-FORESEE-F35SQA002G.patch | 148 ++ ...d-add-support-for-FORESEE-F35SQA001G.patch | 38 + ...-mtd-spinand-fix-support-for-FORESEE.patch | 19 + ...atch => 103-01-mt7622-enable-pstore.patch} | 12 +- ...atch => 103-02-mt7981-enable-pstore.patch} | 19 +- ...atch => 103-03-mt7986-enable-pstore.patch} | 19 +- ...atch => 103-04-mt7988-enable-pstore.patch} | 6 +- .../104-snfi-add-support-for-GD5F1GQ5UE.patch | 26 + ...figs-add-usefull-stuff-to-mt7988-rfb.patch | 466 +++--- .../106-configs-sync-mt7981-rfb-storage.patch | 37 +- ...igs-add-useful-options-to-mt7981-rfb.patch | 606 ++++--- ...-arm64-mt7981-rfb-add-mtd-partitions.patch | 12 +- .../109-snfi-FM35Q1GA-is-x4-only.patch | 24 + ...-add-support-for-FudanMicro-FM25S01A.patch | 72 + .../patches/110-no-kwbimage.patch | 10 - .../patches/111-force-pylibfdt-build.patch | 2 +- .../patches/120-use-xz-instead-of-lzma.patch | 2 +- ...board-mediatek-wire-up-NMBM-support.patch} | 60 +- .../patches/130-fix-mkimage-host-build.patch | 24 - .../patches/200-cmd-add-imsz-and-imszb.patch | 31 +- .../211-cmd-bootmenu-custom-title.patch | 10 +- .../patches/220-cmd-env-readmem.patch | 12 +- .../patches/250-fix-mmc-erase-timeout.patch | 6 +- ...-of-FIT-configuration-in-chosen-node.patch | 2 +- .../patches/290-mt7981-add-USB-nodes.patch | 71 - .../300-mt7623-fix-mmc-get-env-dev.patch | 2 +- ...7622-generic-reset-button-ignore-env.patch | 29 +- ...7623-generic-reset-button-ignore-env.patch | 2 +- ...7986-generic-reset-button-ignore-env.patch | 39 +- ...7981-generic-reset-button-ignore-env.patch | 39 +- ...7988-generic-reset-button-ignore-env.patch | 8 +- ...7987-generic-reset-button-ignore-env.patch | 40 + .../patches/310-mt7988-select-rootdisk.patch | 4 +- .../patches/311-mt7986-select-rootdisk.patch | 12 +- .../patches/312-mt7622-select-rootdisk.patch | 29 +- .../patches/314-mt7981-select-rootdisk.patch | 67 + .../patches/315-mt7987-select-rootdisk.patch | 67 + .../patches/400-update-bpir2-defconfig.patch | 145 +- .../patches/401-update-u7623-defconfig.patch | 149 +- .../404-add-bananapi_bpi-r64_defconfigs.patch | 623 +++---- ...atek-add-back-mt7622-LK-image-header.patch | 24 + .../patches/410-add-linksys-e8450.patch | 183 +-- .../patches/412-add-ubnt-unifi-6-lr.patch | 732 +++++++-- ...20-add-support-for-RAVPower-RP-WD009.patch | 41 +- .../patches/430-add-bpi-r3.patch | 1123 +++++-------- .../patches/431-add-xiaomi_redmi-ax6000.patch | 404 ----- .../patches/436-add-glinet-mt6000.patch | 274 ---- .../patches/450-add-bpi-r4.patch | 1432 +++++++---------- .../patches/470-add-bpi-r4-lite.patch | 1349 ++++++++++++++++ .../patches/500-adapt-mt7987-rfb.patch | 30 + nodepass/.github/copilot-instructions.md | 166 +- nodepass/.github/workflows/docker.yml | 10 +- nodepass/.github/workflows/release.yml | 8 +- nodepass/CODE_OF_CONDUCT.md | 26 +- nodepass/CONTRIBUTING.md | 19 +- nodepass/README.md | 4 +- nodepass/README_zh.md | 4 +- nodepass/SECURITY.md | 15 +- nodepass/cmd/nodepass/core.go | 35 +- nodepass/docs/en/api.md | 17 +- nodepass/docs/en/configuration.md | 234 ++- nodepass/docs/en/examples.md | 294 +++- nodepass/docs/en/how-it-works.md | 97 +- nodepass/docs/en/installation.md | 2 +- nodepass/docs/en/troubleshooting.md | 160 ++ nodepass/docs/en/usage.md | 45 +- nodepass/docs/zh/api.md | 23 +- nodepass/docs/zh/configuration.md | 236 ++- nodepass/docs/zh/examples.md | 294 +++- nodepass/docs/zh/how-it-works.md | 105 +- nodepass/docs/zh/installation.md | 2 +- nodepass/docs/zh/troubleshooting.md | 160 ++ nodepass/docs/zh/usage.md | 67 +- nodepass/go.mod | 9 + nodepass/go.sum | 24 + nodepass/internal/client.go | 53 +- nodepass/internal/common.go | 210 ++- nodepass/internal/master.go | 26 +- nodepass/internal/server.go | 39 +- .../model/cbi/passwall/client/type/ray.lua | 3 + .../luasrc/passwall/util_xray.lua | 1 + .../luci-app-passwall/po/zh-cn/passwall.po | 6 + pingtunnel/go.mod | 6 +- pingtunnel/go.sum | 16 +- shadowsocks-rust/Cargo.lock | 178 +- shadowsocks-rust/Cargo.toml | 2 +- .../crates/shadowsocks-service/Cargo.toml | 8 +- .../crates/shadowsocks-service/src/config.rs | 13 +- .../src/local/online_config/mod.rs | 2 +- .../src/local/socks/config.rs | 2 +- shadowsocks-rust/src/config.rs | 4 +- .../model/cbi/passwall/client/type/ray.lua | 3 + .../luasrc/passwall/util_xray.lua | 1 + small/luci-app-passwall/po/zh-cn/passwall.po | 6 + small/v2ray-geodata/Makefile | 4 +- socratex/README.md | 2 +- socratex/package.json | 2 +- v2rayn/.github/workflows/build-linux.yml | 8 +- v2rayn/.github/workflows/build-osx.yml | 8 +- .../workflows/build-windows-desktop.yml | 8 +- v2rayn/.github/workflows/build-windows.yml | 14 +- v2rayn/v2rayN/Directory.Packages.props | 8 +- .../ServiceLib/Handler/Fmt/ShadowsocksFmt.cs | 145 +- .../Singbox/SingboxOutboundService.cs | 151 +- xray-core/.github/docker/Dockerfile | 2 +- xray-core/.github/docker/Dockerfile.usa | 2 +- xray-core/README.md | 2 + xray-core/app/reverse/bridge.go | 5 +- xray-core/common/mux/server.go | 5 +- xray-core/features/routing/dispatcher.go | 6 + xray-core/go.mod | 14 +- xray-core/go.sum | 28 +- xray-core/proxy/socks/protocol.go | 5 + xray-core/proxy/vless/inbound/inbound.go | 14 +- yt-dlp/yt_dlp/extractor/urplay.py | 48 +- 160 files changed, 8427 insertions(+), 6552 deletions(-) delete mode 100644 lede/package/boot/uboot-mediatek/patches/000-mtk-20-configs-mt7622-enable-environment-for-mt7622_rfb.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/007-ARM-dts-build-DT-for-MT7987-RFB.patch rename lede/package/boot/uboot-mediatek/patches/{100-02-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch => 100-01-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch} (99%) rename lede/package/boot/uboot-mediatek/patches/{100-03-mtd-mtk-snand-add-support-for-SPL.patch => 100-02-mtd-mtk-snand-add-support-for-SPL.patch} (97%) rename lede/package/boot/uboot-mediatek/patches/{100-05-mtd-add-a-new-mtd-device-type-for-NMBM.patch => 100-03-mtd-add-a-new-mtd-device-type-for-NMBM.patch} (85%) delete mode 100644 lede/package/boot/uboot-mediatek/patches/100-04-env-add-support-for-generic-MTD-device.patch rename lede/package/boot/uboot-mediatek/patches/{100-06-mtd-add-core-facility-code-of-NMBM.patch => 100-04-mtd-add-core-facility-code-of-NMBM.patch} (95%) rename lede/package/boot/uboot-mediatek/patches/{100-07-mtd-nmbm-add-support-for-mtd.patch => 100-05-mtd-nmbm-add-support-for-mtd.patch} (99%) rename lede/package/boot/uboot-mediatek/patches/{100-08-common-board_r-add-support-to-initialize-NMBM-after-.patch => 100-06-common-board_r-add-support-to-initialize-NMBM-after-.patch} (62%) rename lede/package/boot/uboot-mediatek/patches/{100-09-cmd-add-nmbm-command.patch => 100-07-cmd-add-nmbm-command.patch} (95%) rename lede/package/boot/uboot-mediatek/patches/{100-10-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch => 100-08-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch} (82%) rename lede/package/boot/uboot-mediatek/patches/{100-12-mtd-mtk-snand-add-NMBM-support-for-SPL.patch => 100-09-mtd-mtk-snand-add-NMBM-support-for-SPL.patch} (78%) rename lede/package/boot/uboot-mediatek/patches/{100-13-cmd-add-a-new-command-for-NAND-flash-debugging.patch => 100-10-cmd-add-a-new-command-for-NAND-flash-debugging.patch} (98%) rename lede/package/boot/uboot-mediatek/patches/{100-14-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch => 100-12-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch} (91%) rename lede/package/boot/uboot-mediatek/patches/{100-15-cmd-sf-add-support-to-read-flash-unique-ID.patch => 100-13-cmd-sf-add-support-to-read-flash-unique-ID.patch} (52%) rename lede/package/boot/uboot-mediatek/patches/{100-17-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch => 100-14-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch} (82%) rename lede/package/boot/uboot-mediatek/patches/{100-19-board-mt7622-use-new-spi-nand-driver.patch => 100-16-board-mt7622-use-new-spi-nand-driver.patch} (58%) delete mode 100644 lede/package/boot/uboot-mediatek/patches/100-16-cmd-bootmenu-add-ability-to-select-item-by-shortkey.patch rename lede/package/boot/uboot-mediatek/patches/{100-20-board-mt7981-add-reference-board-using-new-spi-nand-.patch => 100-17-board-mt7981-add-reference-board-using-new-spi-nand-.patch} (93%) delete mode 100644 lede/package/boot/uboot-mediatek/patches/100-18-board-mt7629-add-support-for-booting-from-SPI-NAND.patch rename lede/package/boot/uboot-mediatek/patches/{100-21-mtd-spi-nor-add-more-flash-ids.patch => 100-18-mtd-spi-nor-add-more-flash-ids.patch} (54%) create mode 100644 lede/package/boot/uboot-mediatek/patches/100-19-mtd-spi-nand-add-more-spi-nand-chips.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/100-20-mtd-spi-nand-add-support-for-FudanMicro-chips.patch rename lede/package/boot/uboot-mediatek/patches/{100-23-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch => 100-22-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch} (87%) delete mode 100644 lede/package/boot/uboot-mediatek/patches/100-22-mtd-spi-nand-backport-from-upstream-kernel.patch rename lede/package/boot/uboot-mediatek/patches/{100-24-cmd-ubi-make-volume-find-create-remove-APIs-public.patch => 100-23-cmd-ubi-make-volume-find-create-remove-APIs-public.patch} (80%) rename lede/package/boot/uboot-mediatek/patches/{100-25-cmd-ubi-allow-creating-volume-with-all-free-spaces.patch => 100-24-cmd-ubi-allow-creating-volume-with-all-free-spaces.patch} (82%) rename lede/package/boot/uboot-mediatek/patches/{100-26-env-ubi-add-support-to-create-environment-volume-if-.patch => 100-25-env-ubi-add-support-to-create-environment-volume-if-.patch} (76%) rename lede/package/boot/uboot-mediatek/patches/{100-27-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch => 100-26-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch} (92%) create mode 100644 lede/package/boot/uboot-mediatek/patches/101-01-mtd-spinand-add-support-for-FORESEE-F35SQA002G.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/101-02-mtd-spinand-add-support-for-FORESEE-F35SQA001G.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/101-03-mtd-spinand-fix-support-for-FORESEE.patch rename lede/package/boot/uboot-mediatek/patches/{050-mt7622-enable-pstore.patch => 103-01-mt7622-enable-pstore.patch} (67%) rename lede/package/boot/uboot-mediatek/patches/{052-mt7981-enable-pstore.patch => 103-02-mt7981-enable-pstore.patch} (56%) rename lede/package/boot/uboot-mediatek/patches/{051-mt7986-enable-pstore.patch => 103-03-mt7986-enable-pstore.patch} (56%) rename lede/package/boot/uboot-mediatek/patches/{103-mt7988-enable-pstore.patch => 103-04-mt7988-enable-pstore.patch} (82%) create mode 100644 lede/package/boot/uboot-mediatek/patches/104-snfi-add-support-for-GD5F1GQ5UE.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/109-snfi-FM35Q1GA-is-x4-only.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/110-mtd-spi-nand-add-support-for-FudanMicro-FM25S01A.patch delete mode 100644 lede/package/boot/uboot-mediatek/patches/110-no-kwbimage.patch rename lede/package/boot/uboot-mediatek/patches/{100-29-board-mediatek-wire-up-NMBM-support.patch => 129-board-mediatek-wire-up-NMBM-support.patch} (81%) delete mode 100644 lede/package/boot/uboot-mediatek/patches/130-fix-mkimage-host-build.patch delete mode 100644 lede/package/boot/uboot-mediatek/patches/290-mt7981-add-USB-nodes.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/306-mt7987-generic-reset-button-ignore-env.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/314-mt7981-select-rootdisk.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/315-mt7987-select-rootdisk.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/408-arm-mediatek-add-back-mt7622-LK-image-header.patch delete mode 100644 lede/package/boot/uboot-mediatek/patches/431-add-xiaomi_redmi-ax6000.patch delete mode 100644 lede/package/boot/uboot-mediatek/patches/436-add-glinet-mt6000.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/470-add-bpi-r4-lite.patch create mode 100644 lede/package/boot/uboot-mediatek/patches/500-adapt-mt7987-rfb.patch diff --git a/.github/update.log b/.github/update.log index a50aae622e..bb118db97b 100644 --- a/.github/update.log +++ b/.github/update.log @@ -1187,3 +1187,4 @@ Update On Sun Nov 16 19:35:35 CET 2025 Update On Mon Nov 17 19:42:18 CET 2025 Update On Tue Nov 18 19:40:59 CET 2025 Update On Wed Nov 19 19:39:59 CET 2025 +Update On Thu Nov 20 19:39:36 CET 2025 diff --git a/clash-nyanpasu/frontend/nyanpasu/package.json b/clash-nyanpasu/frontend/nyanpasu/package.json index cc439499cf..95afe5ebf1 100644 --- a/clash-nyanpasu/frontend/nyanpasu/package.json +++ b/clash-nyanpasu/frontend/nyanpasu/package.json @@ -56,7 +56,7 @@ "@csstools/normalize.css": "12.1.1", "@emotion/babel-plugin": "11.13.5", "@emotion/react": "11.14.0", - "@iconify/json": "2.2.404", + "@iconify/json": "2.2.409", "@monaco-editor/react": "4.7.0", "@tanstack/react-query": "5.90.7", "@tanstack/react-router": "1.134.15", diff --git a/clash-nyanpasu/pnpm-lock.yaml b/clash-nyanpasu/pnpm-lock.yaml index f81f06a6c1..ac14f03f7c 100644 --- a/clash-nyanpasu/pnpm-lock.yaml +++ b/clash-nyanpasu/pnpm-lock.yaml @@ -346,8 +346,8 @@ importers: specifier: 11.14.0 version: 11.14.0(@types/react@19.2.2)(react@19.2.0) '@iconify/json': - specifier: 2.2.404 - version: 2.2.404 + specifier: 2.2.409 + version: 2.2.409 '@monaco-editor/react': specifier: 4.7.0 version: 4.7.0(monaco-editor@0.54.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) @@ -1821,8 +1821,8 @@ packages: prettier-plugin-ember-template-tag: optional: true - '@iconify/json@2.2.404': - resolution: {integrity: sha512-K11bUBMW7gb/PhzJNZvDDJDq3hEVXoJArsdbr+9LQQqd2TrWEd5+PtctNcfJLu4epgjwDppaLJnN6AEPI1BL9w==} + '@iconify/json@2.2.409': + resolution: {integrity: sha512-PnTFu5JSM+GTL2mPwLBi6UDFiQvqG+OVITz9JNfZgSjFuWcF67LhedfjKd4jO/0EgLQLl0StjGbDEu1B19V5vw==} '@iconify/types@2.0.0': resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} @@ -10334,7 +10334,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@iconify/json@2.2.404': + '@iconify/json@2.2.409': dependencies: '@iconify/types': 2.0.0 pathe: 2.0.3 diff --git a/filebrowser/.github/workflows/ci.yaml b/filebrowser/.github/workflows/ci.yaml index b389be5f6a..846b08f8f1 100644 --- a/filebrowser/.github/workflows/ci.yaml +++ b/filebrowser/.github/workflows/ci.yaml @@ -13,7 +13,7 @@ jobs: name: Lint Frontend runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: pnpm/action-setup@v4 with: package_json_file: "frontend/package.json" @@ -31,7 +31,7 @@ jobs: name: Lint Backend runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version: "1.25.x" @@ -43,7 +43,7 @@ jobs: name: Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 - uses: actions/setup-go@v6 with: go-version: "1.25.x" @@ -53,7 +53,7 @@ jobs: name: Build runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 - uses: actions/setup-go@v6 @@ -77,7 +77,7 @@ jobs: if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest steps: - - uses: actions/checkout@v5 + - uses: actions/checkout@v6 with: fetch-depth: 0 - uses: actions/setup-go@v6 diff --git a/filebrowser/.github/workflows/docs.yml b/filebrowser/.github/workflows/docs.yml index 8eec974718..1f64177c52 100644 --- a/filebrowser/.github/workflows/docs.yml +++ b/filebrowser/.github/workflows/docs.yml @@ -16,7 +16,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Install Task @@ -35,7 +35,7 @@ jobs: timeout-minutes: 5 steps: - name: Checkout - uses: actions/checkout@v5 + uses: actions/checkout@v6 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Install Task diff --git a/filebrowser/.golangci.yml b/filebrowser/.golangci.yml index 32d944f31c..8819f48b1c 100644 --- a/filebrowser/.golangci.yml +++ b/filebrowser/.golangci.yml @@ -2,8 +2,13 @@ version: "2" linters: default: standard + enable: + - gocritic + - govet + - revive exclusions: presets: - std-error-handling + - comments paths: - frontend/ diff --git a/filebrowser/cmd/docs.go b/filebrowser/cmd/docs.go index 7f4f536ede..d65a29beca 100644 --- a/filebrowser/cmd/docs.go +++ b/filebrowser/cmd/docs.go @@ -35,7 +35,7 @@ var docsCmd = &cobra.Command{ rootCmd.Root().DisableAutoGenTag = true - err = doc.GenMarkdownTreeCustom(cmd.Root(), tempDir, func(f string) string { + err = doc.GenMarkdownTreeCustom(cmd.Root(), tempDir, func(_ string) string { return "" }, func(s string) string { return s diff --git a/filebrowser/cmd/root.go b/filebrowser/cmd/root.go index b0ccd8f5d7..dd91c1b2f5 100644 --- a/filebrowser/cmd/root.go +++ b/filebrowser/cmd/root.go @@ -54,7 +54,7 @@ var ( ) // TODO(remove): remove after July 2026. -func migrateFlagNames(f *pflag.FlagSet, name string) pflag.NormalizedName { +func migrateFlagNames(_ *pflag.FlagSet, name string) pflag.NormalizedName { if newName, ok := flagNamesMigrations[name]; ok { if !warnedFlags[name] { @@ -146,7 +146,7 @@ The precedence of the configuration values are as follows: Also, if the database path doesn't exist, File Browser will enter into the quick setup mode and a new database will be bootstrapped and a new user created with the credentials from options "username" and "password".`, - RunE: withViperAndStore(func(cmd *cobra.Command, _ []string, v *viper.Viper, st *store) error { + RunE: withViperAndStore(func(_ *cobra.Command, _ []string, v *viper.Viper, st *store) error { if !st.databaseExisted { err := quickSetup(v, st.Storage) if err != nil { diff --git a/filebrowser/cmd/utils.go b/filebrowser/cmd/utils.go index eb953d3263..ee637fa3b7 100644 --- a/filebrowser/cmd/utils.go +++ b/filebrowser/cmd/utils.go @@ -160,13 +160,14 @@ func withViperAndStore(fn func(cmd *cobra.Command, args []string, v *viper.Viper } exists, err := dbExists(path) - if err != nil { + switch { + case err != nil: return err - } else if exists && options.expectsNoDatabase { + case exists && options.expectsNoDatabase: log.Fatal(path + " already exists") - } else if !exists && !options.expectsNoDatabase && !options.allowsNoDatabase { + case !exists && !options.expectsNoDatabase && !options.allowsNoDatabase: log.Fatal(path + " does not exist. Please run 'filebrowser config init' first.") - } else if !exists && !options.expectsNoDatabase { + case !exists && !options.expectsNoDatabase: log.Println("WARNING: filebrowser.db can't be found. Initialing in " + strings.TrimSuffix(path, "filebrowser.db")) } @@ -193,7 +194,7 @@ func withViperAndStore(fn func(cmd *cobra.Command, args []string, v *viper.Viper } func withStore(fn func(cmd *cobra.Command, args []string, store *store) error, options storeOptions) cobraFunc { - return withViperAndStore(func(cmd *cobra.Command, args []string, v *viper.Viper, store *store) error { + return withViperAndStore(func(cmd *cobra.Command, args []string, _ *viper.Viper, store *store) error { return fn(cmd, args, store) }, options) } diff --git a/filebrowser/diskcache/file_cache_test.go b/filebrowser/diskcache/file_cache_test.go index 9a41052e50..c6c750c0ad 100644 --- a/filebrowser/diskcache/file_cache_test.go +++ b/filebrowser/diskcache/file_cache_test.go @@ -25,12 +25,12 @@ func TestFileCache(t *testing.T) { // store new key err := cache.Store(ctx, key, []byte(value)) require.NoError(t, err) - checkValue(t, ctx, fs, filepath.Join(cacheRoot, cachedFilePath), cache, key, value) + checkValue(ctx, t, fs, filepath.Join(cacheRoot, cachedFilePath), cache, key, value) // update existing key err = cache.Store(ctx, key, []byte(newValue)) require.NoError(t, err) - checkValue(t, ctx, fs, filepath.Join(cacheRoot, cachedFilePath), cache, key, newValue) + checkValue(ctx, t, fs, filepath.Join(cacheRoot, cachedFilePath), cache, key, newValue) // delete key err = cache.Delete(ctx, key) @@ -40,7 +40,7 @@ func TestFileCache(t *testing.T) { require.False(t, exists) } -func checkValue(t *testing.T, ctx context.Context, fs afero.Fs, fileFullPath string, cache *FileCache, key, wantValue string) { +func checkValue(ctx context.Context, t *testing.T, fs afero.Fs, fileFullPath string, cache *FileCache, key, wantValue string) { t.Helper() // check actual file content b, err := afero.ReadFile(fs, fileFullPath) diff --git a/filebrowser/frontend/package.json b/filebrowser/frontend/package.json index ade91ff1ed..cda46e5e2d 100644 --- a/filebrowser/frontend/package.json +++ b/filebrowser/frontend/package.json @@ -71,5 +71,5 @@ "vite-plugin-compression2": "^2.3.1", "vue-tsc": "^3.1.3" }, - "packageManager": "pnpm@10.22.0+sha512.bf049efe995b28f527fd2b41ae0474ce29186f7edcb3bf545087bd61fbbebb2bf75362d1307fda09c2d288e1e499787ac12d4fcb617a974718a6051f2eee741c" + "packageManager": "pnpm@10.23.0+sha512.21c4e5698002ade97e4efe8b8b4a89a8de3c85a37919f957e7a0f30f38fbc5bbdd05980ffe29179b2fb6e6e691242e098d945d1601772cad0fef5fb6411e2a4b" } diff --git a/filebrowser/frontend/pnpm-lock.yaml b/filebrowser/frontend/pnpm-lock.yaml index 9feb6b3bfc..f3ebe665ae 100644 --- a/filebrowser/frontend/pnpm-lock.yaml +++ b/filebrowser/frontend/pnpm-lock.yaml @@ -43,7 +43,7 @@ importers: version: 4.17.21 marked: specifier: ^17.0.0 - version: 17.0.0 + version: 17.0.1 material-icons: specifier: ^1.13.14 version: 1.13.14 @@ -98,7 +98,7 @@ importers: devDependencies: '@intlify/unplugin-vue-i18n': specifier: ^11.0.1 - version: 11.0.1(@vue/compiler-dom@3.5.24)(eslint@9.39.1)(rollup@4.52.5)(typescript@5.9.3)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3)) + version: 11.0.1(@vue/compiler-dom@3.5.24)(eslint@9.39.1)(rollup@4.53.3)(typescript@5.9.3)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3)) '@tsconfig/node24': specifier: ^24.0.2 version: 24.0.3 @@ -113,10 +113,10 @@ importers: version: 8.47.0(@typescript-eslint/parser@8.37.0(eslint@9.39.1)(typescript@5.9.3))(eslint@9.39.1)(typescript@5.9.3) '@vitejs/plugin-legacy': specifier: ^7.2.1 - version: 7.2.1(terser@5.44.1)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0)) + version: 7.2.1(terser@5.44.1)(vite@7.2.4(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0)) '@vitejs/plugin-vue': specifier: ^6.0.1 - version: 6.0.2(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.24(typescript@5.9.3)) + version: 6.0.2(vite@7.2.4(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.24(typescript@5.9.3)) '@vue/eslint-config-prettier': specifier: ^10.2.0 version: 10.2.0(eslint@9.39.1)(prettier@3.6.2) @@ -155,10 +155,10 @@ importers: version: 5.9.3 vite: specifier: ^7.2.2 - version: 7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0) + version: 7.2.4(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0) vite-plugin-compression2: specifier: ^2.3.1 - version: 2.3.1(rollup@4.52.5) + version: 2.3.1(rollup@4.53.3) vue-tsc: specifier: ^3.1.3 version: 3.1.4(typescript@5.9.3) @@ -665,158 +665,158 @@ packages: peerDependencies: vue: ^3.0.0 - '@esbuild/aix-ppc64@0.25.11': - resolution: {integrity: sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==} + '@esbuild/aix-ppc64@0.25.12': + resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.11': - resolution: {integrity: sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==} + '@esbuild/android-arm64@0.25.12': + resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.11': - resolution: {integrity: sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==} + '@esbuild/android-arm@0.25.12': + resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.11': - resolution: {integrity: sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==} + '@esbuild/android-x64@0.25.12': + resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.11': - resolution: {integrity: sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==} + '@esbuild/darwin-arm64@0.25.12': + resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.11': - resolution: {integrity: sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==} + '@esbuild/darwin-x64@0.25.12': + resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.11': - resolution: {integrity: sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==} + '@esbuild/freebsd-arm64@0.25.12': + resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.11': - resolution: {integrity: sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==} + '@esbuild/freebsd-x64@0.25.12': + resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.11': - resolution: {integrity: sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==} + '@esbuild/linux-arm64@0.25.12': + resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.11': - resolution: {integrity: sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==} + '@esbuild/linux-arm@0.25.12': + resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.11': - resolution: {integrity: sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==} + '@esbuild/linux-ia32@0.25.12': + resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.11': - resolution: {integrity: sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==} + '@esbuild/linux-loong64@0.25.12': + resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.11': - resolution: {integrity: sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==} + '@esbuild/linux-mips64el@0.25.12': + resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.11': - resolution: {integrity: sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==} + '@esbuild/linux-ppc64@0.25.12': + resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.11': - resolution: {integrity: sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==} + '@esbuild/linux-riscv64@0.25.12': + resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.11': - resolution: {integrity: sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==} + '@esbuild/linux-s390x@0.25.12': + resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.11': - resolution: {integrity: sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==} + '@esbuild/linux-x64@0.25.12': + resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.11': - resolution: {integrity: sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==} + '@esbuild/netbsd-arm64@0.25.12': + resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.11': - resolution: {integrity: sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==} + '@esbuild/netbsd-x64@0.25.12': + resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.11': - resolution: {integrity: sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==} + '@esbuild/openbsd-arm64@0.25.12': + resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.11': - resolution: {integrity: sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==} + '@esbuild/openbsd-x64@0.25.12': + resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.11': - resolution: {integrity: sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==} + '@esbuild/openharmony-arm64@0.25.12': + resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.11': - resolution: {integrity: sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==} + '@esbuild/sunos-x64@0.25.12': + resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.11': - resolution: {integrity: sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==} + '@esbuild/win32-arm64@0.25.12': + resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.11': - resolution: {integrity: sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==} + '@esbuild/win32-ia32@0.25.12': + resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.11': - resolution: {integrity: sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==} + '@esbuild/win32-x64@0.25.12': + resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} engines: {node: '>=18'} cpu: [x64] os: [win32] @@ -977,113 +977,113 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.52.5': - resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.52.5': - resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.52.5': - resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.52.5': - resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.52.5': - resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.52.5': - resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': - resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.52.5': - resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.52.5': - resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.52.5': - resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.52.5': - resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.52.5': - resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.52.5': - resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.52.5': - resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.52.5': - resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.52.5': - resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.52.5': - resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} cpu: [x64] os: [linux] - '@rollup/rollup-openharmony-arm64@4.52.5': - resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.52.5': - resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.52.5': - resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.5': - resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.52.5': - resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} cpu: [x64] os: [win32] @@ -1626,8 +1626,8 @@ packages: resolution: {integrity: sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==} engines: {node: '>=0.12'} - esbuild@0.25.11: - resolution: {integrity: sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==} + esbuild@0.25.12: + resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} engines: {node: '>=18'} hasBin: true @@ -2003,8 +2003,8 @@ packages: magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} - marked@17.0.0: - resolution: {integrity: sha512-KkDYEWEEiYJw/KC+DVm1zzlpMQSMIu6YRltkcCvwheCp8HWPXCk9JwOmHJKBlGfzcpzcIt6x3sMnTsRm/51oDg==} + marked@17.0.1: + resolution: {integrity: sha512-boeBdiS0ghpWcSwoNm/jJBwdpFaMnZWRzjA6SkUMYb40SVaN1x7mmfGKp0jvexGcx+7y2La5zRZsYFZI6Qpypg==} engines: {node: '>= 20'} hasBin: true @@ -2244,8 +2244,8 @@ packages: rfdc@1.4.1: resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rollup@4.52.5: - resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2435,8 +2435,8 @@ packages: vite-plugin-compression2@2.3.1: resolution: {integrity: sha512-bnhLTsurtvOiiP6EMISIKVsOMCeTAjE6FJbyqQus3W4mtAxF7pCuC4puUIAiCgNs98tOCpqo6GIXJXTLufzIaw==} - vite@7.2.2: - resolution: {integrity: sha512-BxAKBWmIbrDgrokdGZH1IgkIk/5mMHDreLDmCJ0qpyJaAteP8NvMhkwr/ZCQNqNH97bw/dANTE9PDzqwJghfMQ==} + vite@7.2.4: + resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -3220,82 +3220,82 @@ snapshots: dependencies: vue: 3.5.24(typescript@5.9.3) - '@esbuild/aix-ppc64@0.25.11': + '@esbuild/aix-ppc64@0.25.12': optional: true - '@esbuild/android-arm64@0.25.11': + '@esbuild/android-arm64@0.25.12': optional: true - '@esbuild/android-arm@0.25.11': + '@esbuild/android-arm@0.25.12': optional: true - '@esbuild/android-x64@0.25.11': + '@esbuild/android-x64@0.25.12': optional: true - '@esbuild/darwin-arm64@0.25.11': + '@esbuild/darwin-arm64@0.25.12': optional: true - '@esbuild/darwin-x64@0.25.11': + '@esbuild/darwin-x64@0.25.12': optional: true - '@esbuild/freebsd-arm64@0.25.11': + '@esbuild/freebsd-arm64@0.25.12': optional: true - '@esbuild/freebsd-x64@0.25.11': + '@esbuild/freebsd-x64@0.25.12': optional: true - '@esbuild/linux-arm64@0.25.11': + '@esbuild/linux-arm64@0.25.12': optional: true - '@esbuild/linux-arm@0.25.11': + '@esbuild/linux-arm@0.25.12': optional: true - '@esbuild/linux-ia32@0.25.11': + '@esbuild/linux-ia32@0.25.12': optional: true - '@esbuild/linux-loong64@0.25.11': + '@esbuild/linux-loong64@0.25.12': optional: true - '@esbuild/linux-mips64el@0.25.11': + '@esbuild/linux-mips64el@0.25.12': optional: true - '@esbuild/linux-ppc64@0.25.11': + '@esbuild/linux-ppc64@0.25.12': optional: true - '@esbuild/linux-riscv64@0.25.11': + '@esbuild/linux-riscv64@0.25.12': optional: true - '@esbuild/linux-s390x@0.25.11': + '@esbuild/linux-s390x@0.25.12': optional: true - '@esbuild/linux-x64@0.25.11': + '@esbuild/linux-x64@0.25.12': optional: true - '@esbuild/netbsd-arm64@0.25.11': + '@esbuild/netbsd-arm64@0.25.12': optional: true - '@esbuild/netbsd-x64@0.25.11': + '@esbuild/netbsd-x64@0.25.12': optional: true - '@esbuild/openbsd-arm64@0.25.11': + '@esbuild/openbsd-arm64@0.25.12': optional: true - '@esbuild/openbsd-x64@0.25.11': + '@esbuild/openbsd-x64@0.25.12': optional: true - '@esbuild/openharmony-arm64@0.25.11': + '@esbuild/openharmony-arm64@0.25.12': optional: true - '@esbuild/sunos-x64@0.25.11': + '@esbuild/sunos-x64@0.25.12': optional: true - '@esbuild/win32-arm64@0.25.11': + '@esbuild/win32-arm64@0.25.12': optional: true - '@esbuild/win32-ia32@0.25.11': + '@esbuild/win32-ia32@0.25.12': optional: true - '@esbuild/win32-x64@0.25.11': + '@esbuild/win32-x64@0.25.12': optional: true '@eslint-community/eslint-utils@4.9.0(eslint@9.39.1)': @@ -3360,7 +3360,7 @@ snapshots: '@intlify/message-compiler': 11.1.12 '@intlify/shared': 11.1.12 acorn: 8.15.0 - esbuild: 0.25.11 + esbuild: 0.25.12 escodegen: 2.1.0 estree-walker: 2.0.2 jsonc-eslint-parser: 2.4.0 @@ -3381,13 +3381,13 @@ snapshots: '@intlify/shared@11.1.12': {} - '@intlify/unplugin-vue-i18n@11.0.1(@vue/compiler-dom@3.5.24)(eslint@9.39.1)(rollup@4.52.5)(typescript@5.9.3)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))': + '@intlify/unplugin-vue-i18n@11.0.1(@vue/compiler-dom@3.5.24)(eslint@9.39.1)(rollup@4.53.3)(typescript@5.9.3)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3))': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1) '@intlify/bundle-utils': 11.0.1(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3))) '@intlify/shared': 11.1.12 '@intlify/vue-i18n-extensions': 8.0.0(@intlify/shared@11.1.12)(@vue/compiler-dom@3.5.24)(vue-i18n@11.1.12(vue@3.5.24(typescript@5.9.3)))(vue@3.5.24(typescript@5.9.3)) - '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + '@rollup/pluginutils': 5.3.0(rollup@4.53.3) '@typescript-eslint/scope-manager': 8.46.4 '@typescript-eslint/typescript-estree': 8.46.4(typescript@5.9.3) debug: 4.4.3 @@ -3454,78 +3454,78 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.50': {} - '@rollup/pluginutils@5.3.0(rollup@4.52.5)': + '@rollup/pluginutils@5.3.0(rollup@4.53.3)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/rollup-android-arm-eabi@4.52.5': + '@rollup/rollup-android-arm-eabi@4.53.3': optional: true - '@rollup/rollup-android-arm64@4.52.5': + '@rollup/rollup-android-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-arm64@4.52.5': + '@rollup/rollup-darwin-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-x64@4.52.5': + '@rollup/rollup-darwin-x64@4.53.3': optional: true - '@rollup/rollup-freebsd-arm64@4.52.5': + '@rollup/rollup-freebsd-arm64@4.53.3': optional: true - '@rollup/rollup-freebsd-x64@4.52.5': + '@rollup/rollup-freebsd-x64@4.53.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.52.5': + '@rollup/rollup-linux-arm-musleabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.52.5': + '@rollup/rollup-linux-arm64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.52.5': + '@rollup/rollup-linux-arm64-musl@4.53.3': optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.5': + '@rollup/rollup-linux-loong64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.52.5': + '@rollup/rollup-linux-ppc64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.52.5': + '@rollup/rollup-linux-riscv64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.52.5': + '@rollup/rollup-linux-riscv64-musl@4.53.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.52.5': + '@rollup/rollup-linux-s390x-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.52.5': + '@rollup/rollup-linux-x64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-musl@4.52.5': + '@rollup/rollup-linux-x64-musl@4.53.3': optional: true - '@rollup/rollup-openharmony-arm64@4.52.5': + '@rollup/rollup-openharmony-arm64@4.53.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.52.5': + '@rollup/rollup-win32-arm64-msvc@4.53.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.52.5': + '@rollup/rollup-win32-ia32-msvc@4.53.3': optional: true - '@rollup/rollup-win32-x64-gnu@4.52.5': + '@rollup/rollup-win32-x64-gnu@4.53.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.52.5': + '@rollup/rollup-win32-x64-msvc@4.53.3': optional: true '@tsconfig/node24@24.0.3': {} @@ -3790,7 +3790,7 @@ snapshots: global: 4.4.0 is-function: 1.0.2 - '@vitejs/plugin-legacy@7.2.1(terser@5.44.1)(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))': + '@vitejs/plugin-legacy@7.2.1(terser@5.44.1)(vite@7.2.4(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.28.5) @@ -3805,14 +3805,14 @@ snapshots: regenerator-runtime: 0.14.1 systemjs: 6.15.1 terser: 5.44.1 - vite: 7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0) + vite: 7.2.4(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.2(vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.24(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.2(vite@7.2.4(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0))(vue@3.5.24(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.50 - vite: 7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0) + vite: 7.2.4(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0) vue: 3.5.24(typescript@5.9.3) '@volar/language-core@2.4.23': @@ -4169,34 +4169,34 @@ snapshots: d: 1.0.2 ext: 1.7.0 - esbuild@0.25.11: + esbuild@0.25.12: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.11 - '@esbuild/android-arm': 0.25.11 - '@esbuild/android-arm64': 0.25.11 - '@esbuild/android-x64': 0.25.11 - '@esbuild/darwin-arm64': 0.25.11 - '@esbuild/darwin-x64': 0.25.11 - '@esbuild/freebsd-arm64': 0.25.11 - '@esbuild/freebsd-x64': 0.25.11 - '@esbuild/linux-arm': 0.25.11 - '@esbuild/linux-arm64': 0.25.11 - '@esbuild/linux-ia32': 0.25.11 - '@esbuild/linux-loong64': 0.25.11 - '@esbuild/linux-mips64el': 0.25.11 - '@esbuild/linux-ppc64': 0.25.11 - '@esbuild/linux-riscv64': 0.25.11 - '@esbuild/linux-s390x': 0.25.11 - '@esbuild/linux-x64': 0.25.11 - '@esbuild/netbsd-arm64': 0.25.11 - '@esbuild/netbsd-x64': 0.25.11 - '@esbuild/openbsd-arm64': 0.25.11 - '@esbuild/openbsd-x64': 0.25.11 - '@esbuild/openharmony-arm64': 0.25.11 - '@esbuild/sunos-x64': 0.25.11 - '@esbuild/win32-arm64': 0.25.11 - '@esbuild/win32-ia32': 0.25.11 - '@esbuild/win32-x64': 0.25.11 + '@esbuild/aix-ppc64': 0.25.12 + '@esbuild/android-arm': 0.25.12 + '@esbuild/android-arm64': 0.25.12 + '@esbuild/android-x64': 0.25.12 + '@esbuild/darwin-arm64': 0.25.12 + '@esbuild/darwin-x64': 0.25.12 + '@esbuild/freebsd-arm64': 0.25.12 + '@esbuild/freebsd-x64': 0.25.12 + '@esbuild/linux-arm': 0.25.12 + '@esbuild/linux-arm64': 0.25.12 + '@esbuild/linux-ia32': 0.25.12 + '@esbuild/linux-loong64': 0.25.12 + '@esbuild/linux-mips64el': 0.25.12 + '@esbuild/linux-ppc64': 0.25.12 + '@esbuild/linux-riscv64': 0.25.12 + '@esbuild/linux-s390x': 0.25.12 + '@esbuild/linux-x64': 0.25.12 + '@esbuild/netbsd-arm64': 0.25.12 + '@esbuild/netbsd-x64': 0.25.12 + '@esbuild/openbsd-arm64': 0.25.12 + '@esbuild/openbsd-x64': 0.25.12 + '@esbuild/openharmony-arm64': 0.25.12 + '@esbuild/sunos-x64': 0.25.12 + '@esbuild/win32-arm64': 0.25.12 + '@esbuild/win32-ia32': 0.25.12 + '@esbuild/win32-x64': 0.25.12 escalade@3.2.0: {} @@ -4558,7 +4558,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - marked@17.0.0: {} + marked@17.0.1: {} marks-pane@1.0.9: {} @@ -4765,32 +4765,32 @@ snapshots: rfdc@1.4.1: {} - rollup@4.52.5: + rollup@4.53.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.5 - '@rollup/rollup-android-arm64': 4.52.5 - '@rollup/rollup-darwin-arm64': 4.52.5 - '@rollup/rollup-darwin-x64': 4.52.5 - '@rollup/rollup-freebsd-arm64': 4.52.5 - '@rollup/rollup-freebsd-x64': 4.52.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 - '@rollup/rollup-linux-arm-musleabihf': 4.52.5 - '@rollup/rollup-linux-arm64-gnu': 4.52.5 - '@rollup/rollup-linux-arm64-musl': 4.52.5 - '@rollup/rollup-linux-loong64-gnu': 4.52.5 - '@rollup/rollup-linux-ppc64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-musl': 4.52.5 - '@rollup/rollup-linux-s390x-gnu': 4.52.5 - '@rollup/rollup-linux-x64-gnu': 4.52.5 - '@rollup/rollup-linux-x64-musl': 4.52.5 - '@rollup/rollup-openharmony-arm64': 4.52.5 - '@rollup/rollup-win32-arm64-msvc': 4.52.5 - '@rollup/rollup-win32-ia32-msvc': 4.52.5 - '@rollup/rollup-win32-x64-gnu': 4.52.5 - '@rollup/rollup-win32-x64-msvc': 4.52.5 + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 fsevents: 2.3.3 run-parallel@1.2.0: @@ -4973,20 +4973,20 @@ snapshots: dependencies: global: 4.4.0 - vite-plugin-compression2@2.3.1(rollup@4.52.5): + vite-plugin-compression2@2.3.1(rollup@4.53.3): dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.52.5) + '@rollup/pluginutils': 5.3.0(rollup@4.53.3) tar-mini: 0.2.0 transitivePeerDependencies: - rollup - vite@7.2.2(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0): + vite@7.2.4(@types/node@24.10.1)(terser@5.44.1)(yaml@2.7.0): dependencies: - esbuild: 0.25.11 + esbuild: 0.25.12 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.52.5 + rollup: 4.53.3 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.10.1 diff --git a/filebrowser/go.mod b/filebrowser/go.mod index abaeff87ee..e828455db2 100644 --- a/filebrowser/go.mod +++ b/filebrowser/go.mod @@ -24,7 +24,7 @@ require ( github.com/spf13/viper v1.21.0 github.com/stretchr/testify v1.11.1 github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce - golang.org/x/crypto v0.44.0 + golang.org/x/crypto v0.45.0 golang.org/x/image v0.33.0 golang.org/x/text v0.31.0 gopkg.in/natefinch/lumberjack.v2 v2.2.1 @@ -73,7 +73,7 @@ require ( go.etcd.io/bbolt v1.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect go4.org v0.0.0-20230225012048-214862532bf5 // indirect - golang.org/x/net v0.46.0 // indirect + golang.org/x/net v0.47.0 // indirect golang.org/x/sync v0.18.0 // indirect golang.org/x/sys v0.38.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect diff --git a/filebrowser/go.sum b/filebrowser/go.sum index 551f034ebd..443c885bf1 100644 --- a/filebrowser/go.sum +++ b/filebrowser/go.sum @@ -266,8 +266,8 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= -golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -319,8 +319,8 @@ golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20221002022538-bcab6841153b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.46.0 h1:giFlY12I07fugqwPuWJi68oOnpfqFnJIJzaIIm2JVV4= -golang.org/x/net v0.46.0/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= diff --git a/lede/package/boot/uboot-mediatek/Makefile b/lede/package/boot/uboot-mediatek/Makefile index 4f3041c0ca..37afc7c236 100644 --- a/lede/package/boot/uboot-mediatek/Makefile +++ b/lede/package/boot/uboot-mediatek/Makefile @@ -1,8 +1,8 @@ include $(TOPDIR)/rules.mk include $(INCLUDE_DIR)/kernel.mk -PKG_VERSION:=2024.01 -PKG_HASH:=b99611f1ed237bf3541bdc8434b68c96a6e05967061f992443cb30aabebef5b3 +PKG_VERSION:=2025.10 +PKG_HASH:=b4f032848e56cc8f213ad59f9132c084dbbb632bc29176d024e58220e0efdf4a PKG_BUILD_DEPENDS:=!(TARGET_ramips||TARGET_mediatek_mt7623):arm-trusted-firmware-tools/host include $(INCLUDE_DIR)/u-boot.mk @@ -85,9 +85,9 @@ define U-Boot/mt7622_linksys_e8450 BUILD_DEVICES:=linksys_e8450-ubi BUILD_SUBTARGET:=mt7622 UBOOT_IMAGE:=u-boot.fip - BL2_BOOTDEV:=snand + BL2_BOOTDEV:=snand-ubi BL2_DDRBLOB:=1 - DEPENDS:=+trusted-firmware-a-mt7622-snand-1ddr + DEPENDS:=+trusted-firmware-a-mt7622-snand-ubi-1ddr endef define U-Boot/mt7622_bananapi_bpi-r64-emmc @@ -118,15 +118,39 @@ define U-Boot/mt7622_bananapi_bpi-r64-snand BUILD_DEVICES:=bananapi_bpi-r64 BUILD_SUBTARGET:=mt7622 UBOOT_IMAGE:=u-boot.fip - BL2_BOOTDEV:=snand + BL2_BOOTDEV:=snand-ubi BL2_DDRBLOB:=2 - DEPENDS:=+trusted-firmware-a-mt7622-snand-2ddr + DEPENDS:=+trusted-firmware-a-mt7622-snand-ubi-2ddr endef -define U-Boot/mt7622_ubnt_unifi-6-lr +define U-Boot/mt7622_ubnt_unifi-6-lr-v1 NAME:=Ubiquiti UniFi 6 LR - UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr - BUILD_DEVICES:=ubnt_unifi-6-lr-v1-ubootmod ubnt_unifi-6-lr-v2-ubootmod + UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr-v1 + BUILD_DEVICES:=ubnt_unifi-6-lr-v1-ubootmod + BUILD_SUBTARGET:=mt7622 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=nor + BL2_DDRBLOB:=2 + DEPENDS:=+trusted-firmware-a-mt7622-nor-2ddr + FIP_COMPRESS:=1 +endef + +define U-Boot/mt7622_ubnt_unifi-6-lr-v2 + NAME:=Ubiquiti UniFi 6 LR v2 + UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr-v2 + BUILD_DEVICES:=ubnt_unifi-6-lr-v2-ubootmod + BUILD_SUBTARGET:=mt7622 + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=nor + BL2_DDRBLOB:=2 + DEPENDS:=+trusted-firmware-a-mt7622-nor-2ddr + FIP_COMPRESS:=1 +endef + +define U-Boot/mt7622_ubnt_unifi-6-lr-v3 + NAME:=Ubiquiti UniFi 6 LR v3 + UBOOT_CONFIG:=mt7622_ubnt_unifi-6-lr-v3 + BUILD_DEVICES:=ubnt_unifi-6-lr-v3-ubootmod BUILD_SUBTARGET:=mt7622 UBOOT_IMAGE:=u-boot.fip BL2_BOOTDEV:=nor @@ -159,7 +183,7 @@ define U-Boot/mt7628_rfb UBOOT_IMAGE:=u-boot-with-spl.bin endef -define U-Boot/ravpower_rp-wd009 +define U-Boot/mt7628_ravpower_rp-wd009 NAME:=RAVPower RP-WD009 BUILD_TARGET:=ramips BUILD_DEVICES:=ravpower_rp-wd009 @@ -205,7 +229,7 @@ define U-Boot/mt7981_rfb-nor BUILD_DEVICES:=mediatek_mt7981-rfb UBOOT_CONFIG:=mt7981_nor_rfb UBOOT_IMAGE:=u-boot.fip - BL2_BOOTDEV:=spim-nand + BL2_BOOTDEV:=nor BL2_SOC:=mt7981 BL2_DDRTYPE:=ddr3 DEPENDS:=+trusted-firmware-a-mt7981-nor-ddr3 @@ -296,6 +320,55 @@ define U-Boot/mt7986_bananapi_bpi-r3-nor FIP_COMPRESS:=1 endef +define U-Boot/mt7987_bananapi_bpi-r4-lite-emmc + NAME:=BananaPi BPi-R4 Lite + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4-lite + UBOOT_CONFIG:=mt7987a_bpi-r4-lite-emmc + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=emmc + BL2_SOC:=mt7987 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7987-emmc-comb +endef + +define U-Boot/mt7987_bananapi_bpi-r4-lite-sdmmc + NAME:=BananaPi BPi-R4 Lite + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4-lite + UBOOT_CONFIG:=mt7987a_bpi-r4-lite-sd + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=sdmmc + BL2_SOC:=mt7987 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7987-sdmmc-comb +endef + +define U-Boot/mt7987_bananapi_bpi-r4-lite-snand + NAME:=BananaPi BPi-R4 Lite + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4-lite + UBOOT_CONFIG:=mt7987a_bpi-r4-lite-snand + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand2-ubi + BL2_SOC:=mt7987 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7987-spim-nand2-ubi-comb +endef + +define U-Boot/mt7987_bananapi_bpi-r4-lite-nor + NAME:=BananaPi BPi-R4 Lite + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=bananapi_bpi-r4-lite + UBOOT_CONFIG:=mt7987a_bpi-r4-lite-nor + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=nor + BL2_SOC:=mt7987 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7987-nor-comb + FIP_COMPRESS:=1 +endef + define U-Boot/mt7988_bananapi_bpi-r4-emmc NAME:=BananaPi BPi-R4 BUILD_SUBTARGET:=filogic @@ -368,6 +441,42 @@ define U-Boot/mt7988_bananapi_bpi-r4-poe-snand DEPENDS:=+trusted-firmware-a-mt7988-spim-nand-ubi-comb endef +define U-Boot/mt7987_rfb-emmc + NAME:=MT7987 Reference Board + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=mediatek_mt7987a-rfb + UBOOT_CONFIG:=mt7987_emmc_rfb + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=sdmmc + BL2_SOC:=mt7987 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7987-emmc-comb +endef + +define U-Boot/mt7987_rfb-spim-nand + NAME:=MT7987 Reference Board + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=mediatek_mt7987a-rfb + UBOOT_CONFIG:=mt7987_rfb + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=spim-nand0-ubi + BL2_SOC:=mt7987 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7987-spim-nand0-ubi-comb +endef + +define U-Boot/mt7987_rfb-sd + NAME:=MT7987 Reference Board + BUILD_SUBTARGET:=filogic + BUILD_DEVICES:=mediatek_mt7987a-rfb + UBOOT_CONFIG:=mt7987_sd_rfb + UBOOT_IMAGE:=u-boot.fip + BL2_BOOTDEV:=sdmmc + BL2_SOC:=mt7987 + BL2_DDRTYPE:=comb + DEPENDS:=+trusted-firmware-a-mt7987-sdmmc-comb +endef + define U-Boot/mt7988_rfb-spim-nand NAME:=MT7988 Reference Board BUILD_SUBTARGET:=filogic @@ -439,7 +548,9 @@ UBOOT_TARGETS := \ mt7622_bananapi_bpi-r64-snand \ mt7622_linksys_e8450 \ mt7622_rfb1 \ - mt7622_ubnt_unifi-6-lr \ + mt7622_ubnt_unifi-6-lr-v1 \ + mt7622_ubnt_unifi-6-lr-v2 \ + mt7622_ubnt_unifi-6-lr-v3 \ mt7623n_bpir2 \ mt7623a_unielec_u7623 \ mt7628_rfb \ @@ -455,6 +566,13 @@ UBOOT_TARGETS := \ mt7986_bananapi_bpi-r3-snand \ mt7986_bananapi_bpi-r3-nor \ mt7986_rfb \ + mt7987_bananapi_bpi-r4-lite-emmc \ + mt7987_bananapi_bpi-r4-lite-sdmmc \ + mt7987_bananapi_bpi-r4-lite-snand \ + mt7987_bananapi_bpi-r4-lite-nor \ + mt7987_rfb-emmc \ + mt7987_rfb-sd \ + mt7987_rfb-spim-nand \ mt7988_bananapi_bpi-r4-emmc \ mt7988_bananapi_bpi-r4-sdmmc \ mt7988_bananapi_bpi-r4-snand \ @@ -467,6 +585,11 @@ UBOOT_TARGETS := \ mt7988_rfb-emmc \ mt7988_rfb-sd +UBOOT_CUSTOMIZE_CONFIG := \ + --disable TOOLS_KWBIMAGE \ + --disable TOOLS_LIBCRYPTO \ + --disable TOOLS_MKEFICAPSULE + ifdef CONFIG_TARGET_mediatek UBOOT_MAKE_FLAGS += $(UBOOT_IMAGE:.fip=.bin) endif diff --git a/lede/package/boot/uboot-mediatek/patches/000-mtk-20-configs-mt7622-enable-environment-for-mt7622_rfb.patch b/lede/package/boot/uboot-mediatek/patches/000-mtk-20-configs-mt7622-enable-environment-for-mt7622_rfb.patch deleted file mode 100644 index dcbf8b953f..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/000-mtk-20-configs-mt7622-enable-environment-for-mt7622_rfb.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 93d7086edb0db4b05149dfea21a2a82d8f160944 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Sat, 6 Mar 2021 16:29:33 +0800 -Subject: [PATCH 10/12] configs: mt7622: enable environment for mt7622_rfb - -Enable environment vairables for mt7622_rfb - -Signed-off-by: Weijie Gao ---- - configs/mt7622_rfb_defconfig | 5 +++++ - 1 file changed, 5 insertions(+) - ---- a/configs/mt7622_rfb_defconfig -+++ b/configs/mt7622_rfb_defconfig -@@ -6,6 +6,8 @@ CONFIG_TEXT_BASE=0x41e00000 - CONFIG_SYS_MALLOC_F_LEN=0x4000 - CONFIG_NR_DRAM_BANKS=1 - CONFIG_DEFAULT_DEVICE_TREE="mt7622-rfb" -+CONFIG_ENV_SIZE=0x20000 -+CONFIG_ENV_OFFSET=0x280000 - CONFIG_DEBUG_UART_BASE=0x11002000 - CONFIG_DEBUG_UART_CLOCK=25000000 - CONFIG_SYS_LOAD_ADDR=0x4007ff28 -@@ -25,6 +27,9 @@ CONFIG_CMD_SF_TEST=y - CONFIG_CMD_PING=y - CONFIG_CMD_SMC=y - CONFIG_ENV_OVERWRITE=y -+CONFIG_ENV_IS_IN_MTD=y -+CONFIG_ENV_MTD_NAME="spi-nand0" -+CONFIG_ENV_SIZE_REDUND=0x40000 - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y - CONFIG_NET_RANDOM_ETHADDR=y - CONFIG_USE_IPADDR=y diff --git a/lede/package/boot/uboot-mediatek/patches/007-ARM-dts-build-DT-for-MT7987-RFB.patch b/lede/package/boot/uboot-mediatek/patches/007-ARM-dts-build-DT-for-MT7987-RFB.patch new file mode 100644 index 0000000000..045d4c5847 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/007-ARM-dts-build-DT-for-MT7987-RFB.patch @@ -0,0 +1,26 @@ +From a4d4096d6b80a2b6f5bc800426380cdc60d9b037 Mon Sep 17 00:00:00 2001 +From: Daniel Golle +Date: Thu, 2 Oct 2025 14:57:16 +0100 +Subject: [PATCH] ARM: dts: build DT for MT7987 RFB + +Compile the added device tree sources into blobs, which was forgotten +when adding the source files. + +Fixes: 2d6962e0618 (arm: mediatek: add support for MediaTek MT7987 SoC) +Signed-off-by: Daniel Golle +--- + arch/arm/dts/Makefile | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -1131,6 +1131,9 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ + mt7986b-sd-rfb.dtb \ + mt7986a-emmc-rfb.dtb \ + mt7986b-emmc-rfb.dtb \ ++ mt7987a-emmc-rfb.dtb \ ++ mt7987a-rfb.dtb \ ++ mt7987a-sd-rfb.dtb \ + mt7988-rfb.dtb \ + mt7988-sd-rfb.dtb \ + mt8183-pumpkin.dtb \ diff --git a/lede/package/boot/uboot-mediatek/patches/100-02-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch b/lede/package/boot/uboot-mediatek/patches/100-01-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch similarity index 99% rename from lede/package/boot/uboot-mediatek/patches/100-02-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch rename to lede/package/boot/uboot-mediatek/patches/100-01-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch index 0e63b1e2d3..0d2107be8e 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-02-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-01-drivers-mtd-add-support-for-MediaTek-SPI-NAND-flash-.patch @@ -1,7 +1,7 @@ -From f7704275957852cd4c4632d6da126979ef24b83a Mon Sep 17 00:00:00 2001 +From 86d7d787e6d9802176cc563a95ac5c1919fbad66 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Tue, 2 Mar 2021 16:58:01 +0800 -Subject: [PATCH 36/71] drivers: mtd: add support for MediaTek SPI-NAND flash +Subject: [PATCH 01/30] drivers: mtd: add support for MediaTek SPI-NAND flash controller Add mtd driver for MediaTek SPI-NAND flash controller @@ -19,12 +19,12 @@ Signed-off-by: Weijie Gao drivers/mtd/mtk-snand/mtk-snand-def.h | 271 ++++ drivers/mtd/mtk-snand/mtk-snand-ecc.c | 411 ++++++ drivers/mtd/mtk-snand/mtk-snand-ids.c | 515 +++++++ - drivers/mtd/mtk-snand/mtk-snand-mtd.c | 535 +++++++ + drivers/mtd/mtk-snand/mtk-snand-mtd.c | 534 +++++++ drivers/mtd/mtk-snand/mtk-snand-os.c | 39 + - drivers/mtd/mtk-snand/mtk-snand-os.h | 120 ++ + drivers/mtd/mtk-snand/mtk-snand-os.h | 119 ++ drivers/mtd/mtk-snand/mtk-snand.c | 1933 +++++++++++++++++++++++++ drivers/mtd/mtk-snand/mtk-snand.h | 77 + - 12 files changed, 3937 insertions(+) + 12 files changed, 3935 insertions(+) create mode 100644 drivers/mtd/mtk-snand/Kconfig create mode 100644 drivers/mtd/mtk-snand/Makefile create mode 100644 drivers/mtd/mtk-snand/mtk-snand-def.h @@ -38,7 +38,7 @@ Signed-off-by: Weijie Gao --- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig -@@ -238,6 +238,8 @@ config SYS_MAX_FLASH_BANKS_DETECT +@@ -246,6 +246,8 @@ config SYS_MAX_FLASH_BANKS_DETECT to reduce the effective number of flash bank, between 0 and CONFIG_SYS_MAX_FLASH_BANKS @@ -49,7 +49,7 @@ Signed-off-by: Weijie Gao config SYS_NAND_MAX_OOBFREE --- a/drivers/mtd/Makefile +++ b/drivers/mtd/Makefile -@@ -39,3 +39,5 @@ obj-$(CONFIG_$(SPL_TPL_)SPI_FLASH_SUPPOR +@@ -40,3 +40,5 @@ obj-$(CONFIG_$(PHASE_)SPI_FLASH_SUPPORT) obj-$(CONFIG_SPL_UBI) += ubispl/ endif @@ -514,8 +514,8 @@ Signed-off-by: Weijie Gao +int mtk_ecc_setup(struct mtk_snand *snf, void *fmdaddr, uint32_t max_ecc_bytes, + uint32_t msg_size) +{ -+ uint32_t i, val, ecc_msg_bits, ecc_strength; -+ int ret; ++ uint32_t val, ecc_msg_bits, ecc_strength; ++ int i, ret; + + snf->ecc_soc = &mtk_ecc_socs[snf->soc]; + @@ -783,7 +783,7 @@ Signed-off-by: Weijie Gao +} --- /dev/null +++ b/drivers/mtd/mtk-snand/mtk-snand-ids.c -@@ -0,0 +1,519 @@ +@@ -0,0 +1,515 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +/* + * Copyright (C) 2020 MediaTek Inc. All Rights Reserved. @@ -901,10 +901,6 @@ Signed-off-by: Weijie Gao + SNAND_MEMORG_1G_2K_64, + &snand_cap_read_from_cache_quad_q2d, + &snand_cap_program_load_x4), -+ SNAND_INFO("GD5F1GQ5UExxG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0x51), -+ SNAND_MEMORG_1G_2K_128, -+ &snand_cap_read_from_cache_quad, -+ &snand_cap_program_load_x4), + SNAND_INFO("GD5F2GQ4UExIG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xd2), + SNAND_MEMORG_2G_2K_128, + &snand_cap_read_from_cache_quad_q2d, @@ -1217,7 +1213,7 @@ Signed-off-by: Weijie Gao + + SNAND_INFO("FM35Q1GA", SNAND_ID(SNAND_ID_DYMMY, 0xe5, 0x71), + SNAND_MEMORG_1G_2K_64, -+ &snand_cap_read_from_cache_x4_only, ++ &snand_cap_read_from_cache_x4, + &snand_cap_program_load_x4), + + SNAND_INFO("PN26G01A", SNAND_ID(SNAND_ID_DYMMY, 0xa1, 0xe1), @@ -1305,7 +1301,7 @@ Signed-off-by: Weijie Gao +} --- /dev/null +++ b/drivers/mtd/mtk-snand/mtk-snand-mtd.c -@@ -0,0 +1,535 @@ +@@ -0,0 +1,534 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2020 MediaTek Inc. All Rights Reserved. @@ -1313,7 +1309,6 @@ Signed-off-by: Weijie Gao + * Author: Weijie Gao + */ + -+#include +#include +#include +#include @@ -1885,7 +1880,7 @@ Signed-off-by: Weijie Gao +} --- /dev/null +++ b/drivers/mtd/mtk-snand/mtk-snand-os.h -@@ -0,0 +1,120 @@ +@@ -0,0 +1,119 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2020 MediaTek Inc. All Rights Reserved. @@ -1896,7 +1891,6 @@ Signed-off-by: Weijie Gao +#ifndef _MTK_SNAND_OS_H_ +#define _MTK_SNAND_OS_H_ + -+#include +#include +#include +#include diff --git a/lede/package/boot/uboot-mediatek/patches/100-03-mtd-mtk-snand-add-support-for-SPL.patch b/lede/package/boot/uboot-mediatek/patches/100-02-mtd-mtk-snand-add-support-for-SPL.patch similarity index 97% rename from lede/package/boot/uboot-mediatek/patches/100-03-mtd-mtk-snand-add-support-for-SPL.patch rename to lede/package/boot/uboot-mediatek/patches/100-02-mtd-mtk-snand-add-support-for-SPL.patch index 3d7c4a9bf6..2a3b02894d 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-03-mtd-mtk-snand-add-support-for-SPL.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-02-mtd-mtk-snand-add-support-for-SPL.patch @@ -1,7 +1,7 @@ -From a347e374cb338213632c6dde88dd226d64bd8b27 Mon Sep 17 00:00:00 2001 +From 219aa55e830fe7f5b56dc097f544990a032a0bfe Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Wed, 3 Mar 2021 08:57:29 +0800 -Subject: [PATCH 37/71] mtd: mtk-snand: add support for SPL +Subject: [PATCH 02/30] mtd: mtk-snand: add support for SPL Add support to initialize SPI-NAND in SPL. Add implementation for SPL NAND loader. diff --git a/lede/package/boot/uboot-mediatek/patches/100-05-mtd-add-a-new-mtd-device-type-for-NMBM.patch b/lede/package/boot/uboot-mediatek/patches/100-03-mtd-add-a-new-mtd-device-type-for-NMBM.patch similarity index 85% rename from lede/package/boot/uboot-mediatek/patches/100-05-mtd-add-a-new-mtd-device-type-for-NMBM.patch rename to lede/package/boot/uboot-mediatek/patches/100-03-mtd-add-a-new-mtd-device-type-for-NMBM.patch index d90ca64704..94c31100ed 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-05-mtd-add-a-new-mtd-device-type-for-NMBM.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-03-mtd-add-a-new-mtd-device-type-for-NMBM.patch @@ -1,7 +1,7 @@ -From d26a789c451068caf4bbb4d1ac7bc1f592b5493e Mon Sep 17 00:00:00 2001 +From 6571329dbac9f2278b6a5d36999982220b17daf4 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 10:58:06 +0800 -Subject: [PATCH 39/71] mtd: add a new mtd device type for NMBM +Subject: [PATCH 03/30] mtd: add a new mtd device type for NMBM This patch adds a new mtd device type for NMBM so that mtdparts can be correctly probed. And this also gives us an opportunity to add NMBM support @@ -15,7 +15,7 @@ Signed-off-by: Weijie Gao --- a/cmd/mtdparts.c +++ b/cmd/mtdparts.c -@@ -1057,6 +1057,9 @@ int mtd_id_parse(const char *id, const c +@@ -1055,6 +1055,9 @@ int mtd_id_parse(const char *id, const c } else if (strncmp(p, "spi-nand", 8) == 0) { *dev_type = MTD_DEV_TYPE_SPINAND; p += 8; @@ -27,7 +27,7 @@ Signed-off-by: Weijie Gao return 1; --- a/include/jffs2/load_kernel.h +++ b/include/jffs2/load_kernel.h -@@ -16,11 +16,13 @@ +@@ -17,11 +17,13 @@ #define MTD_DEV_TYPE_NAND 0x0002 #define MTD_DEV_TYPE_ONENAND 0x0004 #define MTD_DEV_TYPE_SPINAND 0x0008 diff --git a/lede/package/boot/uboot-mediatek/patches/100-04-env-add-support-for-generic-MTD-device.patch b/lede/package/boot/uboot-mediatek/patches/100-04-env-add-support-for-generic-MTD-device.patch deleted file mode 100644 index 9b02b4dc63..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/100-04-env-add-support-for-generic-MTD-device.patch +++ /dev/null @@ -1,390 +0,0 @@ -From efc3e6f5d29f87a433b42f15a0b87e04b7cd498d Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 3 Mar 2021 10:11:32 +0800 -Subject: [PATCH 38/71] env: add support for generic MTD device - -Add an env driver for generic MTD device. - -Signed-off-by: Weijie Gao ---- - cmd/nvedit.c | 3 +- - env/Kconfig | 37 +++++- - env/Makefile | 1 + - env/env.c | 3 + - env/mtd.c | 256 +++++++++++++++++++++++++++++++++++++++++ - include/env_internal.h | 1 + - tools/Makefile | 1 + - 7 files changed, 299 insertions(+), 3 deletions(-) - create mode 100644 env/mtd.c - ---- a/env/Kconfig -+++ b/env/Kconfig -@@ -61,7 +61,7 @@ config ENV_IS_DEFAULT - !ENV_IS_IN_MMC && !ENV_IS_IN_NAND && \ - !ENV_IS_IN_NVRAM && !ENV_IS_IN_ONENAND && \ - !ENV_IS_IN_REMOTE && !ENV_IS_IN_SPI_FLASH && \ -- !ENV_IS_IN_UBI -+ !ENV_IS_IN_UBI && !ENV_IS_IN_MTD - select ENV_IS_NOWHERE - - config ENV_IS_NOWHERE -@@ -254,6 +254,27 @@ config ENV_IS_IN_MMC - offset: "u-boot,mmc-env-offset", "u-boot,mmc-env-offset-redundant". - CONFIG_ENV_OFFSET and CONFIG_ENV_OFFSET_REDUND are not used. - -+config ENV_IS_IN_MTD -+ bool "Environment in a MTD device" -+ depends on !CHAIN_OF_TRUST -+ depends on MTD -+ help -+ Define this if you have a MTD device which you want to use for -+ the environment. -+ -+ - CONFIG_ENV_MTD_NAME: -+ - CONFIG_ENV_OFFSET: -+ - CONFIG_ENV_SIZE: -+ -+ These three #defines specify the MTD device where the environment -+ is stored, offset and size of the environment area within the MTD -+ device. CONFIG_ENV_OFFSET must be aligned to an erase block boundary. -+ -+ - CONFIG_ENV_SIZE_REDUND: -+ -+ This #define specify the maximum size allowed for read/write/erase -+ with skipped bad blocks starting from ENV_OFFSET. -+ - config ENV_IS_IN_NAND - bool "Environment in a NAND device" - depends on !CHAIN_OF_TRUST -@@ -561,10 +582,16 @@ config ENV_ADDR_REDUND - Offset from the start of the device (or partition) of the redundant - environment location. - -+config ENV_MTD_NAME -+ string "Name of the MTD device storing the environment" -+ depends on ENV_IS_IN_MTD -+ help -+ Name of the MTD device that stores the environment -+ - config ENV_OFFSET - hex "Environment offset" - depends on ENV_IS_IN_EEPROM || ENV_IS_IN_MMC || ENV_IS_IN_NAND || \ -- ENV_IS_IN_SPI_FLASH -+ ENV_IS_IN_SPI_FLASH || ENV_IS_IN_MTD - default 0x3f8000 if ARCH_ROCKCHIP && ENV_IS_IN_MMC - default 0x140000 if ARCH_ROCKCHIP && ENV_IS_IN_SPI_FLASH - default 0xF0000 if ARCH_SUNXI -@@ -622,6 +649,12 @@ config ENV_SECT_SIZE - help - Size of the sector containing the environment. - -+config ENV_SIZE_REDUND -+ hex "Redundant environment size" -+ depends on ENV_IS_IN_MTD -+ help -+ The maximum size allowed for read/write/erase with skipped bad blocks. -+ - config ENV_UBI_PART - string "UBI partition name" - depends on ENV_IS_IN_UBI ---- a/env/Makefile -+++ b/env/Makefile -@@ -24,6 +24,7 @@ obj-$(CONFIG_$(SPL_TPL_)ENV_IS_NOWHERE) - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_MMC) += mmc.o - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_FAT) += fat.o - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_EXT4) += ext4.o -+obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_MTD) += mtd.o - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_NAND) += nand.o - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_SPI_FLASH) += sf.o - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_FLASH) += flash.o ---- a/env/env.c -+++ b/env/env.c -@@ -46,6 +46,9 @@ static enum env_location env_locations[] - #ifdef CONFIG_ENV_IS_IN_MMC - ENVL_MMC, - #endif -+#ifdef CONFIG_ENV_IS_IN_MTD -+ ENVL_MTD, -+#endif - #ifdef CONFIG_ENV_IS_IN_NAND - ENVL_NAND, - #endif ---- /dev/null -+++ b/env/mtd.c -@@ -0,0 +1,256 @@ -+/* SPDX-License-Identifier: GPL-2.0 */ -+/* -+ * Copyright (C) 2021 MediaTek Inc. All Rights Reserved. -+ * -+ * Author: Weijie Gao -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#if CONFIG_ENV_SIZE_REDUND < CONFIG_ENV_SIZE -+#undef CONFIG_ENV_SIZE_REDUND -+#define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE -+#endif -+ -+#if defined(ENV_IS_EMBEDDED) -+env_t *env_ptr = &environment; -+#else /* ! ENV_IS_EMBEDDED */ -+env_t *env_ptr; -+#endif /* ENV_IS_EMBEDDED */ -+ -+DECLARE_GLOBAL_DATA_PTR; -+ -+static int env_mtd_init(void) -+{ -+#if defined(ENV_IS_EMBEDDED) -+ int crc1_ok = 0, crc2_ok = 0; -+ env_t *tmp_env1; -+ -+ tmp_env1 = env_ptr; -+ crc1_ok = crc32(0, tmp_env1->data, ENV_SIZE) == tmp_env1->crc; -+ -+ if (!crc1_ok && !crc2_ok) { -+ gd->env_addr = 0; -+ gd->env_valid = ENV_INVALID; -+ -+ return 0; -+ } else if (crc1_ok && !crc2_ok) { -+ gd->env_valid = ENV_VALID; -+ } -+ -+ if (gd->env_valid == ENV_VALID) -+ env_ptr = tmp_env1; -+ -+ gd->env_addr = (ulong)env_ptr->data; -+ -+#else /* ENV_IS_EMBEDDED */ -+ gd->env_addr = (ulong)&default_environment[0]; -+ gd->env_valid = ENV_VALID; -+#endif /* ENV_IS_EMBEDDED */ -+ -+ return 0; -+} -+ -+static struct mtd_info *env_mtd_get_dev(void) -+{ -+ struct mtd_info *mtd; -+ -+ mtd_probe_devices(); -+ -+ mtd = get_mtd_device_nm(CONFIG_ENV_MTD_NAME); -+ if (IS_ERR(mtd) || !mtd) { -+ printf("MTD device '%s' not found\n", CONFIG_ENV_MTD_NAME); -+ return NULL; -+ } -+ -+ return mtd; -+} -+ -+static inline bool mtd_addr_is_block_aligned(struct mtd_info *mtd, u64 addr) -+{ -+ return (addr & mtd->erasesize_mask) == 0; -+} -+ -+static int mtd_io_skip_bad(struct mtd_info *mtd, bool read, loff_t offset, -+ size_t length, size_t redund, u8 *buffer) -+{ -+ struct mtd_oob_ops io_op = {}; -+ size_t remaining = length; -+ loff_t off, end; -+ int ret; -+ -+ io_op.mode = MTD_OPS_PLACE_OOB; -+ io_op.len = mtd->writesize; -+ io_op.datbuf = (void *)buffer; -+ -+ /* Search for the first good block after the given offset */ -+ off = offset; -+ end = (off + redund) | (mtd->erasesize - 1); -+ while (mtd_block_isbad(mtd, off) && off < end) -+ off += mtd->erasesize; -+ -+ /* Reached end position */ -+ if (off >= end) -+ return -EIO; -+ -+ /* Loop over the pages to do the actual read/write */ -+ while (remaining) { -+ /* Skip the block if it is bad */ -+ if (mtd_addr_is_block_aligned(mtd, off) && -+ mtd_block_isbad(mtd, off)) { -+ off += mtd->erasesize; -+ continue; -+ } -+ -+ if (read) -+ ret = mtd_read_oob(mtd, off, &io_op); -+ else -+ ret = mtd_write_oob(mtd, off, &io_op); -+ -+ if (ret) { -+ printf("Failure while %s at offset 0x%llx\n", -+ read ? "reading" : "writing", off); -+ break; -+ } -+ -+ off += io_op.retlen; -+ remaining -= io_op.retlen; -+ io_op.datbuf += io_op.retlen; -+ io_op.oobbuf += io_op.oobretlen; -+ -+ /* Reached end position */ -+ if (off >= end) -+ return -EIO; -+ } -+ -+ return 0; -+} -+ -+#ifdef CONFIG_CMD_SAVEENV -+static int mtd_erase_skip_bad(struct mtd_info *mtd, loff_t offset, -+ size_t length, size_t redund) -+{ -+ struct erase_info erase_op = {}; -+ loff_t end = (offset + redund) | (mtd->erasesize - 1); -+ int ret; -+ -+ erase_op.mtd = mtd; -+ erase_op.addr = offset; -+ erase_op.len = length; -+ -+ while (erase_op.len) { -+ ret = mtd_erase(mtd, &erase_op); -+ -+ /* Abort if its not a bad block error */ -+ if (ret != -EIO) -+ return ret; -+ -+ printf("Skipping bad block at 0x%08llx\n", erase_op.fail_addr); -+ -+ /* Skip bad block and continue behind it */ -+ erase_op.len -= erase_op.fail_addr - erase_op.addr; -+ erase_op.len -= mtd->erasesize; -+ erase_op.addr = erase_op.fail_addr + mtd->erasesize; -+ -+ /* Reached end position */ -+ if (erase_op.addr >= end) -+ return -EIO; -+ } -+ -+ return 0; -+} -+ -+static int env_mtd_save(void) -+{ -+ ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1); -+ struct mtd_info *mtd; -+ int ret = 0; -+ -+ ret = env_export(env_new); -+ if (ret) -+ return ret; -+ -+ mtd = env_mtd_get_dev(); -+ if (!mtd) -+ return 1; -+ -+ printf("Erasing on MTD device '%s'... ", mtd->name); -+ -+ ret = mtd_erase_skip_bad(mtd, CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, -+ CONFIG_ENV_SIZE_REDUND); -+ -+ puts(ret ? "FAILED\n" : "OK\n"); -+ -+ if (ret) { -+ put_mtd_device(mtd); -+ return 1; -+ } -+ -+ printf("Writing to MTD device '%s'... ", mtd->name); -+ -+ ret = mtd_io_skip_bad(mtd, false, CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, -+ CONFIG_ENV_SIZE_REDUND, (u8 *)env_new); -+ -+ puts(ret ? "FAILED\n" : "OK\n"); -+ -+ put_mtd_device(mtd); -+ -+ return !!ret; -+} -+#endif /* CONFIG_CMD_SAVEENV */ -+ -+static int readenv(size_t offset, u_char *buf) -+{ -+ struct mtd_info *mtd; -+ int ret; -+ -+ mtd = env_mtd_get_dev(); -+ if (!mtd) -+ return 1; -+ -+ ret = mtd_io_skip_bad(mtd, true, offset, CONFIG_ENV_SIZE, -+ CONFIG_ENV_SIZE_REDUND, buf); -+ -+ put_mtd_device(mtd); -+ -+ return !!ret; -+} -+ -+static int env_mtd_load(void) -+{ -+#if !defined(ENV_IS_EMBEDDED) -+ ALLOC_CACHE_ALIGN_BUFFER(char, buf, CONFIG_ENV_SIZE); -+ int ret; -+ -+ ret = readenv(CONFIG_ENV_OFFSET, (u_char *)buf); -+ if (ret) { -+ env_set_default("readenv() failed", 0); -+ return -EIO; -+ } -+ -+ return env_import(buf, 1, H_EXTERNAL); -+#endif /* ! ENV_IS_EMBEDDED */ -+ -+ return 0; -+} -+ -+U_BOOT_ENV_LOCATION(mtd) = { -+ .location = ENVL_MTD, -+ ENV_NAME("MTD") -+ .load = env_mtd_load, -+#if defined(CONFIG_CMD_SAVEENV) -+ .save = env_save_ptr(env_mtd_save), -+#endif -+ .init = env_mtd_init, -+}; ---- a/include/env_internal.h -+++ b/include/env_internal.h -@@ -109,6 +109,7 @@ enum env_location { - ENVL_FAT, - ENVL_FLASH, - ENVL_MMC, -+ ENVL_MTD, - ENVL_NAND, - ENVL_NVRAM, - ENVL_ONENAND, ---- a/tools/Makefile -+++ b/tools/Makefile -@@ -37,6 +37,7 @@ subdir-$(HOST_TOOLS_ALL) += gdb - ENVCRC-$(CONFIG_ENV_IS_IN_EEPROM) = y - ENVCRC-$(CONFIG_ENV_IS_IN_FLASH) = y - ENVCRC-$(CONFIG_ENV_IS_IN_ONENAND) = y -+ENVCRC-$(CONFIG_ENV_IS_IN_MTD) = y - ENVCRC-$(CONFIG_ENV_IS_IN_NAND) = y - ENVCRC-$(CONFIG_ENV_IS_IN_NVRAM) = y - ENVCRC-$(CONFIG_ENV_IS_IN_SPI_FLASH) = y diff --git a/lede/package/boot/uboot-mediatek/patches/100-06-mtd-add-core-facility-code-of-NMBM.patch b/lede/package/boot/uboot-mediatek/patches/100-04-mtd-add-core-facility-code-of-NMBM.patch similarity index 95% rename from lede/package/boot/uboot-mediatek/patches/100-06-mtd-add-core-facility-code-of-NMBM.patch rename to lede/package/boot/uboot-mediatek/patches/100-04-mtd-add-core-facility-code-of-NMBM.patch index 23634e6425..ee50a01090 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-06-mtd-add-core-facility-code-of-NMBM.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-04-mtd-add-core-facility-code-of-NMBM.patch @@ -1,7 +1,7 @@ -From 690479081fb6a0c0f77f10fb457ad69e71390f15 Mon Sep 17 00:00:00 2001 +From 9b29603e11e68148f640d602361dcc5e61f431b3 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 10:26:35 +0800 -Subject: [PATCH 40/71] mtd: add core facility code of NMBM +Subject: [PATCH 04/30] mtd: add core facility code of NMBM This patch adds a NAND bad block management named NMBM (NAND mapping block management) which supports using a mapping table to deal with bad blocks @@ -13,13 +13,13 @@ Signed-off-by: Weijie Gao drivers/mtd/Makefile | 1 + drivers/mtd/nmbm/Kconfig | 29 + drivers/mtd/nmbm/Makefile | 5 + - drivers/mtd/nmbm/nmbm-core.c | 2936 +++++++++++++++++++++++++++++++ + drivers/mtd/nmbm/nmbm-core.c | 3040 +++++++++++++++++++++++++++++++ drivers/mtd/nmbm/nmbm-debug.h | 37 + drivers/mtd/nmbm/nmbm-debug.inl | 39 + drivers/mtd/nmbm/nmbm-private.h | 137 ++ - include/nmbm/nmbm-os.h | 66 + - include/nmbm/nmbm.h | 102 ++ - 10 files changed, 3354 insertions(+) + include/nmbm/nmbm-os.h | 68 + + include/nmbm/nmbm.h | 105 ++ + 10 files changed, 3463 insertions(+) create mode 100644 drivers/mtd/nmbm/Kconfig create mode 100644 drivers/mtd/nmbm/Makefile create mode 100644 drivers/mtd/nmbm/nmbm-core.c @@ -31,16 +31,18 @@ Signed-off-by: Weijie Gao --- a/drivers/mtd/Kconfig +++ b/drivers/mtd/Kconfig -@@ -274,4 +274,6 @@ source "drivers/mtd/ubi/Kconfig" - - source "drivers/mtd/nvmxip/Kconfig" +@@ -276,6 +276,8 @@ config SYS_NAND_MAX_CHIPS + help + The maximum number of NAND chips per device to be supported. +source "drivers/mtd/nmbm/Kconfig" + - endmenu + source "drivers/mtd/spi/Kconfig" + + source "drivers/mtd/ubi/Kconfig" --- a/drivers/mtd/Makefile +++ b/drivers/mtd/Makefile -@@ -41,3 +41,4 @@ obj-$(CONFIG_SPL_UBI) += ubispl/ +@@ -42,3 +42,4 @@ obj-$(CONFIG_SPL_UBI) += ubispl/ endif obj-$(CONFIG_MTK_SPI_NAND) += mtk-snand/ @@ -87,10 +89,10 @@ Signed-off-by: Weijie Gao +obj-$(CONFIG_NMBM) += nmbm-core.o --- /dev/null +++ b/drivers/mtd/nmbm/nmbm-core.c -@@ -0,0 +1,2936 @@ +@@ -0,0 +1,3040 @@ +// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause +/* -+ * Copyright (C) 2020 MediaTek Inc. All Rights Reserved. ++ * Copyright (C) 2021 MediaTek Inc. All Rights Reserved. + * + * Author: Weijie Gao + */ @@ -347,6 +349,37 @@ Signed-off-by: Weijie Gao +} + +/* ++ * nmbm_panic_write_phys_page - Panic write page with retry ++ * @ni: NMBM instance structure ++ * @addr: linear address where the data will be written to ++ * @data: the main data to be written ++ * ++ * Write a page for at most NMBM_TRY_COUNT times. ++ */ ++static bool nmbm_panic_write_phys_page(struct nmbm_instance *ni, uint64_t addr, ++ const void *data) ++{ ++ int tries, ret; ++ ++ if (ni->lower.flags & NMBM_F_READ_ONLY) { ++ nlog_err(ni, "%s called with NMBM_F_READ_ONLY set\n", addr); ++ return false; ++ } ++ ++ for (tries = 0; tries < NMBM_TRY_COUNT; tries++) { ++ ret = ni->lower.panic_write_page(ni->lower.arg, addr, data); ++ if (!ret) ++ return true; ++ ++ nmbm_reset_chip(ni); ++ } ++ ++ nlog_err(ni, "Panic page write failed at address 0x%08llx\n", addr); ++ ++ return false; ++} ++ ++/* + * nmbm_erase_phys_block - Erase a block with retry + * @ni: NMBM instance structure + * @addr: Linear address @@ -750,7 +783,7 @@ Signed-off-by: Weijie Gao + addr = ba2addr(ni, ba); + + for (off = 0; off < ni->lower.erasesize; off += ni->lower.writesize) { -+ schedule(); ++ WATCHDOG_RESET(); + + ret = nmbm_read_phys_page(ni, addr + off, ni->page_cache, NULL, + NMBM_MODE_PLACE_OOB); @@ -789,7 +822,7 @@ Signed-off-by: Weijie Gao + bool success; + + while (ba < limit) { -+ schedule(); ++ WATCHDOG_RESET(); + + if (nmbm_get_block_state(ni, ba) != BLOCK_ST_GOOD) + goto next_block; @@ -840,7 +873,7 @@ Signed-off-by: Weijie Gao + addr = ba2addr(ni, ba); + + for (off = 0; off < ni->lower.erasesize; off += ni->lower.writesize) { -+ schedule(); ++ WATCHDOG_RESET(); + + /* Prepare page data. fill 0xff to unused region */ + memcpy(ni->page_cache, data, size); @@ -884,7 +917,7 @@ Signed-off-by: Weijie Gao + bool success; + + while (ba > limit) { -+ schedule(); ++ WATCHDOG_RESET(); + + if (nmbm_get_block_state(ni, ba) != BLOCK_ST_GOOD) + goto next_block; @@ -939,7 +972,7 @@ Signed-off-by: Weijie Gao + int ret; + + while (sizeremain) { -+ schedule(); ++ WATCHDOG_RESET(); + + leading = off & ni->writesize_mask; + chunksize = ni->lower.writesize - leading; @@ -989,7 +1022,7 @@ Signed-off-by: Weijie Gao + int ret; + + while (sizeremain) { -+ schedule(); ++ WATCHDOG_RESET(); + + leading = off & ni->writesize_mask; + chunksize = ni->lower.writesize - leading; @@ -1045,7 +1078,7 @@ Signed-off-by: Weijie Gao + bool success; + + while (sizeremain && ba < limit) { -+ schedule(); ++ WATCHDOG_RESET(); + + chunksize = sizeremain; + if (chunksize > ni->lower.erasesize) @@ -1307,7 +1340,7 @@ Signed-off-by: Weijie Gao + + /* Try to write new info table next to the existing table */ + while (write_ba >= ni->mapping_blocks_ba) { -+ schedule(); ++ WATCHDOG_RESET(); + + success = nmbm_write_info_table(ni, write_ba, + ni->mapping_blocks_top_ba, @@ -1426,7 +1459,7 @@ Signed-off-by: Weijie Gao + + /* Try to write temporary info table into spare unmapped blocks */ + while (write_ba >= ni->mapping_blocks_ba) { -+ schedule(); ++ WATCHDOG_RESET(); + + success = nmbm_write_info_table(ni, write_ba, + ni->mapping_blocks_top_ba, @@ -1512,7 +1545,7 @@ Signed-off-by: Weijie Gao + + /* Write new backup info table. */ + while (write_ba >= main_table_end_ba) { -+ schedule(); ++ WATCHDOG_RESET(); + + success = nmbm_write_info_table(ni, write_ba, + ni->mapping_blocks_top_ba, @@ -1901,7 +1934,7 @@ Signed-off-by: Weijie Gao + int ret; + + while (sizeremain && ba < limit) { -+ schedule(); ++ WATCHDOG_RESET(); + + if (nmbm_get_block_state(ni, ba) != BLOCK_ST_GOOD) + goto next_block; @@ -1994,7 +2027,7 @@ Signed-off-by: Weijie Gao + bool success; + + while (ba < limit - size2blk(ni, ni->info_table_size)) { -+ schedule(); ++ WATCHDOG_RESET(); + + success = nmbm_try_load_info_table(ni, ba, table_end_ba, + write_count, @@ -2206,7 +2239,7 @@ Signed-off-by: Weijie Gao + limit = block_count - ni->lower.max_reserved_blocks; + + while (ba >= limit) { -+ schedule(); ++ WATCHDOG_RESET(); + + ba--; + addr = ba2addr(ni, ba); @@ -2220,7 +2253,7 @@ Signed-off-by: Weijie Gao + */ + for (off = 0; off < ni->lower.erasesize; + off += ni->lower.writesize) { -+ schedule(); ++ WATCHDOG_RESET(); + + ret = nmbn_read_data(ni, addr + off, &sig, + sizeof(sig)); @@ -2279,7 +2312,7 @@ Signed-off-by: Weijie Gao + return false; + } + -+ if (!nld->oobsize || !is_power_of_2(nld->oobsize)) { ++ if (!nld->oobsize) { + nmbm_log_lower(nld, NMBM_LOG_ERR, + "Page spare size %u is not valid\n", nld->oobsize); + return false; @@ -2592,7 +2625,7 @@ Signed-off-by: Weijie Gao + end_ba = addr2ba(ni, addr + size - 1); + + while (start_ba <= end_ba) { -+ schedule(); ++ WATCHDOG_RESET(); + + ret = nmbm_erase_logic_block(ni, start_ba); + if (ret) { @@ -2724,7 +2757,7 @@ Signed-off-by: Weijie Gao + } + + while (sizeremain) { -+ schedule(); ++ WATCHDOG_RESET(); + + leading = off & ni->writesize_mask; + chunksize = ni->lower.writesize - leading; @@ -2820,6 +2853,53 @@ Signed-off-by: Weijie Gao +} + +/* ++ * nmbm_panic_write_logic_page - Panic write page based on logic address ++ * @ni: NMBM instance structure ++ * @addr: logic linear address ++ * @data: buffer contains main data. optional. ++ */ ++static int nmbm_panic_write_logic_page(struct nmbm_instance *ni, uint64_t addr, ++ const void *data) ++{ ++ uint32_t lb, pb, offset; ++ uint64_t paddr; ++ bool success; ++ ++ /* Extract block address and in-block offset */ ++ lb = addr2ba(ni, addr); ++ offset = addr & ni->erasesize_mask; ++ ++ /* Map logic block to physical block */ ++ pb = ni->block_mapping[lb]; ++ ++ /* Whether the logic block is good (has valid mapping) */ ++ if ((int32_t)pb < 0) { ++ nlog_debug(ni, "Logic block %u is a bad block\n", lb); ++ return -EIO; ++ } ++ ++ /* Fail if physical block is marked bad */ ++ if (nmbm_get_block_state(ni, pb) == BLOCK_ST_BAD) ++ return -EIO; ++ ++ /* Assemble new address */ ++ paddr = ba2addr(ni, pb) + offset; ++ ++ success = nmbm_panic_write_phys_page(ni, paddr, data); ++ if (success) ++ return 0; ++ ++ /* ++ * Do not remap bad block here. Just mark this block in state table. ++ * Remap this block on erasing. ++ */ ++ nmbm_set_block_state(ni, pb, BLOCK_ST_NEED_REMAP); ++ nmbm_update_info_table(ni); ++ ++ return -EIO; ++} ++ ++/* + * nmbm_write_single_page - Write one page based on logic address + * @ni: NMBM instance structure + * @addr: logic linear address @@ -2849,6 +2929,32 @@ Signed-off-by: Weijie Gao +} + +/* ++ * nmbm_panic_write_single_page - Panic write one page based on logic address ++ * @ni: NMBM instance structure ++ * @addr: logic linear address ++ * @data: buffer contains main data. optional. ++ */ ++int nmbm_panic_write_single_page(struct nmbm_instance *ni, uint64_t addr, ++ const void *data) ++{ ++ if (!ni) ++ return -EINVAL; ++ ++ /* Sanity check */ ++ if (ni->protected || (ni->lower.flags & NMBM_F_READ_ONLY)) { ++ nlog_debug(ni, "Device is forced read-only\n"); ++ return -EROFS; ++ } ++ ++ if (addr >= ba2addr(ni, ni->data_block_count)) { ++ nlog_err(ni, "Address 0x%llx is invalid\n", addr); ++ return -EINVAL; ++ } ++ ++ return nmbm_panic_write_logic_page(ni, addr, data); ++} ++ ++/* + * nmbm_write_range - Write data without oob + * @ni: NMBM instance structure + * @addr: logic linear address @@ -2891,7 +2997,7 @@ Signed-off-by: Weijie Gao + } + + while (sizeremain) { -+ schedule(); ++ WATCHDOG_RESET(); + + leading = off & ni->writesize_mask; + chunksize = ni->lower.writesize - leading; @@ -3248,7 +3354,7 @@ Signed-off-by: Weijie Gao +#endif /* _NMBM_PRIVATE_H_ */ --- /dev/null +++ b/include/nmbm/nmbm-os.h -@@ -0,0 +1,66 @@ +@@ -0,0 +1,68 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Copyright (C) 2020 MediaTek Inc. All Rights Reserved. @@ -3263,7 +3369,7 @@ Signed-off-by: Weijie Gao + +#include +#include -+#include ++#include +#include +#include +#include @@ -3314,10 +3420,12 @@ Signed-off-by: Weijie Gao +#define NMBM_DEFAULT_LOG_LEVEL 1 +#endif + ++#define WATCHDOG_RESET schedule ++ +#endif /* _NMBM_OS_H_ */ --- /dev/null +++ b/include/nmbm/nmbm.h -@@ -0,0 +1,102 @@ +@@ -0,0 +1,105 @@ +/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ +/* + * Copyright (C) 2020 MediaTek Inc. All Rights Reserved. @@ -3372,6 +3480,7 @@ Signed-off-by: Weijie Gao + */ + int (*read_page)(void *arg, uint64_t addr, void *buf, void *oob, enum nmbm_oob_mode mode); + int (*write_page)(void *arg, uint64_t addr, const void *buf, const void *oob, enum nmbm_oob_mode mode); ++ int (*panic_write_page)(void *arg, uint64_t addr, const void *buf); + int (*erase_block)(void *arg, uint64_t addr); + + int (*is_bad_block)(void *arg, uint64_t addr); @@ -3408,6 +3517,8 @@ Signed-off-by: Weijie Gao +int nmbm_write_single_page(struct nmbm_instance *ni, uint64_t addr, + const void *data, const void *oob, + enum nmbm_oob_mode mode); ++int nmbm_panic_write_single_page(struct nmbm_instance *ni, uint64_t addr, ++ const void *data); +int nmbm_write_range(struct nmbm_instance *ni, uint64_t addr, size_t size, + const void *data, enum nmbm_oob_mode mode, + size_t *retlen); diff --git a/lede/package/boot/uboot-mediatek/patches/100-07-mtd-nmbm-add-support-for-mtd.patch b/lede/package/boot/uboot-mediatek/patches/100-05-mtd-nmbm-add-support-for-mtd.patch similarity index 99% rename from lede/package/boot/uboot-mediatek/patches/100-07-mtd-nmbm-add-support-for-mtd.patch rename to lede/package/boot/uboot-mediatek/patches/100-05-mtd-nmbm-add-support-for-mtd.patch index 718f00e764..f86cfdd9ba 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-07-mtd-nmbm-add-support-for-mtd.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-05-mtd-nmbm-add-support-for-mtd.patch @@ -1,7 +1,7 @@ -From 0524995f07fcd216a1a7e267fdb5cf2b0ede8489 Mon Sep 17 00:00:00 2001 +From 0056bd4ec8ac2cbde6c2a5e07cba9b4eb3b7cfa3 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 10:42:12 +0800 -Subject: [PATCH 41/71] mtd: nmbm: add support for mtd +Subject: [PATCH 05/30] mtd: nmbm: add support for mtd Add support to create NMBM based on MTD devices diff --git a/lede/package/boot/uboot-mediatek/patches/100-08-common-board_r-add-support-to-initialize-NMBM-after-.patch b/lede/package/boot/uboot-mediatek/patches/100-06-common-board_r-add-support-to-initialize-NMBM-after-.patch similarity index 62% rename from lede/package/boot/uboot-mediatek/patches/100-08-common-board_r-add-support-to-initialize-NMBM-after-.patch rename to lede/package/boot/uboot-mediatek/patches/100-06-common-board_r-add-support-to-initialize-NMBM-after-.patch index da4dce917b..50a290c3e6 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-08-common-board_r-add-support-to-initialize-NMBM-after-.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-06-common-board_r-add-support-to-initialize-NMBM-after-.patch @@ -1,7 +1,7 @@ -From dcf24c8deeb43a4406ae18136c8700dc2f867415 Mon Sep 17 00:00:00 2001 +From 7499c0e030ef5051b2920576a75dfd7c60d5232a Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 11:18:03 +0800 -Subject: [PATCH 42/71] common: board_r: add support to initialize NMBM after +Subject: [PATCH 06/30] common: board_r: add support to initialize NMBM after nand initialization This patch add support to initialize NMBM after nand initialized. @@ -13,7 +13,7 @@ Signed-off-by: Weijie Gao --- a/common/board_r.c +++ b/common/board_r.c -@@ -373,6 +373,20 @@ static int initr_nand(void) +@@ -398,6 +398,20 @@ static int initr_nand(void) } #endif @@ -34,13 +34,13 @@ Signed-off-by: Weijie Gao #if defined(CONFIG_CMD_ONENAND) /* go init the NAND */ static int initr_onenand(void) -@@ -675,6 +689,9 @@ static init_fnc_t init_sequence_r[] = { - #ifdef CONFIG_CMD_ONENAND - initr_onenand, +@@ -713,6 +727,9 @@ static void initcall_run_r(void) + #if CONFIG_IS_ENABLED(CMD_ONENAND) + INITCALL(initr_onenand); #endif -+#ifdef CONFIG_NMBM_MTD -+ initr_nmbm, ++#if CONFIG_IS_ENABLED(NMBM_MTD) ++ INITCALL(initr_nmbm); +#endif - #ifdef CONFIG_MMC - initr_mmc, + #if CONFIG_IS_ENABLED(MMC) + INITCALL(initr_mmc); #endif diff --git a/lede/package/boot/uboot-mediatek/patches/100-09-cmd-add-nmbm-command.patch b/lede/package/boot/uboot-mediatek/patches/100-07-cmd-add-nmbm-command.patch similarity index 95% rename from lede/package/boot/uboot-mediatek/patches/100-09-cmd-add-nmbm-command.patch rename to lede/package/boot/uboot-mediatek/patches/100-07-cmd-add-nmbm-command.patch index 4eb2bc9ccf..9ae18aeb42 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-09-cmd-add-nmbm-command.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-07-cmd-add-nmbm-command.patch @@ -1,7 +1,7 @@ -From 0af8d0aac77f4df4bc7dadbcdea5d9a16f5f3e45 Mon Sep 17 00:00:00 2001 +From db0424519d3cc24ae94c15de26af12c075a95e6a Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 10:44:57 +0800 -Subject: [PATCH 43/71] cmd: add nmbm command +Subject: [PATCH 07/30] cmd: add nmbm command Add nmbm command for debugging, data operations and image-booting support @@ -9,13 +9,13 @@ Signed-off-by: Weijie Gao --- cmd/Kconfig | 6 + cmd/Makefile | 1 + - cmd/nmbm.c | 327 +++++++++++++++++++++++++++++++++++++++++++++++++++ - 3 files changed, 334 insertions(+) + cmd/nmbm.c | 328 +++++++++++++++++++++++++++++++++++++++++++++++++++ + 3 files changed, 335 insertions(+) create mode 100644 cmd/nmbm.c --- a/cmd/Kconfig +++ b/cmd/Kconfig -@@ -1392,6 +1392,12 @@ config CMD_NAND_TORTURE +@@ -1548,6 +1548,12 @@ config CMD_NAND_WATCH endif # CMD_NAND @@ -30,17 +30,17 @@ Signed-off-by: Weijie Gao depends on NVME --- a/cmd/Makefile +++ b/cmd/Makefile -@@ -127,6 +127,7 @@ obj-y += legacy-mtd-utils.o +@@ -131,6 +131,7 @@ obj-y += legacy-mtd-utils.o endif obj-$(CONFIG_CMD_MUX) += mux.o obj-$(CONFIG_CMD_NAND) += nand.o +obj-$(CONFIG_CMD_NMBM) += nmbm.o - obj-$(CONFIG_CMD_NET) += net.o - obj-$(CONFIG_CMD_NVEDIT_EFI) += nvedit_efi.o - obj-$(CONFIG_CMD_ONENAND) += onenand.o + ifdef CONFIG_NET + obj-$(CONFIG_CMD_NET) += net.o net-common.o + else ifdef CONFIG_NET_LWIP --- /dev/null +++ b/cmd/nmbm.c -@@ -0,0 +1,327 @@ +@@ -0,0 +1,328 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2020 MediaTek Inc. All Rights Reserved. @@ -49,6 +49,7 @@ Signed-off-by: Weijie Gao + */ + +#include ++#include +#include +#include +#include diff --git a/lede/package/boot/uboot-mediatek/patches/100-10-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch b/lede/package/boot/uboot-mediatek/patches/100-08-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch similarity index 82% rename from lede/package/boot/uboot-mediatek/patches/100-10-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch rename to lede/package/boot/uboot-mediatek/patches/100-08-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch index c6358f3287..1d10bccde6 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-10-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-08-cmd-mtd-add-markbad-subcommand-for-NMBM-testing.patch @@ -1,7 +1,7 @@ -From 6dbbc8affb6ab22f940d13d0e928d5e881127ca4 Mon Sep 17 00:00:00 2001 +From f180eb4beec9b0cf19e8c2418d2b01404797cb26 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 11:22:57 +0800 -Subject: [PATCH 44/71] cmd: mtd: add markbad subcommand for NMBM testing +Subject: [PATCH 08/30] cmd: mtd: add markbad subcommand for NMBM testing This patch adds: * Mark bad block on lower mtd device and erase on upper mtd @@ -20,7 +20,7 @@ Signed-off-by: SkyLake.Huang --- a/cmd/mtd.c +++ b/cmd/mtd.c -@@ -504,6 +504,42 @@ out_put_mtd: +@@ -741,6 +741,42 @@ out_put_mtd: return CMD_RET_SUCCESS; } @@ -63,15 +63,15 @@ Signed-off-by: SkyLake.Huang #ifdef CONFIG_AUTO_COMPLETE static int mtd_name_complete(int argc, char *const argv[], char last_char, int maxv, char *cmdv[]) -@@ -551,6 +587,7 @@ U_BOOT_LONGHELP(mtd, +@@ -788,6 +824,7 @@ U_BOOT_LONGHELP(mtd, "\n" "Specific functions:\n" "mtd bad \n" + "mtd markbad \n" - "\n" - "With:\n" - "\t: NAND partition/chip name (or corresponding DM device name or OF path)\n" -@@ -575,4 +612,6 @@ U_BOOT_CMD_WITH_SUBCMDS(mtd, "MTD utils" + #if CONFIG_IS_ENABLED(CMD_MTD_OTP) + "mtd otpread [u|f] \n" + "mtd otpwrite \n" +@@ -828,4 +865,6 @@ U_BOOT_CMD_WITH_SUBCMDS(mtd, "MTD utils" U_BOOT_SUBCMD_MKENT_COMPLETE(erase, 4, 0, do_mtd_erase, mtd_name_complete), U_BOOT_SUBCMD_MKENT_COMPLETE(bad, 2, 1, do_mtd_bad, diff --git a/lede/package/boot/uboot-mediatek/patches/100-12-mtd-mtk-snand-add-NMBM-support-for-SPL.patch b/lede/package/boot/uboot-mediatek/patches/100-09-mtd-mtk-snand-add-NMBM-support-for-SPL.patch similarity index 78% rename from lede/package/boot/uboot-mediatek/patches/100-12-mtd-mtk-snand-add-NMBM-support-for-SPL.patch rename to lede/package/boot/uboot-mediatek/patches/100-09-mtd-mtk-snand-add-NMBM-support-for-SPL.patch index 32b21be255..7c6f2a8522 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-12-mtd-mtk-snand-add-NMBM-support-for-SPL.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-09-mtd-mtk-snand-add-NMBM-support-for-SPL.patch @@ -1,18 +1,38 @@ -From 9e8ac4fc7125795ac5e8834aaf454fd45b99c580 Mon Sep 17 00:00:00 2001 +From 1c5d96f544cfe2140834cc79dc1335b0e6fc5ce5 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 10:53:03 +0800 -Subject: [PATCH 46/71] mtd: mtk-snand: add NMBM support for SPL +Subject: [PATCH 09/30] mtd: mtk-snand: add NMBM support for SPL Add NMBM support for mtk-snand SPL loader Signed-off-by: Weijie Gao --- - drivers/mtd/mtk-snand/mtk-snand-spl.c | 127 ++++++++++++++++++++++++++ - 1 file changed, 127 insertions(+) + drivers/mtd/mtk-snand/Makefile | 2 +- + drivers/mtd/mtk-snand/mtk-snand-spl.c | 133 +++++++++++++++++++++++++- + 2 files changed, 133 insertions(+), 2 deletions(-) +--- a/drivers/mtd/mtk-snand/Makefile ++++ b/drivers/mtd/mtk-snand/Makefile +@@ -8,7 +8,7 @@ + obj-y += mtk-snand.o mtk-snand-ecc.o mtk-snand-ids.o mtk-snand-os.o + obj-$(CONFIG_MTK_SPI_NAND_MTD) += mtk-snand-mtd.o + +-ifdef CONFIG_SPL_BUILD ++ifdef CONFIG_XPL_BUILD + obj-$(CONFIG_SPL_MTK_SPI_NAND) += mtk-snand-spl.o + endif + --- a/drivers/mtd/mtk-snand/mtk-snand-spl.c +++ b/drivers/mtd/mtk-snand/mtk-snand-spl.c -@@ -13,12 +13,134 @@ +@@ -5,7 +5,6 @@ + * Author: Weijie Gao + */ + +-#include + #include + #include + #include +@@ -13,12 +12,134 @@ #include #include @@ -147,7 +167,7 @@ Signed-off-by: Weijie Gao static u8 *page_cache; int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst) -@@ -60,6 +182,7 @@ int nand_spl_load_image(uint32_t offs, u +@@ -60,6 +181,7 @@ int nand_spl_load_image(uint32_t offs, u return ret; } @@ -155,7 +175,7 @@ Signed-off-by: Weijie Gao void nand_init(void) { -@@ -105,11 +228,15 @@ void nand_init(void) +@@ -105,11 +227,20 @@ void nand_init(void) printf("SPI-NAND: %s (%uMB)\n", cinfo.model, (u32)(cinfo.chipsize >> 20)); @@ -168,6 +188,11 @@ Signed-off-by: Weijie Gao printf("mtk-snand-spl: failed to allocate page cache\n"); } +#endif ++} ++ ++unsigned int nand_page_size(void) ++{ ++ return cinfo.pagesize; } void nand_deselect(void) diff --git a/lede/package/boot/uboot-mediatek/patches/100-13-cmd-add-a-new-command-for-NAND-flash-debugging.patch b/lede/package/boot/uboot-mediatek/patches/100-10-cmd-add-a-new-command-for-NAND-flash-debugging.patch similarity index 98% rename from lede/package/boot/uboot-mediatek/patches/100-13-cmd-add-a-new-command-for-NAND-flash-debugging.patch rename to lede/package/boot/uboot-mediatek/patches/100-10-cmd-add-a-new-command-for-NAND-flash-debugging.patch index e6e12ae24c..dfafd5c347 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-13-cmd-add-a-new-command-for-NAND-flash-debugging.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-10-cmd-add-a-new-command-for-NAND-flash-debugging.patch @@ -1,7 +1,7 @@ -From 88271cb3ae9c68dc200d627653df96fc557c2a64 Mon Sep 17 00:00:00 2001 +From e33ed7c216b6fc7416e205fffccfedf32e26ff8b Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 10:55:35 +0800 -Subject: [PATCH 47/71] cmd: add a new command for NAND flash debugging +Subject: [PATCH 10/30] cmd: add a new command for NAND flash debugging Add a command 'nand-ext' for NAND flash debugging: - Dump a page with oob, with optional raw read support @@ -26,7 +26,7 @@ Signed-off-by: Weijie Gao --- a/cmd/Kconfig +++ b/cmd/Kconfig -@@ -1392,6 +1392,14 @@ config CMD_NAND_TORTURE +@@ -1548,6 +1548,14 @@ config CMD_NAND_WATCH endif # CMD_NAND @@ -43,14 +43,14 @@ Signed-off-by: Weijie Gao bool "nmbm" --- a/cmd/Makefile +++ b/cmd/Makefile -@@ -127,6 +127,7 @@ obj-y += legacy-mtd-utils.o +@@ -131,6 +131,7 @@ obj-y += legacy-mtd-utils.o endif obj-$(CONFIG_CMD_MUX) += mux.o obj-$(CONFIG_CMD_NAND) += nand.o +obj-$(CONFIG_CMD_NAND_EXT) += nand-ext.o obj-$(CONFIG_CMD_NMBM) += nmbm.o - obj-$(CONFIG_CMD_NET) += net.o - obj-$(CONFIG_CMD_NVEDIT_EFI) += nvedit_efi.o + ifdef CONFIG_NET + obj-$(CONFIG_CMD_NET) += net.o net-common.o --- /dev/null +++ b/cmd/nand-ext.c @@ -0,0 +1,1062 @@ diff --git a/lede/package/boot/uboot-mediatek/patches/100-11-env-add-support-for-NMBM-upper-MTD-layer.patch b/lede/package/boot/uboot-mediatek/patches/100-11-env-add-support-for-NMBM-upper-MTD-layer.patch index dbb1e2e59d..1f3b738b22 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-11-env-add-support-for-NMBM-upper-MTD-layer.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-11-env-add-support-for-NMBM-upper-MTD-layer.patch @@ -1,35 +1,36 @@ From 240d98e6ad0aed3c11236aa40a60bbd6fe01fae5 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 10:50:46 +0800 -Subject: [PATCH 45/71] env: add support for NMBM upper MTD layer +Subject: [PATCH 11/30] env: add support for NMBM upper MTD layer Add an env driver for NMBM upper MTD layer Signed-off-by: Weijie Gao --- - cmd/nvedit.c | 3 +- env/Kconfig | 19 ++++- env/Makefile | 1 + env/env.c | 3 + env/nmbm.c | 155 +++++++++++++++++++++++++++++++++++++++++ include/env_internal.h | 1 + tools/Makefile | 1 + - 7 files changed, 180 insertions(+), 3 deletions(-) + 6 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 env/nmbm.c --- a/env/Kconfig +++ b/env/Kconfig -@@ -59,6 +59,7 @@ config ENV_IS_DEFAULT - def_bool y if !ENV_IS_IN_EEPROM && !ENV_IS_IN_EXT4 && \ - !ENV_IS_IN_FAT && !ENV_IS_IN_FLASH && \ +@@ -74,7 +74,8 @@ config ENV_IS_DEFAULT !ENV_IS_IN_MMC && !ENV_IS_IN_NAND && \ -+ !ENV_IS_IN_NMBM && \ !ENV_IS_IN_NVRAM && !ENV_IS_IN_ONENAND && \ !ENV_IS_IN_REMOTE && !ENV_IS_IN_SPI_FLASH && \ - !ENV_IS_IN_UBI && !ENV_IS_IN_MTD -@@ -315,6 +316,21 @@ config ENV_RANGE - Specifying a range with more erase blocks than are needed to hold - CONFIG_ENV_SIZE allows bad blocks within the range to be avoided. +- !ENV_IS_IN_UBI && !ENV_IS_IN_MTD && !ENV_IS_IN_SCSI ++ !ENV_IS_IN_UBI && !ENV_IS_IN_MTD && \ ++ !ENV_IS_IN_NMBM && !ENV_IS_IN_SCSI + select ENV_IS_NOWHERE + + config ENV_IS_NOWHERE +@@ -293,6 +294,21 @@ config ENV_IS_IN_SCSI + Define this if you have an SCSI device which you want to use for the + environment. +config ENV_IS_IN_NMBM + bool "Environment in a NMBM upper MTD layer" @@ -46,10 +47,10 @@ Signed-off-by: Weijie Gao + area within the first NAND device. CONFIG_ENV_OFFSET must be + aligned to an erase block boundary. + - config ENV_IS_IN_NVRAM - bool "Environment in a non-volatile RAM" - depends on !CHAIN_OF_TRUST -@@ -591,7 +607,7 @@ config ENV_MTD_NAME + config ENV_RANGE + hex "Length of the region in which the environment can be written" + depends on ENV_IS_IN_NAND +@@ -592,7 +608,7 @@ config ENV_ADDR_REDUND config ENV_OFFSET hex "Environment offset" depends on ENV_IS_IN_EEPROM || ENV_IS_IN_MMC || ENV_IS_IN_NAND || \ @@ -60,14 +61,14 @@ Signed-off-by: Weijie Gao default 0xF0000 if ARCH_SUNXI --- a/env/Makefile +++ b/env/Makefile -@@ -26,6 +26,7 @@ obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_FAT) + - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_EXT4) += ext4.o - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_MTD) += mtd.o - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_NAND) += nand.o -+obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_NMBM) += nmbm.o - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_SPI_FLASH) += sf.o - obj-$(CONFIG_$(SPL_TPL_)ENV_IS_IN_FLASH) += flash.o - +@@ -25,6 +25,7 @@ obj-$(CONFIG_$(PHASE_)ENV_IS_IN_MMC) += + obj-$(CONFIG_$(PHASE_)ENV_IS_IN_FAT) += fat.o + obj-$(CONFIG_$(PHASE_)ENV_IS_IN_EXT4) += ext4.o + obj-$(CONFIG_$(PHASE_)ENV_IS_IN_NAND) += nand.o ++obj-$(CONFIG_$(PHASE_)ENV_IS_IN_NMBM) += nmbm.o + obj-$(CONFIG_$(PHASE_)ENV_IS_IN_SPI_FLASH) += sf.o + obj-$(CONFIG_$(PHASE_)ENV_IS_IN_MTD) += mtd.o + obj-$(CONFIG_$(PHASE_)ENV_IS_IN_FLASH) += flash.o --- a/env/env.c +++ b/env/env.c @@ -52,6 +52,9 @@ static enum env_location env_locations[] @@ -240,9 +241,9 @@ Signed-off-by: Weijie Gao +}; --- a/include/env_internal.h +++ b/include/env_internal.h -@@ -111,6 +111,7 @@ enum env_location { +@@ -109,6 +109,7 @@ enum env_location { + ENVL_FLASH, ENVL_MMC, - ENVL_MTD, ENVL_NAND, + ENVL_NMBM, ENVL_NVRAM, @@ -250,9 +251,9 @@ Signed-off-by: Weijie Gao ENVL_REMOTE, --- a/tools/Makefile +++ b/tools/Makefile -@@ -39,6 +39,7 @@ ENVCRC-$(CONFIG_ENV_IS_IN_FLASH) = y +@@ -38,6 +38,7 @@ ENVCRC-$(CONFIG_ENV_IS_IN_EEPROM) = y + ENVCRC-$(CONFIG_ENV_IS_IN_FLASH) = y ENVCRC-$(CONFIG_ENV_IS_IN_ONENAND) = y - ENVCRC-$(CONFIG_ENV_IS_IN_MTD) = y ENVCRC-$(CONFIG_ENV_IS_IN_NAND) = y +ENVCRC-$(CONFIG_ENV_IS_IN_NMBM) = y ENVCRC-$(CONFIG_ENV_IS_IN_NVRAM) = y diff --git a/lede/package/boot/uboot-mediatek/patches/100-14-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch b/lede/package/boot/uboot-mediatek/patches/100-12-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch similarity index 91% rename from lede/package/boot/uboot-mediatek/patches/100-14-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch rename to lede/package/boot/uboot-mediatek/patches/100-12-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch index da09cd9c08..589ed7d10c 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-14-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-12-mtd-spi-nor-add-support-to-read-flash-unique-ID.patch @@ -1,7 +1,7 @@ -From c4172a95df8a57a66c70a8b9948b9600a01c4cb7 Mon Sep 17 00:00:00 2001 +From b4c97d64ab00d74359112b8fc6e329d2fef792e3 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 11:32:08 +0800 -Subject: [PATCH 49/71] mtd: spi-nor: add support to read flash unique ID +Subject: [PATCH 12/30] mtd: spi-nor: add support to read flash unique ID This patch adds support to read unique ID from spi-nor flashes. @@ -13,7 +13,7 @@ Signed-off-by: Weijie Gao --- a/drivers/mtd/spi/spi-nor-core.c +++ b/drivers/mtd/spi/spi-nor-core.c -@@ -2854,6 +2854,100 @@ static int spi_nor_init_params(struct sp +@@ -3262,6 +3262,100 @@ static int spi_nor_init_params(struct sp return 0; } @@ -114,7 +114,7 @@ Signed-off-by: Weijie Gao static int spi_nor_hwcaps2cmd(u32 hwcaps, const int table[][2], size_t size) { size_t i; -@@ -4051,6 +4145,7 @@ int spi_nor_scan(struct spi_nor *nor) +@@ -4488,6 +4582,7 @@ int spi_nor_scan(struct spi_nor *nor) nor->write = spi_nor_write_data; nor->read_reg = spi_nor_read_reg; nor->write_reg = spi_nor_write_reg; @@ -124,7 +124,7 @@ Signed-off-by: Weijie Gao --- a/include/linux/mtd/spi-nor.h +++ b/include/linux/mtd/spi-nor.h -@@ -29,6 +29,7 @@ +@@ -32,6 +32,7 @@ #define SNOR_MFR_SPANSION CFI_MFR_AMD #define SNOR_MFR_SST CFI_MFR_SST #define SNOR_MFR_WINBOND 0xef /* Also used by some Spansion */ @@ -132,7 +132,7 @@ Signed-off-by: Weijie Gao #define SNOR_MFR_CYPRESS 0x34 /* -@@ -571,6 +572,7 @@ struct spi_nor { +@@ -590,6 +591,7 @@ struct spi_nor { void (*unprepare)(struct spi_nor *nor, enum spi_nor_ops ops); int (*read_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len); int (*write_reg)(struct spi_nor *nor, u8 opcode, u8 *buf, int len); diff --git a/lede/package/boot/uboot-mediatek/patches/100-15-cmd-sf-add-support-to-read-flash-unique-ID.patch b/lede/package/boot/uboot-mediatek/patches/100-13-cmd-sf-add-support-to-read-flash-unique-ID.patch similarity index 52% rename from lede/package/boot/uboot-mediatek/patches/100-15-cmd-sf-add-support-to-read-flash-unique-ID.patch rename to lede/package/boot/uboot-mediatek/patches/100-13-cmd-sf-add-support-to-read-flash-unique-ID.patch index f7cbd8d052..6a8a3f315c 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-15-cmd-sf-add-support-to-read-flash-unique-ID.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-13-cmd-sf-add-support-to-read-flash-unique-ID.patch @@ -1,18 +1,18 @@ -From e60939acbebd07161f3978d1c6f13123fdd2ebf2 Mon Sep 17 00:00:00 2001 +From 36d2aafec10998735f93b47a96a0f66c52484af7 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 11:27:02 +0800 -Subject: [PATCH 50/71] cmd: sf: add support to read flash unique ID +Subject: [PATCH 13/30] cmd: sf: add support to read flash unique ID This patch adds support to display unique ID from spi-nor flashes Signed-off-by: Weijie Gao --- - cmd/sf.c | 13 ++++++++++++- - 1 file changed, 12 insertions(+), 1 deletion(-) + cmd/sf.c | 11 +++++++++++ + 1 file changed, 11 insertions(+) --- a/cmd/sf.c +++ b/cmd/sf.c -@@ -412,6 +412,14 @@ static int do_spi_protect(int argc, char +@@ -421,6 +421,14 @@ static int do_spi_protect(int argc, char return ret == 0 ? 0 : 1; } @@ -27,7 +27,7 @@ Signed-off-by: Weijie Gao enum { STAGE_ERASE, STAGE_CHECK, -@@ -606,6 +614,8 @@ static int do_spi_flash(struct cmd_tbl * +@@ -615,6 +623,8 @@ static int do_spi_flash(struct cmd_tbl * ret = do_spi_flash_erase(argc, argv); else if (IS_ENABLED(CONFIG_SPI_FLASH_LOCK) && strcmp(cmd, "protect") == 0) ret = do_spi_protect(argc, argv); @@ -36,11 +36,11 @@ Signed-off-by: Weijie Gao else if (IS_ENABLED(CONFIG_CMD_SF_TEST) && !strcmp(cmd, "test")) ret = do_spi_flash_test(argc, argv); else -@@ -636,6 +646,7 @@ U_BOOT_LONGHELP(sf, - #ifdef CONFIG_CMD_SF_TEST - "\nsf test offset len - run a very basic destructive test" - #endif -+ "sf uuid - read uuid from flash" - ); - - U_BOOT_CMD( +@@ -638,6 +648,7 @@ U_BOOT_LONGHELP(sf, + "sf update addr offset|partition len - erase and write `len' bytes from memory\n" + " at `addr' to flash at `offset'\n" + " or to start of mtd `partition'\n" ++ "sf uuid - read uuid from flash\n" + #ifdef CONFIG_SPI_FLASH_LOCK + "sf protect lock/unlock sector len - protect/unprotect 'len' bytes starting\n" + " at address 'sector'" diff --git a/lede/package/boot/uboot-mediatek/patches/100-17-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch b/lede/package/boot/uboot-mediatek/patches/100-14-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch similarity index 82% rename from lede/package/boot/uboot-mediatek/patches/100-17-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch rename to lede/package/boot/uboot-mediatek/patches/100-14-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch index f017ce92ad..e9c05404eb 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-17-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-14-common-spl-spl_nand-enable-CONFIG_SYS_NAND_U_BOOT_OF.patch @@ -1,7 +1,7 @@ -From 7ab891faaaf2b6126694352d4503dc40605a6aec Mon Sep 17 00:00:00 2001 +From d38f1f94531a792809f660ad5dcc4627eef1b9ec Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 15:10:02 +0800 -Subject: [PATCH 52/71] common: spl: spl_nand: enable +Subject: [PATCH 14/30] common: spl: spl_nand: enable CONFIG_SYS_NAND_U_BOOT_OFFS undefined Enable using spl_nand with CONFIG_SYS_NAND_U_BOOT_OFFS undefined since @@ -14,7 +14,7 @@ Signed-off-by: Weijie Gao --- a/common/spl/spl_nand.c +++ b/common/spl/spl_nand.c -@@ -17,7 +17,11 @@ +@@ -18,7 +18,11 @@ uint32_t __weak spl_nand_get_uboot_raw_page(void) { diff --git a/lede/package/boot/uboot-mediatek/patches/100-19-board-mt7622-use-new-spi-nand-driver.patch b/lede/package/boot/uboot-mediatek/patches/100-16-board-mt7622-use-new-spi-nand-driver.patch similarity index 58% rename from lede/package/boot/uboot-mediatek/patches/100-19-board-mt7622-use-new-spi-nand-driver.patch rename to lede/package/boot/uboot-mediatek/patches/100-16-board-mt7622-use-new-spi-nand-driver.patch index 6202ddf3b0..c3d3225992 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-19-board-mt7622-use-new-spi-nand-driver.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-16-board-mt7622-use-new-spi-nand-driver.patch @@ -1,16 +1,15 @@ -From 4c1803cc08b1618d935c1386f43f43a4e9c97697 Mon Sep 17 00:00:00 2001 +From 3414e92ca55af9e4d0c20d93fcba0024ca35eb10 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Wed, 3 Mar 2021 10:51:43 +0800 -Subject: [PATCH 54/71] board: mt7622: use new spi-nand driver +Subject: [PATCH 16/30] board: mt7622: use new spi-nand driver Enable new spi-nand driver support for mt7622_rfb_defconfig Signed-off-by: Weijie Gao --- - arch/arm/dts/mt7622-rfb.dts | 7 +++++++ - arch/arm/dts/mt7622.dtsi | 16 ++++++++++++++++ - configs/mt7622_rfb_defconfig | 5 +++++ - 3 files changed, 28 insertions(+) + arch/arm/dts/mt7622-rfb.dts | 7 +++++++ + arch/arm/dts/mt7622.dtsi | 16 ++++++++++++++++ + 2 files changed, 23 insertions(+) --- a/arch/arm/dts/mt7622-rfb.dts +++ b/arch/arm/dts/mt7622-rfb.dts @@ -30,7 +29,7 @@ Signed-off-by: Weijie Gao }; --- a/arch/arm/dts/mt7622.dtsi +++ b/arch/arm/dts/mt7622.dtsi -@@ -77,6 +77,22 @@ +@@ -53,6 +53,22 @@ #size-cells = <0>; }; @@ -53,24 +52,3 @@ Signed-off-by: Weijie Gao snor: snor@11014000 { compatible = "mediatek,mtk-snor"; reg = <0x11014000 0x1000>; ---- a/configs/mt7622_rfb_defconfig -+++ b/configs/mt7622_rfb_defconfig -@@ -22,6 +22,7 @@ CONFIG_SYS_MAXARGS=8 - CONFIG_SYS_PBSIZE=1049 - CONFIG_CMD_BOOTMENU=y - CONFIG_CMD_MMC=y -+CONFIG_CMD_MTD=y - CONFIG_CMD_PCI=y - CONFIG_CMD_SF_TEST=y - CONFIG_CMD_PING=y -@@ -41,6 +42,10 @@ CONFIG_SYSCON=y - CONFIG_CLK=y - CONFIG_MMC_HS200_SUPPORT=y - CONFIG_MMC_MTK=y -+CONFIG_MTD=y -+CONFIG_DM_MTD=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y - CONFIG_DM_SPI_FLASH=y - CONFIG_SPI_FLASH_EON=y - CONFIG_SPI_FLASH_GIGADEVICE=y diff --git a/lede/package/boot/uboot-mediatek/patches/100-16-cmd-bootmenu-add-ability-to-select-item-by-shortkey.patch b/lede/package/boot/uboot-mediatek/patches/100-16-cmd-bootmenu-add-ability-to-select-item-by-shortkey.patch deleted file mode 100644 index 0438895fdb..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/100-16-cmd-bootmenu-add-ability-to-select-item-by-shortkey.patch +++ /dev/null @@ -1,323 +0,0 @@ -From 5a15437610e8e8c68dc347845a83d0cbad80ca08 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Tue, 19 Jan 2021 10:58:48 +0800 -Subject: [PATCH 51/71] cmd: bootmenu: add ability to select item by shortkey - -Add ability to use shortkey to select item for bootmenu command - -Signed-off-by: Weijie Gao ---- - cmd/bootmenu.c | 34 ++++++++++++++++++++++++----- - common/menu.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++-- - include/menu.h | 12 +++++++---- - 3 files changed, 93 insertions(+), 11 deletions(-) - ---- a/cmd/bootmenu.c -+++ b/cmd/bootmenu.c -@@ -89,6 +89,7 @@ static char *bootmenu_choice_entry(void - struct bootmenu_data *menu = data; - struct bootmenu_entry *iter; - enum bootmenu_key key = BKEY_NONE; -+ int choice = -1; - int i; - - cli_ch_init(cch); -@@ -96,10 +97,10 @@ static char *bootmenu_choice_entry(void - while (1) { - if (menu->delay >= 0) { - /* Autoboot was not stopped */ -- key = bootmenu_autoboot_loop(menu, cch); -+ key = bootmenu_autoboot_loop(menu, cch, &choice); - } else { - /* Some key was pressed, so autoboot was stopped */ -- key = bootmenu_loop(menu, cch); -+ key = bootmenu_loop(menu, cch, &choice); - } - - switch (key) { -@@ -113,6 +114,12 @@ static char *bootmenu_choice_entry(void - ++menu->active; - /* no menu key selected, regenerate menu */ - return NULL; -+ case BKEY_CHOICE: -+ menu->active = choice; -+ if (!menu->last_choiced) { -+ menu->last_choiced = true; -+ return NULL; -+ } - case BKEY_SELECT: - iter = menu->first; - for (i = 0; i < menu->active; ++i) -@@ -170,6 +177,9 @@ static int prepare_bootmenu_entry(struct - unsigned short int i = *index; - struct bootmenu_entry *entry = NULL; - struct bootmenu_entry *iter = *current; -+ char *choice_option; -+ char choice_char; -+ int len; - - while ((option = bootmenu_getoption(i))) { - -@@ -184,11 +194,24 @@ static int prepare_bootmenu_entry(struct - if (!entry) - return -ENOMEM; - -- entry->title = strndup(option, sep - option); -+ /* Add KEY_CHOICE support: '%d. %s\0' : len --> len + 4 */ -+ len = sep - option + 4; -+ choice_option = malloc(len); -+ if (!choice_option) { -+ free(entry->title); -+ free(entry); -+ return -ENOMEM; -+ } -+ if (!get_choice_char(i, &choice_char)) -+ len = snprintf(choice_option, len, "%c. %s", choice_char, option); -+ else -+ len = snprintf(choice_option, len, " %s", option); -+ entry->title = strndup(choice_option, len); - if (!entry->title) { - free(entry); - return -ENOMEM; - } -+ free(choice_option); - - entry->command = strdup(sep + 1); - if (!entry->command) { -@@ -334,6 +357,7 @@ static struct bootmenu_data *bootmenu_cr - menu->delay = delay; - menu->active = 0; - menu->first = NULL; -+ menu->last_choiced = false; - - default_str = env_get("bootmenu_default"); - if (default_str) -@@ -369,9 +393,9 @@ static struct bootmenu_data *bootmenu_cr - - /* Add Quit entry if entering U-Boot console is disabled */ - if (!IS_ENABLED(CONFIG_BOOTMENU_DISABLE_UBOOT_CONSOLE)) -- entry->title = strdup("U-Boot console"); -+ entry->title = strdup("0. U-Boot console"); - else -- entry->title = strdup("Quit"); -+ entry->title = strdup("0. Quit"); - - if (!entry->title) { - free(entry); ---- a/common/menu.c -+++ b/common/menu.c -@@ -49,6 +49,33 @@ struct menu { - int item_cnt; - }; - -+const char choice_chars[] = { -+ '1', '2', '3', '4', '5', '6', '7', '8', '9', -+ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', -+ 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', -+ 'u', 'v', 'w', 'x', 'y', 'z' -+}; -+ -+static int find_choice(char choice) -+{ -+ int i; -+ -+ for (i = 0; i < ARRAY_SIZE(choice_chars); i++) -+ if (tolower(choice) == choice_chars[i]) -+ return i; -+ -+ return -1; -+} -+ -+int get_choice_char(int index, char *result) -+{ -+ if (index < ARRAY_SIZE(choice_chars)) -+ *result = choice_chars[index]; -+ else -+ return -1; -+ return 0; -+} -+ - /* - * An iterator function for menu items. callback will be called for each item - * in m, with m, a pointer to the item, and extra being passed to callback. If -@@ -428,7 +455,7 @@ int menu_destroy(struct menu *m) - } - - enum bootmenu_key bootmenu_autoboot_loop(struct bootmenu_data *menu, -- struct cli_ch_state *cch) -+ struct cli_ch_state *cch, int *choice) - { - enum bootmenu_key key = BKEY_NONE; - int i, c; -@@ -463,6 +490,19 @@ enum bootmenu_key bootmenu_autoboot_loop - break; - default: - key = BKEY_NONE; -+ if (cch->esc_len || !choice) -+ break; -+ -+ *choice = find_choice(c); -+ if ((*choice >= 0 && -+ *choice < menu->count - 1)) { -+ key = BKEY_CHOICE; -+ } else if (c == '0') { -+ *choice = menu->count - 1; -+ key = BKEY_CHOICE; -+ } else { -+ key = BKEY_NONE; -+ } - break; - } - break; -@@ -483,7 +523,8 @@ enum bootmenu_key bootmenu_autoboot_loop - return key; - } - --enum bootmenu_key bootmenu_conv_key(int ichar) -+enum bootmenu_key bootmenu_conv_key(struct bootmenu_data *menu, int ichar, -+ int *choice) - { - enum bootmenu_key key; - -@@ -515,6 +556,20 @@ enum bootmenu_key bootmenu_conv_key(int - case ' ': - key = BKEY_SPACE; - break; -+ case '0' ... '9': -+ case 'a' ... 'z': -+ if (choice && menu) { -+ *choice = find_choice(ichar); -+ if ((*choice >= 0 && *choice < menu->count - 1)) { -+ key = BKEY_CHOICE; -+ break; -+ } else if (ichar == '0') { -+ *choice = menu->count - 1; -+ key = BKEY_CHOICE; -+ break; -+ } -+ } -+ fallthrough; - default: - key = BKEY_NONE; - break; -@@ -524,11 +579,16 @@ enum bootmenu_key bootmenu_conv_key(int - } - - enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu, -- struct cli_ch_state *cch) -+ struct cli_ch_state *cch, int *choice) - { - enum bootmenu_key key; - int c; - -+ if (menu->last_choiced) { -+ menu->last_choiced = false; -+ return BKEY_SELECT; -+ } -+ - c = cli_ch_process(cch, 0); - if (!c) { - while (!c && !tstc()) { -@@ -542,7 +602,7 @@ enum bootmenu_key bootmenu_loop(struct b - } - } - -- key = bootmenu_conv_key(c); -+ key = bootmenu_conv_key(menu, c, choice); - - return key; - } ---- a/include/menu.h -+++ b/include/menu.h -@@ -6,6 +6,8 @@ - #ifndef __MENU_H__ - #define __MENU_H__ - -+#include -+ - struct cli_ch_state; - struct menu; - -@@ -19,6 +21,8 @@ int menu_get_choice(struct menu *m, void - int menu_item_add(struct menu *m, char *item_key, void *item_data); - int menu_destroy(struct menu *m); - int menu_default_choice(struct menu *m, void **choice); -+/* Add KEY_CHOICE support */ -+int get_choice_char(int index, char *result); - - /** - * menu_show() Show a boot menu -@@ -41,6 +45,7 @@ struct bootmenu_data { - int active; /* active menu entry */ - int count; /* total count of menu entries */ - struct bootmenu_entry *first; /* first menu entry */ -+ bool last_choiced; - }; - - /** enum bootmenu_key - keys that can be returned by the bootmenu */ -@@ -51,6 +56,7 @@ enum bootmenu_key { - BKEY_SELECT, - BKEY_QUIT, - BKEY_SAVE, -+ BKEY_CHOICE, - - /* 'extra' keys, which are used by menus but not cedit */ - BKEY_PLUS, -@@ -81,7 +87,7 @@ enum bootmenu_key { - * anything else: KEY_NONE - */ - enum bootmenu_key bootmenu_autoboot_loop(struct bootmenu_data *menu, -- struct cli_ch_state *cch); -+ struct cli_ch_state *cch, int *choice); - - /** - * bootmenu_loop() - handle waiting for a keypress when autoboot is disabled -@@ -107,7 +113,7 @@ enum bootmenu_key bootmenu_autoboot_loop - * Space: BKEY_SPACE - */ - enum bootmenu_key bootmenu_loop(struct bootmenu_data *menu, -- struct cli_ch_state *cch); -+ struct cli_ch_state *cch, int *choice); - - /** - * bootmenu_conv_key() - Convert a U-Boot keypress into a menu key -@@ -115,6 +121,7 @@ enum bootmenu_key bootmenu_loop(struct b - * @ichar: Keypress to convert (ASCII, including control characters) - * Returns: Menu key that corresponds to @ichar, or BKEY_NONE if none - */ --enum bootmenu_key bootmenu_conv_key(int ichar); -+enum bootmenu_key bootmenu_conv_key(struct bootmenu_data *menu, int ichar, -+ int *choice); - - #endif /* __MENU_H__ */ ---- a/cmd/eficonfig.c -+++ b/cmd/eficonfig.c -@@ -239,7 +239,7 @@ char *eficonfig_choice_entry(void *data) - cli_ch_init(cch); - - while (1) { -- key = bootmenu_loop((struct bootmenu_data *)efi_menu, cch); -+ key = bootmenu_loop((struct bootmenu_data *)efi_menu, cch, NULL); - - switch (key) { - case BKEY_UP: -@@ -1838,7 +1838,7 @@ char *eficonfig_choice_change_boot_order - - cli_ch_init(cch); - while (1) { -- key = bootmenu_loop(NULL, cch); -+ key = bootmenu_loop(NULL, cch, NULL); - - switch (key) { - case BKEY_PLUS: ---- a/boot/bootflow_menu.c -+++ b/boot/bootflow_menu.c -@@ -235,7 +235,7 @@ int bootflow_menu_run(struct bootstd_pri - - key = 0; - if (ichar) { -- key = bootmenu_conv_key(ichar); -+ key = bootmenu_conv_key(NULL, ichar, NULL); - if (key == BKEY_NONE) - key = ichar; - } diff --git a/lede/package/boot/uboot-mediatek/patches/100-20-board-mt7981-add-reference-board-using-new-spi-nand-.patch b/lede/package/boot/uboot-mediatek/patches/100-17-board-mt7981-add-reference-board-using-new-spi-nand-.patch similarity index 93% rename from lede/package/boot/uboot-mediatek/patches/100-20-board-mt7981-add-reference-board-using-new-spi-nand-.patch rename to lede/package/boot/uboot-mediatek/patches/100-17-board-mt7981-add-reference-board-using-new-spi-nand-.patch index 9dc1a57722..42153605a0 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-20-board-mt7981-add-reference-board-using-new-spi-nand-.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-17-board-mt7981-add-reference-board-using-new-spi-nand-.patch @@ -1,7 +1,7 @@ -From d5841f8707dcb7a1f73607de67ab45dba93a56a4 Mon Sep 17 00:00:00 2001 +From 124ef4a79d8054f84c22a60d79ccd82646b6402a Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Fri, 29 Jul 2022 17:04:12 +0800 -Subject: [PATCH 55/71] board: mt7981: add reference board using new spi-nand +Subject: [PATCH 17/30] board: mt7981: add reference board using new spi-nand driver Add a new reference board using new spi-nand driver for SPI-NAND flash on @@ -18,9 +18,9 @@ Signed-off-by: Weijie Gao --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile -@@ -1425,6 +1425,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ +@@ -1121,6 +1121,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ + mt7622-bananapi-bpi-r64.dtb \ mt7623n-bananapi-bpi-r2.dtb \ - mt7629-rfb.dtb \ mt7981-rfb.dtb \ + mt7981-snfi-nand-rfb.dtb \ mt7981-emmc-rfb.dtb \ @@ -65,7 +65,7 @@ Signed-off-by: Weijie Gao + mediatek,gmac-id = <0>; + phy-mode = "sgmii"; + mediatek,switch = "mt7531"; -+ reset-gpios = <&gpio 39 GPIO_ACTIVE_HIGH>; ++ reset-gpios = <&pio 39 GPIO_ACTIVE_HIGH>; + + fixed-link { + speed = <1000>; @@ -73,7 +73,7 @@ Signed-off-by: Weijie Gao + }; +}; + -+&pinctrl { ++&pio { + snfi_pins: snfi-pins-func-1 { + mux { + function = "flash"; @@ -163,8 +163,9 @@ Signed-off-by: Weijie Gao +}; --- /dev/null +++ b/configs/mt7981_snfi_nand_rfb_defconfig -@@ -0,0 +1,57 @@ +@@ -0,0 +1,58 @@ +CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y +CONFIG_TEXT_BASE=0x41e00000 @@ -172,6 +173,8 @@ Signed-off-by: Weijie Gao +CONFIG_NR_DRAM_BANKS=1 +CONFIG_ENV_SIZE=0x20000 +CONFIG_DEFAULT_DEVICE_TREE="mt7981-snfi-nand-rfb" ++# CONFIG_BOARD_INIT is not set ++CONFIG_SYS_PROMPT="MT7981> " +CONFIG_TARGET_MT7981=y +CONFIG_DEBUG_UART_BASE=0x11002000 +CONFIG_DEBUG_UART_CLOCK=40000000 @@ -181,7 +184,6 @@ Signed-off-by: Weijie Gao +CONFIG_DEFAULT_FDT_FILE="mt7981-snfi-nand-rfb" +CONFIG_LOGLEVEL=7 +CONFIG_LOG=y -+CONFIG_SYS_PROMPT="MT7981> " +CONFIG_SYS_CBSIZE=512 +CONFIG_SYS_PBSIZE=1049 +# CONFIG_BOOTM_NETBSD is not set @@ -211,7 +213,6 @@ Signed-off-by: Weijie Gao +CONFIG_MTK_SPI_NAND=y +CONFIG_MTK_SPI_NAND_MTD=y +CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y +CONFIG_MEDIATEK_ETH=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y diff --git a/lede/package/boot/uboot-mediatek/patches/100-18-board-mt7629-add-support-for-booting-from-SPI-NAND.patch b/lede/package/boot/uboot-mediatek/patches/100-18-board-mt7629-add-support-for-booting-from-SPI-NAND.patch deleted file mode 100644 index ef20c2dfb6..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/100-18-board-mt7629-add-support-for-booting-from-SPI-NAND.patch +++ /dev/null @@ -1,274 +0,0 @@ -From 452dc98572f8353f77551bcce5a2ca8cd050f498 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 3 Mar 2021 10:48:53 +0800 -Subject: [PATCH 53/71] board: mt7629: add support for booting from SPI-NAND - -Add support for mt7629 to boot from SPI-NAND. -Add a new defconfig for mt7629+spi-nand configuration. - -Signed-off-by: Weijie Gao ---- - arch/arm/dts/mt7629-rfb-u-boot.dtsi | 8 ++ - arch/arm/dts/mt7629-rfb.dts | 10 +++ - arch/arm/dts/mt7629.dtsi | 16 ++++ - arch/arm/mach-mediatek/Kconfig | 4 +- - board/mediatek/mt7629/Kconfig | 40 ++++++++++ - board/mediatek/mt7629/mt7629_rfb.c | 5 ++ - configs/mt7629_nand_rfb_defconfig | 113 ++++++++++++++++++++++++++++ - 7 files changed, 195 insertions(+), 1 deletion(-) - create mode 100644 board/mediatek/mt7629/Kconfig - create mode 100644 configs/mt7629_nand_rfb_defconfig - ---- a/arch/arm/dts/mt7629-rfb-u-boot.dtsi -+++ b/arch/arm/dts/mt7629-rfb-u-boot.dtsi -@@ -40,3 +40,11 @@ - &snfi { - bootph-all; - }; -+ -+&pinctrl { -+ u-boot,dm-pre-reloc; -+}; -+ -+&snand { -+ u-boot,dm-pre-reloc; -+}; ---- a/arch/arm/dts/mt7629-rfb.dts -+++ b/arch/arm/dts/mt7629-rfb.dts -@@ -47,9 +47,12 @@ - }; - - snfi_pins: snfi-pins { -+ u-boot,dm-pre-reloc; -+ - mux { - function = "flash"; - groups = "snfi"; -+ u-boot,dm-pre-reloc; - }; - }; - -@@ -102,6 +105,13 @@ - }; - }; - -+&snand { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&snfi_pins>; -+ status = "okay"; -+ quad-spi; -+}; -+ - &uart0 { - pinctrl-names = "default"; - pinctrl-0 = <&uart0_pins>; ---- a/arch/arm/dts/mt7629.dtsi -+++ b/arch/arm/dts/mt7629.dtsi -@@ -229,6 +229,22 @@ - #size-cells = <0>; - }; - -+ snand: snand@1100d000 { -+ compatible = "mediatek,mt7629-snand"; -+ reg = <0x1100d000 0x1000>, -+ <0x1100e000 0x1000>; -+ reg-names = "nfi", "ecc"; -+ clocks = <&pericfg CLK_PERI_NFI_PD>, -+ <&pericfg CLK_PERI_SNFI_PD>, -+ <&pericfg CLK_PERI_NFIECC_PD>; -+ clock-names = "nfi_clk", "pad_clk", "ecc_clk"; -+ assigned-clocks = <&topckgen CLK_TOP_AXI_SEL>, -+ <&topckgen CLK_TOP_NFI_INFRA_SEL>; -+ assigned-clock-parents = <&topckgen CLK_TOP_SYSPLL1_D2>, -+ <&topckgen CLK_TOP_UNIVPLL2_D8>; -+ status = "disabled"; -+ }; -+ - snor: snor@11014000 { - compatible = "mediatek,mtk-snor"; - reg = <0x11014000 0x1000>; ---- a/arch/arm/mach-mediatek/Kconfig -+++ b/arch/arm/mach-mediatek/Kconfig -@@ -144,9 +144,11 @@ config SYS_CONFIG_NAME - - config MTK_BROM_HEADER_INFO - string -- default "media=nor" if TARGET_MT8518 || TARGET_MT8512 || TARGET_MT7629 || TARGET_MT7622 -+ default "media=nor" if TARGET_MT8518 || TARGET_MT8512 || TARGET_MT7622 - default "media=emmc" if TARGET_MT8516 || TARGET_MT8365 || TARGET_MT8183 - default "media=snand;nandinfo=2k+64" if TARGET_MT7981 || TARGET_MT7986 || TARGET_MT7988 - default "lk=1" if TARGET_MT7623 - -+source "board/mediatek/mt7629/Kconfig" -+ - endif ---- /dev/null -+++ b/board/mediatek/mt7629/Kconfig -@@ -0,0 +1,40 @@ -+if TARGET_MT7629 -+ -+config MTK_BROM_HEADER_INFO -+ string -+ default "media=nor" if BOOT_FROM_SNOR -+ default "media=snand;nandinfo=2k+64" if BOOT_FROM_SNAND_2K_64 -+ default "media=snand;nandinfo=2k+128" if BOOT_FROM_SNAND_2K_128 -+ default "media=snand;nandinfo=4k+128" if BOOT_FROM_SNAND_4K_128 -+ default "media=snand;nandinfo=4k+256" if BOOT_FROM_SNAND_4K_256 -+ -+choice -+ prompt "Boot device" -+ default BOOT_FROM_SNOR -+ -+config BOOT_FROM_SNOR -+ bool "SPI-NOR" -+ -+config BOOT_FROM_SNAND_2K_64 -+ bool "SPI-NAND (2K+64)" -+ select MT7629_BOOT_FROM_SNAND -+ -+config BOOT_FROM_SNAND_2K_128 -+ bool "SPI-NAND (2K+128)" -+ select MT7629_BOOT_FROM_SNAND -+ -+config BOOT_FROM_SNAND_4K_128 -+ bool "SPI-NAND (4K+128)" -+ select MT7629_BOOT_FROM_SNAND -+ -+config BOOT_FROM_SNAND_4K_256 -+ bool "SPI-NAND (4K+256)" -+ select MT7629_BOOT_FROM_SNAND -+ -+endchoice -+ -+config MT7629_BOOT_FROM_SNAND -+ bool -+ default n -+ -+endif ---- a/board/mediatek/mt7629/mt7629_rfb.c -+++ b/board/mediatek/mt7629/mt7629_rfb.c -@@ -15,3 +15,8 @@ int board_init(void) - - return 0; - } -+ -+uint32_t spl_nand_get_uboot_raw_page(void) -+{ -+ return CONFIG_SPL_PAD_TO; -+} ---- /dev/null -+++ b/configs/mt7629_nand_rfb_defconfig -@@ -0,0 +1,113 @@ -+CONFIG_ARM=y -+CONFIG_SYS_ARCH_TIMER=y -+CONFIG_SYS_THUMB_BUILD=y -+CONFIG_ARCH_MEDIATEK=y -+CONFIG_TEXT_BASE=0x41e00000 -+CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_ENV_SIZE=0x20000 -+CONFIG_ENV_OFFSET=0x0 -+CONFIG_DEFAULT_DEVICE_TREE="mt7629-rfb" -+CONFIG_SPL_TEXT_BASE=0x201000 -+CONFIG_TARGET_MT7629=y -+CONFIG_BOOT_FROM_SNAND_2K_64=y -+CONFIG_SPL_SERIAL=y -+CONFIG_SPL_STACK_R_ADDR=0x40800000 -+CONFIG_SYS_LOAD_ADDR=0x42007f1c -+CONFIG_SPL_PAYLOAD="u-boot.img" -+CONFIG_BUILD_TARGET="u-boot-mtk.bin" -+CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y -+CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x41fffef0 -+CONFIG_SPL_IMAGE="spl/u-boot-spl-mtk.bin" -+CONFIG_FIT=y -+# CONFIG_AUTOBOOT is not set -+CONFIG_DEFAULT_FDT_FILE="mt7629-rfb" -+CONFIG_SYS_CONSOLE_IS_IN_ENV=y -+# CONFIG_DISPLAY_BOARDINFO is not set -+CONFIG_SPL_MAX_SIZE=0x20000 -+CONFIG_SPL_FOOTPRINT_LIMIT=y -+CONFIG_SPL_MAX_FOOTPRINT=0x20000 -+CONFIG_SPL_SYS_MALLOC_SIMPLE=y -+# CONFIG_SPL_SHARES_INIT_SP_ADDR is not set -+CONFIG_SPL_STACK=0x106000 -+CONFIG_SPL_STACK_R=y -+CONFIG_SPL_MTD_SUPPORT=y -+CONFIG_SPL_NAND_SUPPORT=y -+CONFIG_SPL_WATCHDOG=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_PROMPT="U-Boot> " -+# CONFIG_BOOTM_NETBSD is not set -+# CONFIG_BOOTM_PLAN9 is not set -+# CONFIG_BOOTM_RTEMS is not set -+# CONFIG_BOOTM_VXWORKS is not set -+CONFIG_SYS_BOOTM_LEN=0x4000000 -+CONFIG_CMD_BOOTMENU=y -+# CONFIG_CMD_ELF is not set -+# CONFIG_CMD_XIMG is not set -+CONFIG_CMD_BIND=y -+CONFIG_CMD_DM=y -+# CONFIG_CMD_FLASH is not set -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_USB=y -+# CONFIG_CMD_SETEXPR is not set -+# CONFIG_CMD_NFS is not set -+CONFIG_CMD_PING=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_LOG=y -+CONFIG_OF_SPL_REMOVE_PROPS="interrupt-parent assigned-clocks assigned-clock-parents" -+CONFIG_ENV_OVERWRITE=y -+CONFIG_ENV_IS_IN_MTD=y -+CONFIG_ENV_MTD_NAME="u-boot-env" -+CONFIG_ENV_SIZE_REDUND=0x40000 -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_SPL_DM_SEQ_ALIAS=y -+CONFIG_REGMAP=y -+CONFIG_SPL_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_SPL_SYSCON=y -+CONFIG_CLK=y -+CONFIG_SPL_CLK=y -+# CONFIG_MMC is not set -+CONFIG_MTD=y -+CONFIG_DM_MTD=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SPL_MTK_SPI_NAND=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_SPL_PINCTRL=y -+CONFIG_SPL_PINCONF=y -+CONFIG_PINCTRL_MT7629=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_RAM=y -+CONFIG_SPL_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_SPI_MEM=y -+CONFIG_MTK_SNFI_SPI=y -+CONFIG_SYSRESET=y -+CONFIG_SPL_SYSRESET=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_USB=y -+# CONFIG_SPL_DM_USB is not set -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y -+CONFIG_WDT_MTK=y -+# CONFIG_SHA256 is not set -+# CONFIG_SPL_SHA1 is not set -+CONFIG_LZMA=y -+CONFIG_SPL_LZMA=y -+# CONFIG_EFI_LOADER is not set diff --git a/lede/package/boot/uboot-mediatek/patches/100-21-mtd-spi-nor-add-more-flash-ids.patch b/lede/package/boot/uboot-mediatek/patches/100-18-mtd-spi-nor-add-more-flash-ids.patch similarity index 54% rename from lede/package/boot/uboot-mediatek/patches/100-21-mtd-spi-nor-add-more-flash-ids.patch rename to lede/package/boot/uboot-mediatek/patches/100-18-mtd-spi-nor-add-more-flash-ids.patch index 15e943b1c0..69e941ead0 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-21-mtd-spi-nor-add-more-flash-ids.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-18-mtd-spi-nor-add-more-flash-ids.patch @@ -1,19 +1,19 @@ -From a2df2df6fd1aec32572c7b30ccf5a184ec1763fd Mon Sep 17 00:00:00 2001 +From 56d3fcf9efe23f8334741d914f33c9351016d231 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Wed, 27 Jul 2022 16:32:17 +0800 -Subject: [PATCH 56/71] mtd: spi-nor: add more flash ids +Subject: [PATCH 18/30] mtd: spi-nor: add more flash ids Add more spi-nor flash ids Signed-off-by: Weijie Gao --- drivers/mtd/spi/spi-nor-core.c | 1 + - drivers/mtd/spi/spi-nor-ids.c | 23 ++++++++++++++++++++++- - 2 files changed, 23 insertions(+), 1 deletion(-) + drivers/mtd/spi/spi-nor-ids.c | 27 ++++++++++++++++++++++++++- + 2 files changed, 27 insertions(+), 1 deletion(-) --- a/drivers/mtd/spi/spi-nor-core.c +++ b/drivers/mtd/spi/spi-nor-core.c -@@ -674,6 +674,7 @@ static int set_4byte(struct spi_nor *nor +@@ -758,6 +758,7 @@ static int set_4byte(struct spi_nor *nor case SNOR_MFR_ISSI: case SNOR_MFR_MACRONIX: case SNOR_MFR_WINBOND: @@ -23,17 +23,19 @@ Signed-off-by: Weijie Gao --- a/drivers/mtd/spi/spi-nor-ids.c +++ b/drivers/mtd/spi/spi-nor-ids.c -@@ -83,7 +83,8 @@ const struct flash_info spi_nor_ids[] = +@@ -83,7 +83,10 @@ const struct flash_info spi_nor_ids[] = { INFO("en25q32b", 0x1c3016, 0, 64 * 1024, 64, 0) }, { INFO("en25q64", 0x1c3017, 0, 64 * 1024, 128, SECT_4K) }, { INFO("en25q128b", 0x1c3018, 0, 64 * 1024, 256, 0) }, - { INFO("en25qh128", 0x1c7018, 0, 64 * 1024, 256, 0) }, + { INFO("en25qh128", 0x1c7018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, ++ { INFO("en25qx128a", 0x1c7118, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, + { INFO("en25qh256", 0x1c7019, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, ++ { INFO("en25qx256a", 0x1c7119, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, { INFO("en25s64", 0x1c3817, 0, 64 * 1024, 128, SECT_4K) }, #endif #ifdef CONFIG_SPI_FLASH_GIGADEVICE /* GIGADEVICE */ -@@ -149,6 +150,11 @@ const struct flash_info spi_nor_ids[] = +@@ -149,6 +152,11 @@ const struct flash_info spi_nor_ids[] = {INFO("gd55x02g", 0xc8481C, 0, 64 * 1024, 4096, SECT_4K | SPI_NOR_OCTAL_READ | SPI_NOR_4B_OPCODES)}, { @@ -45,7 +47,23 @@ Signed-off-by: Weijie Gao INFO("gd25lq128", 0xc86018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) -@@ -474,6 +480,16 @@ const struct flash_info spi_nor_ids[] = +@@ -257,6 +265,7 @@ const struct flash_info spi_nor_ids[] = + { INFO("mx25u3235f", 0xc22536, 0, 4 * 1024, 1024, SECT_4K) }, + { INFO("mx25u6435f", 0xc22537, 0, 64 * 1024, 128, SECT_4K) }, + { INFO("mx25l12805d", 0xc22018, 0, 64 * 1024, 256, SECT_4K) }, ++ { INFO("mx25l12833f", 0xc22018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { INFO("mx25u12835f", 0xc22538, 0, 64 * 1024, 256, SECT_4K) }, + { INFO("mx25u51245g", 0xc2253a, 0, 64 * 1024, 1024, SECT_4K | + SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) }, +@@ -265,6 +274,7 @@ const struct flash_info spi_nor_ids[] = + { INFO("mx25u25635f", 0xc22539, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_4B_OPCODES) }, + { INFO("mx25v8035f", 0xc22314, 0, 64 * 1024, 16, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { INFO("mx25r1635f", 0xc22815, 0, 64 * 1024, 32, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, ++ { INFO("mx25l25645g", 0xc22019, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, + { INFO("mx25l25655e", 0xc22619, 0, 64 * 1024, 512, 0) }, + { INFO("mx66l51235l", 0xc2201a, 0, 64 * 1024, 1024, SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) }, + { INFO("mx66u51235f", 0xc2253a, 0, 64 * 1024, 1024, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_4B_OPCODES) }, +@@ -525,6 +535,16 @@ const struct flash_info spi_nor_ids[] = SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, { @@ -62,7 +80,7 @@ Signed-off-by: Weijie Gao INFO("w25q128jw", 0xef8018, 0, 64 * 1024, 256, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ | SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) -@@ -523,6 +539,11 @@ const struct flash_info spi_nor_ids[] = +@@ -588,6 +608,11 @@ const struct flash_info spi_nor_ids[] = SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) }, { INFO("w25q256", 0xef4019, 0, 64 * 1024, 512, SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ) }, diff --git a/lede/package/boot/uboot-mediatek/patches/100-19-mtd-spi-nand-add-more-spi-nand-chips.patch b/lede/package/boot/uboot-mediatek/patches/100-19-mtd-spi-nand-add-more-spi-nand-chips.patch new file mode 100644 index 0000000000..496592f7d6 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/100-19-mtd-spi-nand-add-more-spi-nand-chips.patch @@ -0,0 +1,296 @@ +From 001ce4e53f197a358b4307d36cc6d5048fc59158 Mon Sep 17 00:00:00 2001 +From: Weijie Gao +Date: Wed, 27 Jul 2022 16:36:13 +0800 +Subject: [PATCH 19/30] mtd: spi-nand: add more spi-nand chips + +Support more spi-nand chips + +Signed-off-by: Weijie Gao +--- + drivers/mtd/nand/spi/Makefile | 1 + + drivers/mtd/nand/spi/core.c | 1 + + drivers/mtd/nand/spi/etron.c | 181 ++++++++++++++++++++++++++++++ + drivers/mtd/nand/spi/gigadevice.c | 38 +++++++ + drivers/mtd/nand/spi/winbond.c | 9 ++ + include/linux/mtd/spinand.h | 1 + + 6 files changed, 231 insertions(+) + create mode 100644 drivers/mtd/nand/spi/etron.c + +--- a/drivers/mtd/nand/spi/Makefile ++++ b/drivers/mtd/nand/spi/Makefile +@@ -2,4 +2,5 @@ + + spinand-objs := core.o esmt.o gigadevice.o macronix.o micron.o paragon.o + spinand-objs += toshiba.o winbond.o xtx.o ++spinand-objs += etron.o + obj-$(CONFIG_MTD_SPI_NAND) += spinand.o +--- a/drivers/mtd/nand/spi/core.c ++++ b/drivers/mtd/nand/spi/core.c +@@ -826,6 +826,7 @@ static const struct nand_ops spinand_ops + }; + + static const struct spinand_manufacturer *spinand_manufacturers[] = { ++ &etron_spinand_manufacturer, + &gigadevice_spinand_manufacturer, + ¯onix_spinand_manufacturer, + µn_spinand_manufacturer, +--- /dev/null ++++ b/drivers/mtd/nand/spi/etron.c +@@ -0,0 +1,181 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2020 Etron Technology, Inc. ++ * ++ */ ++#ifndef __UBOOT__ ++#include ++#include ++#include ++#endif ++#include ++#include ++ ++#define SPINAND_MFR_ETRON 0xD5 ++ ++#define STATUS_ECC_LIMIT_BITFLIPS (3 << 4) ++ ++static SPINAND_OP_VARIANTS(read_cache_variants, ++ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); ++ ++static SPINAND_OP_VARIANTS(write_cache_variants, ++ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), ++ SPINAND_PROG_LOAD(true, 0, NULL, 0)); ++ ++static SPINAND_OP_VARIANTS(update_cache_variants, ++ SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), ++ SPINAND_PROG_LOAD(false, 0, NULL, 0)); ++ ++static int etron_ooblayout_ecc(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ if (section > 3) ++ return -ERANGE; ++ ++ region->offset = (14 * section) + 72; ++ region->length = 14; ++ ++ return 0; ++} ++ ++static int etron_ooblayout_free(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ if (section > 3) ++ return -ERANGE; ++ ++ if (section) { ++ region->offset = 18 * section; ++ region->length = 18; ++ } else { ++ /* section 0 has one byte reserved for bad block mark */ ++ region->offset = 2; ++ region->length = 16; ++ } ++ return 0; ++} ++ ++static const struct mtd_ooblayout_ops etron_ooblayout = { ++ .ecc = etron_ooblayout_ecc, ++ .rfree = etron_ooblayout_free, ++}; ++ ++static int etron_ecc_get_status(struct spinand_device *spinand, ++ u8 status) ++{ ++ struct nand_device *nand = spinand_to_nand(spinand); ++ ++ switch (status & STATUS_ECC_MASK) { ++ case STATUS_ECC_NO_BITFLIPS: ++ return 0; ++ ++ case STATUS_ECC_UNCOR_ERROR: ++ return -EBADMSG; ++ ++ case STATUS_ECC_HAS_BITFLIPS: ++ return nand->eccreq.strength >> 1; ++ ++ case STATUS_ECC_LIMIT_BITFLIPS: ++ return nand->eccreq.strength; ++ ++ default: ++ break; ++ } ++ ++ return -EINVAL; ++} ++ ++static const struct spinand_info etron_spinand_table[] = { ++ /* EM73C 1Gb 3.3V */ ++ SPINAND_INFO("EM73C044VCF", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x25), ++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), ++ NAND_ECCREQ(4, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), ++ /* EM7xD 2Gb */ ++ SPINAND_INFO("EM73D044VCR", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x41), ++ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1), ++ NAND_ECCREQ(4, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), ++ SPINAND_INFO("EM73D044VCO", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x3A), ++ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), ++ NAND_ECCREQ(8, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), ++ SPINAND_INFO("EM78D044VCM", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x8E), ++ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), ++ NAND_ECCREQ(8, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), ++ /* EM7xE 4Gb */ ++ SPINAND_INFO("EM73E044VCE", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x3B), ++ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), ++ NAND_ECCREQ(8, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), ++ SPINAND_INFO("EM78E044VCD", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x8F), ++ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), ++ NAND_ECCREQ(8, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), ++ /* EM7xF044VCA 8Gb */ ++ SPINAND_INFO("EM73F044VCA", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x15), ++ NAND_MEMORG(1, 4096, 256, 64, 4096, 80, 1, 1, 1), ++ NAND_ECCREQ(8, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), ++ SPINAND_INFO("EM78F044VCA", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x8D), ++ NAND_MEMORG(1, 4096, 256, 64, 4096, 80, 1, 1, 1), ++ NAND_ECCREQ(8, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), ++}; ++ ++static const struct spinand_manufacturer_ops etron_spinand_manuf_ops = { ++}; ++ ++const struct spinand_manufacturer etron_spinand_manufacturer = { ++ .id = SPINAND_MFR_ETRON, ++ .name = "Etron", ++ .chips = etron_spinand_table, ++ .nchips = ARRAY_SIZE(etron_spinand_table), ++ .ops = &etron_spinand_manuf_ops, ++}; +--- a/drivers/mtd/nand/spi/gigadevice.c ++++ b/drivers/mtd/nand/spi/gigadevice.c +@@ -284,7 +284,45 @@ static int gd5fxgq4ufxxg_ecc_get_status( + return -EINVAL; + } + ++static int esmt_1_ooblayout_ecc(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ if (section > 3) ++ return -ERANGE; ++ ++ region->offset = (16 * section) + 8; ++ region->length = 8; ++ ++ return 0; ++} ++ ++static int esmt_1_ooblayout_free(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ if (section > 3) ++ return -ERANGE; ++ ++ region->offset = (16 * section) + 2; ++ region->length = 6; ++ ++ return 0; ++} ++ ++static const struct mtd_ooblayout_ops esmt_1_ooblayout = { ++ .ecc = esmt_1_ooblayout_ecc, ++ .rfree = esmt_1_ooblayout_free, ++}; ++ + static const struct spinand_info gigadevice_spinand_table[] = { ++ SPINAND_INFO("F50L1G41LB", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x01), ++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), ++ NAND_ECCREQ(8, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants_1gq5, ++ &write_cache_variants, ++ &update_cache_variants), ++ 0, ++ SPINAND_ECCINFO(&esmt_1_ooblayout, NULL)), + SPINAND_INFO("GD5F1GQ4xA", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xf1), + NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), +--- a/drivers/mtd/nand/spi/winbond.c ++++ b/drivers/mtd/nand/spi/winbond.c +@@ -167,6 +167,15 @@ static const struct spinand_info winbond + &update_cache_variants), + 0, + SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)), ++ SPINAND_INFO("W25N01KV", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xae, 0x21), ++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), ++ NAND_ECCREQ(4, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ 0, ++ SPINAND_ECCINFO(&w25n02kv_ooblayout, w25n02kv_ecc_get_status)), + SPINAND_INFO("W25N02KV", + SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x22), + NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), +--- a/include/linux/mtd/spinand.h ++++ b/include/linux/mtd/spinand.h +@@ -244,6 +244,7 @@ struct spinand_manufacturer { + }; + + /* SPI NAND manufacturers */ ++extern const struct spinand_manufacturer etron_spinand_manufacturer; + extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; + extern const struct spinand_manufacturer macronix_spinand_manufacturer; + extern const struct spinand_manufacturer micron_spinand_manufacturer; diff --git a/lede/package/boot/uboot-mediatek/patches/100-20-mtd-spi-nand-add-support-for-FudanMicro-chips.patch b/lede/package/boot/uboot-mediatek/patches/100-20-mtd-spi-nand-add-support-for-FudanMicro-chips.patch new file mode 100644 index 0000000000..876427ba35 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/100-20-mtd-spi-nand-add-support-for-FudanMicro-chips.patch @@ -0,0 +1,154 @@ +From 83cd1b0984bf53da247eb8fca1119668eb0ba7ea Mon Sep 17 00:00:00 2001 +From: Weijie Gao +Date: Wed, 15 Jan 2025 14:41:03 +0800 +Subject: [PATCH 20/30] mtd: spi-nand: add support for FudanMicro chips + +Sdd support for FudanMicro SPI-NAND flashes + +Signed-off-by: Weijie Gao +--- + drivers/mtd/nand/spi/Makefile | 1 + + drivers/mtd/nand/spi/core.c | 1 + + drivers/mtd/nand/spi/fudanmicro.c | 107 ++++++++++++++++++++++++++++++ + include/linux/mtd/spinand.h | 1 + + 4 files changed, 110 insertions(+) + create mode 100644 drivers/mtd/nand/spi/fudanmicro.c + +--- a/drivers/mtd/nand/spi/Makefile ++++ b/drivers/mtd/nand/spi/Makefile +@@ -3,4 +3,5 @@ + spinand-objs := core.o esmt.o gigadevice.o macronix.o micron.o paragon.o + spinand-objs += toshiba.o winbond.o xtx.o + spinand-objs += etron.o ++spinand-objs += fudanmicro.o + obj-$(CONFIG_MTD_SPI_NAND) += spinand.o +--- a/drivers/mtd/nand/spi/core.c ++++ b/drivers/mtd/nand/spi/core.c +@@ -827,6 +827,7 @@ static const struct nand_ops spinand_ops + + static const struct spinand_manufacturer *spinand_manufacturers[] = { + &etron_spinand_manufacturer, ++ &fudan_spinand_manufacturer, + &gigadevice_spinand_manufacturer, + ¯onix_spinand_manufacturer, + µn_spinand_manufacturer, +--- /dev/null ++++ b/drivers/mtd/nand/spi/fudanmicro.c +@@ -0,0 +1,107 @@ ++#ifndef __UBOOT__ ++#include ++#include ++#include ++#endif ++#include ++#include ++ ++#define SPINAND_MFR_FUDAN 0xA1 ++ ++#define FM25S01B_STATUS_ECC_MASK (7 << 4) ++#define STATUS_ECC_1_3_BITFLIPS (1 << 4) ++#define STATUS_ECC_4_6_BITFLIPS (3 << 4) ++#define STATUS_ECC_7_8_BITFLIPS (5 << 4) ++ ++static SPINAND_OP_VARIANTS(read_cache_variants, ++ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); ++ ++static SPINAND_OP_VARIANTS(write_cache_variants, ++ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), ++ SPINAND_PROG_LOAD(true, 0, NULL, 0)); ++ ++static SPINAND_OP_VARIANTS(update_cache_variants, ++ SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), ++ SPINAND_PROG_LOAD(false, 0, NULL, 0)); ++ ++static int fm25s01b_ooblayout_ecc(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ if (section) ++ return -ERANGE; ++ ++ region->offset = 64; ++ region->length = 64; ++ ++ return 0; ++} ++ ++static int fm25s01b_ooblayout_free(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ if (section > 3) ++ return -ERANGE; ++ ++ region->offset = (16 * section) + 4; ++ region->length = 12; ++ ++ return 0; ++} ++ ++static const struct mtd_ooblayout_ops fm25s01b_ooblayout = { ++ .ecc = fm25s01b_ooblayout_ecc, ++ .rfree = fm25s01b_ooblayout_free, ++}; ++ ++static int fm25s01b_ecc_get_status(struct spinand_device *spinand, ++ u8 status) ++{ ++ switch (status & FM25S01B_STATUS_ECC_MASK) { ++ case STATUS_ECC_NO_BITFLIPS: ++ return 0; ++ ++ case STATUS_ECC_UNCOR_ERROR: ++ return -EBADMSG; ++ ++ case STATUS_ECC_1_3_BITFLIPS: ++ return 3; ++ ++ case STATUS_ECC_4_6_BITFLIPS: ++ return 6; ++ ++ case STATUS_ECC_7_8_BITFLIPS: ++ return 8; ++ ++ default: ++ break; ++ } ++ ++ return -EINVAL; ++} ++ ++static const struct spinand_info fudan_spinand_table[] = { ++ SPINAND_INFO("FM25s01B", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xD4), ++ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), ++ NAND_ECCREQ(8, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&fm25s01b_ooblayout, ++ fm25s01b_ecc_get_status)), ++}; ++ ++static const struct spinand_manufacturer_ops fudan_spinand_manuf_ops = { ++}; ++ ++const struct spinand_manufacturer fudan_spinand_manufacturer = { ++ .id = SPINAND_MFR_FUDAN, ++ .name = "FUDAN Micron", ++ .chips = fudan_spinand_table, ++ .nchips = ARRAY_SIZE(fudan_spinand_table), ++ .ops = &fudan_spinand_manuf_ops, ++}; +--- a/include/linux/mtd/spinand.h ++++ b/include/linux/mtd/spinand.h +@@ -245,6 +245,7 @@ struct spinand_manufacturer { + + /* SPI NAND manufacturers */ + extern const struct spinand_manufacturer etron_spinand_manufacturer; ++extern const struct spinand_manufacturer fudan_spinand_manufacturer; + extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; + extern const struct spinand_manufacturer macronix_spinand_manufacturer; + extern const struct spinand_manufacturer micron_spinand_manufacturer; diff --git a/lede/package/boot/uboot-mediatek/patches/100-23-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch b/lede/package/boot/uboot-mediatek/patches/100-22-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch similarity index 87% rename from lede/package/boot/uboot-mediatek/patches/100-23-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch rename to lede/package/boot/uboot-mediatek/patches/100-22-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch index 5c90e24ebf..74474392a3 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-23-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-22-mmc-mtk-sd-add-support-to-display-verbose-error-log.patch @@ -1,7 +1,7 @@ -From 793bed29e78cc54d989333d756fef51efaca4e56 Mon Sep 17 00:00:00 2001 +From deccfea9a0f0aa889933073323764593fc2298f5 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Tue, 26 Jul 2022 09:29:18 +0800 -Subject: [PATCH 58/71] mmc: mtk-sd: add support to display verbose error log +Subject: [PATCH 22/30] mmc: mtk-sd: add support to display verbose error log Add an option to enable debug log, and also display verbose error log for both command and data. @@ -15,7 +15,7 @@ Signed-off-by: Weijie Gao --- a/drivers/mmc/Kconfig +++ b/drivers/mmc/Kconfig -@@ -815,6 +815,14 @@ config MMC_MTK +@@ -862,6 +862,14 @@ config MMC_MTK This is needed if support for any SD/SDIO/MMC devices is required. If unsure, say N. @@ -32,7 +32,7 @@ Signed-off-by: Weijie Gao config FSL_SDHC_V2_3 --- a/drivers/mmc/Makefile +++ b/drivers/mmc/Makefile -@@ -82,3 +82,7 @@ obj-$(CONFIG_RENESAS_SDHI) += tmio-comm +@@ -84,3 +84,7 @@ obj-$(CONFIG_RENESAS_SDHI) += tmio-comm obj-$(CONFIG_MMC_BCM2835) += bcm2835_sdhost.o obj-$(CONFIG_MMC_MTK) += mtk-sd.o obj-$(CONFIG_MMC_SDHCI_F_SDH30) += f_sdh30.o @@ -42,7 +42,7 @@ Signed-off-by: Weijie Gao +endif --- a/drivers/mmc/mtk-sd.c +++ b/drivers/mmc/mtk-sd.c -@@ -779,18 +779,24 @@ static int msdc_ops_send_cmd(struct udev +@@ -784,18 +784,24 @@ static int msdc_ops_send_cmd(struct udev if (cmd_ret && !(cmd_ret == -EIO && (cmd->cmdidx == MMC_CMD_SEND_TUNING_BLOCK || diff --git a/lede/package/boot/uboot-mediatek/patches/100-22-mtd-spi-nand-backport-from-upstream-kernel.patch b/lede/package/boot/uboot-mediatek/patches/100-22-mtd-spi-nand-backport-from-upstream-kernel.patch deleted file mode 100644 index 20489d8726..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/100-22-mtd-spi-nand-backport-from-upstream-kernel.patch +++ /dev/null @@ -1,549 +0,0 @@ -From 8d0665327819c41fce2c8d50f19c967b22eae564 Mon Sep 17 00:00:00 2001 -From: Weijie Gao -Date: Wed, 27 Jul 2022 16:36:13 +0800 -Subject: [PATCH 57/71] mtd: spi-nand: backport from upstream kernel - -Backport new features from upstream kernel - -Signed-off-by: Weijie Gao ---- - drivers/mtd/nand/spi/Kconfig | 1 + - drivers/mtd/nand/spi/Makefile | 2 +- - drivers/mtd/nand/spi/core.c | 102 ++++++---- - drivers/mtd/nand/spi/etron.c | 181 +++++++++++++++++ - drivers/mtd/nand/spi/gigadevice.c | 322 ++++++++++++++++++++++++++---- - drivers/mtd/nand/spi/macronix.c | 173 +++++++++++++--- - drivers/mtd/nand/spi/micron.c | 50 ++--- - drivers/mtd/nand/spi/toshiba.c | 66 +++--- - drivers/mtd/nand/spi/winbond.c | 164 ++++++++++++--- - include/linux/mtd/spinand.h | 87 +++++--- - 10 files changed, 923 insertions(+), 225 deletions(-) - create mode 100644 drivers/mtd/nand/spi/etron.c - ---- a/drivers/mtd/nand/spi/Makefile -+++ b/drivers/mtd/nand/spi/Makefile -@@ -1,4 +1,4 @@ - # SPDX-License-Identifier: GPL-2.0 - --spinand-objs := core.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o -+spinand-objs := core.o etron.o gigadevice.o macronix.o micron.o paragon.o toshiba.o winbond.o - obj-$(CONFIG_MTD_SPI_NAND) += spinand.o ---- a/drivers/mtd/nand/spi/core.c -+++ b/drivers/mtd/nand/spi/core.c -@@ -822,6 +822,7 @@ static const struct nand_ops spinand_ops - }; - - static const struct spinand_manufacturer *spinand_manufacturers[] = { -+ &etron_spinand_manufacturer, - &gigadevice_spinand_manufacturer, - ¯onix_spinand_manufacturer, - µn_spinand_manufacturer, ---- /dev/null -+++ b/drivers/mtd/nand/spi/etron.c -@@ -0,0 +1,181 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (c) 2020 Etron Technology, Inc. -+ * -+ */ -+#ifndef __UBOOT__ -+#include -+#include -+#include -+#endif -+#include -+#include -+ -+#define SPINAND_MFR_ETRON 0xD5 -+ -+#define STATUS_ECC_LIMIT_BITFLIPS (3 << 4) -+ -+static SPINAND_OP_VARIANTS(read_cache_variants, -+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(write_cache_variants, -+ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), -+ SPINAND_PROG_LOAD(true, 0, NULL, 0)); -+ -+static SPINAND_OP_VARIANTS(update_cache_variants, -+ SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), -+ SPINAND_PROG_LOAD(false, 0, NULL, 0)); -+ -+static int etron_ooblayout_ecc(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ region->offset = (14 * section) + 72; -+ region->length = 14; -+ -+ return 0; -+} -+ -+static int etron_ooblayout_free(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ if (section) { -+ region->offset = 18 * section; -+ region->length = 18; -+ } else { -+ /* section 0 has one byte reserved for bad block mark */ -+ region->offset = 2; -+ region->length = 16; -+ } -+ return 0; -+} -+ -+static const struct mtd_ooblayout_ops etron_ooblayout = { -+ .ecc = etron_ooblayout_ecc, -+ .rfree = etron_ooblayout_free, -+}; -+ -+static int etron_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ struct nand_device *nand = spinand_to_nand(spinand); -+ -+ switch (status & STATUS_ECC_MASK) { -+ case STATUS_ECC_NO_BITFLIPS: -+ return 0; -+ -+ case STATUS_ECC_UNCOR_ERROR: -+ return -EBADMSG; -+ -+ case STATUS_ECC_HAS_BITFLIPS: -+ return nand->eccreq.strength >> 1; -+ -+ case STATUS_ECC_LIMIT_BITFLIPS: -+ return nand->eccreq.strength; -+ -+ default: -+ break; -+ } -+ -+ return -EINVAL; -+} -+ -+static const struct spinand_info etron_spinand_table[] = { -+ /* EM73C 1Gb 3.3V */ -+ SPINAND_INFO("EM73C044VCF", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x25), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), -+ /* EM7xD 2Gb */ -+ SPINAND_INFO("EM73D044VCR", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x41), -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), -+ SPINAND_INFO("EM73D044VCO", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x3A), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), -+ SPINAND_INFO("EM78D044VCM", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x8E), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), -+ /* EM7xE 4Gb */ -+ SPINAND_INFO("EM73E044VCE", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x3B), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), -+ SPINAND_INFO("EM78E044VCD", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x8F), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), -+ /* EM7xF044VCA 8Gb */ -+ SPINAND_INFO("EM73F044VCA", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x15), -+ NAND_MEMORG(1, 4096, 256, 64, 4096, 80, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), -+ SPINAND_INFO("EM78F044VCA", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x8D), -+ NAND_MEMORG(1, 4096, 256, 64, 4096, 80, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&etron_ooblayout, etron_ecc_get_status)), -+}; -+ -+static const struct spinand_manufacturer_ops etron_spinand_manuf_ops = { -+}; -+ -+const struct spinand_manufacturer etron_spinand_manufacturer = { -+ .id = SPINAND_MFR_ETRON, -+ .name = "Etron", -+ .chips = etron_spinand_table, -+ .nchips = ARRAY_SIZE(etron_spinand_table), -+ .ops = &etron_spinand_manuf_ops, -+}; ---- a/drivers/mtd/nand/spi/gigadevice.c -+++ b/drivers/mtd/nand/spi/gigadevice.c -@@ -43,6 +43,24 @@ static SPINAND_OP_VARIANTS(read_cache_va - SPINAND_PAGE_READ_FROM_CACHE_OP_3A(true, 0, 1, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_OP_3A(false, 0, 0, NULL, 0)); - -+/* Q5 1Gb */ -+static SPINAND_OP_VARIANTS(dummy2_read_cache_variants, -+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); -+ -+/* Q5 2Gb & 4Gb */ -+static SPINAND_OP_VARIANTS(dummy4_read_cache_variants, -+ SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 4, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_DUALIO_OP(0, 2, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), -+ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); -+ - static SPINAND_OP_VARIANTS(write_cache_variants, - SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), - SPINAND_PROG_LOAD(true, 0, NULL, 0)); -@@ -268,7 +286,45 @@ static int gd5fxgq4ufxxg_ecc_get_status( - return -EINVAL; - } - -+static int esmt_1_ooblayout_ecc(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ region->offset = (16 * section) + 8; -+ region->length = 8; -+ -+ return 0; -+} -+ -+static int esmt_1_ooblayout_free(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ region->offset = (16 * section) + 2; -+ region->length = 6; -+ -+ return 0; -+} -+ -+static const struct mtd_ooblayout_ops esmt_1_ooblayout = { -+ .ecc = esmt_1_ooblayout_ecc, -+ .rfree = esmt_1_ooblayout_free, -+ }; -+ - static const struct spinand_info gigadevice_spinand_table[] = { -+ SPINAND_INFO("F50L1G41LB", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x01), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&dummy2_read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&esmt_1_ooblayout, NULL)), - SPINAND_INFO("GD5F1GQ4xA", - SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0xf1), - NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), -@@ -349,6 +405,87 @@ static const struct spinand_info gigadev - SPINAND_HAS_QE_BIT, - SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, - gd5fxgq5xexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F2GQ5UExxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x52), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq5xexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F4GQ6UExxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x55), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq5xexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GM7UExxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x91), -+ NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F2GM7UExxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x92), -+ NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F4GM8UExxG", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x95), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 1, 1, 1), -+ NAND_ECCREQ(8, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq4uexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F1GQ5UExxH", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x31), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&dummy2_read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq5xexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F2GQ5UExxH", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x32), -+ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq5xexxg_ecc_get_status)), -+ SPINAND_INFO("GD5F4GQ6UExxH", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x35), -+ NAND_MEMORG(1, 2048, 64, 64, 4096, 40, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&dummy4_read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ SPINAND_HAS_QE_BIT, -+ SPINAND_ECCINFO(&gd5fxgqx_variant2_ooblayout, -+ gd5fxgq5xexxg_ecc_get_status)), -+ - }; - - static const struct spinand_manufacturer_ops gigadevice_spinand_manuf_ops = { ---- a/drivers/mtd/nand/spi/winbond.c -+++ b/drivers/mtd/nand/spi/winbond.c -@@ -18,6 +18,23 @@ - - #define WINBOND_CFG_BUF_READ BIT(3) - -+#define W25N02_N04KV_STATUS_ECC_MASK (3 << 4) -+#define W25N02_N04KV_STATUS_ECC_NO_BITFLIPS (0 << 4) -+#define W25N02_N04KV_STATUS_ECC_1_4_BITFLIPS (1 << 4) -+#define W25N02_N04KV_STATUS_ECC_5_8_BITFLIPS (3 << 4) -+#define W25N02_N04KV_STATUS_ECC_UNCOR_ERROR (2 << 4) -+ -+#define W25N01_M02GV_STATUS_ECC_MASK (3 << 4) -+#define W25N01_M02GV_STATUS_ECC_NO_BITFLIPS (0 << 4) -+#define W25N01_M02GV_STATUS_ECC_1_BITFLIPS (1 << 4) -+#define W25N01_M02GV_STATUS_ECC_UNCOR_ERROR (2 << 4) -+ -+#define W25N01KV_STATUS_ECC_MASK (3 << 4) -+#define W25N01KV_STATUS_ECC_NO_BITFLIPS (0 << 4) -+#define W25N01KV_STATUS_ECC_1_3_BITFLIPS (1 << 4) -+#define W25N01KV_STATUS_ECC_4_BITFLIPS (3 << 4) -+#define W25N01KV_STATUS_ECC_UNCOR_ERROR (2 << 4) -+ - static SPINAND_OP_VARIANTS(read_cache_variants, - SPINAND_PAGE_READ_FROM_CACHE_QUADIO_OP(0, 2, NULL, 0), - SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), -@@ -34,6 +51,35 @@ static SPINAND_OP_VARIANTS(update_cache_ - SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), - SPINAND_PROG_LOAD(false, 0, NULL, 0)); - -+static int w25n02kv_n04kv_ooblayout_ecc(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ region->offset = (16 * section) + 64; -+ region->length = 16; -+ -+ return 0; -+} -+ -+static int w25n02kv_n04kv_ooblayout_free(struct mtd_info *mtd, int section, -+ struct mtd_oob_region *region) -+{ -+ if (section > 3) -+ return -ERANGE; -+ -+ region->offset = (16 * section) + 2; -+ region->length = 14; -+ -+ return 0; -+} -+ -+static const struct mtd_ooblayout_ops w25n02kv_n04kv_ooblayout = { -+ .ecc = w25n02kv_n04kv_ooblayout_ecc, -+ .rfree = w25n02kv_n04kv_ooblayout_free, -+}; -+ - static int w25m02gv_ooblayout_ecc(struct mtd_info *mtd, int section, - struct mtd_oob_region *region) - { -@@ -106,6 +152,58 @@ static const struct mtd_ooblayout_ops w2 - .rfree = w25n02kv_ooblayout_free, - }; - -+static int w25n01kv_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ switch (status & W25N01KV_STATUS_ECC_MASK) { -+ case W25N01KV_STATUS_ECC_NO_BITFLIPS: -+ return 0; -+ -+ case W25N01KV_STATUS_ECC_1_3_BITFLIPS: -+ return 3; -+ -+ case W25N01KV_STATUS_ECC_4_BITFLIPS: -+ return 4; -+ -+ case W25N01KV_STATUS_ECC_UNCOR_ERROR: -+ return -EBADMSG; -+ -+ default: -+ break; -+ } -+ -+ return -EINVAL; -+} -+ -+static int w25n02kv_n04kv_ecc_get_status(struct spinand_device *spinand, -+ u8 status) -+{ -+ switch (status & W25N02_N04KV_STATUS_ECC_MASK) { -+ case W25N02_N04KV_STATUS_ECC_NO_BITFLIPS: -+ return 0; -+ -+ case W25N02_N04KV_STATUS_ECC_1_4_BITFLIPS: -+ return 3; -+ -+ case W25N02_N04KV_STATUS_ECC_5_8_BITFLIPS: -+ return 4; -+ -+ /* W25N02_N04KV_use internal 8bit ECC algorithm. -+ * But the ECC strength is 4 bit requried. -+ * Return 3 if the bit bit flip count less than 5. -+ * Return 4 if the bit bit flip count more than 5 to 8. -+ */ -+ -+ case W25N02_N04KV_STATUS_ECC_UNCOR_ERROR: -+ return -EBADMSG; -+ -+ default: -+ break; -+ } -+ -+ return -EINVAL; -+} -+ - static int w25n02kv_ecc_get_status(struct spinand_device *spinand, - u8 status) - { -@@ -163,6 +261,15 @@ static const struct spinand_info winbond - &update_cache_variants), - 0, - SPINAND_ECCINFO(&w25m02gv_ooblayout, NULL)), -+ SPINAND_INFO("W25N01KV", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xae, 0x21), -+ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&w25n02kv_n04kv_ooblayout, w25n01kv_ecc_get_status)), - SPINAND_INFO("W25N02KV", - SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x22), - NAND_MEMORG(1, 2048, 128, 64, 2048, 40, 1, 1, 1), -@@ -172,6 +279,16 @@ static const struct spinand_info winbond - &update_cache_variants), - 0, - SPINAND_ECCINFO(&w25n02kv_ooblayout, w25n02kv_ecc_get_status)), -+ SPINAND_INFO("W25N04KV", -+ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xaa, 0x23), -+ NAND_MEMORG(1, 2048, 128, 64, 4096, 80, 2, 1, 1), -+ NAND_ECCREQ(4, 512), -+ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, -+ &write_cache_variants, -+ &update_cache_variants), -+ 0, -+ SPINAND_ECCINFO(&w25n02kv_n04kv_ooblayout, -+ w25n02kv_n04kv_ecc_get_status)), - }; - - static int winbond_spinand_init(struct spinand_device *spinand) ---- a/include/linux/mtd/spinand.h -+++ b/include/linux/mtd/spinand.h -@@ -245,6 +245,7 @@ struct spinand_manufacturer { - }; - - /* SPI NAND manufacturers */ -+extern const struct spinand_manufacturer etron_spinand_manufacturer; - extern const struct spinand_manufacturer gigadevice_spinand_manufacturer; - extern const struct spinand_manufacturer macronix_spinand_manufacturer; - extern const struct spinand_manufacturer micron_spinand_manufacturer; diff --git a/lede/package/boot/uboot-mediatek/patches/100-24-cmd-ubi-make-volume-find-create-remove-APIs-public.patch b/lede/package/boot/uboot-mediatek/patches/100-23-cmd-ubi-make-volume-find-create-remove-APIs-public.patch similarity index 80% rename from lede/package/boot/uboot-mediatek/patches/100-24-cmd-ubi-make-volume-find-create-remove-APIs-public.patch rename to lede/package/boot/uboot-mediatek/patches/100-23-cmd-ubi-make-volume-find-create-remove-APIs-public.patch index ed74eab1e4..7e1109f4a0 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-24-cmd-ubi-make-volume-find-create-remove-APIs-public.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-23-cmd-ubi-make-volume-find-create-remove-APIs-public.patch @@ -1,7 +1,7 @@ -From dd66fc817f7ab7a4fcab9836a9251a8f64f329df Mon Sep 17 00:00:00 2001 +From 3873a7f91bdfaa918b1593196df1da2de41662f4 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 16:58:36 +0800 -Subject: [PATCH 59/71] cmd: ubi: make volume find/create/remove APIs public +Subject: [PATCH 23/30] cmd: ubi: make volume find/create/remove APIs public Export ubi_create_vol/ubi_find_volume/ubi_remove_vol to public so that they can be used by other programs. @@ -32,7 +32,7 @@ Signed-off-by: Weijie Gao -static struct ubi_volume *ubi_find_volume(char *volume) +struct ubi_volume *ubi_find_volume(char *volume) { - struct ubi_volume *vol = NULL; + struct ubi_volume *vol; int i; @@ -262,7 +262,7 @@ static struct ubi_volume *ubi_find_volum return NULL; @@ -45,10 +45,10 @@ Signed-off-by: Weijie Gao struct ubi_volume *vol; --- a/include/ubi_uboot.h +++ b/include/ubi_uboot.h -@@ -51,6 +51,10 @@ extern void ubi_exit(void); +@@ -50,6 +50,10 @@ extern void ubi_exit(void); extern int ubi_part(char *part_name, const char *vid_header_offset); - extern int ubi_volume_write(char *volume, void *buf, size_t size); - extern int ubi_volume_read(char *volume, char *buf, size_t size); + extern int ubi_volume_write(char *volume, void *buf, loff_t offset, size_t size); + extern int ubi_volume_read(char *volume, char *buf, loff_t offset, size_t size); +extern int ubi_create_vol(char *volume, int64_t size, int dynamic, int vol_id, + bool skipcheck); +extern struct ubi_volume *ubi_find_volume(char *volume); diff --git a/lede/package/boot/uboot-mediatek/patches/100-25-cmd-ubi-allow-creating-volume-with-all-free-spaces.patch b/lede/package/boot/uboot-mediatek/patches/100-24-cmd-ubi-allow-creating-volume-with-all-free-spaces.patch similarity index 82% rename from lede/package/boot/uboot-mediatek/patches/100-25-cmd-ubi-allow-creating-volume-with-all-free-spaces.patch rename to lede/package/boot/uboot-mediatek/patches/100-24-cmd-ubi-allow-creating-volume-with-all-free-spaces.patch index d023b004f7..51f459147b 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-25-cmd-ubi-allow-creating-volume-with-all-free-spaces.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-24-cmd-ubi-allow-creating-volume-with-all-free-spaces.patch @@ -1,7 +1,7 @@ -From f6a4130959af1e6d13d616203e42ed3c894666ad Mon Sep 17 00:00:00 2001 +From 98ac40f08a59a18198a676a5419bdc72d484c150 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 17:00:00 +0800 -Subject: [PATCH 60/71] cmd: ubi: allow creating volume with all free spaces +Subject: [PATCH 24/30] cmd: ubi: allow creating volume with all free spaces Allow creating volume with all free spaces by giving a negative size value. diff --git a/lede/package/boot/uboot-mediatek/patches/100-26-env-ubi-add-support-to-create-environment-volume-if-.patch b/lede/package/boot/uboot-mediatek/patches/100-25-env-ubi-add-support-to-create-environment-volume-if-.patch similarity index 76% rename from lede/package/boot/uboot-mediatek/patches/100-26-env-ubi-add-support-to-create-environment-volume-if-.patch rename to lede/package/boot/uboot-mediatek/patches/100-25-env-ubi-add-support-to-create-environment-volume-if-.patch index fb8d15ddf9..ea05f783a7 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-26-env-ubi-add-support-to-create-environment-volume-if-.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-25-env-ubi-add-support-to-create-environment-volume-if-.patch @@ -1,7 +1,7 @@ -From fc0c70a7c6a088072d0c77e5a59d5e9b7754c6db Mon Sep 17 00:00:00 2001 +From e1ea321b028c2af81770c55aa5f1f319228e9a39 Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 17:01:20 +0800 -Subject: [PATCH 61/71] env: ubi: add support to create environment volume if +Subject: [PATCH 25/30] env: ubi: add support to create environment volume if it does not exist Add an option to allow environment volume being auto created if not exist. @@ -14,7 +14,7 @@ Signed-off-by: Weijie Gao --- a/env/Kconfig +++ b/env/Kconfig -@@ -689,6 +689,12 @@ config ENV_UBI_VOLUME_REDUND +@@ -703,6 +703,12 @@ config ENV_UBI_VOLUME_REDUND help Name of the redundant volume that you want to store the environment in. @@ -29,8 +29,8 @@ Signed-off-by: Weijie Gao depends on ENV_IS_IN_UBI --- a/env/ubi.c +++ b/env/ubi.c -@@ -106,6 +106,18 @@ static int env_ubi_save(void) - #endif /* CONFIG_SYS_REDUNDAND_ENVIRONMENT */ +@@ -105,6 +105,18 @@ static int env_ubi_save(void) + #endif /* CONFIG_ENV_REDUNDANT */ #endif /* CONFIG_CMD_SAVEENV */ +int __weak env_ubi_volume_create(const char *volume) @@ -45,10 +45,10 @@ Signed-off-by: Weijie Gao + UBI_VOL_NUM_AUTO, false); +} + - #ifdef CONFIG_SYS_REDUNDAND_ENVIRONMENT + #ifdef CONFIG_ENV_REDUNDANT static int env_ubi_load(void) { -@@ -135,6 +147,11 @@ static int env_ubi_load(void) +@@ -134,6 +146,11 @@ static int env_ubi_load(void) return -EIO; } @@ -57,16 +57,16 @@ Signed-off-by: Weijie Gao + env_ubi_volume_create(CONFIG_ENV_UBI_VOLUME_REDUND); + } + - read1_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1, + read1_fail = ubi_volume_read(CONFIG_ENV_UBI_VOLUME, (void *)tmp_env1, 0, CONFIG_ENV_SIZE); if (read1_fail) -@@ -172,6 +189,9 @@ static int env_ubi_load(void) +@@ -171,6 +188,9 @@ static int env_ubi_load(void) return -EIO; } + if (IS_ENABLED(CONFIG_ENV_UBI_VOLUME_CREATE)) + env_ubi_volume_create(CONFIG_ENV_UBI_VOLUME); + - if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, CONFIG_ENV_SIZE)) { + if (ubi_volume_read(CONFIG_ENV_UBI_VOLUME, buf, 0, CONFIG_ENV_SIZE)) { printf("\n** Unable to read env from %s:%s **\n", CONFIG_ENV_UBI_PART, CONFIG_ENV_UBI_VOLUME); diff --git a/lede/package/boot/uboot-mediatek/patches/100-27-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch b/lede/package/boot/uboot-mediatek/patches/100-26-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch similarity index 92% rename from lede/package/boot/uboot-mediatek/patches/100-27-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch rename to lede/package/boot/uboot-mediatek/patches/100-26-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch index 9c83e6cc25..0740c1df19 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-27-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch +++ b/lede/package/boot/uboot-mediatek/patches/100-26-mtd-ubi-add-support-for-UBI-end-of-filesystem-marker.patch @@ -1,7 +1,7 @@ -From 189a2fe96931ef3ea0e187c8e9bfa589c2a0ae10 Mon Sep 17 00:00:00 2001 +From 501b4d1a43ce6bce4e8fa07ba164af1eec05c8be Mon Sep 17 00:00:00 2001 From: Weijie Gao Date: Mon, 25 Jul 2022 17:24:56 +0800 -Subject: [PATCH 62/71] mtd: ubi: add support for UBI end-of-filesystem marker +Subject: [PATCH 26/30] mtd: ubi: add support for UBI end-of-filesystem marker used by OpenWrt Add support for UBI end-of-filesystem marker used by OpenWrt to allow diff --git a/lede/package/boot/uboot-mediatek/patches/101-01-mtd-spinand-add-support-for-FORESEE-F35SQA002G.patch b/lede/package/boot/uboot-mediatek/patches/101-01-mtd-spinand-add-support-for-FORESEE-F35SQA002G.patch new file mode 100644 index 0000000000..64c9fd3382 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/101-01-mtd-spinand-add-support-for-FORESEE-F35SQA002G.patch @@ -0,0 +1,148 @@ +From 49c8e854869d673df8452f24dfa8989cd0f615a8 Mon Sep 17 00:00:00 2001 +From: Martin Kurbanov +Date: Mon, 2 Oct 2023 17:04:58 +0300 +Subject: [PATCH] mtd: spinand: add support for FORESEE F35SQA002G + +Add support for FORESEE F35SQA002G SPI NAND. +Datasheet: + https://www.longsys.com/uploads/LM-00006FORESEEF35SQA002GDatasheet_1650183701.pdf + +Signed-off-by: Martin Kurbanov +Signed-off-by: Miquel Raynal +Link: https://lore.kernel.org/linux-mtd/20231002140458.147605-1-mmkurbanov@salutedevices.com +--- + drivers/mtd/nand/spi/Makefile | 2 +- + drivers/mtd/nand/spi/core.c | 1 + + drivers/mtd/nand/spi/foresee.c | 95 ++++++++++++++++++++++++++++++++++ + include/linux/mtd/spinand.h | 1 + + 4 files changed, 98 insertions(+), 1 deletion(-) + create mode 100644 drivers/mtd/nand/spi/foresee.c + +--- a/drivers/mtd/nand/spi/Makefile ++++ b/drivers/mtd/nand/spi/Makefile +@@ -1,6 +1,6 @@ + # SPDX-License-Identifier: GPL-2.0 + +-spinand-objs := core.o esmt.o gigadevice.o macronix.o micron.o paragon.o ++spinand-objs := core.o esmt.o foresee.o gigadevice.o macronix.o micron.o paragon.o + spinand-objs += toshiba.o winbond.o xtx.o + spinand-objs += etron.o + spinand-objs += fudanmicro.o +--- a/drivers/mtd/nand/spi/core.c ++++ b/drivers/mtd/nand/spi/core.c +@@ -895,6 +895,7 @@ static const struct spinand_manufacturer + &toshiba_spinand_manufacturer, + &winbond_spinand_manufacturer, + &esmt_c8_spinand_manufacturer, ++ &foresee_spinand_manufacturer, + &xtx_spinand_manufacturer, + }; + +--- /dev/null ++++ b/drivers/mtd/nand/spi/foresee.c +@@ -0,0 +1,95 @@ ++// SPDX-License-Identifier: (GPL-2.0+ OR MIT) ++/* ++ * Copyright (c) 2023, SberDevices. All Rights Reserved. ++ * ++ * Author: Martin Kurbanov ++ */ ++ ++#ifndef __UBOOT__ ++#include ++#include ++#endif ++#include ++ ++#define SPINAND_MFR_FORESEE 0xCD ++ ++static SPINAND_OP_VARIANTS(read_cache_variants, ++ SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_X2_OP(0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_OP(true, 0, 1, NULL, 0), ++ SPINAND_PAGE_READ_FROM_CACHE_OP(false, 0, 1, NULL, 0)); ++ ++static SPINAND_OP_VARIANTS(write_cache_variants, ++ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), ++ SPINAND_PROG_LOAD(true, 0, NULL, 0)); ++ ++static SPINAND_OP_VARIANTS(update_cache_variants, ++ SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), ++ SPINAND_PROG_LOAD(false, 0, NULL, 0)); ++ ++static int f35sqa002g_ooblayout_ecc(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ return -ERANGE; ++} ++ ++static int f35sqa002g_ooblayout_free(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ if (section) ++ return -ERANGE; ++ ++ /* Reserve 2 bytes for the BBM. */ ++ region->offset = 2; ++ region->length = 62; ++ ++ return 0; ++} ++ ++static const struct mtd_ooblayout_ops f35sqa002g_ooblayout = { ++ .ecc = f35sqa002g_ooblayout_ecc, ++ .rfree = f35sqa002g_ooblayout_free, ++}; ++ ++static int f35sqa002g_ecc_get_status(struct spinand_device *spinand, u8 status) ++{ ++ switch (status & STATUS_ECC_MASK) { ++ case STATUS_ECC_NO_BITFLIPS: ++ return 0; ++ ++ case STATUS_ECC_HAS_BITFLIPS: ++ return 1; ++ ++ default: ++ break; ++ } ++ ++ /* More than 1-bit error was detected in one or more sectors and ++ * cannot be corrected. ++ */ ++ return -EBADMSG; ++} ++ ++static const struct spinand_info foresee_spinand_table[] = { ++ SPINAND_INFO("F35SQA002G", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x72, 0x72), ++ NAND_MEMORG(1, 2048, 64, 64, 2048, 40, 1, 1, 1), ++ NAND_ECCREQ(1, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&f35sqa002g_ooblayout, ++ f35sqa002g_ecc_get_status)), ++}; ++ ++static const struct spinand_manufacturer_ops foresee_spinand_manuf_ops = { ++}; ++ ++const struct spinand_manufacturer foresee_spinand_manufacturer = { ++ .id = SPINAND_MFR_FORESEE, ++ .name = "FORESEE", ++ .chips = foresee_spinand_table, ++ .nchips = ARRAY_SIZE(foresee_spinand_table), ++ .ops = &foresee_spinand_manuf_ops, ++}; +--- a/include/linux/mtd/spinand.h ++++ b/include/linux/mtd/spinand.h +@@ -306,6 +306,7 @@ extern const struct spinand_manufacturer + extern const struct spinand_manufacturer toshiba_spinand_manufacturer; + extern const struct spinand_manufacturer winbond_spinand_manufacturer; + extern const struct spinand_manufacturer esmt_c8_spinand_manufacturer; ++extern const struct spinand_manufacturer foresee_spinand_manufacturer; + extern const struct spinand_manufacturer xtx_spinand_manufacturer; + + /** diff --git a/lede/package/boot/uboot-mediatek/patches/101-02-mtd-spinand-add-support-for-FORESEE-F35SQA001G.patch b/lede/package/boot/uboot-mediatek/patches/101-02-mtd-spinand-add-support-for-FORESEE-F35SQA001G.patch new file mode 100644 index 0000000000..84b3b2afee --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/101-02-mtd-spinand-add-support-for-FORESEE-F35SQA001G.patch @@ -0,0 +1,38 @@ +From ae461cde5c559675fc4c0ba351c7c31ace705f56 Mon Sep 17 00:00:00 2001 +From: Bohdan Chubuk +Date: Sun, 10 Nov 2024 22:50:47 +0200 +Subject: [PATCH] mtd: spinand: add support for FORESEE F35SQA001G + +Add support for FORESEE F35SQA001G SPI NAND. + +Similar to F35SQA002G, but differs in capacity. +Datasheet: + - https://cdn.ozdisan.com/ETicaret_Dosya/704795_871495.pdf + +Tested on Xiaomi AX3000T flashed with OpenWRT. + +Signed-off-by: Bohdan Chubuk +Signed-off-by: Miquel Raynal +--- + drivers/mtd/nand/spi/foresee.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +--- a/drivers/mtd/nand/spi/foresee.c ++++ b/drivers/mtd/nand/spi/foresee.c +@@ -81,6 +81,16 @@ static const struct spinand_info foresee + SPINAND_HAS_QE_BIT, + SPINAND_ECCINFO(&f35sqa002g_ooblayout, + f35sqa002g_ecc_get_status)), ++ SPINAND_INFO("F35SQA001G", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0x71, 0x71), ++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), ++ NAND_ECCREQ(1, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ SPINAND_HAS_QE_BIT, ++ SPINAND_ECCINFO(&f35sqa002g_ooblayout, ++ f35sqa002g_ecc_get_status)), + }; + + static const struct spinand_manufacturer_ops foresee_spinand_manuf_ops = { diff --git a/lede/package/boot/uboot-mediatek/patches/101-03-mtd-spinand-fix-support-for-FORESEE.patch b/lede/package/boot/uboot-mediatek/patches/101-03-mtd-spinand-fix-support-for-FORESEE.patch new file mode 100644 index 0000000000..e10bbbbd32 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/101-03-mtd-spinand-fix-support-for-FORESEE.patch @@ -0,0 +1,19 @@ +Force update_cache_variants to use reset for Foresee NAND with bad blocks + +Tested on Xiaomi AX3000T + F35SQA001G with bad blocks and without bad blocks + +Signed-off-by: Dim Fish + +--- a/drivers/mtd/nand/spi/foresee.c ++++ b/drivers/mtd/nand/spi/foresee.c +@@ -24,8 +24,8 @@ static SPINAND_OP_VARIANTS(write_cache_v + SPINAND_PROG_LOAD(true, 0, NULL, 0)); + + static SPINAND_OP_VARIANTS(update_cache_variants, +- SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), +- SPINAND_PROG_LOAD(false, 0, NULL, 0)); ++ SPINAND_PROG_LOAD_X4(true, 0, NULL, 0), ++ SPINAND_PROG_LOAD(true, 0, NULL, 0)); + + static int f35sqa002g_ooblayout_ecc(struct mtd_info *mtd, int section, + struct mtd_oob_region *region) diff --git a/lede/package/boot/uboot-mediatek/patches/050-mt7622-enable-pstore.patch b/lede/package/boot/uboot-mediatek/patches/103-01-mt7622-enable-pstore.patch similarity index 67% rename from lede/package/boot/uboot-mediatek/patches/050-mt7622-enable-pstore.patch rename to lede/package/boot/uboot-mediatek/patches/103-01-mt7622-enable-pstore.patch index 601e394f5e..ac7a6b2f1f 100644 --- a/lede/package/boot/uboot-mediatek/patches/050-mt7622-enable-pstore.patch +++ b/lede/package/boot/uboot-mediatek/patches/103-01-mt7622-enable-pstore.patch @@ -10,20 +10,20 @@ + }; + + reserved-memory { -+ #address-cells = <2>; -+ #size-cells = <2>; ++ #address-cells = <1>; ++ #size-cells = <1>; + ranges; + + /* 64 KiB reserved for ramoops/pstore */ + ramoops@42ff0000 { + compatible = "ramoops"; -+ reg = <0 0x42ff0000 0 0x10000>; ++ reg = <0x42ff0000 0x10000>; + record-size = <0x1000>; + }; + -+ /* 192 KiB reserved for ARM Trusted Firmware (BL31) */ -+ secmon_reserved: secmon@43000000 { -+ reg = <0 0x43000000 0 0x30000>; ++ /* 192 KiB reserved for ARM Trusted Firmware (BL31 + BL32) */ ++ secmon@43000000 { ++ reg = <0x43000000 0x30000>; + no-map; + }; + }; diff --git a/lede/package/boot/uboot-mediatek/patches/052-mt7981-enable-pstore.patch b/lede/package/boot/uboot-mediatek/patches/103-02-mt7981-enable-pstore.patch similarity index 56% rename from lede/package/boot/uboot-mediatek/patches/052-mt7981-enable-pstore.patch rename to lede/package/boot/uboot-mediatek/patches/103-02-mt7981-enable-pstore.patch index 9bfea8f737..c822585a27 100644 --- a/lede/package/boot/uboot-mediatek/patches/052-mt7981-enable-pstore.patch +++ b/lede/package/boot/uboot-mediatek/patches/103-02-mt7981-enable-pstore.patch @@ -1,6 +1,6 @@ --- a/arch/arm/dts/mt7981.dtsi +++ b/arch/arm/dts/mt7981.dtsi -@@ -32,6 +32,35 @@ +@@ -33,6 +33,30 @@ }; }; @@ -10,27 +10,22 @@ + }; + + reserved-memory { -+ #address-cells = <2>; -+ #size-cells = <2>; ++ #address-cells = <1>; ++ #size-cells = <1>; + ranges; + + /* 64 KiB reserved for ramoops/pstore */ + ramoops@42ff0000 { + compatible = "ramoops"; -+ reg = <0 0x42ff0000 0 0x10000>; ++ reg = <0x42ff0000 0x10000>; + record-size = <0x1000>; + }; + -+ /* 192 KiB reserved for ARM Trusted Firmware (BL31) */ -+ secmon_reserved: secmon@43000000 { -+ reg = <0 0x43000000 0 0x30000>; ++ /* 192 KiB reserved for ARM Trusted Firmware (BL31 + BL32) */ ++ secmon@43000000 { ++ reg = <0x43000000 0x30000>; + no-map; + }; -+ -+ wmcpu_emi: wmcpu-reserved@4fc00000 { -+ no-map; -+ reg = <0 0x4fc00000 0 0x00100000>; -+ }; + }; + gpt_clk: gpt_dummy20m { diff --git a/lede/package/boot/uboot-mediatek/patches/051-mt7986-enable-pstore.patch b/lede/package/boot/uboot-mediatek/patches/103-03-mt7986-enable-pstore.patch similarity index 56% rename from lede/package/boot/uboot-mediatek/patches/051-mt7986-enable-pstore.patch rename to lede/package/boot/uboot-mediatek/patches/103-03-mt7986-enable-pstore.patch index d6ae7f0f13..dcbf7c8e7a 100644 --- a/lede/package/boot/uboot-mediatek/patches/051-mt7986-enable-pstore.patch +++ b/lede/package/boot/uboot-mediatek/patches/103-03-mt7986-enable-pstore.patch @@ -1,6 +1,6 @@ --- a/arch/arm/dts/mt7986.dtsi +++ b/arch/arm/dts/mt7986.dtsi -@@ -50,6 +50,35 @@ +@@ -50,6 +50,30 @@ }; }; @@ -10,27 +10,22 @@ + }; + + reserved-memory { -+ #address-cells = <2>; -+ #size-cells = <2>; ++ #address-cells = <1>; ++ #size-cells = <1>; + ranges; + + /* 64 KiB reserved for ramoops/pstore */ + ramoops@42ff0000 { + compatible = "ramoops"; -+ reg = <0 0x42ff0000 0 0x10000>; ++ reg = <0x42ff0000 0x10000>; + record-size = <0x1000>; + }; + -+ /* 192 KiB reserved for ARM Trusted Firmware (BL31) */ -+ secmon_reserved: secmon@43000000 { -+ reg = <0 0x43000000 0 0x30000>; ++ /* 256 KiB reserved for ARM Trusted Firmware (BL31 + BL32) */ ++ secmon@43000000 { ++ reg = <0x43000000 0x40000>; + no-map; + }; -+ -+ wmcpu_emi: wmcpu-reserved@4fc00000 { -+ no-map; -+ reg = <0 0x4fc00000 0 0x00100000>; -+ }; + }; + dummy_clk: dummy12m { diff --git a/lede/package/boot/uboot-mediatek/patches/103-mt7988-enable-pstore.patch b/lede/package/boot/uboot-mediatek/patches/103-04-mt7988-enable-pstore.patch similarity index 82% rename from lede/package/boot/uboot-mediatek/patches/103-mt7988-enable-pstore.patch rename to lede/package/boot/uboot-mediatek/patches/103-04-mt7988-enable-pstore.patch index 747aa2e5da..68372736e5 100644 --- a/lede/package/boot/uboot-mediatek/patches/103-mt7988-enable-pstore.patch +++ b/lede/package/boot/uboot-mediatek/patches/103-04-mt7988-enable-pstore.patch @@ -1,6 +1,6 @@ --- a/arch/arm/dts/mt7988.dtsi +++ b/arch/arm/dts/mt7988.dtsi -@@ -62,6 +62,30 @@ +@@ -63,6 +63,30 @@ #clock-cells = <0>; }; @@ -21,8 +21,8 @@ + record-size = <0x1000>; + }; + -+ /* 320 KiB reserved for ARM Trusted Firmware (BL31+BL32) */ -+ secmon_reserved: secmon@43000000 { ++ /* 320 KiB reserved for ARM Trusted Firmware (BL31 + BL32) */ ++ secmon@43000000 { + reg = <0 0x43000000 0 0x50000>; + no-map; + }; diff --git a/lede/package/boot/uboot-mediatek/patches/104-snfi-add-support-for-GD5F1GQ5UE.patch b/lede/package/boot/uboot-mediatek/patches/104-snfi-add-support-for-GD5F1GQ5UE.patch new file mode 100644 index 0000000000..ccf4f1c97f --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/104-snfi-add-support-for-GD5F1GQ5UE.patch @@ -0,0 +1,26 @@ +From ec8c3dc701cfd53e1ddc9817041e710fb4bbb0f3 Mon Sep 17 00:00:00 2001 +From: Chuanhong Guo +Date: Sat, 9 Mar 2024 12:06:31 +0800 +Subject: [PATCH] snfi: add support for GD5F1GQ5UE + +This patch adds support for GigaDevice GD5F1GQ5UExxG to the +mtk-snfi driver in u-boot. + +Signed-off-by: Chuanhong Guo +--- + drivers/mtd/mtk-snand/mtk-snand-ids.c | 4 ++++ + 1 file changed, 4 insertions(+) + +--- a/drivers/mtd/mtk-snand/mtk-snand-ids.c ++++ b/drivers/mtd/mtk-snand/mtk-snand-ids.c +@@ -115,6 +115,10 @@ static const struct snand_flash_info sna + SNAND_MEMORG_1G_2K_64, + &snand_cap_read_from_cache_quad_q2d, + &snand_cap_program_load_x4), ++ SNAND_INFO("GD5F1GQ5UExxG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0x51), ++ SNAND_MEMORG_1G_2K_128, ++ &snand_cap_read_from_cache_quad, ++ &snand_cap_program_load_x4), + SNAND_INFO("GD5F2GQ4UExIG", SNAND_ID(SNAND_ID_ADDR, 0xc8, 0xd2), + SNAND_MEMORG_2G_2K_128, + &snand_cap_read_from_cache_quad_q2d, diff --git a/lede/package/boot/uboot-mediatek/patches/105-configs-add-usefull-stuff-to-mt7988-rfb.patch b/lede/package/boot/uboot-mediatek/patches/105-configs-add-usefull-stuff-to-mt7988-rfb.patch index 535af4fa09..8d4ce8f3a7 100644 --- a/lede/package/boot/uboot-mediatek/patches/105-configs-add-usefull-stuff-to-mt7988-rfb.patch +++ b/lede/package/boot/uboot-mediatek/patches/105-configs-add-usefull-stuff-to-mt7988-rfb.patch @@ -1,326 +1,274 @@ --- a/configs/mt7988_sd_rfb_defconfig +++ b/configs/mt7988_sd_rfb_defconfig -@@ -11,6 +11,24 @@ CONFIG_DEBUG_UART_BASE=0x11000000 - CONFIG_DEBUG_UART_CLOCK=40000000 - CONFIG_SYS_LOAD_ADDR=0x46000000 - CONFIG_DEBUG_UART=y +@@ -5,38 +5,77 @@ CONFIG_ARCH_MEDIATEK=y + CONFIG_TEXT_BASE=0x41e00000 + CONFIG_SYS_MALLOC_F_LEN=0x4000 + CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 + CONFIG_DEFAULT_DEVICE_TREE="mt7988-sd-rfb" +CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y + CONFIG_TARGET_MT7988=y + CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 + CONFIG_DEBUG_UART_BASE=0x11000000 + CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_PCI=y + CONFIG_DEBUG_UART=y + # CONFIG_EFI_LOADER is not set +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_SPI_BOOT=y -+CONFIG_SD_BOOT=y -+CONFIG_NAND_BOOT=y -+CONFIG_BOOTSTD_DEFAULTS=y +CONFIG_BOOTSTD_FULL=y ++CONFIG_SD_BOOT=y ++CONFIG_SPI_BOOT=y # CONFIG_AUTOBOOT is not set CONFIG_DEFAULT_FDT_FILE="mt7988-sd-rfb" + CONFIG_SYS_CBSIZE=512 + CONFIG_SYS_PBSIZE=1049 CONFIG_LOGLEVEL=7 -@@ -22,15 +40,118 @@ CONFIG_SYS_PBSIZE=1049 ++CONFIG_PRE_CONSOLE_BUFFER=y + CONFIG_LOG=y + # CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y + CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y + # CONFIG_BOOTM_NETBSD is not set # CONFIG_BOOTM_PLAN9 is not set # CONFIG_BOOTM_RTEMS is not set # CONFIG_BOOTM_VXWORKS is not set -# CONFIG_CMD_ELF is not set +CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_ELF=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ASKENV=y +CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y CONFIG_CMD_CLK=y CONFIG_CMD_DM=y CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+CONFIG_CMD_MMC=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y CONFIG_CMD_MMC=y CONFIG_CMD_MTD=y - CONFIG_CMD_PING=y -+CONFIG_CMD_SF=y - CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y +-CONFIG_CMD_PING=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y +CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y + CONFIG_CMD_SMC=y +-CONFIG_DOS_PARTITION=y +-CONFIG_EFI_PARTITION=y ++CONFIG_CMD_FS_UUID=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+# CONFIG_MTD_RAW_NAND is not set -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL_MT7988=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y + CONFIG_PARTITION_TYPE_GUID=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MMC=y -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x440000 -+CONFIG_ENV_SIZE=0x40000 -+CONFIG_ENV_SIZE_REDUND=0x40000 - CONFIG_DOS_PARTITION=y - CONFIG_EFI_PARTITION=y - CONFIG_PARTITION_TYPE_GUID=y -@@ -46,6 +167,9 @@ CONFIG_PROT_TCP=y - CONFIG_REGMAP=y - CONFIG_SYSCON=y - CONFIG_CLK=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_SUPPORTS_TUNING=y - CONFIG_MMC_HS200_SUPPORT=y - CONFIG_MMC_MTK=y - CONFIG_MTD=y ---- a/configs/mt7988_rfb_defconfig -+++ b/configs/mt7988_rfb_defconfig -@@ -11,7 +11,24 @@ CONFIG_DEBUG_UART_BASE=0x11000000 - CONFIG_DEBUG_UART_CLOCK=40000000 - CONFIG_SYS_LOAD_ADDR=0x46000000 - CONFIG_DEBUG_UART=y --# CONFIG_AUTOBOOT is not set -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y + CONFIG_USE_IPADDR=y + CONFIG_IPADDR="192.168.1.1" + CONFIG_USE_NETMASK=y +@@ -45,28 +84,43 @@ CONFIG_USE_SERVERIP=y + CONFIG_SERVERIP="192.168.1.2" + CONFIG_PROT_TCP=y + CONFIG_NET_RANDOM_ETHADDR=y +-CONFIG_REGMAP=y +-CONFIG_SYSCON=y +CONFIG_BUTTON=y +CONFIG_BUTTON_GPIO=y + CONFIG_CLK=y +CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y +CONFIG_LED=y +CONFIG_LED_BLINK=y +CONFIG_LED_GPIO=y -+CONFIG_SPI_BOOT=y -+CONFIG_SD_BOOT=y -+CONFIG_NAND_BOOT=y -+CONFIG_BOOTSTD_DEFAULTS=y + CONFIG_MMC_HS200_SUPPORT=y + CONFIG_MMC_MTK=y + CONFIG_MTD=y + CONFIG_DM_MTD=y + CONFIG_MTD_SPI_NAND=y ++CONFIG_MTD_UBI_FASTMAP=y + CONFIG_PHY_FIXED=y + CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y + CONFIG_PINCTRL=y + CONFIG_PINCONF=y + CONFIG_PINCTRL_MT7988=y + CONFIG_POWER_DOMAIN=y + CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y + CONFIG_DM_PWM=y + CONFIG_PWM_MTK=y + CONFIG_RAM=y + CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y + CONFIG_MTK_SERIAL=y + CONFIG_SPI=y + CONFIG_DM_SPI=y + CONFIG_MTK_SPIM=y +-CONFIG_LZO=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_ZSTD=y + CONFIG_HEXDUMP=y +--- a/configs/mt7988_rfb_defconfig ++++ b/configs/mt7988_rfb_defconfig +@@ -6,37 +6,77 @@ CONFIG_TEXT_BASE=0x41e00000 + CONFIG_SYS_MALLOC_F_LEN=0x4000 + CONFIG_NR_DRAM_BANKS=1 + CONFIG_DEFAULT_DEVICE_TREE="mt7988-rfb" ++CONFIG_OF_LIBFDT_OVERLAY=y + CONFIG_TARGET_MT7988=y + CONFIG_SYS_LOAD_ADDR=0x44000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 + CONFIG_DEBUG_UART_BASE=0x11000000 + CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_PCI=y + CONFIG_DEBUG_UART=y + # CONFIG_EFI_LOADER is not set +-# CONFIG_AUTOBOOT is not set ++CONFIG_FIT=y +CONFIG_BOOTSTD_FULL=y ++CONFIG_SD_BOOT=y ++CONFIG_SPI_BOOT=y ++CONFIG_OF_SYSTEM_SETUP=y CONFIG_DEFAULT_FDT_FILE="mt7988-rfb" + CONFIG_SYS_CBSIZE=512 + CONFIG_SYS_PBSIZE=1049 CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y CONFIG_LOG=y -@@ -22,15 +39,120 @@ CONFIG_SYS_PBSIZE=1049 + # CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y + CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y + # CONFIG_BOOTM_NETBSD is not set # CONFIG_BOOTM_PLAN9 is not set # CONFIG_BOOTM_RTEMS is not set # CONFIG_BOOTM_VXWORKS is not set -# CONFIG_CMD_ELF is not set +CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_ELF=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ASKENV=y +CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y CONFIG_CMD_CLK=y CONFIG_CMD_DM=y CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+CONFIG_CMD_MMC=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y CONFIG_CMD_MMC=y CONFIG_CMD_MTD=y - CONFIG_CMD_PING=y -+CONFIG_CMD_SF=y - CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y +-CONFIG_CMD_PING=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y +CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y + CONFIG_CMD_SMC=y +-CONFIG_DOS_PARTITION=y +-CONFIG_EFI_PARTITION=y ++CONFIG_CMD_FS_UUID=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+# CONFIG_MTD_RAW_NAND is not set -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL_MT7988=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y + CONFIG_PARTITION_TYPE_GUID=y +CONFIG_OF_EMBED=y -+CONFIG_OF_SYSTEM_SETUP=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_REDUNDANT=y +CONFIG_ENV_UBI_PART="ubi" -+CONFIG_ENV_SIZE=0x1f000 -+CONFIG_ENV_SIZE_REDUND=0x1f000 +CONFIG_ENV_UBI_VOLUME="ubootenv" +CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" - CONFIG_DOS_PARTITION=y - CONFIG_EFI_PARTITION=y - CONFIG_PARTITION_TYPE_GUID=y -@@ -46,6 +168,9 @@ CONFIG_PROT_TCP=y - CONFIG_REGMAP=y - CONFIG_SYSCON=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y + CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y + CONFIG_USE_IPADDR=y + CONFIG_IPADDR="192.168.1.1" + CONFIG_USE_NETMASK=y +@@ -45,9 +85,13 @@ CONFIG_USE_SERVERIP=y + CONFIG_SERVERIP="192.168.1.2" + CONFIG_PROT_TCP=y + CONFIG_NET_RANDOM_ETHADDR=y +-CONFIG_REGMAP=y +-CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y CONFIG_CLK=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_SUPPORTS_TUNING=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y CONFIG_MMC_HS200_SUPPORT=y CONFIG_MMC_MTK=y CONFIG_MTD=y +@@ -65,20 +109,31 @@ CONFIG_SPI_FLASH_WINBOND=y + CONFIG_SPI_FLASH_XMC=y + CONFIG_SPI_FLASH_XTX=y + CONFIG_SPI_FLASH_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y + CONFIG_PHY_FIXED=y + CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y + CONFIG_PINCTRL=y + CONFIG_PINCONF=y + CONFIG_PINCTRL_MT7988=y + CONFIG_POWER_DOMAIN=y + CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y + CONFIG_DM_PWM=y + CONFIG_PWM_MTK=y + CONFIG_RAM=y + CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y + CONFIG_MTK_SERIAL=y + CONFIG_SPI=y + CONFIG_DM_SPI=y + CONFIG_MTK_SPIM=y +-CONFIG_LZO=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_ZSTD=y + CONFIG_HEXDUMP=y --- a/arch/arm/dts/mt7988-rfb.dts +++ b/arch/arm/dts/mt7988-rfb.dts -@@ -144,6 +144,23 @@ - compatible = "spi-nand"; - reg = <0>; +@@ -195,6 +195,23 @@ spi-max-frequency = <52000000>; + spi-rx-bus-width = <4>; + spi-tx-bus-width = <4>; + + partitions { + compatible = "fixed-partitions"; diff --git a/lede/package/boot/uboot-mediatek/patches/106-configs-sync-mt7981-rfb-storage.patch b/lede/package/boot/uboot-mediatek/patches/106-configs-sync-mt7981-rfb-storage.patch index 3a3f8d0e1e..e45ae006c7 100644 --- a/lede/package/boot/uboot-mediatek/patches/106-configs-sync-mt7981-rfb-storage.patch +++ b/lede/package/boot/uboot-mediatek/patches/106-configs-sync-mt7981-rfb-storage.patch @@ -1,6 +1,6 @@ --- a/configs/mt7981_rfb_defconfig +++ b/configs/mt7981_rfb_defconfig -@@ -30,6 +30,9 @@ CONFIG_CMD_MTD=y +@@ -31,6 +31,9 @@ CONFIG_CMD_MTD=y CONFIG_CMD_SF_TEST=y CONFIG_CMD_PING=y CONFIG_CMD_SMC=y @@ -12,29 +12,15 @@ CONFIG_REGMAP=y --- a/configs/mt7981_snfi_nand_rfb_defconfig +++ b/configs/mt7981_snfi_nand_rfb_defconfig -@@ -1,11 +1,12 @@ - CONFIG_ARM=y -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y - CONFIG_POSITION_INDEPENDENT=y - CONFIG_ARCH_MEDIATEK=y +@@ -5,7 +5,6 @@ CONFIG_ARCH_MEDIATEK=y CONFIG_TEXT_BASE=0x41e00000 CONFIG_SYS_MALLOC_F_LEN=0x4000 CONFIG_NR_DRAM_BANKS=1 -CONFIG_ENV_SIZE=0x20000 CONFIG_DEFAULT_DEVICE_TREE="mt7981-snfi-nand-rfb" -+CONFIG_SYS_PROMPT="MT7981> " - CONFIG_TARGET_MT7981=y - CONFIG_DEBUG_UART_BASE=0x11002000 - CONFIG_DEBUG_UART_CLOCK=40000000 -@@ -15,7 +16,6 @@ CONFIG_DEBUG_UART=y - CONFIG_DEFAULT_FDT_FILE="mt7981-snfi-nand-rfb" - CONFIG_LOGLEVEL=7 - CONFIG_LOG=y --CONFIG_SYS_PROMPT="MT7981> " - CONFIG_SYS_CBSIZE=512 - CONFIG_SYS_PBSIZE=1049 - # CONFIG_BOOTM_NETBSD is not set -@@ -29,8 +29,6 @@ CONFIG_CMD_GPIO=y + # CONFIG_BOARD_INIT is not set + CONFIG_SYS_PROMPT="MT7981> " +@@ -31,8 +30,6 @@ CONFIG_CMD_GPIO=y CONFIG_CMD_MTD=y CONFIG_CMD_PING=y CONFIG_CMD_SMC=y @@ -43,22 +29,14 @@ CONFIG_CMD_UBI=y CONFIG_CMD_UBI_RENAME=y CONFIG_ENV_OVERWRITE=y -@@ -45,7 +43,6 @@ CONFIG_DM_MTD=y - CONFIG_MTK_SPI_NAND=y - CONFIG_MTK_SPI_NAND_MTD=y - CONFIG_PHY_FIXED=y --CONFIG_DM_ETH=y - CONFIG_MEDIATEK_ETH=y - CONFIG_PINCTRL=y - CONFIG_PINCONF=y -@@ -55,3 +52,4 @@ CONFIG_MTK_POWER_DOMAIN=y +@@ -56,3 +53,4 @@ CONFIG_MTK_POWER_DOMAIN=y CONFIG_DM_SERIAL=y CONFIG_MTK_SERIAL=y CONFIG_HEXDUMP=y +CONFIG_LMB_MAX_REGIONS=64 --- /dev/null +++ b/configs/mt7981_nor_rfb_defconfig -@@ -0,0 +1,68 @@ +@@ -0,0 +1,69 @@ +CONFIG_ARM=y +CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y @@ -67,6 +45,7 @@ +CONFIG_SYS_MALLOC_F_LEN=0x4000 +CONFIG_NR_DRAM_BANKS=1 +CONFIG_DEFAULT_DEVICE_TREE="mt7981-rfb" ++# CONFIG_BOARD_INIT is not set +CONFIG_SYS_PROMPT="MT7981> " +CONFIG_TARGET_MT7981=y +CONFIG_DEBUG_UART_BASE=0x11002000 diff --git a/lede/package/boot/uboot-mediatek/patches/107-configs-add-useful-options-to-mt7981-rfb.patch b/lede/package/boot/uboot-mediatek/patches/107-configs-add-useful-options-to-mt7981-rfb.patch index bd4c6b55f0..3b1f9b55d3 100644 --- a/lede/package/boot/uboot-mediatek/patches/107-configs-add-useful-options-to-mt7981-rfb.patch +++ b/lede/package/boot/uboot-mediatek/patches/107-configs-add-useful-options-to-mt7981-rfb.patch @@ -1,474 +1,454 @@ --- a/configs/mt7981_emmc_rfb_defconfig +++ b/configs/mt7981_emmc_rfb_defconfig -@@ -13,7 +13,22 @@ CONFIG_DEBUG_UART_BASE=0x11002000 - CONFIG_DEBUG_UART_CLOCK=40000000 - CONFIG_SYS_LOAD_ADDR=0x46000000 - CONFIG_DEBUG_UART=y --# CONFIG_AUTOBOOT is not set +@@ -8,38 +8,57 @@ CONFIG_NR_DRAM_BANKS=1 + CONFIG_ENV_SIZE=0x80000 + CONFIG_ENV_OFFSET=0x300000 + CONFIG_DEFAULT_DEVICE_TREE="mt7981-emmc-rfb" +CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y + CONFIG_TARGET_MT7981=y + CONFIG_SYS_LOAD_ADDR=0x46000000 + CONFIG_DEBUG_UART_BASE=0x11002000 + CONFIG_DEBUG_UART_CLOCK=40000000 + CONFIG_DEBUG_UART=y + # CONFIG_EFI_LOADER is not set +-# CONFIG_AUTOBOOT is not set +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_MMC_BOOT=y -+CONFIG_BOOTSTD_DEFAULTS=y +CONFIG_BOOTSTD_FULL=y ++CONFIG_OF_SYSTEM_SETUP=y CONFIG_DEFAULT_FDT_FILE="mt7981-emmc-rfb" + CONFIG_SYS_CBSIZE=512 + CONFIG_SYS_PBSIZE=1049 CONFIG_LOGLEVEL=7 CONFIG_LOG=y -@@ -24,9 +39,23 @@ CONFIG_SYS_PBSIZE=1049 + # CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y + CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y + # CONFIG_BOOTM_NETBSD is not set # CONFIG_BOOTM_PLAN9 is not set # CONFIG_BOOTM_RTEMS is not set # CONFIG_BOOTM_VXWORKS is not set -# CONFIG_CMD_ELF is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y # CONFIG_CMD_UNLZ4 is not set # CONFIG_CMD_UNZIP is not set -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y +CONFIG_CMD_DM=y -+CONFIG_CMD_ELF=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_UUID=y CONFIG_CMD_GPIO=y CONFIG_CMD_GPT=y CONFIG_CMD_GPT_RENAME=y -@@ -36,13 +65,35 @@ CONFIG_CMD_PART=y + CONFIG_CMD_LSBLK=y + CONFIG_CMD_MMC=y +-CONFIG_CMD_PART=y CONFIG_CMD_READ=y - CONFIG_CMD_PING=y - CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y +-CONFIG_CMD_PING=y +CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_ASKENV=y +CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y ++CONFIG_CMD_CDP=y +CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_UUID=y - CONFIG_CMD_FAT=y - CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y +CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_CACHE=y +CONFIG_CMD_PSTORE=y +CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF=y -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y + CONFIG_CMD_SMC=y +-CONFIG_CMD_FAT=y +-CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y CONFIG_PARTITION_TYPE_GUID=y CONFIG_ENV_OVERWRITE=y CONFIG_ENV_IS_IN_MMC=y - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +@@ -47,7 +66,13 @@ CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGEX=y CONFIG_REGMAP=y CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y + CONFIG_MMC_HS200_SUPPORT=y + CONFIG_MMC_MTK=y + CONFIG_PHY_FIXED=y +@@ -60,6 +85,7 @@ CONFIG_MTK_POWER_DOMAIN=y + CONFIG_DM_REGULATOR=y + CONFIG_DM_REGULATOR_FIXED=y + CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y + CONFIG_MTK_SERIAL=y + CONFIG_FAT_WRITE=y + CONFIG_HEXDUMP=y --- a/configs/mt7981_rfb_defconfig +++ b/configs/mt7981_rfb_defconfig -@@ -11,7 +11,23 @@ CONFIG_DEBUG_UART_BASE=0x11002000 - CONFIG_DEBUG_UART_CLOCK=40000000 +@@ -6,39 +6,79 @@ CONFIG_TEXT_BASE=0x41e00000 + CONFIG_SYS_MALLOC_F_LEN=0x4000 + CONFIG_NR_DRAM_BANKS=1 + CONFIG_DEFAULT_DEVICE_TREE="mt7981-rfb" ++CONFIG_OF_LIBFDT_OVERLAY=y + CONFIG_TARGET_MT7981=y CONFIG_SYS_LOAD_ADDR=0x46000000 + CONFIG_DEBUG_UART_BASE=0x11002000 + CONFIG_DEBUG_UART_CLOCK=40000000 CONFIG_DEBUG_UART=y -# CONFIG_AUTOBOOT is not set -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y +CONFIG_SPI_BOOT=y -+CONFIG_NAND_BOOT=y -+CONFIG_BOOTSTD_DEFAULTS=y -+CONFIG_BOOTSTD_FULL=y ++CONFIG_OF_SYSTEM_SETUP=y CONFIG_DEFAULT_FDT_FILE="mt7981-rfb" + CONFIG_SYS_CBSIZE=512 + CONFIG_SYS_PBSIZE=1049 CONFIG_LOGLEVEL=7 CONFIG_LOG=y -@@ -22,23 +38,74 @@ CONFIG_SYS_PBSIZE=1049 + # CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y + CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y + # CONFIG_BOOTM_NETBSD is not set # CONFIG_BOOTM_PLAN9 is not set # CONFIG_BOOTM_RTEMS is not set # CONFIG_BOOTM_VXWORKS is not set -# CONFIG_CMD_ELF is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y # CONFIG_CMD_UNLZ4 is not set # CONFIG_CMD_UNZIP is not set -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y +CONFIG_CMD_DM=y -+CONFIG_CMD_ELF=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y CONFIG_CMD_GPIO=y CONFIG_CMD_MTD=y --CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_NAND=y -+# CONFIG_MTD_RAW_NAND is not set -+CONFIG_CMD_NAND_TRIMFFS=y +CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 + CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y -+CONFIG_CMD_SF=y -+CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y CONFIG_CMD_SMC=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y CONFIG_CMD_UBI=y CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_UUID=y + CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_REDUNDANT=y +CONFIG_ENV_UBI_PART="ubi" -+CONFIG_ENV_SIZE=0x1f000 -+CONFIG_ENV_SIZE_REDUND=0x1f000 +CONFIG_ENV_UBI_VOLUME="ubootenv" +CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" -+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y - CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGEX=y CONFIG_REGMAP=y CONFIG_SYSCON=y - CONFIG_CLK=y - # CONFIG_MMC is not set -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y - CONFIG_MTD=y - CONFIG_DM_MTD=y - CONFIG_MTD_SPI_NAND=y ---- a/configs/mt7981_sd_rfb_defconfig -+++ b/configs/mt7981_sd_rfb_defconfig -@@ -13,7 +13,22 @@ CONFIG_DEBUG_UART_BASE=0x11002000 - CONFIG_DEBUG_UART_CLOCK=40000000 - CONFIG_SYS_LOAD_ADDR=0x46000000 - CONFIG_DEBUG_UART=y --# CONFIG_AUTOBOOT is not set -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y +CONFIG_BUTTON=y +CONFIG_BUTTON_GPIO=y + CONFIG_CLK=y +CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y +CONFIG_LED=y +CONFIG_LED_BLINK=y +CONFIG_LED_GPIO=y -+CONFIG_MMC_BOOT=y -+CONFIG_BOOTSTD_DEFAULTS=y + # CONFIG_MMC is not set + CONFIG_MTD=y + CONFIG_DM_MTD=y +@@ -63,6 +103,7 @@ CONFIG_PINCTRL_MT7981=y + CONFIG_POWER_DOMAIN=y + CONFIG_MTK_POWER_DOMAIN=y + CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y + CONFIG_MTK_SERIAL=y + CONFIG_SPI=y + CONFIG_DM_SPI=y +--- a/configs/mt7981_sd_rfb_defconfig ++++ b/configs/mt7981_sd_rfb_defconfig +@@ -8,38 +8,57 @@ CONFIG_NR_DRAM_BANKS=1 + CONFIG_ENV_SIZE=0x80000 + CONFIG_ENV_OFFSET=0x300000 + CONFIG_DEFAULT_DEVICE_TREE="mt7981-sd-rfb" ++CONFIG_OF_LIBFDT_OVERLAY=y + CONFIG_TARGET_MT7981=y + CONFIG_SYS_LOAD_ADDR=0x46000000 + CONFIG_DEBUG_UART_BASE=0x11002000 + CONFIG_DEBUG_UART_CLOCK=40000000 + CONFIG_DEBUG_UART=y + # CONFIG_EFI_LOADER is not set +-# CONFIG_AUTOBOOT is not set ++CONFIG_FIT=y +CONFIG_BOOTSTD_FULL=y ++CONFIG_OF_SYSTEM_SETUP=y CONFIG_DEFAULT_FDT_FILE="mt7981-sd-rfb" + CONFIG_SYS_CBSIZE=512 + CONFIG_SYS_PBSIZE=1049 CONFIG_LOGLEVEL=7 CONFIG_LOG=y -@@ -24,9 +39,23 @@ CONFIG_SYS_PBSIZE=1049 + # CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y + CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y + # CONFIG_BOOTM_NETBSD is not set # CONFIG_BOOTM_PLAN9 is not set # CONFIG_BOOTM_RTEMS is not set # CONFIG_BOOTM_VXWORKS is not set -# CONFIG_CMD_ELF is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y # CONFIG_CMD_UNLZ4 is not set # CONFIG_CMD_UNZIP is not set -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y +CONFIG_CMD_DM=y -+CONFIG_CMD_ELF=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_UUID=y CONFIG_CMD_GPIO=y CONFIG_CMD_GPT=y CONFIG_CMD_GPT_RENAME=y -@@ -36,13 +65,35 @@ CONFIG_CMD_PART=y + CONFIG_CMD_LSBLK=y + CONFIG_CMD_MMC=y +-CONFIG_CMD_PART=y CONFIG_CMD_READ=y - CONFIG_CMD_PING=y - CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y +-CONFIG_CMD_PING=y +CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_ASKENV=y +CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y ++CONFIG_CMD_CDP=y +CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_UUID=y - CONFIG_CMD_FAT=y - CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y +CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_CACHE=y +CONFIG_CMD_PSTORE=y +CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF=y -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y + CONFIG_CMD_SMC=y +-CONFIG_CMD_FAT=y +-CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y CONFIG_PARTITION_TYPE_GUID=y CONFIG_ENV_OVERWRITE=y CONFIG_ENV_IS_IN_MMC=y - CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +@@ -47,7 +66,13 @@ CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGEX=y CONFIG_REGMAP=y CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y + CONFIG_MMC_HS200_SUPPORT=y + CONFIG_MMC_MTK=y + CONFIG_PHY_FIXED=y +@@ -60,6 +85,7 @@ CONFIG_MTK_POWER_DOMAIN=y + CONFIG_DM_REGULATOR=y + CONFIG_DM_REGULATOR_FIXED=y + CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y + CONFIG_MTK_SERIAL=y + CONFIG_FAT_WRITE=y + CONFIG_HEXDUMP=y --- a/configs/mt7981_snfi_nand_rfb_defconfig +++ b/configs/mt7981_snfi_nand_rfb_defconfig -@@ -12,7 +12,23 @@ CONFIG_DEBUG_UART_BASE=0x11002000 +@@ -7,37 +7,73 @@ CONFIG_SYS_MALLOC_F_LEN=0x4000 + CONFIG_NR_DRAM_BANKS=1 + CONFIG_DEFAULT_DEVICE_TREE="mt7981-snfi-nand-rfb" + # CONFIG_BOARD_INIT is not set +-CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_OF_LIBFDT_OVERLAY=y + CONFIG_TARGET_MT7981=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 + CONFIG_DEBUG_UART_BASE=0x11002000 CONFIG_DEBUG_UART_CLOCK=40000000 - CONFIG_SYS_LOAD_ADDR=0x46000000 +-CONFIG_SYS_LOAD_ADDR=0x46000000 CONFIG_DEBUG_UART=y -# CONFIG_AUTOBOOT is not set -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_SPI_BOOT=y -+CONFIG_NAND_BOOT=y -+CONFIG_BOOTSTD_DEFAULTS=y +CONFIG_BOOTSTD_FULL=y ++CONFIG_SPI_BOOT=y ++CONFIG_OF_SYSTEM_SETUP=y CONFIG_DEFAULT_FDT_FILE="mt7981-snfi-nand-rfb" - CONFIG_LOGLEVEL=7 - CONFIG_LOG=y -@@ -22,22 +38,73 @@ CONFIG_SYS_PBSIZE=1049 +-CONFIG_LOGLEVEL=7 +-CONFIG_LOG=y + CONFIG_SYS_CBSIZE=512 + CONFIG_SYS_PBSIZE=1049 ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y + # CONFIG_BOOTM_NETBSD is not set # CONFIG_BOOTM_PLAN9 is not set # CONFIG_BOOTM_RTEMS is not set # CONFIG_BOOTM_VXWORKS is not set -# CONFIG_CMD_ELF is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y # CONFIG_CMD_UNLZ4 is not set # CONFIG_CMD_UNZIP is not set -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y +CONFIG_CMD_DM=y -+CONFIG_CMD_ELF=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y CONFIG_CMD_GPIO=y CONFIG_CMD_MTD=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_NAND=y -+# CONFIG_MTD_RAW_NAND is not set -+CONFIG_CMD_NAND_TRIMFFS=y +-CONFIG_CMD_PING=y +CONFIG_CMD_PCI=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_CACHE=y +CONFIG_CMD_PSTORE=y +CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF=y -+CONFIG_CMD_SF_TEST=y - CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y CONFIG_CMD_SMC=y ++CONFIG_CMD_FS_UUID=y CONFIG_CMD_UBI=y CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_UUID=y CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_REDUNDANT=y +CONFIG_ENV_UBI_PART="ubi" -+CONFIG_ENV_SIZE=0x1f000 -+CONFIG_ENV_SIZE_REDUND=0x1f000 +CONFIG_ENV_UBI_VOLUME="ubootenv" +CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGEX=y CONFIG_REGMAP=y CONFIG_SYSCON=y - CONFIG_CLK=y - # CONFIG_MMC is not set -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y - CONFIG_MTD=y - CONFIG_DM_MTD=y - CONFIG_MTK_SPI_NAND=y ---- a/configs/mt7981_nor_rfb_defconfig -+++ b/configs/mt7981_nor_rfb_defconfig -@@ -12,7 +12,22 @@ CONFIG_DEBUG_UART_BASE=0x11002000 - CONFIG_DEBUG_UART_CLOCK=40000000 - CONFIG_SYS_LOAD_ADDR=0x46000000 - CONFIG_DEBUG_UART=y --# CONFIG_AUTOBOOT is not set -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y +CONFIG_BUTTON=y +CONFIG_BUTTON_GPIO=y + CONFIG_CLK=y +CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y +CONFIG_LED=y +CONFIG_LED_BLINK=y +CONFIG_LED_GPIO=y -+CONFIG_SPI_BOOT=y -+CONFIG_BOOTSTD_DEFAULTS=y + # CONFIG_MMC is not set + CONFIG_MTD=y + CONFIG_DM_MTD=y +@@ -51,6 +87,6 @@ CONFIG_PINCTRL_MT7981=y + CONFIG_POWER_DOMAIN=y + CONFIG_MTK_POWER_DOMAIN=y + CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y + CONFIG_MTK_SERIAL=y + CONFIG_HEXDUMP=y +-CONFIG_LMB_MAX_REGIONS=64 +--- a/configs/mt7981_nor_rfb_defconfig ++++ b/configs/mt7981_nor_rfb_defconfig +@@ -5,38 +5,74 @@ CONFIG_ARCH_MEDIATEK=y + CONFIG_TEXT_BASE=0x41e00000 + CONFIG_SYS_MALLOC_F_LEN=0x4000 + CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SIZE=0x4000 ++CONFIG_ENV_OFFSET=0x0 + CONFIG_DEFAULT_DEVICE_TREE="mt7981-rfb" + # CONFIG_BOARD_INIT is not set +-CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_OF_LIBFDT_OVERLAY=y + CONFIG_TARGET_MT7981=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 + CONFIG_DEBUG_UART_BASE=0x11002000 + CONFIG_DEBUG_UART_CLOCK=40000000 +-CONFIG_SYS_LOAD_ADDR=0x46000000 + CONFIG_DEBUG_UART=y +-# CONFIG_AUTOBOOT is not set ++CONFIG_FIT=y +CONFIG_BOOTSTD_FULL=y ++CONFIG_SPI_BOOT=y ++CONFIG_OF_SYSTEM_SETUP=y CONFIG_DEFAULT_FDT_FILE="mt7981-rfb" - CONFIG_LOGLEVEL=7 - CONFIG_LOG=y -@@ -22,21 +37,66 @@ CONFIG_SYS_PBSIZE=1049 +-CONFIG_LOGLEVEL=7 +-CONFIG_LOG=y + CONFIG_SYS_CBSIZE=512 + CONFIG_SYS_PBSIZE=1049 ++CONFIG_LOGLEVEL=7 ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_SYS_PROMPT="MT7981> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y + # CONFIG_BOOTM_NETBSD is not set # CONFIG_BOOTM_PLAN9 is not set # CONFIG_BOOTM_RTEMS is not set # CONFIG_BOOTM_VXWORKS is not set -# CONFIG_CMD_ELF is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y # CONFIG_CMD_UNLZ4 is not set # CONFIG_CMD_UNZIP is not set -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y +CONFIG_CMD_DM=y -+CONFIG_CMD_ELF=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y CONFIG_CMD_GPIO=y CONFIG_CMD_MTD=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+CONFIG_CMD_MTD=y +CONFIG_CMD_PCI=y + CONFIG_CMD_SF_TEST=y +-CONFIG_CMD_PING=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_CACHE=y +CONFIG_CMD_PSTORE=y +CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF=y - CONFIG_CMD_SF_TEST=y - CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y - CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y +CONFIG_CMD_UUID=y -+CONFIG_ENV_IS_IN_MTD=y -+CONFIG_ENV_MTD_NAME="u-boot-env" -+CONFIG_ENV_SIZE_REDUND=0x4000 -+CONFIG_ENV_SIZE=0x4000 -+CONFIG_ENV_OFFSET=0x0 ++CONFIG_CMD_HASH=y + CONFIG_CMD_SMC=y ++CONFIG_CMD_FS_UUID=y CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MTD=y ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_MTD_DEV="u-boot-env" CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGEX=y CONFIG_REGMAP=y CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y # CONFIG_MMC is not set -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y CONFIG_MTD=y CONFIG_DM_MTD=y - CONFIG_MTD_SPI_NAND=y +@@ -61,9 +97,9 @@ CONFIG_PINCTRL_MT7981=y + CONFIG_POWER_DOMAIN=y + CONFIG_MTK_POWER_DOMAIN=y + CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y + CONFIG_MTK_SERIAL=y + CONFIG_SPI=y + CONFIG_DM_SPI=y + CONFIG_MTK_SPIM=y + CONFIG_HEXDUMP=y +-CONFIG_LMB_MAX_REGIONS=64 diff --git a/lede/package/boot/uboot-mediatek/patches/108-dts-arm64-mt7981-rfb-add-mtd-partitions.patch b/lede/package/boot/uboot-mediatek/patches/108-dts-arm64-mt7981-rfb-add-mtd-partitions.patch index a58c81b656..eb68af9ee8 100644 --- a/lede/package/boot/uboot-mediatek/patches/108-dts-arm64-mt7981-rfb-add-mtd-partitions.patch +++ b/lede/package/boot/uboot-mediatek/patches/108-dts-arm64-mt7981-rfb-add-mtd-partitions.patch @@ -1,9 +1,9 @@ --- a/arch/arm/dts/mt7981-rfb.dts +++ b/arch/arm/dts/mt7981-rfb.dts -@@ -143,6 +143,37 @@ - compatible = "spi-nand"; - reg = <0>; +@@ -153,6 +153,37 @@ spi-max-frequency = <52000000>; + spi-rx-bus-width = <4>; + spi-tx-bus-width = <4>; + + partitions { + compatible = "fixed-partitions"; @@ -38,10 +38,10 @@ }; }; -@@ -164,6 +195,37 @@ - compatible = "jedec,spi-nor"; - reg = <0>; +@@ -176,6 +207,37 @@ spi-max-frequency = <52000000>; + spi-rx-bus-width = <4>; + spi-tx-bus-width = <4>; + + partitions { + compatible = "fixed-partitions"; diff --git a/lede/package/boot/uboot-mediatek/patches/109-snfi-FM35Q1GA-is-x4-only.patch b/lede/package/boot/uboot-mediatek/patches/109-snfi-FM35Q1GA-is-x4-only.patch new file mode 100644 index 0000000000..42179337f0 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/109-snfi-FM35Q1GA-is-x4-only.patch @@ -0,0 +1,24 @@ +From a6487e393b1b073ba0895e10f00d0fbb2a5e88d9 Mon Sep 17 00:00:00 2001 +From: Daniel Golle +Date: Mon, 8 Apr 2024 19:35:27 +0100 +Subject: [PATCH 2/2] snfi: FM35Q1GA is x4-only + +Dont allow x2 read and cache read operations on FM35Q1GA as they seem +to be unstable. Also the Linux drivers does not allow x2 ops. + +Signed-off-by: Daniel Golle +--- + drivers/mtd/mtk-snand/mtk-snand-ids.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/drivers/mtd/mtk-snand/mtk-snand-ids.c ++++ b/drivers/mtd/mtk-snand/mtk-snand-ids.c +@@ -431,7 +431,7 @@ static const struct snand_flash_info sna + + SNAND_INFO("FM35Q1GA", SNAND_ID(SNAND_ID_DYMMY, 0xe5, 0x71), + SNAND_MEMORG_1G_2K_64, +- &snand_cap_read_from_cache_x4, ++ &snand_cap_read_from_cache_x4_only, + &snand_cap_program_load_x4), + + SNAND_INFO("PN26G01A", SNAND_ID(SNAND_ID_DYMMY, 0xa1, 0xe1), diff --git a/lede/package/boot/uboot-mediatek/patches/110-mtd-spi-nand-add-support-for-FudanMicro-FM25S01A.patch b/lede/package/boot/uboot-mediatek/patches/110-mtd-spi-nand-add-support-for-FudanMicro-FM25S01A.patch new file mode 100644 index 0000000000..fc6cd4767f --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/110-mtd-spi-nand-add-support-for-FudanMicro-FM25S01A.patch @@ -0,0 +1,72 @@ +From c5b3dd3b860b7eb65950c077a70b2e5ad68626b0 Mon Sep 17 00:00:00 2001 +From: Mikhail Zhilkin +Date: Wed, 13 Aug 2025 21:54:49 +0300 +Subject: uboot-mediatek: add support for FudanMicro FM25S01A + +This patch adds support for FudanMicro FM25S01A SPI NAND. +It's required for some CMCC RAX3000Me hardware revisions. + +Signed-off-by: Mikhail Zhilkin +--- + +--- a/drivers/mtd/nand/spi/fudanmicro.c ++++ b/drivers/mtd/nand/spi/fudanmicro.c +@@ -27,6 +27,29 @@ static SPINAND_OP_VARIANTS(update_cache_ + SPINAND_PROG_LOAD_X4(false, 0, NULL, 0), + SPINAND_PROG_LOAD(false, 0, NULL, 0)); + ++static int fm25s01a_ooblayout_ecc(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ return -ERANGE; ++} ++ ++static int fm25s01a_ooblayout_free(struct mtd_info *mtd, int section, ++ struct mtd_oob_region *region) ++{ ++ if (section) ++ return -ERANGE; ++ ++ region->offset = 2; ++ region->length = 62; ++ ++ return 0; ++} ++ ++static const struct mtd_ooblayout_ops fm25s01a_ooblayout = { ++ .ecc = fm25s01a_ooblayout_ecc, ++ .rfree = fm25s01a_ooblayout_free, ++}; ++ + static int fm25s01b_ooblayout_ecc(struct mtd_info *mtd, int section, + struct mtd_oob_region *region) + { +@@ -83,8 +106,17 @@ static int fm25s01b_ecc_get_status(struc + } + + static const struct spinand_info fudan_spinand_table[] = { +- SPINAND_INFO("FM25s01B", +- SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xD4), ++ SPINAND_INFO("FM25S01A", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xE4), ++ NAND_MEMORG(1, 2048, 64, 64, 1024, 20, 1, 1, 1), ++ NAND_ECCREQ(1, 512), ++ SPINAND_INFO_OP_VARIANTS(&read_cache_variants, ++ &write_cache_variants, ++ &update_cache_variants), ++ 0, ++ SPINAND_ECCINFO(&fm25s01a_ooblayout, NULL)), ++ SPINAND_INFO("FM25S01B", ++ SPINAND_ID(SPINAND_READID_METHOD_OPCODE_DUMMY, 0xD4), + NAND_MEMORG(1, 2048, 128, 64, 1024, 20, 1, 1, 1), + NAND_ECCREQ(8, 512), + SPINAND_INFO_OP_VARIANTS(&read_cache_variants, +@@ -100,7 +132,7 @@ static const struct spinand_manufacturer + + const struct spinand_manufacturer fudan_spinand_manufacturer = { + .id = SPINAND_MFR_FUDAN, +- .name = "FUDAN Micron", ++ .name = "FudanMicro", + .chips = fudan_spinand_table, + .nchips = ARRAY_SIZE(fudan_spinand_table), + .ops = &fudan_spinand_manuf_ops, diff --git a/lede/package/boot/uboot-mediatek/patches/110-no-kwbimage.patch b/lede/package/boot/uboot-mediatek/patches/110-no-kwbimage.patch deleted file mode 100644 index 3bf033f814..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/110-no-kwbimage.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/tools/Makefile -+++ b/tools/Makefile -@@ -116,7 +116,6 @@ dumpimage-mkimage-objs := aisimage.o \ - imximage.o \ - imx8image.o \ - imx8mimage.o \ -- kwbimage.o \ - generated/lib/md5.o \ - lpc32xximage.o \ - mxsimage.o \ diff --git a/lede/package/boot/uboot-mediatek/patches/111-force-pylibfdt-build.patch b/lede/package/boot/uboot-mediatek/patches/111-force-pylibfdt-build.patch index e55fad489b..5283e91f7a 100644 --- a/lede/package/boot/uboot-mediatek/patches/111-force-pylibfdt-build.patch +++ b/lede/package/boot/uboot-mediatek/patches/111-force-pylibfdt-build.patch @@ -1,6 +1,6 @@ --- a/Makefile +++ b/Makefile -@@ -2011,26 +2011,7 @@ endif +@@ -2315,26 +2315,7 @@ endif # Check dtc and pylibfdt, if DTC is provided, else build them PHONY += scripts_dtc scripts_dtc: scripts_basic diff --git a/lede/package/boot/uboot-mediatek/patches/120-use-xz-instead-of-lzma.patch b/lede/package/boot/uboot-mediatek/patches/120-use-xz-instead-of-lzma.patch index 9a9224963d..3c6e879bb5 100644 --- a/lede/package/boot/uboot-mediatek/patches/120-use-xz-instead-of-lzma.patch +++ b/lede/package/boot/uboot-mediatek/patches/120-use-xz-instead-of-lzma.patch @@ -1,6 +1,6 @@ --- a/Makefile +++ b/Makefile -@@ -1083,7 +1083,7 @@ quiet_cmd_pad_cat = CAT $@ +@@ -1298,7 +1298,7 @@ quiet_cmd_pad_cat = CAT $@ cmd_pad_cat = $(cmd_objcopy) && $(append) || { rm -f $@; false; } quiet_cmd_lzma = LZMA $@ diff --git a/lede/package/boot/uboot-mediatek/patches/100-29-board-mediatek-wire-up-NMBM-support.patch b/lede/package/boot/uboot-mediatek/patches/129-board-mediatek-wire-up-NMBM-support.patch similarity index 81% rename from lede/package/boot/uboot-mediatek/patches/100-29-board-mediatek-wire-up-NMBM-support.patch rename to lede/package/boot/uboot-mediatek/patches/129-board-mediatek-wire-up-NMBM-support.patch index f22449ae76..011122202d 100644 --- a/lede/package/boot/uboot-mediatek/patches/100-29-board-mediatek-wire-up-NMBM-support.patch +++ b/lede/package/boot/uboot-mediatek/patches/129-board-mediatek-wire-up-NMBM-support.patch @@ -12,7 +12,7 @@ Subject: [PATCH] board: mediatek: wire-up NMBM support --- a/board/mediatek/mt7622/mt7622_rfb.c +++ b/board/mediatek/mt7622/mt7622_rfb.c -@@ -10,6 +10,11 @@ +@@ -9,4 +9,42 @@ #include #include @@ -22,12 +22,6 @@ Subject: [PATCH] board: mediatek: wire-up NMBM support +#include + DECLARE_GLOBAL_DATA_PTR; - - int board_init(void) -@@ -23,3 +28,36 @@ int board_late_init(void) - env_relocate(); - return 0; - } + +int board_nmbm_init(void) +{ @@ -64,7 +58,7 @@ Subject: [PATCH] board: mediatek: wire-up NMBM support --- a/board/mediatek/mt7629/mt7629_rfb.c +++ b/board/mediatek/mt7629/mt7629_rfb.c @@ -6,6 +6,11 @@ - #include + #include #include +#include @@ -75,9 +69,9 @@ Subject: [PATCH] board: mediatek: wire-up NMBM support DECLARE_GLOBAL_DATA_PTR; int board_init(void) -@@ -20,3 +25,36 @@ uint32_t spl_nand_get_uboot_raw_page(voi - { - return CONFIG_SPL_PAD_TO; +@@ -15,3 +20,36 @@ int board_init(void) + + return 0; } + +int board_nmbm_init(void) @@ -114,35 +108,15 @@ Subject: [PATCH] board: mediatek: wire-up NMBM support +} --- a/board/mediatek/mt7981/mt7981_rfb.c +++ b/board/mediatek/mt7981/mt7981_rfb.c -@@ -4,7 +4,58 @@ +@@ -4,3 +4,38 @@ * Author: Sam Shih */ -+#include -+#include -+#include -+#include -+#include -+ +#include +#include +#include +#include + -+DECLARE_GLOBAL_DATA_PTR; -+ - int board_init(void) - { - return 0; - } -+ -+int board_late_init(void) -+{ -+ gd->env_valid = 1; //to load environment variable from persistent store -+ env_relocate(); -+ return 0; -+} -+ +int board_nmbm_init(void) +{ +#ifdef CONFIG_ENABLE_NAND_NMBM @@ -175,35 +149,15 @@ Subject: [PATCH] board: mediatek: wire-up NMBM support +} --- a/board/mediatek/mt7986/mt7986_rfb.c +++ b/board/mediatek/mt7986/mt7986_rfb.c -@@ -4,7 +4,60 @@ +@@ -4,3 +4,40 @@ * Author: Sam Shih */ -+#include -+#include -+#include -+#include -+#include -+ +#include +#include +#include +#include + -+DECLARE_GLOBAL_DATA_PTR; -+ - int board_init(void) - { - return 0; - } -+ -+int board_late_init(void) -+{ -+ gd->env_valid = 1; //to load environment variable from persistent store -+ env_relocate(); -+ return 0; -+} -+ +int board_nmbm_init(void) +{ +#ifdef CONFIG_ENABLE_NAND_NMBM diff --git a/lede/package/boot/uboot-mediatek/patches/130-fix-mkimage-host-build.patch b/lede/package/boot/uboot-mediatek/patches/130-fix-mkimage-host-build.patch deleted file mode 100644 index 86a424e8b7..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/130-fix-mkimage-host-build.patch +++ /dev/null @@ -1,24 +0,0 @@ ---- a/tools/image-host.c -+++ b/tools/image-host.c -@@ -1137,6 +1137,7 @@ static int fit_config_add_verification_d - * 2) get public key (X509_get_pubkey) - * 3) provide der format (d2i_RSAPublicKey) - */ -+#ifdef CONFIG_TOOLS_LIBCRYPTO - static int read_pub_key(const char *keydir, const void *name, - unsigned char **pubkey, int *pubkey_len) - { -@@ -1190,6 +1191,13 @@ err_cert: - fclose(f); - return ret; - } -+#else -+static int read_pub_key(const char *keydir, const void *name, -+ unsigned char **pubkey, int *pubkey_len) -+{ -+ return -ENOSYS; -+} -+#endif - - int fit_pre_load_data(const char *keydir, void *keydest, void *fit) - { diff --git a/lede/package/boot/uboot-mediatek/patches/200-cmd-add-imsz-and-imszb.patch b/lede/package/boot/uboot-mediatek/patches/200-cmd-add-imsz-and-imszb.patch index 28175e02e8..6d7d8f0b43 100644 --- a/lede/package/boot/uboot-mediatek/patches/200-cmd-add-imsz-and-imszb.patch +++ b/lede/package/boot/uboot-mediatek/patches/200-cmd-add-imsz-and-imszb.patch @@ -1,17 +1,16 @@ --- a/cmd/bootm.c +++ b/cmd/bootm.c -@@ -245,6 +245,67 @@ U_BOOT_CMD( +@@ -260,6 +260,76 @@ U_BOOT_CMD( /* iminfo - print header info for a requested image */ /*******************************************************************/ #if defined(CONFIG_CMD_IMI) -+#if defined(CONFIG_FIT) +#define SECTOR_SHIFT 9 +static int image_totalsize(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[], short int in_blocks) +{ + ulong addr; -+ void *fit; -+ int bsize, tsize; ++ void *hdr; ++ uint32_t bsize, tsize = 0; + char buf[16]; + + if (argc >= 2) @@ -19,9 +18,20 @@ + else + addr = image_load_addr; + -+ fit = (void *)map_sysmem(addr, 0); -+ tsize = fit_get_totalsize(fit); -+ unmap_sysmem(fit); ++ hdr = (void *)map_sysmem(addr, 0); ++ ++ switch (genimg_get_format(hdr)) { ++ case IMAGE_FORMAT_LEGACY: ++ if(CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)) ++ tsize = image_get_image_size(hdr); ++ break; ++ case IMAGE_FORMAT_FIT: ++ if(CONFIG_IS_ENABLED(FIT)) ++ tsize = fit_get_totalsize(hdr); ++ break; ++ } ++ ++ unmap_sysmem(hdr); + if (tsize == 0) + return 1; + @@ -64,13 +74,12 @@ + "addr [maxhdrlen] [varname]\n" +); + -+#endif static int do_iminfo(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { --- a/boot/image-fit.c +++ b/boot/image-fit.c -@@ -2051,6 +2051,47 @@ static const char *fit_get_image_type_pr +@@ -2054,6 +2054,47 @@ static const char *fit_get_image_type_pr return "unknown"; } @@ -101,7 +110,7 @@ + (noffset >= 0) && (ndepth > 0); + noffset = fdt_next_node(fit, noffset, &ndepth)) { + if (ndepth == 1) { -+ ret = fit_image_get_data_and_size(fit, noffset, &data, &data_size); ++ ret = fit_image_get_data(fit, noffset, &data, &data_size); + if (ret) + goto out; + @@ -120,7 +129,7 @@ int arch, int ph_type, int bootstage_id, --- a/include/image.h +++ b/include/image.h -@@ -1049,6 +1049,7 @@ int fit_parse_subimage(const char *spec, +@@ -1114,6 +1114,7 @@ int fit_parse_subimage(const char *spec, ulong *addr, const char **image_name); int fit_get_subimage_count(const void *fit, int images_noffset); diff --git a/lede/package/boot/uboot-mediatek/patches/211-cmd-bootmenu-custom-title.patch b/lede/package/boot/uboot-mediatek/patches/211-cmd-bootmenu-custom-title.patch index a99b77be08..3a66aa298a 100644 --- a/lede/package/boot/uboot-mediatek/patches/211-cmd-bootmenu-custom-title.patch +++ b/lede/package/boot/uboot-mediatek/patches/211-cmd-bootmenu-custom-title.patch @@ -1,6 +1,6 @@ --- a/cmd/bootmenu.c +++ b/cmd/bootmenu.c -@@ -452,7 +452,11 @@ static void menu_display_statusline(stru +@@ -482,7 +482,11 @@ static void menu_display_statusline(stru printf(ANSI_CURSOR_POSITION, 1, 1); puts(ANSI_CLEAR_LINE); printf(ANSI_CURSOR_POSITION, 2, 3); @@ -13,7 +13,7 @@ puts(ANSI_CLEAR_LINE_TO_END); printf(ANSI_CURSOR_POSITION, 3, 1); puts(ANSI_CLEAR_LINE); -@@ -537,6 +541,7 @@ static enum bootmenu_ret bootmenu_show(i +@@ -573,6 +577,7 @@ static enum bootmenu_ret bootmenu_show(i return BOOTMENU_RET_FAIL; } @@ -23,11 +23,11 @@ goto cleanup; --- a/include/menu.h +++ b/include/menu.h -@@ -45,6 +45,7 @@ struct bootmenu_data { - int active; /* active menu entry */ +@@ -43,6 +43,7 @@ struct bootmenu_data { + int last_active; /* last active menu entry */ int count; /* total count of menu entries */ struct bootmenu_entry *first; /* first menu entry */ + char *mtitle; /* custom menu title */ - bool last_choiced; }; + /** enum bootmenu_key - keys that can be returned by the bootmenu */ diff --git a/lede/package/boot/uboot-mediatek/patches/220-cmd-env-readmem.patch b/lede/package/boot/uboot-mediatek/patches/220-cmd-env-readmem.patch index 7bf87ef7b5..7d4018a1a4 100644 --- a/lede/package/boot/uboot-mediatek/patches/220-cmd-env-readmem.patch +++ b/lede/package/boot/uboot-mediatek/patches/220-cmd-env-readmem.patch @@ -1,6 +1,6 @@ --- a/cmd/Kconfig +++ b/cmd/Kconfig -@@ -622,6 +622,12 @@ config CMD_ENV_EXISTS +@@ -715,6 +715,12 @@ config CMD_ENV_EXISTS Check if a variable is defined in the environment for use in shell scripting. @@ -15,7 +15,7 @@ help --- a/cmd/nvedit.c +++ b/cmd/nvedit.c -@@ -385,6 +385,60 @@ int do_env_ask(struct cmd_tbl *cmdtp, in +@@ -273,6 +273,60 @@ static int do_env_ask(struct cmd_tbl *cm } #endif @@ -69,14 +69,14 @@ + unmap_sysmem(buf); + + /* Continue calling setenv code */ -+ return _do_env_set(flag, 3, local_args, H_INTERACTIVE); ++ return env_do_env_set(flag, 3, local_args, H_INTERACTIVE); +} +#endif + #if defined(CONFIG_CMD_ENV_CALLBACK) static int print_static_binding(const char *var_name, const char *callback_name, void *priv) -@@ -1201,6 +1255,9 @@ static struct cmd_tbl cmd_env_sub[] = { +@@ -1092,6 +1146,9 @@ static struct cmd_tbl cmd_env_sub[] = { U_BOOT_CMD_MKENT(load, 1, 0, do_env_load, "", ""), #endif U_BOOT_CMD_MKENT(print, CONFIG_SYS_MAXARGS, 1, do_env_print, "", ""), @@ -86,7 +86,7 @@ #if defined(CONFIG_CMD_RUN) U_BOOT_CMD_MKENT(run, CONFIG_SYS_MAXARGS, 1, do_run, "", ""), #endif -@@ -1284,6 +1341,9 @@ U_BOOT_LONGHELP(env, +@@ -1176,6 +1233,9 @@ U_BOOT_LONGHELP(env, #if defined(CONFIG_CMD_NVEDIT_EFI) "env print -e [-guid guid] [-n] [name ...] - print UEFI environment\n" #endif @@ -96,7 +96,7 @@ #if defined(CONFIG_CMD_RUN) "env run var [...] - run commands in an environment variable\n" #endif -@@ -1392,6 +1452,17 @@ U_BOOT_CMD( +@@ -1284,6 +1344,17 @@ U_BOOT_CMD( ); #endif diff --git a/lede/package/boot/uboot-mediatek/patches/250-fix-mmc-erase-timeout.patch b/lede/package/boot/uboot-mediatek/patches/250-fix-mmc-erase-timeout.patch index fd5fdd814b..6d7844f66d 100644 --- a/lede/package/boot/uboot-mediatek/patches/250-fix-mmc-erase-timeout.patch +++ b/lede/package/boot/uboot-mediatek/patches/250-fix-mmc-erase-timeout.patch @@ -1,11 +1,11 @@ --- a/drivers/mmc/mmc_write.c +++ b/drivers/mmc/mmc_write.c -@@ -80,7 +80,7 @@ ulong mmc_berase(struct blk_desc *block_ +@@ -79,7 +79,7 @@ ulong mmc_berase(struct blk_desc *block_ u32 start_rem, blkcnt_rem, erase_args = 0; struct mmc *mmc = find_mmc_device(dev_num); lbaint_t blk = 0, blk_r = 0; - int timeout_ms = 1000; + int timeout_ms = blkcnt; + u32 grpcnt; + - if (!mmc) - return -1; diff --git a/lede/package/boot/uboot-mediatek/patches/280-image-fdt-save-name-of-FIT-configuration-in-chosen-node.patch b/lede/package/boot/uboot-mediatek/patches/280-image-fdt-save-name-of-FIT-configuration-in-chosen-node.patch index f087bec72a..aa4a252909 100644 --- a/lede/package/boot/uboot-mediatek/patches/280-image-fdt-save-name-of-FIT-configuration-in-chosen-node.patch +++ b/lede/package/boot/uboot-mediatek/patches/280-image-fdt-save-name-of-FIT-configuration-in-chosen-node.patch @@ -16,7 +16,7 @@ Reviewed-by: Tom Rini --- a/boot/image-fdt.c +++ b/boot/image-fdt.c -@@ -637,6 +637,12 @@ int image_setup_libfdt(struct bootm_head +@@ -631,6 +631,12 @@ int image_setup_libfdt(struct bootm_head images->fit_uname_cfg, strlen(images->fit_uname_cfg) + 1, 1); diff --git a/lede/package/boot/uboot-mediatek/patches/290-mt7981-add-USB-nodes.patch b/lede/package/boot/uboot-mediatek/patches/290-mt7981-add-USB-nodes.patch deleted file mode 100644 index cb1648f5e8..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/290-mt7981-add-USB-nodes.patch +++ /dev/null @@ -1,71 +0,0 @@ -From cca5775031e4890f195246772e00f7f4ae7438f6 Mon Sep 17 00:00:00 2001 -From: John Crispin -Date: Mon, 19 Feb 2024 05:52:24 +0100 -Subject: [PATCH 1/2] mt7981.dtsi: add USB nodes - -Signed-off-by: John Crispin ---- - arch/arm/dts/mt7981.dtsi | 47 ++++++++++++++++++++++++++++++++++++++++ - 1 file changed, 47 insertions(+) - ---- a/arch/arm/dts/mt7981.dtsi -+++ b/arch/arm/dts/mt7981.dtsi -@@ -6,6 +6,7 @@ - - #include - #include -+#include - #include - #include - #include -@@ -342,4 +343,50 @@ - status = "disabled"; - }; - -+ xhci: xhci@11200000 { -+ compatible = "mediatek,mt7981-xhci", -+ "mediatek,mtk-xhci"; -+ reg = <0x11200000 0x2e00>, -+ <0x11203e00 0x0100>; -+ reg-names = "mac", "ippc"; -+ interrupts = ; -+ phys = <&u2port0 PHY_TYPE_USB2>, -+ <&u3port0 PHY_TYPE_USB3>; -+ clocks = <&infracfg_ao CK_INFRA_IUSB_SYS_CK>, -+ <&infracfg_ao CK_INFRA_IUSB_CK>, -+ <&infracfg_ao CK_INFRA_IUSB_133_CK>, -+ <&infracfg_ao CK_INFRA_IUSB_66M_CK>, -+ <&topckgen CK_TOP_U2U3_XHCI_SEL>; -+ clock-names = "sys_ck", -+ "ref_ck", -+ "mcu_ck", -+ "dma_ck", -+ "xhci_ck"; -+ mediatek,u3p-dis-msk = <0x1>; -+ status = "okay"; -+ }; -+ -+ usbtphy: usb-phy@11e10000 { -+ compatible = "mediatek,mt7981", -+ "mediatek,generic-tphy-v2"; -+ #address-cells = <1>; -+ #size-cells = <1>; -+ status = "okay"; -+ -+ u2port0: usb-phy@11e10000 { -+ reg = <0x11e10000 0x700>; -+ clocks = <&topckgen CK_TOP_USB_FRMCNT_SEL>; -+ clock-names = "ref"; -+ #phy-cells = <1>; -+ status = "okay"; -+ }; -+ -+ u3port0: usb-phy@11e10700 { -+ reg = <0x11e10700 0x900>; -+ clocks = <&topckgen CK_TOP_USB3_PHY_SEL>; -+ clock-names = "ref"; -+ #phy-cells = <1>; -+ status = "okay"; -+ }; -+ }; - }; diff --git a/lede/package/boot/uboot-mediatek/patches/300-mt7623-fix-mmc-get-env-dev.patch b/lede/package/boot/uboot-mediatek/patches/300-mt7623-fix-mmc-get-env-dev.patch index 86c48badda..5fc3d0a344 100644 --- a/lede/package/boot/uboot-mediatek/patches/300-mt7623-fix-mmc-get-env-dev.patch +++ b/lede/package/boot/uboot-mediatek/patches/300-mt7623-fix-mmc-get-env-dev.patch @@ -2,7 +2,7 @@ +++ b/board/mediatek/mt7623/mt7623_rfb.c @@ -5,6 +5,7 @@ - #include + #include #include +#include #include diff --git a/lede/package/boot/uboot-mediatek/patches/301-mt7622-generic-reset-button-ignore-env.patch b/lede/package/boot/uboot-mediatek/patches/301-mt7622-generic-reset-button-ignore-env.patch index 65990156c2..ca1a101eed 100644 --- a/lede/package/boot/uboot-mediatek/patches/301-mt7622-generic-reset-button-ignore-env.patch +++ b/lede/package/boot/uboot-mediatek/patches/301-mt7622-generic-reset-button-ignore-env.patch @@ -1,8 +1,8 @@ --- a/board/mediatek/mt7622/mt7622_rfb.c +++ b/board/mediatek/mt7622/mt7622_rfb.c -@@ -6,9 +6,16 @@ +@@ -5,9 +5,16 @@ + */ - #include #include +#include +#include @@ -17,11 +17,12 @@ #include #include -@@ -24,7 +31,22 @@ int board_init(void) +@@ -16,6 +23,28 @@ - int board_late_init(void) - { -- gd->env_valid = 1; //to load environment variable from persistent store + DECLARE_GLOBAL_DATA_PTR; + ++int board_late_init(void) ++{ + struct udevice *dev; + + if (!button_get_by_label(CONFIG_RESET_BUTTON_LABEL, &dev)) { @@ -38,14 +39,18 @@ + } + } + - env_relocate(); - return 0; - } ++ env_relocate(); ++ return 0; ++} ++ + int board_nmbm_init(void) + { + #ifdef CONFIG_ENABLE_NAND_NMBM --- a/arch/arm/mach-mediatek/Kconfig +++ b/arch/arm/mach-mediatek/Kconfig -@@ -151,4 +151,11 @@ config MTK_BROM_HEADER_INFO - - source "board/mediatek/mt7629/Kconfig" +@@ -165,4 +165,11 @@ config MTK_TZ_MOVABLE + select OF_SYSTEM_SETUP + bool +config RESET_BUTTON_LABEL + string "Button to trigger factory reset" diff --git a/lede/package/boot/uboot-mediatek/patches/302-mt7623-generic-reset-button-ignore-env.patch b/lede/package/boot/uboot-mediatek/patches/302-mt7623-generic-reset-button-ignore-env.patch index b8d89058a2..a6e4229dd5 100644 --- a/lede/package/boot/uboot-mediatek/patches/302-mt7623-generic-reset-button-ignore-env.patch +++ b/lede/package/boot/uboot-mediatek/patches/302-mt7623-generic-reset-button-ignore-env.patch @@ -3,7 +3,7 @@ @@ -4,9 +4,18 @@ */ - #include + #include +#include +#include +#include diff --git a/lede/package/boot/uboot-mediatek/patches/303-mt7986-generic-reset-button-ignore-env.patch b/lede/package/boot/uboot-mediatek/patches/303-mt7986-generic-reset-button-ignore-env.patch index 45290149f3..d2f85c152b 100644 --- a/lede/package/boot/uboot-mediatek/patches/303-mt7986-generic-reset-button-ignore-env.patch +++ b/lede/package/boot/uboot-mediatek/patches/303-mt7986-generic-reset-button-ignore-env.patch @@ -1,27 +1,26 @@ --- a/board/mediatek/mt7986/mt7986_rfb.c +++ b/board/mediatek/mt7986/mt7986_rfb.c -@@ -6,9 +6,16 @@ +@@ -4,11 +4,43 @@ + * Author: Sam Shih + */ - #include - #include ++#include +#include +#include - #include - #include - #include ++#include ++#include +#include -+ + #include + #include + #include + #include + +#ifndef CONFIG_RESET_BUTTON_LABEL +#define CONFIG_RESET_BUTTON_LABEL "reset" +#endif - - #include - #include -@@ -24,7 +31,22 @@ int board_init(void) - - int board_late_init(void) - { -- gd->env_valid = 1; //to load environment variable from persistent store ++ ++int board_late_init(void) ++{ + struct udevice *dev; + + gd->env_valid = ENV_VALID; @@ -38,6 +37,10 @@ + gd->env_valid = ENV_INVALID; + } + } - env_relocate(); - return 0; - } ++ env_relocate(); ++ return 0; ++} ++ + int board_nmbm_init(void) + { + #ifdef CONFIG_ENABLE_NAND_NMBM diff --git a/lede/package/boot/uboot-mediatek/patches/304-mt7981-generic-reset-button-ignore-env.patch b/lede/package/boot/uboot-mediatek/patches/304-mt7981-generic-reset-button-ignore-env.patch index fc44334982..191ca0baea 100644 --- a/lede/package/boot/uboot-mediatek/patches/304-mt7981-generic-reset-button-ignore-env.patch +++ b/lede/package/boot/uboot-mediatek/patches/304-mt7981-generic-reset-button-ignore-env.patch @@ -1,27 +1,26 @@ --- a/board/mediatek/mt7981/mt7981_rfb.c +++ b/board/mediatek/mt7981/mt7981_rfb.c -@@ -6,9 +6,16 @@ +@@ -4,11 +4,43 @@ + * Author: Sam Shih + */ - #include - #include ++#include +#include +#include - #include - #include - #include ++#include ++#include +#include -+ + #include + #include + #include + #include + +#ifndef CONFIG_RESET_BUTTON_LABEL +#define CONFIG_RESET_BUTTON_LABEL "reset" +#endif - - #include - #include -@@ -24,7 +31,22 @@ int board_init(void) - - int board_late_init(void) - { -- gd->env_valid = 1; //to load environment variable from persistent store ++ ++int board_late_init(void) ++{ + struct udevice *dev; + + gd->env_valid = ENV_VALID; @@ -38,6 +37,10 @@ + gd->env_valid = ENV_INVALID; + } + } - env_relocate(); - return 0; - } ++ env_relocate(); ++ return 0; ++} ++ + int board_nmbm_init(void) + { + #ifdef CONFIG_ENABLE_NAND_NMBM diff --git a/lede/package/boot/uboot-mediatek/patches/305-mt7988-generic-reset-button-ignore-env.patch b/lede/package/boot/uboot-mediatek/patches/305-mt7988-generic-reset-button-ignore-env.patch index 2bbc5c1005..aeb39819cf 100644 --- a/lede/package/boot/uboot-mediatek/patches/305-mt7988-generic-reset-button-ignore-env.patch +++ b/lede/package/boot/uboot-mediatek/patches/305-mt7988-generic-reset-button-ignore-env.patch @@ -1,10 +1,9 @@ --- a/board/mediatek/mt7988/mt7988_rfb.c +++ b/board/mediatek/mt7988/mt7988_rfb.c -@@ -4,7 +4,43 @@ +@@ -4,3 +4,37 @@ * Author: Sam Shih */ -+#include +#include +#include +#include @@ -16,11 +15,6 @@ +#ifndef CONFIG_RESET_BUTTON_LABEL +#define CONFIG_RESET_BUTTON_LABEL "reset" +#endif -+ - int board_init(void) - { - return 0; - } + +int board_late_init(void) +{ diff --git a/lede/package/boot/uboot-mediatek/patches/306-mt7987-generic-reset-button-ignore-env.patch b/lede/package/boot/uboot-mediatek/patches/306-mt7987-generic-reset-button-ignore-env.patch new file mode 100644 index 0000000000..5168735e06 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/306-mt7987-generic-reset-button-ignore-env.patch @@ -0,0 +1,40 @@ +--- a/board/mediatek/mt7987/mt7987_rfb.c ++++ b/board/mediatek/mt7987/mt7987_rfb.c +@@ -4,3 +4,37 @@ + * Author: Sam Shih + */ + ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#ifndef CONFIG_RESET_BUTTON_LABEL ++#define CONFIG_RESET_BUTTON_LABEL "reset" ++#endif ++ ++int board_late_init(void) ++{ ++ gd->env_valid = 1; //to load environment variable from persistent store ++ struct udevice *dev; ++ ++ gd->env_valid = ENV_VALID; ++ if (!button_get_by_label(CONFIG_RESET_BUTTON_LABEL, &dev)) { ++ puts("reset button found\n"); ++#ifdef CONFIG_RESET_BUTTON_SETTLE_DELAY ++ if (CONFIG_RESET_BUTTON_SETTLE_DELAY > 0) { ++ button_get_state(dev); ++ mdelay(CONFIG_RESET_BUTTON_SETTLE_DELAY); ++ } ++#endif ++ if (button_get_state(dev) == BUTTON_ON) { ++ puts("button pushed, resetting environment\n"); ++ gd->env_valid = ENV_INVALID; ++ } ++ } ++ env_relocate(); ++ return 0; ++} diff --git a/lede/package/boot/uboot-mediatek/patches/310-mt7988-select-rootdisk.patch b/lede/package/boot/uboot-mediatek/patches/310-mt7988-select-rootdisk.patch index 28d7e0a3f6..3a44dcd8dc 100644 --- a/lede/package/boot/uboot-mediatek/patches/310-mt7988-select-rootdisk.patch +++ b/lede/package/boot/uboot-mediatek/patches/310-mt7988-select-rootdisk.patch @@ -1,6 +1,6 @@ --- a/board/mediatek/mt7988/mt7988_rfb.c +++ b/board/mediatek/mt7988/mt7988_rfb.c -@@ -11,7 +11,9 @@ +@@ -10,7 +10,9 @@ #include #include #include @@ -10,7 +10,7 @@ #ifndef CONFIG_RESET_BUTTON_LABEL #define CONFIG_RESET_BUTTON_LABEL "reset" -@@ -44,3 +46,54 @@ int board_late_init(void) +@@ -38,3 +40,54 @@ int board_late_init(void) env_relocate(); return 0; } diff --git a/lede/package/boot/uboot-mediatek/patches/311-mt7986-select-rootdisk.patch b/lede/package/boot/uboot-mediatek/patches/311-mt7986-select-rootdisk.patch index 3312162765..535190b046 100644 --- a/lede/package/boot/uboot-mediatek/patches/311-mt7986-select-rootdisk.patch +++ b/lede/package/boot/uboot-mediatek/patches/311-mt7986-select-rootdisk.patch @@ -1,16 +1,16 @@ --- a/board/mediatek/mt7986/mt7986_rfb.c +++ b/board/mediatek/mt7986/mt7986_rfb.c -@@ -11,7 +11,9 @@ +@@ -9,7 +9,9 @@ + #include #include #include - #include +#include #include +#include - - #ifndef CONFIG_RESET_BUTTON_LABEL - #define CONFIG_RESET_BUTTON_LABEL "reset" -@@ -83,3 +85,54 @@ int board_nmbm_init(void) + #include + #include + #include +@@ -73,3 +75,54 @@ int board_nmbm_init(void) return 0; } diff --git a/lede/package/boot/uboot-mediatek/patches/312-mt7622-select-rootdisk.patch b/lede/package/boot/uboot-mediatek/patches/312-mt7622-select-rootdisk.patch index 70cbf6b463..586015cd0d 100644 --- a/lede/package/boot/uboot-mediatek/patches/312-mt7622-select-rootdisk.patch +++ b/lede/package/boot/uboot-mediatek/patches/312-mt7622-select-rootdisk.patch @@ -1,6 +1,6 @@ --- a/board/mediatek/mt7622/mt7622_rfb.c +++ b/board/mediatek/mt7622/mt7622_rfb.c -@@ -11,7 +11,9 @@ +@@ -10,7 +10,9 @@ #include #include #include @@ -10,7 +10,7 @@ #ifndef CONFIG_RESET_BUTTON_LABEL #define CONFIG_RESET_BUTTON_LABEL "reset" -@@ -22,10 +24,43 @@ +@@ -21,8 +23,46 @@ #include #include @@ -41,8 +41,8 @@ +static int gpio_mode0; +static int msdc_int; + - int board_init(void) - { ++int board_init(void) ++{ + /* + * Save content of GPIO_MODE0 as left behind by the BootROM. + * Also grab MSDC1 INT status to see if BootROM has been reading @@ -51,10 +51,13 @@ + */ + gpio_mode0 = readl(MT7622_GPIO_MODE0); + msdc_int = readl(MT7622_MSDC_INT); - return 0; - } - -@@ -83,3 +118,84 @@ int board_nmbm_init(void) ++ return 0; ++} ++ + int board_late_init(void) + { + struct udevice *dev; +@@ -77,3 +117,84 @@ int board_nmbm_init(void) return 0; } @@ -139,3 +142,13 @@ + + return 0; +} +--- a/configs/mt7622_rfb_defconfig ++++ b/configs/mt7622_rfb_defconfig +@@ -16,7 +16,6 @@ CONFIG_DEFAULT_FDT_FILE="mt7622-rfb" + CONFIG_SYS_PBSIZE=1049 + CONFIG_LOGLEVEL=7 + CONFIG_LOG=y +-# CONFIG_BOARD_INIT is not set + CONFIG_SYS_PROMPT="MT7622> " + CONFIG_SYS_MAXARGS=8 + CONFIG_CMD_BOOTMENU=y diff --git a/lede/package/boot/uboot-mediatek/patches/314-mt7981-select-rootdisk.patch b/lede/package/boot/uboot-mediatek/patches/314-mt7981-select-rootdisk.patch new file mode 100644 index 0000000000..de20f67f74 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/314-mt7981-select-rootdisk.patch @@ -0,0 +1,67 @@ +--- a/board/mediatek/mt7981/mt7981_rfb.c ++++ b/board/mediatek/mt7981/mt7981_rfb.c +@@ -9,7 +9,9 @@ + #include + #include + #include ++#include + #include ++#include + #include + #include + #include +@@ -71,3 +73,54 @@ int board_nmbm_init(void) + + return 0; + } ++ ++#define MT7981_BOOT_NOR 0 ++#define MT7981_BOOT_SPIM_NAND 1 /* ToDo: fallback to SD */ ++#define MT7981_BOOT_EMMC 2 ++#define MT7981_BOOT_SNFI_NAND 3 /* ToDo (treated as SD) */ ++ ++int ft_system_setup(void *blob, struct bd_info *bd) ++{ ++ const u32 *media_handle_p; ++ int chosen, len, ret; ++ const char *media; ++ u32 media_handle; ++ ++ switch ((readl(0x11d006f0) & 0xc0) >> 6) { ++ case MT7981_BOOT_NOR: ++ media = "rootdisk-nor"; ++ break ++ ;; ++ case MT7981_BOOT_SPIM_NAND: ++ media = "rootdisk-spim-nand"; ++ break ++ ;; ++ case MT7981_BOOT_EMMC: ++ media = "rootdisk-emmc"; ++ break ++ ;; ++ case MT7981_BOOT_SNFI_NAND: ++ media = "rootdisk-sd"; ++ break ++ ;; ++ } ++ ++ chosen = fdt_path_offset(blob, "/chosen"); ++ if (chosen <= 0) ++ return 0; ++ ++ media_handle_p = fdt_getprop(blob, chosen, media, &len); ++ if (media_handle_p <= 0 || len != 4) ++ return 0; ++ ++ media_handle = *media_handle_p; ++ ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle)); ++ if (ret) { ++ printf("cannot set media phandle %s as rootdisk /chosen node\n", media); ++ return ret; ++ } ++ ++ printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle)); ++ ++ return 0; ++} diff --git a/lede/package/boot/uboot-mediatek/patches/315-mt7987-select-rootdisk.patch b/lede/package/boot/uboot-mediatek/patches/315-mt7987-select-rootdisk.patch new file mode 100644 index 0000000000..645e478300 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/315-mt7987-select-rootdisk.patch @@ -0,0 +1,67 @@ +--- a/board/mediatek/mt7987/mt7987_rfb.c ++++ b/board/mediatek/mt7987/mt7987_rfb.c +@@ -10,7 +10,9 @@ + #include + #include + #include ++#include + #include ++#include + + #ifndef CONFIG_RESET_BUTTON_LABEL + #define CONFIG_RESET_BUTTON_LABEL "reset" +@@ -38,3 +40,54 @@ int board_late_init(void) + env_relocate(); + return 0; + } ++ ++#define MT7987_BOOT_SD 0 ++#define MT7987_BOOT_NOR 1 ++#define MT7987_BOOT_SPIM_NAND 2 ++#define MT7987_BOOT_EMMC 3 ++ ++int mtk_ft_system_setup(void *blob, struct bd_info *bd) ++{ ++ const u32 *media_handle_p; ++ int chosen, len, ret; ++ const char *media; ++ u32 media_handle; ++ ++ switch ((readl(0x1001f6f0) & 0xc0) >> 6) { ++ case MT7987_BOOT_SD: ++ media = "rootdisk-sd"; ++ break ++ ;; ++ case MT7987_BOOT_NOR: ++ media = "rootdisk-nor"; ++ break ++ ;; ++ case MT7987_BOOT_SPIM_NAND: ++ media = "rootdisk-spim-nand"; ++ break ++ ;; ++ case MT7987_BOOT_EMMC: ++ media = "rootdisk-emmc"; ++ break ++ ;; ++ } ++ ++ chosen = fdt_path_offset(blob, "/chosen"); ++ if (chosen <= 0) ++ return 0; ++ ++ media_handle_p = fdt_getprop(blob, chosen, media, &len); ++ if (media_handle_p <= 0 || len != 4) ++ return 0; ++ ++ media_handle = *media_handle_p; ++ ret = fdt_setprop(blob, chosen, "rootdisk", &media_handle, sizeof(media_handle)); ++ if (ret) { ++ printf("cannot set media phandle %s as rootdisk /chosen node\n", media); ++ return ret; ++ } ++ ++ printf("set /chosen/rootdisk to bootrom media: %s (phandle 0x%08x)\n", media, fdt32_to_cpu(media_handle)); ++ ++ return 0; ++} diff --git a/lede/package/boot/uboot-mediatek/patches/400-update-bpir2-defconfig.patch b/lede/package/boot/uboot-mediatek/patches/400-update-bpir2-defconfig.patch index ab3424e6b5..45f7304827 100644 --- a/lede/package/boot/uboot-mediatek/patches/400-update-bpir2-defconfig.patch +++ b/lede/package/boot/uboot-mediatek/patches/400-update-bpir2-defconfig.patch @@ -1,6 +1,6 @@ --- a/configs/mt7623n_bpir2_defconfig +++ b/configs/mt7623n_bpir2_defconfig -@@ -7,34 +7,106 @@ CONFIG_SYS_MALLOC_F_LEN=0x4000 +@@ -7,34 +7,67 @@ CONFIG_SYS_MALLOC_F_LEN=0x4000 CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x81ffff10 @@ -8,138 +8,111 @@ +CONFIG_ENV_SIZE=0x10000 CONFIG_ENV_OFFSET=0x100000 CONFIG_DEFAULT_DEVICE_TREE="mt7623n-bananapi-bpi-r2" ++CONFIG_OF_LIBFDT_OVERLAY=y CONFIG_TARGET_MT7623=y ++CONFIG_RESET_BUTTON_LABEL="factory" + CONFIG_SYS_BOOTM_LEN=0x4000000 CONFIG_SYS_LOAD_ADDR=0x84000000 ++CONFIG_PCI=y ++CONFIG_AHCI=y + # CONFIG_EFI_GRUB_ARM32_WORKAROUND is not set CONFIG_FIT=y CONFIG_FIT_VERBOSE=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_BOARD_LATE_INIT=y +# CONFIG_BOOTSTD is not set -+# CONFIG_BOOT_DEFAULTS is not set CONFIG_DISTRO_DEFAULTS=y CONFIG_BOOTDELAY=3 -+CONFIG_BOOTP_SEND_HOSTNAME=y ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y CONFIG_DEFAULT_FDT_FILE="mt7623n-bananapi-bpi-r2.dtb" + CONFIG_SYS_PBSIZE=1049 ++CONFIG_LOGLEVEL=7 CONFIG_SYS_CONSOLE_IS_IN_ENV=y -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r2_env" -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_RESET_BUTTON_LABEL="factory" -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_CMD_ENV_FLAGS=y ++CONFIG_LOG=y # CONFIG_DISPLAY_BOARDINFO is not set -CONFIG_SYS_PROMPT="U-Boot> " -+CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_BOARD_LATE_INIT=y +CONFIG_SYS_PROMPT="MT7623> " CONFIG_SYS_MAXARGS=8 - CONFIG_SYS_PBSIZE=1049 - CONFIG_SYS_BOOTM_LEN=0x4000000 ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y # CONFIG_CMD_ELF is not set # CONFIG_CMD_XIMG is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y CONFIG_CMD_GPIO=y -CONFIG_CMD_GPT=y -+# CONFIG_CMD_GPT is not set -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y +CONFIG_CMD_MBR=y CONFIG_CMD_MMC=y CONFIG_CMD_READ=y -# CONFIG_CMD_SETEXPR is not set -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y +CONFIG_CMD_SATA=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y +CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_CACHE=y +CONFIG_CMD_UUID=y -+CONFIG_CMD_SCSI=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_ETH=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_DM_MMC=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PCI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_HUSH_PARSER=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_FS_UUID=y CONFIG_ENV_OVERWRITE=y CONFIG_ENV_IS_IN_MMC=y - CONFIG_SYS_RELOC_GD_ENV_ADDR=y - CONFIG_NET_RANDOM_ETHADDR=y + CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r2_env" ++CONFIG_VERSION_VARIABLE=y ++CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NETCONSOLE=y CONFIG_USE_IPADDR=y CONFIG_IPADDR="192.168.1.1" CONFIG_USE_SERVERIP=y -@@ -46,6 +118,12 @@ CONFIG_CLK=y +@@ -42,23 +75,38 @@ CONFIG_SERVERIP="192.168.1.2" + CONFIG_NET_RANDOM_ETHADDR=y + CONFIG_REGMAP=y + CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y + CONFIG_CLK=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y + # CONFIG_MMC_QUIRKS is not set CONFIG_SUPPORT_EMMC_BOOT=y CONFIG_MMC_HS400_SUPPORT=y CONFIG_MMC_MTK=y -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PHY=y -+CONFIG_PINCONF=y CONFIG_PHY_FIXED=y CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y CONFIG_PINCTRL=y -@@ -55,10 +133,13 @@ CONFIG_POWER_DOMAIN=y + CONFIG_PINCONF=y + CONFIG_PINCTRL_MT7623=y + CONFIG_POWER_DOMAIN=y CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_SCSI=y CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y CONFIG_MTK_SERIAL=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y CONFIG_SYSRESET=y CONFIG_SYSRESET_WATCHDOG=y CONFIG_TIMER=y CONFIG_MTK_TIMER=y -+CONFIG_VERSION_VARIABLE=y CONFIG_WDT_MTK=y ++CONFIG_RANDOM_UUID=y CONFIG_LZMA=y - # CONFIG_EFI_GRUB_ARM32_WORKAROUND is not set --- /dev/null -+++ b/bananapi_bpi-r2_env ++++ b/defenvs/bananapi_bpi-r2_env @@ -0,0 +1,69 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 diff --git a/lede/package/boot/uboot-mediatek/patches/401-update-u7623-defconfig.patch b/lede/package/boot/uboot-mediatek/patches/401-update-u7623-defconfig.patch index 58c62dc3ef..ae0ddebc59 100644 --- a/lede/package/boot/uboot-mediatek/patches/401-update-u7623-defconfig.patch +++ b/lede/package/boot/uboot-mediatek/patches/401-update-u7623-defconfig.patch @@ -1,6 +1,6 @@ --- a/configs/mt7623a_unielec_u7623_02_defconfig +++ b/configs/mt7623a_unielec_u7623_02_defconfig -@@ -7,33 +7,109 @@ CONFIG_SYS_MALLOC_F_LEN=0x4000 +@@ -7,32 +7,65 @@ CONFIG_SYS_MALLOC_F_LEN=0x4000 CONFIG_NR_DRAM_BANKS=1 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x81ffff10 @@ -8,139 +8,109 @@ +CONFIG_ENV_SIZE=0x10000 CONFIG_ENV_OFFSET=0x100000 CONFIG_DEFAULT_DEVICE_TREE="mt7623a-unielec-u7623-02-emmc" ++CONFIG_OF_LIBFDT_OVERLAY=y CONFIG_TARGET_MT7623=y ++CONFIG_RESET_BUTTON_LABEL="factory" + CONFIG_SYS_BOOTM_LEN=0x4000000 CONFIG_SYS_LOAD_ADDR=0x84000000 ++CONFIG_PCI=y ++CONFIG_AHCI=y CONFIG_FIT=y CONFIG_FIT_VERBOSE=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_BOARD_LATE_INIT=y +# CONFIG_BOOTSTD is not set -+# CONFIG_BOOT_DEFAULTS is not set CONFIG_DISTRO_DEFAULTS=y CONFIG_BOOTDELAY=3 -+CONFIG_BOOTP_SEND_HOSTNAME=y ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y CONFIG_DEFAULT_FDT_FILE="mt7623a-unielec-u7623-02-emmc.dtb" + CONFIG_SYS_PBSIZE=1049 ++CONFIG_LOGLEVEL=7 CONFIG_SYS_CONSOLE_IS_IN_ENV=y -+CONFIG_DEFAULT_ENV_FILE="unielec_u7623-02_env" -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_RESET_BUTTON_LABEL="factory" -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_CMD_ENV_FLAGS=y ++CONFIG_LOG=y # CONFIG_DISPLAY_BOARDINFO is not set -CONFIG_SYS_PROMPT="U-Boot> " -+CONFIG_USE_DEFAULT_ENV_FILE=y ++CONFIG_BOARD_LATE_INIT=y +CONFIG_SYS_PROMPT="MT7623> " CONFIG_SYS_MAXARGS=8 - CONFIG_SYS_PBSIZE=1049 - CONFIG_SYS_BOOTM_LEN=0x4000000 ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BOOTZ=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y # CONFIG_CMD_ELF is not set # CONFIG_CMD_XIMG is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y CONFIG_CMD_GPIO=y -CONFIG_CMD_GPT=y -+# CONFIG_CMD_GPT is not set -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y +CONFIG_CMD_MBR=y CONFIG_CMD_MMC=y CONFIG_CMD_READ=y -# CONFIG_CMD_SETEXPR is not set -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y +CONFIG_CMD_SATA=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y +CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_CACHE=y +CONFIG_CMD_UUID=y -+CONFIG_CMD_READ=y -+CONFIG_CMD_SCSI=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_ETH=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_DM_MMC=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_SERIAL=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PCI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_HUSH_PARSER=y - CONFIG_ENV_IS_IN_MMC=y - CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_SYS_MMC_ENV_DEV=0 ++CONFIG_CMD_HASH=y ++CONFIG_CMD_FS_UUID=y +CONFIG_ENV_OVERWRITE=y - CONFIG_NET_RANDOM_ETHADDR=y + CONFIG_ENV_IS_IN_MMC=y + CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/unielec_u7623-02_env" ++CONFIG_VERSION_VARIABLE=y ++CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NETCONSOLE=y CONFIG_USE_IPADDR=y CONFIG_IPADDR="192.168.1.1" CONFIG_USE_SERVERIP=y -@@ -45,6 +121,11 @@ CONFIG_CLK=y +@@ -40,23 +73,38 @@ CONFIG_SERVERIP="192.168.1.2" + CONFIG_NET_RANDOM_ETHADDR=y + CONFIG_REGMAP=y + CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y + CONFIG_CLK=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y + # CONFIG_MMC_QUIRKS is not set CONFIG_SUPPORT_EMMC_BOOT=y CONFIG_MMC_HS400_SUPPORT=y CONFIG_MMC_MTK=y -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PHY=y CONFIG_PHY_FIXED=y CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y CONFIG_PINCTRL=y -@@ -54,9 +135,12 @@ CONFIG_POWER_DOMAIN=y + CONFIG_PINCONF=y + CONFIG_PINCTRL_MT7623=y + CONFIG_POWER_DOMAIN=y CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_SCSI=y CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y CONFIG_MTK_SERIAL=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y CONFIG_SYSRESET=y CONFIG_SYSRESET_WATCHDOG=y CONFIG_TIMER=y CONFIG_MTK_TIMER=y -+CONFIG_VERSION_VARIABLE=y CONFIG_WDT_MTK=y ++CONFIG_RANDOM_UUID=y CONFIG_LZMA=y --- /dev/null -+++ b/unielec_u7623-02_env ++++ b/defenvs/unielec_u7623-02_env @@ -0,0 +1,47 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -218,13 +188,12 @@ leds { compatible = "gpio-leds"; -@@ -109,6 +122,19 @@ +@@ -109,6 +122,18 @@ }; }; + key_pins_a: keys-alt { + mux { -+ function = "gpio"; + groups = "msdc3"; + }; + diff --git a/lede/package/boot/uboot-mediatek/patches/404-add-bananapi_bpi-r64_defconfigs.patch b/lede/package/boot/uboot-mediatek/patches/404-add-bananapi_bpi-r64_defconfigs.patch index 6ee8729674..707ab9c4f9 100644 --- a/lede/package/boot/uboot-mediatek/patches/404-add-bananapi_bpi-r64_defconfigs.patch +++ b/lede/package/boot/uboot-mediatek/patches/404-add-bananapi_bpi-r64_defconfigs.patch @@ -1,172 +1,137 @@ --- /dev/null +++ b/configs/mt7622_bananapi_bpi-r64-sdmmc_defconfig -@@ -0,0 +1,164 @@ +@@ -0,0 +1,129 @@ +CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y -+CONFIG_TARGET_MT7622=y +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_LOAD_ADDR=0x40080000 -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_DEBUG_UART_BASE=0x11002000 -+CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_ENV_SIZE=0x80000 ++CONFIG_ENV_OFFSET=0x400000 +CONFIG_DEFAULT_DEVICE_TREE="mt7622-bananapi-bpi-r64" +CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_ENV_OFFSET_REDUND=0x480000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r64-sdmmc_env" -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y ++CONFIG_AHCI=y +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEFAULT_FDT_FILE="mediatek/mt7622-bananapi-bpi-r64.dtb" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="MT7622> " ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set +CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ASKENV=y +CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set -+CONFIG_CMD_MMC=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_PCI=y -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y -+CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_ENV_IS_IN_MMC=y -+CONFIG_SYS_MMC_ENV_DEV=1 -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x480000 -+CONFIG_ENV_SIZE=0x80000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_MMC_DEVICE_INDEX=1 ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r64-sdmmc_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y ++CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NETCONSOLE=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PHY_FIXED=y -+CONFIG_MTK_AHCI=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7622=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SUPPORT_EMMC_BOOT=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y +CONFIG_USE_IPADDR=y +CONFIG_IPADDR="192.168.1.1" +CONFIG_USE_SERVERIP=y +CONFIG_SERVERIP="192.168.1.254" ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null -+++ b/bananapi_bpi-r64-sdmmc_env ++++ b/defenvs/bananapi_bpi-r64-sdmmc_env @@ -0,0 +1,81 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -251,161 +216,127 @@ +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null +++ b/configs/mt7622_bananapi_bpi-r64-emmc_defconfig -@@ -0,0 +1,152 @@ +@@ -0,0 +1,118 @@ +CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y -+CONFIG_TARGET_MT7622=y +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_LOAD_ADDR=0x40080000 -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_DEBUG_UART_BASE=0x11002000 -+CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_ENV_SIZE=0x80000 ++CONFIG_ENV_OFFSET=0x400000 +CONFIG_DEFAULT_DEVICE_TREE="mt7622-bananapi-bpi-r64" +CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_ENV_OFFSET_REDUND=0x480000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r64-emmc_env" -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y ++CONFIG_AHCI=y +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEFAULT_FDT_FILE="mt7622-bananapi-bpi-r64" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="MT7622> " ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set +CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y +CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set -+CONFIG_CMD_MMC=y -+CONFIG_CMD_PCI=y -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y -+CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_ENV_IS_IN_MMC=y -+CONFIG_SYS_MMC_ENV_DEV=0 -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x480000 -+CONFIG_ENV_SIZE=0x80000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r64-emmc_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y ++CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NETCONSOLE=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PHY_FIXED=y -+CONFIG_MTK_AHCI=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PCI=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7622=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=0 -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SUPPORT_EMMC_BOOT=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y +CONFIG_USE_IPADDR=y +CONFIG_IPADDR="192.168.1.1" +CONFIG_USE_SERVERIP=y +CONFIG_SERVERIP="192.168.1.254" ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null -+++ b/bananapi_bpi-r64-emmc_env ++++ b/defenvs/bananapi_bpi-r64-emmc_env @@ -0,0 +1,56 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -465,154 +396,118 @@ +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null +++ b/configs/mt7622_bananapi_bpi-r64-snand_defconfig -@@ -0,0 +1,145 @@ +@@ -0,0 +1,109 @@ +CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_LOAD_ADDR=0x40080000 -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_DEBUG_UART_BASE=0x11002000 -+CONFIG_DEBUG_UART_CLOCK=25000000 +CONFIG_DEFAULT_DEVICE_TREE="mt7622-bananapi-bpi-r64" +CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r64-snand_env" -+CONFIG_DISTRO_DEFAULTS=y -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_CMD_ENV_FLAGS=y +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y ++CONFIG_DISTRO_DEFAULTS=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y +CONFIG_DEFAULT_FDT_FILE="mediatek/mt7622-bananapi-bpi-r64.dtb" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y +CONFIG_SYS_PROMPT="MT7622> " ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set +CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_EFIDEBUG=y -+CONFIG_CMD_ENV_READMEM=y ++CONFIG_CMD_ASKENV=y +CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_DM=y +CONFIG_CMD_GPIO=y +CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set +CONFIG_CMD_MMC=y +CONFIG_CMD_MTD=y +CONFIG_CMD_PCI=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y ++CONFIG_CMD_USB=y +CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_UBI=y -+CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_EFIDEBUG=y +CONFIG_CMD_PSTORE=y +CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_USB=y +CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y +CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_REDUNDANT=y +CONFIG_ENV_UBI_PART="ubi" +CONFIG_ENV_UBI_VOLUME="ubootenv" +CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r64-snand_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y ++CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.3" ++CONFIG_NET_RANDOM_ETHADDR=y +CONFIG_REGMAP=y +CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y -+CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PCI=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_MTK=y +CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y +CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y +CONFIG_PCIE_MEDIATEK=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y +CONFIG_PINCTRL_MT7622=y +CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y +CONFIG_RAM=y +CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y +CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_MTK=y -+CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_SPI=y +CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y +CONFIG_USB=y -+CONFIG_USB_HOST=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.3" ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null -+++ b/bananapi_bpi-r64-snand_env ++++ b/defenvs/bananapi_bpi-r64-snand_env @@ -0,0 +1,56 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -663,8 +558,8 @@ +ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery +ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data +ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 -+ubi_write_production=ubi check fit && env exists replacevol && ubi remove fit ; if ubi check fit ; then else run ubi_remove_rootfs ; ubi create fit $filesize dynamic 2 && ubi write $loadaddr fit $filesize ; fi -+ubi_write_recovery=ubi check recovery && env exists replacevol && ubi remove recovery ; if ubi check recovery ; then else run ubi_remove_rootfs ; ubi create recovery $filesize dynamic 3 && ubi write $loadaddr recovery $filesize ; fi ++ubi_write_production=ubi check fit && env exists replacevol && ubi remove fit ; if ubi check fit ; then else run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ; fi ++ubi_write_recovery=ubi check recovery && env exists replacevol && ubi remove recovery ; if ubi check recovery ; then else run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ; fi +_create_env=ubi create ubootenv 0x1f000 dynamic ; ubi create ubootenv2 0x1f000 dynamic +_init_env=setenv _init_env ; if ubi check ubootenv && ubi check ubootenv2 ; then else run _create_env ; fi ; setenv _create_env ; saveenv ; saveenv +_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first diff --git a/lede/package/boot/uboot-mediatek/patches/408-arm-mediatek-add-back-mt7622-LK-image-header.patch b/lede/package/boot/uboot-mediatek/patches/408-arm-mediatek-add-back-mt7622-LK-image-header.patch new file mode 100644 index 0000000000..c8eefe7979 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/408-arm-mediatek-add-back-mt7622-LK-image-header.patch @@ -0,0 +1,24 @@ +From 1845b514511398cc0ba219a47958f078a2f7f67d Mon Sep 17 00:00:00 2001 +From: Shiji Yang +Date: Tue, 8 Jul 2025 19:50:53 +0800 +Subject: [PATCH] arm: mediatek: add back mt7622 LK image header + +The LK image header was lost since commit df3ab898f644 +("arm: mediatek: merge board Kconfigs into mach-mediatek"). + +Signed-off-by: Shiji Yang +--- + arch/arm/mach-mediatek/Kconfig | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/arch/arm/mach-mediatek/Kconfig ++++ b/arch/arm/mach-mediatek/Kconfig +@@ -158,7 +158,7 @@ config MTK_BROM_HEADER_INFO + string + default "media=nor" if TARGET_MT8518 || TARGET_MT8512 || TARGET_MT7629 + default "media=emmc" if TARGET_MT8516 || TARGET_MT8365 || TARGET_MT8183 +- default "lk=1" if TARGET_MT7623 ++ default "lk=1" if TARGET_MT7622 || TARGET_MT7623 + + config MTK_TZ_MOVABLE + select ARCH_MISC_INIT diff --git a/lede/package/boot/uboot-mediatek/patches/410-add-linksys-e8450.patch b/lede/package/boot/uboot-mediatek/patches/410-add-linksys-e8450.patch index ca8fb32bea..ecd4012cb1 100644 --- a/lede/package/boot/uboot-mediatek/patches/410-add-linksys-e8450.patch +++ b/lede/package/boot/uboot-mediatek/patches/410-add-linksys-e8450.patch @@ -1,146 +1,117 @@ --- /dev/null +++ b/configs/mt7622_linksys_e8450_defconfig -@@ -0,0 +1,140 @@ +@@ -0,0 +1,111 @@ +CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y -+CONFIG_TARGET_MT7622=y +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_LOAD_ADDR=0x40080000 -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BOOTP_SEND_HOSTNAME=y -+CONFIG_DEFAULT_ENV_FILE="linksys_e8450_env" +CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7622-linksys-e8450-ubi" ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_DEBUG_UART_BASE=0x11002000 +CONFIG_DEBUG_UART_CLOCK=25000000 -+CONFIG_DEFAULT_DEVICE_TREE="mt7622-linksys-e8450-ubi" ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y +CONFIG_DEFAULT_FDT_FILE="mt7622-linksys-e8450" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="MT7622> " ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set +CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y +CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y +CONFIG_CMD_EXT4=y +CONFIG_CMD_FAT=y +CONFIG_CMD_FS_GENERIC=y +CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set -+CONFIG_CMD_MTD=y +CONFIG_CMD_MTDPARTS=y -+CONFIG_CMD_PCI=y -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y +CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_REDUNDANT=y +CONFIG_ENV_UBI_PART="ubi" +CONFIG_ENV_UBI_VOLUME="ubootenv" +CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/linksys_e8450_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y ++CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NETCONSOLE=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_DM_MTD=y -+CONFIG_DM_GPIO=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7622=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y +CONFIG_USE_IPADDR=y +CONFIG_IPADDR="192.168.1.1" +CONFIG_USE_SERVERIP=y +CONFIG_SERVERIP="192.168.1.254" ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y +CONFIG_USB=y -+CONFIG_USB_HOST=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_MTK=y +CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null +++ b/arch/arm/dts/mt7622-linksys-e8450-ubi.dts @@ -0,0 +1,214 @@ @@ -360,16 +331,16 @@ +}; --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile -@@ -1422,6 +1422,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ +@@ -1119,6 +1119,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ mt7622-rfb.dtb \ mt7623a-unielec-u7623-02-emmc.dtb \ mt7622-bananapi-bpi-r64.dtb \ + mt7622-linksys-e8450-ubi.dtb \ mt7623n-bananapi-bpi-r2.dtb \ - mt7629-rfb.dtb \ mt7981-rfb.dtb \ + mt7981-snfi-nand-rfb.dtb \ --- /dev/null -+++ b/linksys_e8450_env ++++ b/defenvs/linksys_e8450_env @@ -0,0 +1,55 @@ +ethaddr_factory=ubi read 0x40080000 factory && env readmem -b ethaddr 0x400ffff4 0x6 ; setenv ethaddr_factory +ipaddr=192.168.1.1 diff --git a/lede/package/boot/uboot-mediatek/patches/412-add-ubnt-unifi-6-lr.patch b/lede/package/boot/uboot-mediatek/patches/412-add-ubnt-unifi-6-lr.patch index a39d03adf2..452298edfd 100644 --- a/lede/package/boot/uboot-mediatek/patches/412-add-ubnt-unifi-6-lr.patch +++ b/lede/package/boot/uboot-mediatek/patches/412-add-ubnt-unifi-6-lr.patch @@ -1,139 +1,84 @@ --- /dev/null -+++ b/configs/mt7622_ubnt_unifi-6-lr_defconfig -@@ -0,0 +1,147 @@ ++++ b/configs/mt7622_ubnt_unifi-6-lr-v1_defconfig +@@ -0,0 +1,113 @@ +CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y -+CONFIG_TARGET_MT7622=y +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_LOAD_ADDR=0x40080000 -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTDPARTS_DEFAULT="mtdparts=nor0:128k(bl2),640k(fip),64k(u-boot-env),256k(factory),64k(eeprom),15232k(recovery),-(firmware)" -+CONFIG_ENV_IS_IN_MTD=y -+CONFIG_ENV_MTD_NAME="nor0" -+CONFIG_ENV_SIZE_REDUND=0x4000 +CONFIG_ENV_SIZE=0x4000 +CONFIG_ENV_OFFSET=0xc0000 -+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -+CONFIG_BOARD_LATE_INIT=y ++CONFIG_DEFAULT_DEVICE_TREE="mt7622-ubnt-unifi-6-lr" +CONFIG_RESET_BUTTON_SETTLE_DELAY=400 -+CONFIG_BOOTP_SEND_HOSTNAME=y -+CONFIG_DEFAULT_ENV_FILE="ubnt_unifi-6-lr_env" ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_DEBUG_UART_BASE=0x11002000 +CONFIG_DEBUG_UART_CLOCK=25000000 -+CONFIG_DEFAULT_DEVICE_TREE="mt7622-ubnt-unifi-6-lr" +CONFIG_DEBUG_UART=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y -+CONFIG_DEFAULT_FDT_FILE="mt7622-ubnt-unifi-6-lr" -+CONFIG_SYS_PROMPT="MT7622> " +# CONFIG_LEGACY_IMAGE_FORMAT is not set ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_DEFAULT_FDT_FILE="mt7622-ubnt-unifi-6-lr" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7622> " +# CONFIG_BOOTM_PLAN9 is not set +# CONFIG_BOOTM_RTEMS is not set +# CONFIG_BOOTM_VXWORKS is not set -+# CONFIG_EFI is not set -+# CONFIG_EFI_LOADER is not set +CONFIG_CMD_BOOTMENU=y -+# CONFIG_CMD_BOOTEFI is not set -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y ++# CONFIG_CMD_ELF is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++# CONFIG_CMD_UNLZ4 is not set ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y +CONFIG_CMD_CDP=y ++CONFIG_CMD_LINK_LOCAL=y +CONFIG_CMD_DHCP=y +CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+# CONFIG_CMD_ELF is not set -+# CONFIG_CMD_BOOTEFI_BOOTMGR is not set -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set -+CONFIG_CMD_MTD=y -+CONFIG_CMD_MTDPARTS=y -+# CONFIG_CMD_PCI is not set -+CONFIG_CMD_SF_TEST=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y -+CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+# CONFIG_CMD_UNLZ4 is not set -+CONFIG_CMD_ASKENV=y +CONFIG_CMD_PSTORE=y +CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SOURCE=y +CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_ETH=y -+CONFIG_DM_ETH_PHY=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_MDIO=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+# CONFIG_DM_MMC is not set -+CONFIG_DM_SERIAL=y -+CONFIG_DM_SPI=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_HUSH_PARSER=y -+# CONFIG_PARTITION_UUIDS is not set -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+# CONFIG_LED is not set -+# CONFIG_LZ4 is not set ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_MTDPARTS=y ++CONFIG_MTDPARTS_DEFAULT="mtdparts=nor0:128k(bl2),640k(fip),64k(u-boot-env),256k(factory),64k(eeprom),15232k(recovery),-(firmware)" ++CONFIG_ENV_IS_IN_MTD=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_MTD_DEV="nor0" ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/ubnt_unifi-6-lr_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y +CONFIG_VERSION_VARIABLE=y ++CONFIG_BOOTP_SEND_HOSTNAME=y +CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_REGMAP=y +CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y -+CONFIG_PHY=y -+CONFIG_PHY_FIXED=y -+CONFIG_PHYLIB_10G=y -+CONFIG_PHY_AQUANTIA=y -+CONFIG_PHY_ADDR_ENABLE=y -+CONFIG_PHY_ADDR=8 -+CONFIG_MEDIATEK_ETH=y -+CONFIG_MTD=y ++CONFIG_GPIO_HOG=y +# CONFIG_MMC is not set -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7622=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_RAM=y -+CONFIG_MTK_SERIAL=y -+CONFIG_SPI=y -+CONFIG_MTK_SNFI_SPI=y -+CONFIG_MTK_SNOR=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_SPI_FLASH=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_DM_SPI_FLASH=y +CONFIG_SPI_FLASH_BAR=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_UNLOCK_ALL=y +CONFIG_SPI_FLASH_EON=y +CONFIG_SPI_FLASH_GIGADEVICE=y +CONFIG_SPI_FLASH_MACRONIX=y @@ -142,12 +87,264 @@ +CONFIG_SPI_FLASH_SST=y +CONFIG_SPI_FLASH_WINBOND=y +CONFIG_SPI_FLASH_XMC=y -+CONFIG_SPI_FLASH_USE_4K_SECTORS=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_PHY_ADDR_ENABLE=y ++CONFIG_PHY_ADDR=8 ++CONFIG_PHY_AQUANTIA=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_MDIO=y ++CONFIG_DM_ETH_PHY=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SNOR=y ++CONFIG_MTK_SNFI_SPI=y ++CONFIG_RANDOM_UUID=y ++CONFIG_HEXDUMP=y +--- /dev/null ++++ b/configs/mt7622_ubnt_unifi-6-lr-v2_defconfig +@@ -0,0 +1,113 @@ ++CONFIG_ARM=y +CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_ENV_SIZE=0x4000 ++CONFIG_ENV_OFFSET=0xc0000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7622-ubnt-unifi-6-lr" ++CONFIG_RESET_BUTTON_SETTLE_DELAY=400 ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_DEBUG_UART=y ++CONFIG_FIT=y ++# CONFIG_LEGACY_IMAGE_FORMAT is not set ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_DEFAULT_FDT_FILE="mt7622-ubnt-unifi-6-lr" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7622> " ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_ELF is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++# CONFIG_CMD_UNLZ4 is not set ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_MTDPARTS=y ++CONFIG_MTDPARTS_DEFAULT="mtdparts=nor0:128k(bl2),640k(fip),64k(u-boot-env),256k(factory),64k(eeprom),15232k(recovery),-(firmware)" ++CONFIG_ENV_IS_IN_MTD=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_MTD_DEV="nor0" ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/ubnt_unifi-6-lr-v2_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_BOOTP_SEND_HOSTNAME=y ++CONFIG_NETCONSOLE=y +CONFIG_USE_IPADDR=y +CONFIG_IPADDR="192.168.1.1" +CONFIG_USE_SERVERIP=y +CONFIG_SERVERIP="192.168.1.254" ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++# CONFIG_MMC is not set ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_BAR=y ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_SPI_FLASH_STMICRO=y ++CONFIG_SPI_FLASH_SST=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_PHY_ADDR_ENABLE=y ++CONFIG_PHY_ADDR=8 ++CONFIG_PHY_AQUANTIA=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_MDIO=y ++CONFIG_DM_ETH_PHY=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SNOR=y ++CONFIG_MTK_SNFI_SPI=y ++CONFIG_RANDOM_UUID=y ++CONFIG_HEXDUMP=y +--- /dev/null ++++ b/configs/mt7622_ubnt_unifi-6-lr-v3_defconfig +@@ -0,0 +1,112 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_ENV_SIZE=0x4000 ++CONFIG_ENV_OFFSET=0xc0000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7622-ubnt-unifi-6-lr-v3" ++CONFIG_RESET_BUTTON_SETTLE_DELAY=400 ++CONFIG_SYS_LOAD_ADDR=0x40080000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=25000000 ++CONFIG_DEBUG_UART=y ++CONFIG_FIT=y ++# CONFIG_LEGACY_IMAGE_FORMAT is not set ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_DEFAULT_FDT_FILE="mt7622-ubnt-unifi-6-lr-v3" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7622> " ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_ELF is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++# CONFIG_CMD_UNLZ4 is not set ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_MTDPARTS=y ++CONFIG_MTDPARTS_DEFAULT="mtdparts=nor0:128k(bl2),640k(fip),64k(u-boot-env),256k(factory),64k(eeprom),15232k(recovery),-(firmware)" ++CONFIG_ENV_IS_IN_MTD=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_MTD_DEV="nor0" ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/ubnt_unifi-6-lr_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_BOOTP_SEND_HOSTNAME=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" ++CONFIG_REGMAP=y ++CONFIG_SYSCON=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++# CONFIG_MMC is not set ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_BAR=y ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_SPI_FLASH_STMICRO=y ++CONFIG_SPI_FLASH_SST=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_PHY_ADDR_ENABLE=y ++CONFIG_PHY_REALTEK=y ++CONFIG_PHY_FIXED=y ++CONFIG_DM_MDIO=y ++CONFIG_DM_ETH_PHY=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_RAM=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SNOR=y ++CONFIG_MTK_SNFI_SPI=y ++CONFIG_RANDOM_UUID=y ++CONFIG_HEXDUMP=y --- /dev/null +++ b/arch/arm/dts/mt7622-ubnt-unifi-6-lr.dts @@ -0,0 +1,193 @@ @@ -344,18 +541,215 @@ + }; + }; +}; +--- /dev/null ++++ b/arch/arm/dts/mt7622-ubnt-unifi-6-lr-v3.dts +@@ -0,0 +1,193 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2019 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++/dts-v1/; ++#include ++#include "mt7622.dtsi" ++#include "mt7622-u-boot.dtsi" ++ ++/ { ++ #address-cells = <1>; ++ #size-cells = <1>; ++ model = "mt7622-ubnt-unifi-6-lr-v3"; ++ compatible = "mediatek,mt7622", "ubnt,unifi-6-lr-v3"; ++ ++ chosen { ++ stdout-path = &uart0; ++ tick-timer = &timer0; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x20000000>; ++ }; ++ ++ aliases { ++ spi0 = &snor; ++ }; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ gpios = <&gpio 62 GPIO_ACTIVE_LOW>; ++ linux,code = ; ++ }; ++ }; ++ ++ memory@40000000 { ++ device_type = "memory"; ++ reg = <0x40000000 0x20000000>; ++ }; ++ ++ reg_1p8v: regulator-1p8v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-1.8V"; ++ regulator-min-microvolt = <1800000>; ++ regulator-max-microvolt = <1800000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_3p3v: regulator-3p3v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-3.3V"; ++ regulator-min-microvolt = <3300000>; ++ regulator-max-microvolt = <3300000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++ ++ reg_5v: regulator-5v { ++ compatible = "regulator-fixed"; ++ regulator-name = "fixed-5V"; ++ regulator-min-microvolt = <5000000>; ++ regulator-max-microvolt = <5000000>; ++ regulator-boot-on; ++ regulator-always-on; ++ }; ++}; ++ ++&pcie { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&pcie0_pins>, <&pcie1_pins>; ++ status = "okay"; ++ ++ pcie@0,0 { ++ status = "okay"; ++ }; ++ ++ pcie@1,0 { ++ status = "okay"; ++ }; ++}; ++ ++&pinctrl { ++ eth_pins: eth-pins { ++ mux { ++ function = "eth"; ++ groups = "mdc_mdio", "rgmii_via_gmac2"; ++ }; ++ }; ++ ++ pcie0_pins: pcie0-pins { ++ mux { ++ function = "pcie"; ++ groups = "pcie0_pad_perst", ++ "pcie0_1_waken", ++ "pcie0_1_clkreq"; ++ }; ++ }; ++ ++ pcie1_pins: pcie1-pins { ++ mux { ++ function = "pcie"; ++ groups = "pcie1_pad_perst", ++ "pcie1_0_waken", ++ "pcie1_0_clkreq"; ++ }; ++ }; ++ ++ snfi_pins: snfi-pins { ++ mux { ++ function = "flash"; ++ groups = "snfi"; ++ }; ++ }; ++ ++ snor_pins: snor-pins { ++ mux { ++ function = "flash"; ++ groups = "spi_nor"; ++ }; ++ }; ++ ++ uart0_pins: uart0 { ++ mux { ++ function = "uart"; ++ groups = "uart0_0_tx_rx" ; ++ }; ++ }; ++ ++ watchdog_pins: watchdog-default { ++ mux { ++ function = "watchdog"; ++ groups = "watchdog"; ++ }; ++ }; ++}; ++ ++&snor { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&snor_pins>; ++ status = "okay"; ++ ++ spi-flash@0 { ++ compatible = "jedec,spi-nor"; ++ reg = <0>; ++ spi-tx-bus-width = <1>; ++ spi-rx-bus-width = <4>; ++ u-boot,dm-pre-reloc; ++ }; ++}; ++ ++&uart0 { ++ mediatek,force-highspeed; ++ status = "okay"; ++}; ++ ++&watchdog { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&watchdog_pins>; ++ status = "okay"; ++}; ++ ++ð { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <ð_pins>; ++ ++ mediatek,gmac-id = <0>; ++ phy-mode = "sgmii"; ++ phy-handle = <&gphy>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ }; ++ ++ mdio-bus { ++ #address-cells = <1>; ++ #size-cells = <0>; ++ ++ gphy: ethernet-phy@0 { ++ /* RealTek RTL8211FS */ ++ compatible = "ethernet-phy-ieee802.3-c22"; ++ reg = <0x0>; ++ }; ++ }; ++}; --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile -@@ -1423,6 +1423,7 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ +@@ -1120,6 +1120,8 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ mt7623a-unielec-u7623-02-emmc.dtb \ mt7622-bananapi-bpi-r64.dtb \ mt7622-linksys-e8450-ubi.dtb \ + mt7622-ubnt-unifi-6-lr.dtb \ ++ mt7622-ubnt-unifi-6-lr-v3.dtb \ mt7623n-bananapi-bpi-r2.dtb \ - mt7629-rfb.dtb \ mt7981-rfb.dtb \ + mt7981-snfi-nand-rfb.dtb \ --- /dev/null -+++ b/ubnt_unifi-6-lr_env ++++ b/defenvs/ubnt_unifi-6-lr_env @@ -0,0 +1,50 @@ +ethaddr_factory=mtd read nor0 $loadaddr 0x110000 0x10000 && env readmem -b ethaddr $loadaddr 0x6 ; setenv ethaddr_factory +ipaddr=192.168.1.1 @@ -407,17 +801,123 @@ +_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/defenvs/ubnt_unifi-6-lr-v2_env +@@ -0,0 +1,50 @@ ++ethaddr_factory=mtd read nor0 $loadaddr 0x110000 0x10000 && env readmem -b ethaddr $loadaddr 0x6 ; setenv ethaddr_factory ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x48000000 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_nor ; fi ++bootdelay=0 ++bootfile=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-preloader.bin ++bootfile_fip=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v2-ubootmod-squashfs-sysupgrade.itb ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from flash.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from flash.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to flash.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to flash.=run boot_tftp_write_preloader ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=run nor_read_production && bootm $loadaddr ++boot_recovery=run nor_read_recovery ; bootm $loadaddr ++boot_serial_write_fip=loadx $loadaddr 115200 && run boot_write_fip ++boot_serial_write_preloader=loadx $loadaddr 115200 && run boot_write_preloader ++boot_tftp_forever=while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run nor_write_production ; if env exists noboot ; then else bootm $loadaddr ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run nor_write_recovery ; if env exists noboot ; then else bootm $loadaddr ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip ++boot_tftp_write_preloader=tftpboot $loadaddr $bootfile_bl2 && run boot_write_preloader ++boot_nor=run boot_production ; run boot_recovery ++boot_write_fip=mtd erase nor0 0x20000 0x80000 && mtd write nor0 $loadaddr 0x20000 0x80000 ++boot_write_preloader=mtd erase nor0 0x0 0x20000 && mtd write nor0 $loadaddr 0x0 0x20000 ++reset_factory=mtd erase nor0 0xc0000 0x10000 && reset ++nor_read_production=mtd read nor0 $loadaddr 0x1000000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x1000000 $image_size ++nor_read_recovery=mtd read nor0 $loadaddr 0x120000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x120000 $image_size ++nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x1000 ; setexpr tmp1 0x$image_size % 0x1000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb 0x$image_eb * 0x1000 ++nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0x3000000 && mtd erase nor0 0x1000000 0x$image_eb && mtd write nor0 $loadaddr 0x1000000 $filesize ++nor_write_recovery=run nor_pad_size ; test 0x$image_eb -le 0xee0000 && mtd erase nor0 0x120000 0x$image_eb && mtd write nor0 $loadaddr 0x120000 $filesize ++_init_env=setenv _init_env ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver"--- /dev/null +--- /dev/null ++++ b/defenvs/ubnt_unifi-6-lr-v3_env +@@ -0,0 +1,50 @@ ++ethaddr_factory=mtd read nor0 $loadaddr 0x110000 0x10000 && env readmem -b ethaddr $loadaddr 0x6 ; setenv ethaddr_factory ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x48000000 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_nor ; fi ++bootdelay=0 ++bootfile=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-preloader.bin ++bootfile_fip=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-mt7622-ubnt_unifi-6-lr-v3-ubootmod-squashfs-sysupgrade.itb ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from flash.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from flash.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to flash.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to flash.=run boot_tftp_write_preloader ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=run nor_read_production && bootm $loadaddr ++boot_recovery=run nor_read_recovery ; bootm $loadaddr ++boot_serial_write_fip=loadx $loadaddr 115200 && run boot_write_fip ++boot_serial_write_preloader=loadx $loadaddr 115200 && run boot_write_preloader ++boot_tftp_forever=while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run nor_write_production ; if env exists noboot ; then else bootm $loadaddr ; fi ++boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run nor_write_recovery ; if env exists noboot ; then else bootm $loadaddr ; fi ++boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run boot_write_fip ++boot_tftp_write_preloader=tftpboot $loadaddr $bootfile_bl2 && run boot_write_preloader ++boot_nor=run boot_production ; run boot_recovery ++boot_write_fip=mtd erase nor0 0x20000 0x80000 && mtd write nor0 $loadaddr 0x20000 0x80000 ++boot_write_preloader=mtd erase nor0 0x0 0x20000 && mtd write nor0 $loadaddr 0x0 0x20000 ++reset_factory=mtd erase nor0 0xc0000 0x10000 && reset ++nor_read_production=mtd read nor0 $loadaddr 0x1000000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x1000000 $image_size ++nor_read_recovery=mtd read nor0 $loadaddr 0x120000 0x1000 && imsz $loadaddr image_size && mtd read nor0 $loadaddr 0x120000 $image_size ++nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x1000 ; setexpr tmp1 0x$image_size % 0x1000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb 0x$image_eb * 0x1000 ++nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0x3000000 && mtd erase nor0 0x1000000 0x$image_eb && mtd write nor0 $loadaddr 0x1000000 $filesize ++nor_write_recovery=run nor_pad_size ; test 0x$image_eb -le 0xee0000 && mtd erase nor0 0x120000 0x$image_eb && mtd write nor0 $loadaddr 0x120000 $filesize ++_init_env=setenv _init_env ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run ethaddr_factory ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- a/common/board_r.c +++ b/common/board_r.c @@ -66,6 +66,7 @@ + #include #include - #include #include +#include DECLARE_GLOBAL_DATA_PTR; -@@ -397,6 +398,20 @@ static int initr_onenand(void) +@@ -422,6 +423,20 @@ static int initr_onenand(void) } #endif @@ -438,13 +938,13 @@ #ifdef CONFIG_MMC static int initr_mmc(void) { -@@ -692,6 +707,9 @@ static init_fnc_t init_sequence_r[] = { - #ifdef CONFIG_NMBM_MTD - initr_nmbm, +@@ -730,6 +745,9 @@ static void initcall_run_r(void) + #if CONFIG_IS_ENABLED(NMBM_MTD) + INITCALL(initr_nmbm); #endif -+#ifdef CONFIG_SPI_FLASH -+ initr_spiflash, ++#if CONFIG_IS_ENABLED(SPI_FLASH) ++ INITCALL(initr_spiflash); +#endif - #ifdef CONFIG_MMC - initr_mmc, + #if CONFIG_IS_ENABLED(MMC) + INITCALL(initr_mmc); #endif diff --git a/lede/package/boot/uboot-mediatek/patches/420-add-support-for-RAVPower-RP-WD009.patch b/lede/package/boot/uboot-mediatek/patches/420-add-support-for-RAVPower-RP-WD009.patch index 4ee87ce3d2..2a6c75cf9d 100644 --- a/lede/package/boot/uboot-mediatek/patches/420-add-support-for-RAVPower-RP-WD009.patch +++ b/lede/package/boot/uboot-mediatek/patches/420-add-support-for-RAVPower-RP-WD009.patch @@ -22,7 +22,7 @@ Subject: [PATCH] add support for RAVPower RP-WD009 --- a/arch/mips/dts/Makefile +++ b/arch/mips/dts/Makefile -@@ -26,6 +26,7 @@ dtb-$(CONFIG_TARGET_OCTEON_EBB7304) += m +@@ -25,6 +25,7 @@ dtb-$(CONFIG_TARGET_OCTEON_EBB7304) += m dtb-$(CONFIG_TARGET_OCTEON_NIC23) += mrvl,octeon-nic23.dtb dtb-$(CONFIG_BOARD_NETGEAR_CG3100D) += netgear,cg3100d.dtb dtb-$(CONFIG_BOARD_NETGEAR_DGND3700V2) += netgear,dgnd3700v2.dtb @@ -125,31 +125,28 @@ Subject: [PATCH] add support for RAVPower RP-WD009 +} --- /dev/null +++ b/configs/ravpower-rp-wd009-ram_defconfig -@@ -0,0 +1,71 @@ +@@ -0,0 +1,62 @@ +CONFIG_MIPS=y -+CONFIG_SYS_LOAD_ADDR=0x80010000 +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_SYS_MEMTEST_START=0x80100000 -+CONFIG_SYS_MEMTEST_END=0x80400000 ++CONFIG_DEFAULT_DEVICE_TREE="ravpower-rp-wd009" ++CONFIG_SYS_LOAD_ADDR=0x80010000 +CONFIG_ARCH_MTMIPS=y +CONFIG_SOC_MT7628=y ++CONFIG_BOARD_RAVPOWER_RP_WD009=y ++CONFIG_SYS_MIPS_TIMER_FREQ=290000000 +CONFIG_MIPS_BOOT_FDT=y -+CONFIG_LEGACY_IMAGE_FORMAT=y ++CONFIG_FIT=y +CONFIG_OF_STDOUT_VIA_ALIAS=y +CONFIG_USE_BOOTCOMMAND=y +CONFIG_BOOTCOMMAND="sf probe && mtd read firmware 82000000 && bootm 82000000" +CONFIG_USE_PREBOOT=y ++CONFIG_SYS_CBSIZE=512 +CONFIG_SYS_CONSOLE_INFO_QUIET=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_BOARD_RAVPOWER_RP_WD009=y -+CONFIG_SYS_MIPS_TIMER_FREQ=290000000 -+CONFIG_SYS_BOOTPARAMS_LEN=0x20000 +CONFIG_HUSH_PARSER=y +CONFIG_CMD_LICENSE=y +# CONFIG_CMD_ELF is not set +# CONFIG_CMD_XIMG is not set +CONFIG_CMD_MEMINFO=y -+# CONFIG_CMD_FLASH is not set +CONFIG_CMD_GPIO=y +# CONFIG_CMD_LOADS is not set +CONFIG_CMD_MTD=y @@ -161,18 +158,18 @@ Subject: [PATCH] add support for RAVPower RP-WD009 +CONFIG_CMD_TIME=y +CONFIG_CMD_UUID=y +CONFIG_CMD_MTDPARTS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y +CONFIG_MTDIDS_DEFAULT="nor0=spi0.0" +CONFIG_MTDPARTS_DEFAULT="spi0.0:192k(factory-uboot),64k(config),64k(factory),1536k(loader),64k(params),64k(user_backup),64k(user),14272k(firmware),64k(mode)" -+CONFIG_DEFAULT_DEVICE_TREE="ravpower-rp-wd009" ++CONFIG_VERSION_VARIABLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_NET_RANDOM_ETHADDR=y +# CONFIG_DM_DEVICE_REMOVE is not set -+CONFIG_HAVE_BLOCK_DEVICE=y +CONFIG_LED=y +CONFIG_LED_BLINK=y +CONFIG_LED_GPIO=y -+CONFIG_MTD=y +CONFIG_DM_MTD=y +CONFIG_SPI_FLASH_GIGADEVICE=y +CONFIG_SPI_FLASH_MACRONIX=y @@ -181,22 +178,16 @@ Subject: [PATCH] add support for RAVPower RP-WD009 +CONFIG_SPI_FLASH_WINBOND=y +CONFIG_SPI_FLASH_XMC=y +CONFIG_SPI_FLASH_MTD=y -+CONFIG_MTD_UBI_BEB_LIMIT=22 +CONFIG_MT7628_ETH=y +CONFIG_PHY=y ++CONFIG_BAUDRATE=57600 ++CONFIG_SERIAL_RX_BUFFER=y +CONFIG_SPI=y +CONFIG_MT7621_SPI=y +CONFIG_SYSRESET_SYSCON=y +CONFIG_WDT=y +CONFIG_WDT_MT7621=y +CONFIG_LZMA=y -+CONFIG_BAUDRATE=57600 -+CONFIG_SYS_MAXARGS=64 -+CONFIG_SYS_CBSIZE=512 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" --- /dev/null +++ b/include/configs/ravpower-rp-wd009.h @@ -0,0 +1,17 @@ @@ -234,7 +225,7 @@ Subject: [PATCH] add support for RAVPower RP-WD009 config BOARD_VOCORE2 bool "VoCore2" select SPL_SERIAL -@@ -53,6 +61,7 @@ config SYS_CONFIG_NAME +@@ -52,6 +60,7 @@ config SYS_CONFIG_NAME default "mt7628" if BOARD_MT7628_RFB source "board/gardena/smart-gateway-mt7688/Kconfig" diff --git a/lede/package/boot/uboot-mediatek/patches/430-add-bpi-r3.patch b/lede/package/boot/uboot-mediatek/patches/430-add-bpi-r3.patch index cbcda89119..279175e6e5 100644 --- a/lede/package/boot/uboot-mediatek/patches/430-add-bpi-r3.patch +++ b/lede/package/boot/uboot-mediatek/patches/430-add-bpi-r3.patch @@ -1,802 +1,563 @@ --- /dev/null +++ b/configs/mt7986a_bpi-r3-emmc_defconfig -@@ -0,0 +1,197 @@ +@@ -0,0 +1,138 @@ +CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y +CONFIG_ARCH_MEDIATEK=y -+CONFIG_TARGET_MT7986=y +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 +CONFIG_DEFAULT_DEVICE_TREE="mt7986a-bpi-r3-emmc" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3_emmc_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-emmc.dtb" +CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_TARGET_MT7986=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_DEBUG_UART_BASE=0x11002000 +CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y -+CONFIG_SYS_LOAD_ADDR=0x46000000 -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y ++CONFIG_AHCI=y +CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-emmc.dtb" +CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y +CONFIG_LOG=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y +CONFIG_SYS_PROMPT="MT7986> " -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y +CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y +CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y +CONFIG_CMD_MMC=y +CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y +CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 +CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y +CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PHY_FIXED=y -+CONFIG_MTK_AHCI=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7622=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SUPPORT_EMMC_BOOT=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MMC=y -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x440000 -+CONFIG_ENV_SIZE=0x40000 -+CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r3_emmc_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_HS200_SUPPORT=y +CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y +CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y +CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y +CONFIG_PINCTRL_MT7986=y +CONFIG_POWER_DOMAIN=y +CONFIG_MTK_POWER_DOMAIN=y +CONFIG_DM_REGULATOR=y +CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_HEXDUMP=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y -+CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+CONFIG_CMD_SF=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" ---- /dev/null -+++ b/configs/mt7986a_bpi-r3-nor_defconfig -@@ -0,0 +1,193 @@ -+CONFIG_ARM=y -+CONFIG_POSITION_INDEPENDENT=y -+CONFIG_ARCH_MEDIATEK=y -+CONFIG_TARGET_MT7986=y -+CONFIG_TEXT_BASE=0x41e00000 -+CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_DEFAULT_DEVICE_TREE="mt7986a-bpi-r3-emmc" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3_nor_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-emmc.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_DEBUG_UART_BASE=0x11002000 -+CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_DEBUG_UART=y -+CONFIG_SYS_LOAD_ADDR=0x46000000 -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y -+CONFIG_SYS_PROMPT="MT7986> " -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set -+CONFIG_CMD_MMC=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y -+CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y +CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y +CONFIG_DM_PWM=y +CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PHY_FIXED=y -+CONFIG_MTK_AHCI=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7622=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_MTK_POWER_DOMAIN=y +CONFIG_RAM=y ++CONFIG_SCSI=y +CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y +CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_SPI=y +CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y ++CONFIG_MTK_SPIM=y +CONFIG_USB=y -+CONFIG_USB_HOST=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_MTK=y +CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y +--- /dev/null ++++ b/configs/mt7986a_bpi-r3-nor_defconfig +@@ -0,0 +1,137 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SIZE=0x20000 ++CONFIG_ENV_OFFSET=0x0 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-bpi-r3-emmc" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_TARGET_MT7986=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_PCI=y ++CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-emmc.dtb" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MTD=y -+CONFIG_ENV_MTD_NAME="u-boot-env" -+CONFIG_ENV_OFFSET=0x0 -+CONFIG_ENV_OFFSET_REDUND=0x20000 -+CONFIG_ENV_SIZE=0x20000 -+CONFIG_ENV_SIZE_REDUND=0x20000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_MTD_DEV="u-boot-env" ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r3_nor_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_HS200_SUPPORT=y +CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTK_SPI_NAND=y ++CONFIG_MTK_SPI_NAND_MTD=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_SPI_FLASH_MTD=y +CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y +CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y +CONFIG_PINCTRL_MT7986=y +CONFIG_POWER_DOMAIN=y +CONFIG_MTK_POWER_DOMAIN=y +CONFIG_DM_REGULATOR=y +CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_HEXDUMP=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+#CONFIG_MTD_SPI_NAND=y -+CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+CONFIG_CMD_SF=y -+CONFIG_LMB_MAX_REGIONS=64 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" ---- /dev/null -+++ b/configs/mt7986a_bpi-r3-sd_defconfig -@@ -0,0 +1,197 @@ -+CONFIG_ARM=y -+CONFIG_POSITION_INDEPENDENT=y -+CONFIG_ARCH_MEDIATEK=y -+CONFIG_TARGET_MT7986=y -+CONFIG_TEXT_BASE=0x41e00000 -+CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_DEFAULT_DEVICE_TREE="mt7986a-bpi-r3-sd" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3_sdmmc_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-sd.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_DEBUG_UART_BASE=0x11002000 -+CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_DEBUG_UART=y -+CONFIG_SYS_LOAD_ADDR=0x46000000 -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y -+CONFIG_SYS_PROMPT="MT7986> " -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set -+CONFIG_CMD_MMC=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y -+CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_UBI=y -+CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y +CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y +CONFIG_DM_PWM=y +CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PHY_FIXED=y -+CONFIG_MTK_AHCI=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7622=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_MTK_POWER_DOMAIN=y +CONFIG_RAM=y ++CONFIG_SCSI=y +CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y +CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_SPI=y +CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y ++CONFIG_MTK_SPIM=y +CONFIG_USB=y -+CONFIG_USB_HOST=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_XHCI_MTK=y +CONFIG_USB_STORAGE=y ++CONFIG_LZO=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y +--- /dev/null ++++ b/configs/mt7986a_bpi-r3-sd_defconfig +@@ -0,0 +1,138 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-bpi-r3-sd" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_TARGET_MT7986=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_PCI=y ++CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-sd.dtb" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MMC=y -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x440000 -+CONFIG_ENV_SIZE=0x40000 -+CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r3_sdmmc_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_SUPPORT_EMMC_BOOT=y -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7986=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_HEXDUMP=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y -+CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+CONFIG_CMD_SF=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y +CONFIG_USE_IPADDR=y +CONFIG_IPADDR="192.168.1.1" +CONFIG_USE_SERVERIP=y +CONFIG_SERVERIP="192.168.1.254" ---- /dev/null -+++ b/configs/mt7986a_bpi-r3-snand_defconfig -@@ -0,0 +1,198 @@ -+CONFIG_ARM=y -+CONFIG_POSITION_INDEPENDENT=y -+CONFIG_ARCH_MEDIATEK=y -+CONFIG_TARGET_MT7986=y -+CONFIG_TEXT_BASE=0x41e00000 -+CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_DEFAULT_DEVICE_TREE="mt7986a-bpi-r3-emmc" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r3_snand_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-emmc.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_DEBUG_UART_BASE=0x11002000 -+CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_DEBUG_UART=y -+CONFIG_SYS_LOAD_ADDR=0x46000000 -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y +CONFIG_BUTTON=y +CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y +CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y +CONFIG_LED=y +CONFIG_LED_BLINK=y +CONFIG_LED_GPIO=y -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y -+CONFIG_SYS_PROMPT="MT7986> " -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set -+CONFIG_CMD_MMC=y -+CONFIG_CMD_MTD=y -+CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y -+CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_UBI=y -+CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MTD=y +CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y +CONFIG_PHY=y +CONFIG_PHY_MTK_TPHY=y -+CONFIG_PHY_FIXED=y -+CONFIG_MTK_AHCI=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y +CONFIG_PINCTRL_MT7622=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SUPPORT_EMMC_BOOT=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y -+CONFIG_OF_EMBED=y -+CONFIG_ENV_OVERWRITE=y -+CONFIG_ENV_IS_IN_UBI=y -+CONFIG_ENV_UBI_PART="ubi" -+CONFIG_ENV_SIZE=0x1f000 -+CONFIG_ENV_SIZE_REDUND=0x1f000 -+CONFIG_ENV_UBI_VOLUME="ubootenv" -+CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" -+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_SUPPORT_EMMC_BOOT=y -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y +CONFIG_PINCTRL_MT7986=y +CONFIG_POWER_DOMAIN=y +CONFIG_MTK_POWER_DOMAIN=y +CONFIG_DM_REGULATOR=y +CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y +CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y +CONFIG_MTK_SERIAL=y -+CONFIG_HEXDUMP=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y +CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+#CONFIG_DM_SPI_FLASH=y -+#CONFIG_SPI_FLASH_MTD=y -+#CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+#CONFIG_CMD_SF=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y +--- /dev/null ++++ b/configs/mt7986a_bpi-r3-snand_defconfig +@@ -0,0 +1,133 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7986a-bpi-r3-emmc" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_TARGET_MT7986=y ++CONFIG_SYS_LOAD_ADDR=0x46000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11002000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_PCI=y ++CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-bpi-r3-emmc.dtb" ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7986> " ++CONFIG_CMD_CPU=y ++CONFIG_CMD_LICENSE=y ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_OF_EMBED=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r3_snand_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y +CONFIG_USE_IPADDR=y +CONFIG_IPADDR="192.168.1.1" +CONFIG_USE_SERVERIP=y +CONFIG_SERVERIP="192.168.1.254" ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7622=y ++CONFIG_PINCTRL_MT7986=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPIM=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null -+++ b/bananapi_bpi-r3_sdmmc_env ++++ b/defenvs/bananapi_bpi-r3_sdmmc_env @@ -0,0 +1,81 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -880,7 +641,7 @@ +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null -+++ b/bananapi_bpi-r3_nor_env ++++ b/defenvs/bananapi_bpi-r3_nor_env @@ -0,0 +1,60 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -943,7 +704,7 @@ +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null -+++ b/bananapi_bpi-r3_snand_env ++++ b/defenvs/bananapi_bpi-r3_snand_env @@ -0,0 +1,73 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -1019,7 +780,7 @@ +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null -+++ b/bananapi_bpi-r3_emmc_env ++++ b/defenvs/bananapi_bpi-r3_emmc_env @@ -0,0 +1,61 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 diff --git a/lede/package/boot/uboot-mediatek/patches/431-add-xiaomi_redmi-ax6000.patch b/lede/package/boot/uboot-mediatek/patches/431-add-xiaomi_redmi-ax6000.patch deleted file mode 100644 index 88b2c63632..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/431-add-xiaomi_redmi-ax6000.patch +++ /dev/null @@ -1,404 +0,0 @@ ---- /dev/null -+++ b/configs/mt7986_xiaomi_redmi-ax6000_defconfig -@@ -0,0 +1,179 @@ -+CONFIG_ARM=y -+CONFIG_POSITION_INDEPENDENT=y -+CONFIG_ARCH_MEDIATEK=y -+CONFIG_TARGET_MT7986=y -+CONFIG_TEXT_BASE=0x41e00000 -+CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_DEFAULT_DEVICE_TREE="mt7986a-xiaomi_redmi-ax6000" -+CONFIG_DEFAULT_ENV_FILE="xiaomi_redmi-ax6000_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-xiaomi_redmi-ax6000.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_DEBUG_UART_BASE=0x11002000 -+CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_DEBUG_UART=y -+CONFIG_SYS_LOAD_ADDR=0x46000000 -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+# CONFIG_LED is not set -+# CONFIG_LED_BLINK is not set -+# CONFIG_LED_GPIO is not set -+CONFIG_LOGLEVEL=7 -+CONFIG_LOG=y -+CONFIG_SYS_PROMPT="MT7986> " -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+# CONFIG_CMD_EXT4 is not set -+# CONFIG_CMD_FAT is not set -+CONFIG_CMD_FDT=y -+# CONFIG_CMD_FS_GENERIC is not set -+# CONFIG_CMD_FS_UUID is not set -+CONFIG_CMD_GPIO=y -+# CONFIG_CMD_GPT is not set -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+# CONFIG_CMD_LED is not set -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set -+CONFIG_CMD_MTD=y -+# CONFIG_CMD_PCI is not set -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_SF_TEST=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_PXE=y -+# CONFIG_CMD_PWM is not set -+CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_UBI=y -+CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+# CONFIG_CMD_USB is not set -+# CONFIG_CMD_FLASH is not set -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+# CONFIG_DM_USB is not set -+# CONFIG_DM_PWM is not set -+# CONFIG_PWM_MTK is not set -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_DM_GPIO=y -+# CONFIG_DM_SCSI is not set -+# CONFIG_AHCI is not set -+CONFIG_PHY=y -+# CONFIG_PHY_MTK_TPHY is not set -+CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+# CONFIG_PCI is not set -+# CONFIG_MMC is not set -+# CONFIG_DM_MMC is not set -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+# CONFIG_DM_PCI is not set -+# CONFIG_PCIE_MEDIATEK is not set -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+# CONFIG_PINCTRL_MT7622 is not set -+CONFIG_POWER_DOMAIN=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_SPI=y -+# CONFIG_I2C is not set -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+# CONFIG_USB is not set -+# CONFIG_USB_HOST is not set -+# CONFIG_USB_XHCI_HCD is not set -+# CONFIG_USB_XHCI_MTK is not set -+# CONFIG_USB_STORAGE is not set -+CONFIG_OF_EMBED=y -+CONFIG_ENV_OVERWRITE=y -+CONFIG_ENV_IS_IN_UBI=y -+CONFIG_ENV_UBI_PART="ubi" -+CONFIG_ENV_SIZE=0x1f000 -+CONFIG_ENV_SIZE_REDUND=0x1f000 -+CONFIG_ENV_UBI_VOLUME="ubootenv" -+CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" -+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_CLK=y -+CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7986=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_HEXDUMP=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y -+CONFIG_MTK_SPIM=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" ---- /dev/null -+++ b/arch/arm/dts/mt7986a-xiaomi_redmi-ax6000.dts -@@ -0,0 +1,161 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Copyright (c) 2021 MediaTek Inc. -+ * Author: Sam Shih -+ */ -+ -+/dts-v1/; -+#include -+#include "mt7986.dtsi" -+#include -+ -+/ { -+ #address-cells = <1>; -+ #size-cells = <1>; -+ model = "Xiaomi Redmi AX6000"; -+ compatible = "mediatek,mt7986", "mediatek,mt7986-sd-rfb"; -+ -+ chosen { -+ stdout-path = &uart0; -+ tick-timer = &timer0; -+ }; -+ -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x20000000>; -+ }; -+ -+ keys { -+ compatible = "gpio-keys"; -+ factory { -+ label = "reset"; -+ gpios = <&gpio 9 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ }; -+ mesh { -+ label = "mesh"; -+ gpios = <&gpio 10 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ }; -+ }; -+}; -+ -+&uart0 { -+ mediatek,force-highspeed; -+ status = "okay"; -+}; -+ -+&uart1 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart1_pins>; -+ status = "disabled"; -+}; -+ -+ð { -+ status = "okay"; -+ mediatek,gmac-id = <0>; -+ phy-mode = "2500base-x"; -+ mediatek,switch = "mt7531"; -+ reset-gpios = <&gpio 5 GPIO_ACTIVE_HIGH>; -+ -+ fixed-link { -+ speed = <2500>; -+ full-duplex; -+ }; -+}; -+ -+&pinctrl { -+ spic_pins: spi1-pins-func-1 { -+ mux { -+ function = "spi"; -+ groups = "spi1_2"; -+ }; -+ }; -+ -+ uart1_pins: spi1-pins-func-3 { -+ mux { -+ function = "uart"; -+ groups = "uart1_2"; -+ }; -+ }; -+ -+ spi_flash_pins: spi0-pins-func-1 { -+ mux { -+ function = "flash"; -+ groups = "spi0", "spi0_wp_hold"; -+ }; -+ -+ conf-pu { -+ pins = "SPI2_CS", "SPI2_HOLD", "SPI2_WP"; -+ drive-strength = ; -+ bias-pull-up = ; -+ }; -+ -+ conf-pd { -+ pins = "SPI2_CLK", "SPI2_MOSI", "SPI2_MISO"; -+ drive-strength = ; -+ bias-pull-down = ; -+ }; -+ }; -+}; -+ -+&spi0 { -+ #address-cells = <1>; -+ #size-cells = <0>; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&spi_flash_pins>; -+ status = "okay"; -+ must_tx; -+ enhance_timing; -+ dma_ext; -+ ipm_design; -+ support_quad; -+ tick_dly = <1>; -+ sample_sel = <0>; -+ -+ spi_nand@0 { -+ compatible = "spi-nand"; -+ reg = <0>; -+ spi-max-frequency = <52000000>; -+ -+ partitions { -+ compatible = "fixed-partitions"; -+ #address-cells = <1>; -+ #size-cells = <1>; -+ -+ partition@0 { -+ label = "bl2"; -+ reg = <0x0 0x80000>; -+ }; -+ -+ partition@100000 { -+ label = "nvram"; -+ reg = <0x100000 0x40000>; -+ }; -+ -+ partition@140000 { -+ label = "bdata"; -+ reg = <0x140000 0x40000>; -+ }; -+ -+ partition@180000 { -+ label = "factory"; -+ reg = <0x180000 0x200000>; -+ }; -+ -+ partition@380000 { -+ label = "fip"; -+ reg = <0x380000 0x200000>; -+ }; -+ -+ partition@600000 { -+ label = "ubi"; -+ reg = <0x580000 0x7a80000>; -+ }; -+ }; -+ }; -+}; -+ -+&watchdog { -+ status = "disabled"; -+}; ---- /dev/null -+++ b/xiaomi_redmi-ax6000_env -@@ -0,0 +1,55 @@ -+ethaddr_factory=mtd read factory 0x40080000 0x0 0x20000 && env readmem -b ethaddr 0x40080004 0x6 ; setenv ethaddr_factory -+ipaddr=192.168.1.1 -+serverip=192.168.1.254 -+loadaddr=0x46000000 -+console=earlycon=uart8250,mmio32,0x11002000 console=ttyS0 -+bootargs=console=ttyS0,115200n8 console_msg_format=syslog -+bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi -+bootconf=config-1 -+bootdelay=0 -+bootfile=openwrt-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-initramfs-recovery.itb -+bootfile_bl2=openwrt-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-preloader.bin -+bootfile_fip=openwrt-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-bl31-uboot.fip -+bootfile_upg=openwrt-mediatek-filogic-xiaomi_redmi-router-ax6000-ubootmod-squashfs-sysupgrade.itb -+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 -+bootmenu_default=0 -+bootmenu_delay=0 -+bootmenu_title= ( ( ( OpenWrt ) ) ) -+bootmenu_0=Initialize environment.=run _firstboot -+bootmenu_0d=Run default boot command.=run boot_default -+bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return -+bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return -+bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return -+bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return -+bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return -+bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return -+bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return -+bootmenu_8=Reboot.=reset -+bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset -+boot_first=if button reset ; then run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu -+boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever -+boot_production=run ubi_read_production && bootm $loadaddr#$bootconf -+boot_recovery=run ubi_read_recovery && bootm $loadaddr#$bootconf -+boot_ubi=run boot_production ; run boot_recovery ; run boot_tftp_forever -+boot_tftp_forever=while true ; do run boot_tftp_recovery ; sleep 1 ; done -+boot_tftp_recovery=tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi -+boot_tftp_production=tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi -+boot_tftp=tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf -+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run mtd_write_fip && run reset_factory -+boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run mtd_write_bl2 -+part_fit=fit -+reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 -+mtd_write_fip=mtd erase fip && mtd write fip $loadaddr -+mtd_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr -+ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 0 ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 1 -+ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ; reset -+ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi -+ubi_read_production=ubi read $loadaddr $part_fit && iminfo $loadaddr && run ubi_prepare_rootfs -+ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery -+ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data -+ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize -+ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize -+_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv -+_firstboot=setenv _firstboot ; run ethaddr_factory ; run _switch_to_menu ; run _init_env ; run boot_first -+_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title -+_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" diff --git a/lede/package/boot/uboot-mediatek/patches/436-add-glinet-mt6000.patch b/lede/package/boot/uboot-mediatek/patches/436-add-glinet-mt6000.patch deleted file mode 100644 index e0a059eb7b..0000000000 --- a/lede/package/boot/uboot-mediatek/patches/436-add-glinet-mt6000.patch +++ /dev/null @@ -1,274 +0,0 @@ ---- /dev/null -+++ b/arch/arm/dts/mt7986a-glinet-gl-mt6000.dts -@@ -0,0 +1,135 @@ -+// SPDX-License-Identifier: GPL-2.0 -+ -+/dts-v1/; -+#include -+#include -+ -+#include "mt7986.dtsi" -+ -+/ { -+ model = "GL.iNet GL-MT6000"; -+ compatible = "glinet,gl-mt6000", "mediatek,mt7986-emmc-rfb", "mediatek,mt7986"; -+ -+ chosen { -+ stdout-path = &uart0; -+ tick-timer = &timer0; -+ }; -+ -+ memory@40000000 { -+ device_type = "memory"; -+ reg = <0x40000000 0x40000000>; -+ }; -+ -+ reg_1p8v: regulator-1p8v { -+ compatible = "regulator-fixed"; -+ regulator-name = "fixed-1.8V"; -+ regulator-min-microvolt = <1800000>; -+ regulator-max-microvolt = <1800000>; -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+ -+ reg_3p3v: regulator-3p3v { -+ compatible = "regulator-fixed"; -+ regulator-name = "fixed-3.3V"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ regulator-boot-on; -+ regulator-always-on; -+ }; -+ -+ keys { -+ compatible = "gpio-keys"; -+ -+ wps { -+ label = "reset"; -+ gpios = <&gpio 9 GPIO_ACTIVE_LOW>; -+ linux,code = ; -+ }; -+ }; -+ -+ leds { -+ compatible = "gpio-leds"; -+ -+ led_status_blue: green { -+ label = "blue:status"; -+ gpios = <&gpio 28 GPIO_ACTIVE_LOW>; -+ }; -+ -+ led_status_white: blue { -+ label = "white:status"; -+ gpios = <&gpio 27 GPIO_ACTIVE_LOW>; -+ }; -+ }; -+ -+}; -+ -+&uart0 { -+ mediatek,force-highspeed; -+ status = "okay"; -+}; -+ -+ð { -+ status = "okay"; -+ mediatek,gmac-id = <0>; -+ phy-mode = "2500base-x"; -+ mediatek,switch = "mt7531"; -+ reset-gpios = <&gpio 18 GPIO_ACTIVE_HIGH>; -+ -+ fixed-link { -+ speed = <2500>; -+ full-duplex; -+ }; -+}; -+ -+&pinctrl { -+ mmc0_pins_default: mmc0default { -+ mux { -+ function = "flash"; -+ groups = "emmc_51"; -+ }; -+ -+ conf-cmd-dat { -+ pins = "EMMC_DATA_0", "EMMC_DATA_1", "EMMC_DATA_2", -+ "EMMC_DATA_3", "EMMC_DATA_4", "EMMC_DATA_5", -+ "EMMC_DATA_6", "EMMC_DATA_7", "EMMC_CMD"; -+ input-enable; -+ drive-strength = ; -+ bias-pull-up = ; -+ }; -+ -+ conf-clk { -+ pins = "EMMC_CK"; -+ drive-strength = ; -+ bias-pull-down = ; -+ }; -+ -+ conf-dsl { -+ pins = "EMMC_DSL"; -+ bias-pull-down = ; -+ }; -+ -+ conf-rst { -+ pins = "EMMC_RSTB"; -+ drive-strength = ; -+ bias-pull-up = ; -+ }; -+ }; -+}; -+ -+&mmc0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&mmc0_pins_default>; -+ bus-width = <8>; -+ max-frequency = <200000000>; -+ cap-mmc-highspeed; -+ cap-mmc-hw-reset; -+ vmmc-supply = <®_3p3v>; -+ vqmmc-supply = <®_1p8v>; -+ non-removable; -+ status = "okay"; -+}; -+ -+&wmcpu_emi { -+ status = "disabled"; -+}; ---- /dev/null -+++ b/configs/mt7986a_glinet_gl-mt6000_defconfig -@@ -0,0 +1,105 @@ -+CONFIG_ARM=y -+CONFIG_SYS_HAS_NONCACHED_MEMORY=y -+CONFIG_POSITION_INDEPENDENT=y -+CONFIG_ARCH_MEDIATEK=y -+CONFIG_TEXT_BASE=0x41e00000 -+CONFIG_SYS_MALLOC_F_LEN=0x4000 -+CONFIG_NR_DRAM_BANKS=1 -+CONFIG_ENV_SIZE=0x80000 -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_DEFAULT_DEVICE_TREE="mt7986a-glinet-gl-mt6000" -+CONFIG_SYS_PROMPT="MT7986> " -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_TARGET_MT7986=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_DEBUG_UART_BASE=0x11002000 -+CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_SYS_LOAD_ADDR=0x46000000 -+CONFIG_DEBUG_UART=y -+CONFIG_AHCI=y -+CONFIG_FIT=y -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7986a-glinet-gl-mt6000.dtb" -+CONFIG_LOGLEVEL=7 -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_LOG=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_HUSH_PARSER=y -+CONFIG_CMD_CPU=y -+CONFIG_CMD_LICENSE=y -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_PWM=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_MMC=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_TFTPSRV=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_PING=y -+CONFIG_CMD_CDP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_LINK_LOCAL=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 -+CONFIG_CMD_UUID=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_SMC=y -+CONFIG_OF_EMBED=y -+CONFIG_ENV_OVERWRITE=y -+CONFIG_ENV_IS_IN_MMC=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_DEFAULT_ENV_FILE="glinet_gl-mt6000_env" -+CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_NETCONSOLE=y -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_CLK=y -+CONFIG_GPIO_HOG=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y -+CONFIG_SUPPORT_EMMC_BOOT=y -+CONFIG_MMC_HS200_SUPPORT=y -+CONFIG_MMC_MTK=y -+CONFIG_PHY_FIXED=y -+CONFIG_MEDIATEK_ETH=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_PINCTRL=y -+CONFIG_PINCONF=y -+CONFIG_PINCTRL_MT7986=y -+CONFIG_POWER_DOMAIN=y -+CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_USB=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y -+CONFIG_HEXDUMP=y -+CONFIG_LMB_MAX_REGIONS=64 ---- /dev/null -+++ b/glinet_gl-mt6000_env -@@ -0,0 +1,25 @@ -+ipaddr=192.168.1.1 -+serverip=192.168.1.254 -+loadaddr=0x46000000 -+bootdelay=3 -+bootfile_bl2=openwrt-mediatek-filogic-glinet_gl-mt6000-preloader.bin -+bootfile_fip=openwrt-mediatek-filogic-glinet_gl-mt6000-bl31-uboot.fip -+bootfile_firmware=openwrt-mediatek-filogic-glinet_gl-mt6000-squashfs-factory.bin -+bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 -+bootmenu_title= *** U-Boot Boot Menu for GL-iNet GL-MT6000 *** -+bootmenu_0=Startup system (Default).=run boot_system -+bootmenu_1=Load Firmware via TFTP then write to eMMC.=run boot_tftp_firmware ; run bootmenu_confirm_return -+bootmenu_2=Load BL31+U-Boot FIP via TFTP then write to eMMC.=run boot_tftp_write_fip ; run bootmenu_confirm_return -+bootmenu_3=Load BL2 preloader via TFTP then write to eMMC.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return -+bootmenu_4=Reboot.=reset -+bootmenu_5=Reset all settings to factory defaults.=run reset_factory ; reset -+filesize_to_blk=setexpr cnt $filesize + 0x1ff && setexpr cnt $cnt / 0x200 -+mmc_read_kernel=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr $part_addr $image_size -+boot_system=part start mmc 0 kernel part_addr && part size mmc 0 kernel part_size && run mmc_read_kernel && bootm -+boot_tftp_firmware=tftpboot $loadaddr $bootfile_firmware && run emmc_write_firmware -+boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run emmc_write_fip -+boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run emmc_write_bl2 -+emmc_write_firmware=part start mmc 0 kernel part_addr && run filesize_to_blk && mmc write $loadaddr $part_addr $cnt -+emmc_write_bl2=run filesize_to_blk && test 0x$cnt -le 0x800 && mmc partconf 0 1 1 1 && && mmc write $loadaddr 0x0 0x800 ; mmc partconf 0 1 1 0 -+emmc_write_fip=part start mmc 0 fip part_addr && part size mmc 0 fip part_size && run filesize_to_blk && test 0x$cnt -le 0x$part_size && mmc write $loadaddr $part_addr $cnt -+reset_factory=eraseenv && reset diff --git a/lede/package/boot/uboot-mediatek/patches/450-add-bpi-r4.patch b/lede/package/boot/uboot-mediatek/patches/450-add-bpi-r4.patch index 0a69e74e02..95085339f6 100644 --- a/lede/package/boot/uboot-mediatek/patches/450-add-bpi-r4.patch +++ b/lede/package/boot/uboot-mediatek/patches/450-add-bpi-r4.patch @@ -1,6 +1,6 @@ --- /dev/null +++ b/configs/mt7988a_bananapi_bpi-r4-emmc_defconfig -@@ -0,0 +1,180 @@ +@@ -0,0 +1,139 @@ +CONFIG_ARM=y +CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y @@ -8,182 +8,141 @@ +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" ++CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_TARGET_MT7988=y ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_DEBUG_UART_BASE=0x11000000 +CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" +CONFIG_SYS_CBSIZE=512 +CONFIG_SYS_PBSIZE=1049 -+CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4_emmc_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y +CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y +CONFIG_LOG=y -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7988> " +CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y +CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y +CONFIG_CMD_MMC=y +CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y +CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 +CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y +CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_MTK_AHCI=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MMC=y -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x440000 -+CONFIG_ENV_SIZE=0x40000 -+CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4_emmc_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_HS200_SUPPORT=y +CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y +CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y +CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y +CONFIG_PINCTRL_MT7988=y +CONFIG_POWER_DOMAIN=y +CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y +CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+CONFIG_CMD_SF=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null +++ b/configs/mt7988a_bananapi_bpi-r4-sdmmc_defconfig -@@ -0,0 +1,180 @@ +@@ -0,0 +1,139 @@ +CONFIG_ARM=y +CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y @@ -191,182 +150,141 @@ +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-sd" ++CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_TARGET_MT7988=y ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_DEBUG_UART_BASE=0x11000000 +CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-sd.dtb" +CONFIG_SYS_CBSIZE=512 +CONFIG_SYS_PBSIZE=1049 -+CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-sd" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4_sdmmc_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-sd.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y +CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y +CONFIG_LOG=y -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7988> " +CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y +CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y +CONFIG_CMD_MMC=y +CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y +CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 +CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y +CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_MTK_AHCI=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MMC=y -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x440000 -+CONFIG_ENV_SIZE=0x40000 -+CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4_sdmmc_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_HS200_SUPPORT=y +CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y +CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y +CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y +CONFIG_PINCTRL_MT7988=y +CONFIG_POWER_DOMAIN=y +CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y +CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+CONFIG_CMD_SF=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null +++ b/configs/mt7988a_bananapi_bpi-r4-snand_defconfig -@@ -0,0 +1,182 @@ +@@ -0,0 +1,139 @@ +CONFIG_ARM=y +CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y @@ -374,183 +292,140 @@ +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" ++CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_TARGET_MT7988=y ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_DEBUG_UART_BASE=0x11000000 +CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" +CONFIG_SYS_CBSIZE=512 +CONFIG_SYS_PBSIZE=1049 -+CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4_snand_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y +CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y +CONFIG_LOG=y -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7988> " +CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y +CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y +CONFIG_CMD_MMC=y +CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y +CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 +CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y +CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_MTK_AHCI=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL_MT7988=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_REDUNDANT=y +CONFIG_ENV_UBI_PART="ubi" -+CONFIG_ENV_SIZE=0x1f000 -+CONFIG_ENV_SIZE_REDUND=0x1f000 +CONFIG_ENV_UBI_VOLUME="ubootenv" +CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4_snand_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_HS200_SUPPORT=y +CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y +CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y +CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y +CONFIG_PINCTRL_MT7988=y +CONFIG_POWER_DOMAIN=y +CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y +CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+CONFIG_CMD_SF=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null -+++ b/bananapi_bpi-r4_sdmmc_env ++++ b/defenvs/bananapi_bpi-r4_sdmmc_env @@ -0,0 +1,66 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -602,7 +477,7 @@ +sdmmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol +sdmmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol +snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x80000 && mtd write bl2 $loadaddr 0x80000 0x80000 && mtd write bl2 $loadaddr 0x100000 0x80000 && mtd write bl2 $loadaddr 0x180000 0x80000 -+ubi_create_env=ubi create ubootenv 0x100000 dynamic 1 ; ubi create ubootenv2 0x100000 dynamic 2 ++ubi_create_env=ubi create ubootenv 0x100000 dynamic ; ubi create ubootenv2 0x100000 dynamic +ubi_format=ubi detach ; mtd erase ubi && ubi part ubi +ubi_init=run ubi_format && run ubi_init_bl && run ubi_create_env && run ubi_init_openwrt && run ubi_init_emmc_install +ubi_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run ubi_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run ubi_write_production @@ -619,7 +494,7 @@ +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null -+++ b/bananapi_bpi-r4_snand_env ++++ b/defenvs/bananapi_bpi-r4_snand_env @@ -0,0 +1,67 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -666,7 +541,7 @@ +part_recovery=recovery +reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 +snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x80000 && mtd write bl2 $loadaddr 0x80000 0x80000 && mtd write bl2 $loadaddr 0x100000 0x80000 && mtd write bl2 $loadaddr 0x180000 0x80000 -+ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 1 ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 2 ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic +ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi +ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs +ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery @@ -689,7 +564,7 @@ +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null -+++ b/bananapi_bpi-r4_emmc_env ++++ b/defenvs/bananapi_bpi-r4_emmc_env @@ -0,0 +1,57 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -799,7 +674,7 @@ + wps { + label = "reset"; + linux,code = ; -+ gpios = <&gpio 14 GPIO_ACTIVE_LOW>; ++ gpios = <&pio 14 GPIO_ACTIVE_LOW>; + }; + }; + @@ -808,12 +683,12 @@ + + led_status_green: led-green { + label = "green:status"; -+ gpios = <&gpio 79 GPIO_ACTIVE_HIGH>; ++ gpios = <&pio 79 GPIO_ACTIVE_HIGH>; + }; + + led_status_blue: led-blue { + label = "blue:status"; -+ gpios = <&gpio 63 GPIO_ACTIVE_HIGH>; ++ gpios = <&pio 63 GPIO_ACTIVE_HIGH>; + }; + }; +}; @@ -828,7 +703,7 @@ + status = "okay"; +}; + -+ð { ++ð0 { + status = "okay"; + mediatek,gmac-id = <0>; + phy-mode = "usxgmii"; @@ -841,7 +716,7 @@ + }; +}; + -+&pinctrl { ++&pio { + i2c1_pins: i2c1-pins { + mux { + function = "i2c"; @@ -998,7 +873,7 @@ +}; --- /dev/null +++ b/configs/mt7988a_bananapi_bpi-r4-poe-emmc_defconfig -@@ -0,0 +1,180 @@ +@@ -0,0 +1,139 @@ +CONFIG_ARM=y +CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y @@ -1006,182 +881,141 @@ +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" ++CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_TARGET_MT7988=y ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_DEBUG_UART_BASE=0x11000000 +CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" +CONFIG_SYS_CBSIZE=512 +CONFIG_SYS_PBSIZE=1049 -+CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4-poe_emmc_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y +CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y +CONFIG_LOG=y -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7988> " +CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y +CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y +CONFIG_CMD_MMC=y +CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y +CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 +CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y +CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_MTK_AHCI=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MMC=y -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x440000 -+CONFIG_ENV_SIZE=0x40000 -+CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4-poe_emmc_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_HS200_SUPPORT=y +CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y +CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y +CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y +CONFIG_PINCTRL_MT7988=y +CONFIG_POWER_DOMAIN=y +CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y +CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+CONFIG_CMD_SF=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null +++ b/configs/mt7988a_bananapi_bpi-r4-poe-sdmmc_defconfig -@@ -0,0 +1,180 @@ +@@ -0,0 +1,139 @@ +CONFIG_ARM=y +CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y @@ -1189,182 +1023,141 @@ +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-sd" ++CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_TARGET_MT7988=y ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_DEBUG_UART_BASE=0x11000000 +CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-sd.dtb" +CONFIG_SYS_CBSIZE=512 +CONFIG_SYS_PBSIZE=1049 -+CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-sd" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4-poe_sdmmc_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-sd.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y +CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y +CONFIG_LOG=y -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7988> " +CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y +CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y +CONFIG_CMD_MMC=y +CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y +CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 +CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y +CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_MTK_AHCI=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_MMC=y -+CONFIG_ENV_OFFSET=0x400000 -+CONFIG_ENV_OFFSET_REDUND=0x440000 -+CONFIG_ENV_SIZE=0x40000 -+CONFIG_ENV_SIZE_REDUND=0x40000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4-poe_sdmmc_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_HS200_SUPPORT=y +CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y +CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y +CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y +CONFIG_PINCTRL_MT7988=y +CONFIG_POWER_DOMAIN=y +CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y +CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+CONFIG_CMD_SF=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null +++ b/configs/mt7988a_bananapi_bpi-r4-poe-snand_defconfig -@@ -0,0 +1,182 @@ +@@ -0,0 +1,139 @@ +CONFIG_ARM=y +CONFIG_SYS_HAS_NONCACHED_MEMORY=y +CONFIG_POSITION_INDEPENDENT=y @@ -1372,183 +1165,140 @@ +CONFIG_TEXT_BASE=0x41e00000 +CONFIG_SYS_MALLOC_F_LEN=0x4000 +CONFIG_NR_DRAM_BANKS=1 -+CONFIG_SYS_PROMPT="MT7988> " ++CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" ++CONFIG_OF_LIBFDT_OVERLAY=y +CONFIG_TARGET_MT7988=y ++CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 +CONFIG_DEBUG_UART_BASE=0x11000000 +CONFIG_DEBUG_UART_CLOCK=40000000 -+CONFIG_SYS_LOAD_ADDR=0x50000000 ++CONFIG_PCI=y +CONFIG_DEBUG_UART=y ++CONFIG_AHCI=y ++CONFIG_FIT=y ++CONFIG_BOOTDELAY=30 ++CONFIG_AUTOBOOT_KEYED=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_OF_SYSTEM_SETUP=y ++CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" +CONFIG_SYS_CBSIZE=512 +CONFIG_SYS_PBSIZE=1049 -+CONFIG_DEFAULT_DEVICE_TREE="mt7988a-bananapi-bpi-r4-emmc" -+CONFIG_DEFAULT_ENV_FILE="bananapi_bpi-r4-poe_snand_env" -+CONFIG_DEFAULT_FDT_FILE="mediatek/mt7988a-bpi-r4-emmc.dtb" -+CONFIG_OF_LIBFDT_OVERLAY=y -+CONFIG_OF_SYSTEM_SETUP=y -+CONFIG_SMBIOS_PRODUCT_NAME="" -+CONFIG_AUTOBOOT_KEYED=y -+CONFIG_BOOTDELAY=30 -+CONFIG_AUTOBOOT_MENU_SHOW=y -+CONFIG_CFB_CONSOLE_ANSI=y -+CONFIG_BOARD_LATE_INIT=y -+CONFIG_BUTTON=y -+CONFIG_BUTTON_GPIO=y -+CONFIG_GPIO_HOG=y -+CONFIG_CMD_ENV_FLAGS=y -+CONFIG_FIT=y -+CONFIG_FIT_ENABLE_SHA256_SUPPORT=y -+CONFIG_LED=y -+CONFIG_LED_BLINK=y -+CONFIG_LED_GPIO=y +CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y +CONFIG_LOG=y -+CONFIG_CMD_BOOTMENU=y -+CONFIG_CMD_BOOTP=y -+CONFIG_CMD_BUTTON=y -+CONFIG_CMD_CACHE=y -+CONFIG_CMD_CDP=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7988> " +CONFIG_CMD_CPU=y -+CONFIG_CMD_DHCP=y -+CONFIG_CMD_DM=y -+CONFIG_CMD_DNS=y -+CONFIG_CMD_ECHO=y -+CONFIG_CMD_ENV_READMEM=y -+CONFIG_CMD_ERASEENV=y -+CONFIG_CMD_EXT4=y -+CONFIG_CMD_FAT=y -+CONFIG_CMD_FDT=y -+CONFIG_CMD_FS_GENERIC=y -+CONFIG_CMD_FS_UUID=y -+CONFIG_CMD_GPIO=y -+CONFIG_CMD_GPT=y -+CONFIG_CMD_HASH=y -+CONFIG_CMD_ITEST=y -+CONFIG_CMD_LED=y +CONFIG_CMD_LICENSE=y -+CONFIG_CMD_LINK_LOCAL=y -+# CONFIG_CMD_MBR is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y +CONFIG_CMD_MMC=y +CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y +CONFIG_CMD_PCI=y -+CONFIG_CMD_PSTORE=y -+CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 +CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y +CONFIG_CMD_PING=y +CONFIG_CMD_PXE=y -+CONFIG_CMD_PWM=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y +CONFIG_CMD_SMC=y -+CONFIG_CMD_TFTPBOOT=y -+CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y +CONFIG_CMD_UBI=y +CONFIG_CMD_UBI_RENAME=y -+CONFIG_CMD_UBIFS=y -+CONFIG_CMD_ASKENV=y -+CONFIG_CMD_PART=y -+CONFIG_CMD_RARP=y -+CONFIG_CMD_SETEXPR=y -+CONFIG_CMD_SLEEP=y -+CONFIG_CMD_SNTP=y -+CONFIG_CMD_SOURCE=y -+CONFIG_CMD_STRINGS=y -+CONFIG_CMD_USB=y -+CONFIG_CMD_UUID=y -+CONFIG_DISPLAY_CPUINFO=y -+CONFIG_DM_MMC=y -+CONFIG_DM_MTD=y -+CONFIG_DM_REGULATOR=y -+CONFIG_DM_REGULATOR_FIXED=y -+CONFIG_DM_REGULATOR_GPIO=y -+CONFIG_DM_USB=y -+CONFIG_DM_PWM=y -+CONFIG_PWM_MTK=y -+CONFIG_HUSH_PARSER=y -+CONFIG_SYS_REDUNDAND_ENVIRONMENT=y -+CONFIG_SYS_RELOC_GD_ENV_ADDR=y -+CONFIG_VERSION_VARIABLE=y -+CONFIG_PARTITION_UUIDS=y -+CONFIG_NETCONSOLE=y -+CONFIG_DM_GPIO=y -+CONFIG_DM_SCSI=y -+CONFIG_AHCI=y -+CONFIG_AHCI_PCI=y -+CONFIG_SCSI_AHCI=y -+CONFIG_SCSI=y -+CONFIG_CMD_SCSI=y -+CONFIG_PHY=y -+CONFIG_PHY_MTK_TPHY=y -+CONFIG_MTK_AHCI=y -+CONFIG_PCI=y -+CONFIG_MTD=y -+CONFIG_MTD_UBI_FASTMAP=y -+CONFIG_DM_PCI=y -+CONFIG_PCIE_MEDIATEK=y -+CONFIG_PINCTRL_MT7988=y -+CONFIG_PRE_CONSOLE_BUFFER=y -+CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 -+CONFIG_RAM=y -+CONFIG_DM_SERIAL=y -+CONFIG_MTK_SERIAL=y -+CONFIG_MMC=y -+CONFIG_MMC_DEFAULT_DEV=1 -+CONFIG_MMC_SUPPORTS_TUNING=y -+CONFIG_SPI=y -+CONFIG_DM_SPI=y -+CONFIG_MTK_SPI_NAND=y -+CONFIG_MTK_SPI_NAND_MTD=y -+CONFIG_SYSRESET_WATCHDOG=y -+CONFIG_WDT_MTK=y -+CONFIG_LZO=y -+CONFIG_ZSTD=y -+CONFIG_HEXDUMP=y -+CONFIG_RANDOM_UUID=y -+CONFIG_REGEX=y -+CONFIG_USB=y -+CONFIG_USB_HOST=y -+CONFIG_USB_XHCI_HCD=y -+CONFIG_USB_XHCI_MTK=y -+CONFIG_USB_STORAGE=y +CONFIG_OF_EMBED=y +CONFIG_ENV_OVERWRITE=y +CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_REDUNDANT=y +CONFIG_ENV_UBI_PART="ubi" -+CONFIG_ENV_SIZE=0x1f000 -+CONFIG_ENV_SIZE_REDUND=0x1f000 +CONFIG_ENV_UBI_VOLUME="ubootenv" +CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_RELOC_GD_ENV_ADDR=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4-poe_snand_env" +CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" +CONFIG_NET_RANDOM_ETHADDR=y -+CONFIG_REGMAP=y -+CONFIG_SYSCON=y ++CONFIG_SCSI_AHCI=y ++CONFIG_AHCI_PCI=y ++CONFIG_MTK_AHCI=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y +CONFIG_CLK=y ++CONFIG_GPIO_HOG=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y +CONFIG_SUPPORT_EMMC_BOOT=y +CONFIG_MMC_HS200_SUPPORT=y +CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_WINBOND=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_SPI_FLASH_MTD=y ++CONFIG_MTD_UBI_FASTMAP=y +CONFIG_PHY_FIXED=y -+CONFIG_DM_ETH=y +CONFIG_MEDIATEK_ETH=y ++CONFIG_PCIE_MEDIATEK=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y +CONFIG_PINCTRL=y +CONFIG_PINCONF=y +CONFIG_PINCTRL_MT7988=y +CONFIG_POWER_DOMAIN=y +CONFIG_MTK_POWER_DOMAIN=y -+CONFIG_USE_DEFAULT_ENV_FILE=y -+CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_RAM=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y +CONFIG_MTK_SPIM=y -+#CONFIG_MTK_SNOR=y -+CONFIG_DM_SPI_FLASH=y -+CONFIG_SPI_FLASH_MTD=y -+CONFIG_SPI_FLASH_WINBOND=y -+# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set -+CONFIG_CMD_SF=y -+CONFIG_CMD_NAND=y -+CONFIG_CMD_NAND_TRIMFFS=y -+CONFIG_LMB_MAX_REGIONS=64 -+CONFIG_USE_IPADDR=y -+CONFIG_IPADDR="192.168.1.1" -+CONFIG_USE_SERVERIP=y -+CONFIG_SERVERIP="192.168.1.254" ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y --- /dev/null -+++ b/bananapi_bpi-r4-poe_emmc_env ++++ b/defenvs/bananapi_bpi-r4-poe_emmc_env @@ -0,0 +1,57 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -1608,7 +1358,7 @@ +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null -+++ b/bananapi_bpi-r4-poe_sdmmc_env ++++ b/defenvs/bananapi_bpi-r4-poe_sdmmc_env @@ -0,0 +1,66 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -1660,7 +1410,7 @@ +sdmmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol +sdmmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol +snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x80000 && mtd write bl2 $loadaddr 0x80000 0x80000 && mtd write bl2 $loadaddr 0x100000 0x80000 && mtd write bl2 $loadaddr 0x180000 0x80000 -+ubi_create_env=ubi create ubootenv 0x100000 dynamic 1 ; ubi create ubootenv2 0x100000 dynamic 2 ++ubi_create_env=ubi create ubootenv 0x100000 dynamic ; ubi create ubootenv2 0x100000 dynamic +ubi_format=ubi detach ; mtd erase ubi && ubi part ubi +ubi_init=run ubi_format && run ubi_init_bl && run ubi_create_env && run ubi_init_openwrt && run ubi_init_emmc_install +ubi_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run ubi_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run ubi_write_production @@ -1677,7 +1427,7 @@ +_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title +_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" --- /dev/null -+++ b/bananapi_bpi-r4-poe_snand_env ++++ b/defenvs/bananapi_bpi-r4-poe_snand_env @@ -0,0 +1,67 @@ +ipaddr=192.168.1.1 +serverip=192.168.1.254 @@ -1724,7 +1474,7 @@ +part_recovery=recovery +reset_factory=ubi part ubi ; mw $loadaddr 0x0 0x800 ; ubi write $loadaddr ubootenv 0x800 ; ubi write $loadaddr ubootenv2 0x800 +snand_write_bl2=mtd erase bl2 && mtd write bl2 $loadaddr 0x0 0x80000 && mtd write bl2 $loadaddr 0x80000 0x80000 && mtd write bl2 $loadaddr 0x100000 0x80000 && mtd write bl2 $loadaddr 0x180000 0x80000 -+ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic 1 ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic 2 ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x100000 dynamic ; ubi check ubootenv2 || ubi create ubootenv2 0x100000 dynamic +ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi +ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs +ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery diff --git a/lede/package/boot/uboot-mediatek/patches/470-add-bpi-r4-lite.patch b/lede/package/boot/uboot-mediatek/patches/470-add-bpi-r4-lite.patch new file mode 100644 index 0000000000..4afb01a316 --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/470-add-bpi-r4-lite.patch @@ -0,0 +1,1349 @@ +--- /dev/null ++++ b/configs/mt7987a_bpi-r4-lite-emmc_defconfig +@@ -0,0 +1,155 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7987a-bpi-r4-lite-emmc" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_TARGET_MT7987=y ++CONFIG_CPU_ARMV8=y ++CONFIG_SYS_BOOTM_LEN=0x6000000 ++CONFIG_SYS_LOAD_ADDR=0x48000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_FIT=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_DEFAULT_FDT_FILE="mt7987a-bpi-r4-lite-emmc" ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7987> " ++CONFIG_CMD_LICENSE=y ++# CONFIG_BOOTM_NETBSD is not set ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_XIMG is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_I2C=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4-lite_emmc_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_NETMASK=y ++CONFIG_NETMASK="255.255.255.0" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_DM_I2C=y ++CONFIG_SYS_I2C_MTK=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_SFDP_SUPPORT=y ++CONFIG_SPI_FLASH_ATMEL=y ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_ISSI=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_PUYA=y ++CONFIG_SPI_FLASH_SILICONKAISER=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_SPI_FLASH_STMICRO=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_XTX=y ++CONFIG_SPI_FLASH_ZBIT=y ++CONFIG_SPI_FLASH_MTD=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_PHY_ETHERNET_ID=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7987=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPIM=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++# CONFIG_TOOLS_LIBCRYPTO is not set ++# CONFIG_TOOLS_KWBIMAGE is not set ++# CONFIG_TOOLS_MKEFICAPSULE is not set +--- /dev/null ++++ b/configs/mt7987a_bpi-r4-lite-nor_defconfig +@@ -0,0 +1,156 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7987a-bpi-r4-lite-emmc" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_TARGET_MT7987=y ++CONFIG_CPU_ARMV8=y ++CONFIG_SYS_BOOTM_LEN=0x6000000 ++CONFIG_SYS_LOAD_ADDR=0x48000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_FIT=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_DEFAULT_FDT_FILE="mt7987a-bpi-r4-lite-emmc" ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7987> " ++CONFIG_CMD_LICENSE=y ++# CONFIG_BOOTM_NETBSD is not set ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_XIMG is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_I2C=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MTD=y ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_MTD_DEV="u-boot-env" ++CONFIG_ENV_SIZE=0x20000 ++CONFIG_ENV_OFFSET=0x0 ++CONFIG_ENV_OFFSET_REDUND=0x20000 ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4-lite_nor_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_NETMASK=y ++CONFIG_NETMASK="255.255.255.0" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_DM_I2C=y ++CONFIG_SYS_I2C_MTK=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_SFDP_SUPPORT=y ++CONFIG_SPI_FLASH_ATMEL=y ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_ISSI=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_PUYA=y ++CONFIG_SPI_FLASH_SILICONKAISER=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_SPI_FLASH_STMICRO=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_XTX=y ++CONFIG_SPI_FLASH_ZBIT=y ++CONFIG_SPI_FLASH_MTD=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_PHY_ETHERNET_ID=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7987=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPIM=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++# CONFIG_TOOLS_LIBCRYPTO is not set ++# CONFIG_TOOLS_KWBIMAGE is not set ++# CONFIG_TOOLS_MKEFICAPSULE is not set +--- /dev/null ++++ b/configs/mt7987a_bpi-r4-lite-sd_defconfig +@@ -0,0 +1,155 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7987a-bpi-r4-lite-sd" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_TARGET_MT7987=y ++CONFIG_CPU_ARMV8=y ++CONFIG_SYS_BOOTM_LEN=0x6000000 ++CONFIG_SYS_LOAD_ADDR=0x48000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_FIT=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_DEFAULT_FDT_FILE="mt7987a-bpi-r4-lite-sd" ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7987> " ++CONFIG_CMD_LICENSE=y ++# CONFIG_BOOTM_NETBSD is not set ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_XIMG is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_I2C=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_MMC=y ++CONFIG_ENV_SIZE=0x40000 ++CONFIG_ENV_OFFSET=0x400000 ++CONFIG_ENV_OFFSET_REDUND=0x440000 ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4-lite_sdmmc_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_NETMASK=y ++CONFIG_NETMASK="255.255.255.0" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_DM_I2C=y ++CONFIG_SYS_I2C_MTK=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_SFDP_SUPPORT=y ++CONFIG_SPI_FLASH_ATMEL=y ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_ISSI=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_PUYA=y ++CONFIG_SPI_FLASH_SILICONKAISER=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_SPI_FLASH_STMICRO=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_XTX=y ++CONFIG_SPI_FLASH_ZBIT=y ++CONFIG_SPI_FLASH_MTD=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_PHY_ETHERNET_ID=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7987=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPIM=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++# CONFIG_TOOLS_LIBCRYPTO is not set ++# CONFIG_TOOLS_KWBIMAGE is not set ++# CONFIG_TOOLS_MKEFICAPSULE is not set +--- /dev/null ++++ b/configs/mt7987a_bpi-r4-lite-snand_defconfig +@@ -0,0 +1,155 @@ ++CONFIG_ARM=y ++CONFIG_SYS_HAS_NONCACHED_MEMORY=y ++CONFIG_POSITION_INDEPENDENT=y ++CONFIG_ARCH_MEDIATEK=y ++CONFIG_TEXT_BASE=0x41e00000 ++CONFIG_SYS_MALLOC_F_LEN=0x4000 ++CONFIG_NR_DRAM_BANKS=1 ++CONFIG_DEFAULT_DEVICE_TREE="mt7987a-bpi-r4-lite-spim-nand" ++CONFIG_OF_LIBFDT_OVERLAY=y ++CONFIG_TARGET_MT7987=y ++CONFIG_CPU_ARMV8=y ++CONFIG_SYS_BOOTM_LEN=0x6000000 ++CONFIG_SYS_LOAD_ADDR=0x48000000 ++CONFIG_PRE_CON_BUF_ADDR=0x4007EF00 ++CONFIG_DEBUG_UART_BASE=0x11000000 ++CONFIG_DEBUG_UART_CLOCK=40000000 ++CONFIG_DEBUG_UART=y ++CONFIG_FIT=y ++CONFIG_AUTOBOOT_MENU_SHOW=y ++CONFIG_DEFAULT_FDT_FILE="mt7987a-bpi-r4-lite-emmc-spim-nand" ++CONFIG_SYS_CBSIZE=512 ++CONFIG_SYS_PBSIZE=1049 ++CONFIG_LOGLEVEL=7 ++CONFIG_PRE_CONSOLE_BUFFER=y ++CONFIG_LOG=y ++# CONFIG_BOARD_INIT is not set ++CONFIG_BOARD_LATE_INIT=y ++CONFIG_HUSH_PARSER=y ++CONFIG_SYS_PROMPT="MT7987> " ++CONFIG_CMD_LICENSE=y ++# CONFIG_BOOTM_NETBSD is not set ++# CONFIG_BOOTM_PLAN9 is not set ++# CONFIG_BOOTM_RTEMS is not set ++# CONFIG_BOOTM_VXWORKS is not set ++# CONFIG_CMD_BOOTEFI_BOOTMGR is not set ++CONFIG_CMD_BOOTMENU=y ++# CONFIG_CMD_XIMG is not set ++CONFIG_CMD_ASKENV=y ++CONFIG_CMD_ERASEENV=y ++CONFIG_CMD_ENV_FLAGS=y ++CONFIG_CMD_STRINGS=y ++CONFIG_CMD_CPU=y ++CONFIG_CMD_DM=y ++CONFIG_CMD_GPIO=y ++CONFIG_CMD_PWM=y ++CONFIG_CMD_GPT=y ++CONFIG_CMD_I2C=y ++CONFIG_CMD_MMC=y ++CONFIG_CMD_MTD=y ++CONFIG_CMD_PART=y ++CONFIG_CMD_PCI=y ++CONFIG_CMD_USB=y ++CONFIG_CMD_TFTPSRV=y ++CONFIG_CMD_RARP=y ++CONFIG_CMD_CDP=y ++CONFIG_CMD_SNTP=y ++CONFIG_CMD_LINK_LOCAL=y ++CONFIG_CMD_DHCP=y ++CONFIG_CMD_DNS=y ++CONFIG_CMD_PING=y ++CONFIG_CMD_PXE=y ++CONFIG_CMD_CACHE=y ++CONFIG_CMD_PSTORE=y ++CONFIG_CMD_PSTORE_MEM_ADDR=0x42ff0000 ++CONFIG_CMD_UUID=y ++CONFIG_CMD_HASH=y ++CONFIG_CMD_SMC=y ++CONFIG_CMD_EXT4=y ++CONFIG_CMD_FAT=y ++CONFIG_CMD_FS_GENERIC=y ++CONFIG_CMD_FS_UUID=y ++CONFIG_CMD_SF_TEST=y ++CONFIG_CMD_UBI=y ++CONFIG_CMD_UBI_RENAME=y ++CONFIG_ENV_OVERWRITE=y ++CONFIG_ENV_IS_IN_UBI=y ++CONFIG_ENV_REDUNDANT=y ++CONFIG_ENV_UBI_PART="ubi" ++CONFIG_ENV_UBI_VOLUME="ubootenv" ++CONFIG_ENV_UBI_VOLUME_REDUND="ubootenv2" ++CONFIG_ENV_USE_DEFAULT_ENV_TEXT_FILE=y ++CONFIG_ENV_DEFAULT_ENV_TEXT_FILE="defenvs/bananapi_bpi-r4-lite_snand_env" ++CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y ++CONFIG_VERSION_VARIABLE=y ++CONFIG_NETCONSOLE=y ++CONFIG_USE_IPADDR=y ++CONFIG_IPADDR="192.168.1.1" ++CONFIG_USE_NETMASK=y ++CONFIG_NETMASK="255.255.255.0" ++CONFIG_USE_SERVERIP=y ++CONFIG_SERVERIP="192.168.1.254" ++CONFIG_NET_RANDOM_ETHADDR=y ++CONFIG_BUTTON=y ++CONFIG_BUTTON_GPIO=y ++CONFIG_CLK=y ++CONFIG_DM_I2C=y ++CONFIG_SYS_I2C_MTK=y ++CONFIG_LED=y ++CONFIG_LED_BLINK=y ++CONFIG_LED_GPIO=y ++CONFIG_SUPPORT_EMMC_BOOT=y ++CONFIG_MMC_HS200_SUPPORT=y ++CONFIG_MMC_MTK=y ++CONFIG_MTD=y ++CONFIG_DM_MTD=y ++CONFIG_MTD_SPI_NAND=y ++CONFIG_DM_SPI_FLASH=y ++CONFIG_SPI_FLASH_SFDP_SUPPORT=y ++CONFIG_SPI_FLASH_ATMEL=y ++CONFIG_SPI_FLASH_EON=y ++CONFIG_SPI_FLASH_GIGADEVICE=y ++CONFIG_SPI_FLASH_ISSI=y ++CONFIG_SPI_FLASH_MACRONIX=y ++CONFIG_SPI_FLASH_PUYA=y ++CONFIG_SPI_FLASH_SILICONKAISER=y ++CONFIG_SPI_FLASH_SPANSION=y ++CONFIG_SPI_FLASH_STMICRO=y ++CONFIG_SPI_FLASH_WINBOND=y ++CONFIG_SPI_FLASH_XMC=y ++CONFIG_SPI_FLASH_XTX=y ++CONFIG_SPI_FLASH_ZBIT=y ++CONFIG_SPI_FLASH_MTD=y ++# CONFIG_SPI_FLASH_USE_4K_SECTORS is not set ++CONFIG_MTD_UBI_FASTMAP=y ++CONFIG_PHY_ETHERNET_ID=y ++CONFIG_PHY_FIXED=y ++CONFIG_MEDIATEK_ETH=y ++CONFIG_PHY=y ++CONFIG_PHY_MTK_TPHY=y ++CONFIG_PINCTRL=y ++CONFIG_PINCONF=y ++CONFIG_PINCTRL_MT7987=y ++CONFIG_POWER_DOMAIN=y ++CONFIG_MTK_POWER_DOMAIN=y ++CONFIG_DM_REGULATOR=y ++CONFIG_DM_REGULATOR_FIXED=y ++CONFIG_DM_REGULATOR_GPIO=y ++CONFIG_DM_PWM=y ++CONFIG_PWM_MTK=y ++CONFIG_SCSI=y ++CONFIG_DM_SERIAL=y ++CONFIG_SERIAL_RX_BUFFER=y ++CONFIG_MTK_SERIAL=y ++CONFIG_SPI=y ++CONFIG_DM_SPI=y ++CONFIG_MTK_SPIM=y ++CONFIG_USB=y ++CONFIG_USB_XHCI_HCD=y ++CONFIG_USB_XHCI_MTK=y ++CONFIG_USB_STORAGE=y ++CONFIG_ZSTD=y ++CONFIG_HEXDUMP=y ++# CONFIG_TOOLS_LIBCRYPTO is not set ++# CONFIG_TOOLS_KWBIMAGE is not set ++# CONFIG_TOOLS_MKEFICAPSULE is not set +--- /dev/null ++++ b/defenvs/bananapi_bpi-r4-lite_sdmmc_env +@@ -0,0 +1,80 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x48000000 ++console=earlycon=uart8250,mmio32,0x11000000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_sdmmc ; fi ++bootconf=config-mt7987a-bananapi-bpi-r4-lite ++bootconf_base=config-mt7987a-bananapi-bpi-r4-lite#mt7987a-bananapi-bpi-r4-lite-1pcie-2L ++bootconf_nor=mt7987a-bananapi-bpi-r4-lite-nor ++bootconf_nand=mt7987a-bananapi-bpi-r4-lite-nand ++bootconf_sd=mt7987a-bananapi-bpi-r4-lite-sd ++bootconf_emmc=mt7987a-bananapi-bpi-r4-lite-emmc ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-initramfs-recovery.itb ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SD card] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from SD card.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from SD card.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to SD card.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to SD card.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Install bootloader, recovery and production to NOR.=if sf probe ; then run nor_init ; else echo "NOR not detected" ; fi ; run bootmenu_confirm_return ++bootmenu_7=Install bootloader, recovery and production to NAND.=if nand info ; then run ubi_init ; else echo "NAND not detected" ; fi ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_update_conf=if nand info ; then setenv bootconf $bootconf_base#$bootconf_sd#$bootconf_nand ; else if sf probe ; then setenv bootconf $bootconf_base#$bootconf_sd#$bootconf_nor ; else setenv bootconf $bootconf_base#$bootconf_sd ; fi ; fi ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=led $bootled_pwr on ; run boot_update_conf ; run sdmmc_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=led $bootled_rec on ; run boot_update_conf ; run sdmmc_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_sdmmc=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=run boot_update_conf ; tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run sdmmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=run boot_update_conf ; tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run sdmmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=run boot_update_conf ; tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++part_default=production ++part_recovery=recovery ++reset_factory=eraseenv && reset ++sdmmc_read_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol ++sdmmc_read_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol ++sdmmc_read_snand_bl2=part start mmc 0 install part_addr && mmc read $loadaddr $part_addr 0x400 ++sdmmc_read_snand_fip=part start mmc 0 install part_addr && setexpr offset $part_addr + 0x800 && mmc read $loadaddr $offset 0x1000 ++sdmmc_read_nor_bl2=part start mmc 0 install part_addr && setexpr offset $part_addr + 0x2800 && mmc read $loadaddr $offset 0x400 ++sdmmc_read_nor_fip=part start mmc 0 install part_addr && setexpr offset $part_addr + 0x3000 && mmc read $loadaddr $offset 0x1000 ++sdmmc_read_emmc_install=part start mmc 0 install part_addr && setexpr offset $part_addr + 0x3800 && mmc read $loadaddr $offset 0x4000 ++sdmmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++sdmmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++snand_write_bl2=mtd erase bl2-nand && mtd write bl2-nand $loadaddr 0x0 0x80000 && mtd write bl2-nand $loadaddr 0x80000 0x80000 && mtd write bl2-nand $loadaddr 0x100000 0x80000 && mtd write bl2-nand $loadaddr 0x180000 0x80000 ++nor_write_bl2=mtd erase bl2-nor && mtd write bl2-nor $loadaddr ++nor_write_fip=mtd erase fip && mtd write fip $loadaddr ++nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x10000 ; setexpr tmp1 0x$image_size % 0x10000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb $image_eb * 0x10000 ++nor_erase_env=mtd erase u-boot-env ++nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0xfc0000 && mtd erase fit && mtd write fit $loadaddr 0x0 $image_eb ++nor_write_recovery=run nor_pad_size ; test 0x$image_eb -le 0xe80000 && mtd erase recovery 0x0 0x$image_eb && mtd write recovery $loadaddr 0x0 $image_eb ++nor_init=run nor_init_bl && run nor_init_openwrt ++nor_init_bl=run sdmmc_read_nor_bl2 && run nor_write_bl2 && run sdmmc_read_nor_fip && run nor_write_fip && run nor_erase_env ++nor_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run nor_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run nor_write_production ++ubi_format=ubi detach ; mtd erase ubi && ubi part ubi ++ubi_init=run ubi_format && run ubi_init_bl && run ubi_init_openwrt && run ubi_init_emmc_install ++ubi_init_openwrt=run sdmmc_read_recovery && iminfo $loadaddr && run ubi_write_recovery ; run sdmmc_read_production && iminfo $loadaddr && run ubi_write_production ++ubi_init_bl=run sdmmc_read_snand_bl2 && run snand_write_bl2 && run sdmmc_read_snand_fip && run ubi_write_fip ++ubi_init_emmc_install=run sdmmc_read_emmc_install && run ubi_write_emmc_install ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 ++ubi_write_emmc_install=ubi check emmc_install && ubi remove emmc_install ; ubi create emmc_install 0x800000 dynamic ; ubi write $loadaddr emmc_install 0x800000 ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ++_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/defenvs/bananapi_bpi-r4-lite_nor_env +@@ -0,0 +1,59 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x48000000 ++console=earlycon=uart8250,mmio32,0x11000000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_nor ; fi ++bootconf=config-mt7987a-bananapi-bpi-r4-lite ++bootconf_base=config-mt7987a-bananapi-bpi-r4-lite#mt7987a-bananapi-bpi-r4-lite-1pcie-2L ++bootconf_nor=mt7987a-bananapi-bpi-r4-lite-nor ++bootconf_nand=mt7987a-bananapi-bpi-r4-lite-nand ++bootconf_sd=mt7987a-bananapi-bpi-r4-lite-sd ++bootconf_emmc=mt7987a-bananapi-bpi-r4-lite-emmc ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-nor-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-nor-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SPI-NOR] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from flash.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from flash.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to flash.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to flash.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to flash.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=run boot_update_conf ; led $bootled_pwr on ; run nor_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=run boot_update_conf ; led $bootled_rec on ; run nor_read_recovery ; bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_serial_write_fip=loadx $loadaddr 115200 && run boot_write_fip ++boot_serial_write_preloader=loadx $loadaddr 115200 && run boot_write_preloader ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=run boot_update_conf ; tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run nor_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=run boot_update_conf ; tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run nor_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=run boot_update_conf ; tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run nor_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run nor_write_bl2 ++boot_update_conf=if mmc partconf 0 ; then setenv bootconf $bootconf_base#$bootconf_nor#$bootconf_emmc ; else setenv bootconf $bootconf_base#$bootconf_nor#$bootconf_sd ; fi ++boot_nor=run boot_production ; run boot_recovery ++reset_factory=mtd erase u-boot-env ++nor_write_fip=mtd erase fip && mtd write fip $loadaddr ++nor_write_bl2=mtd erase bl2-nor && mtd write bl2-nor $loadaddr ++nor_read_production=mtd read fit $loadaddr 0x0 0x20000 && imsz $loadaddr image_size && mtd read fit $loadaddr 0x0 $image_size ++nor_read_recovery=mtd read recovery $loadaddr 0x0 0x20000 && imsz $loadaddr image_size && mtd read recovery $loadaddr 0x0 $image_size ++nor_pad_size=imsz $loadaddr image_size ; setexpr image_eb 0x$image_size / 0x10000 ; setexpr tmp1 0x$image_size % 0x10000 ; test 0x$tmp1 -gt 0 && setexpr image_eb 0x$image_eb + 1 ; setexpr image_eb $image_eb * 0x10000 ++nor_write_production=run nor_pad_size ; test 0x$image_eb -le 0xfc0000 && mtd erase fit && mtd write fit $loadaddr 0x0 $image_eb ++nor_write_recovery=run nor_pad_size ; test 0x$image_eb -le 0xe80000 && mtd erase recovery 0x0 0x$image_eb && mtd write recovery $loadaddr 0x0 $image_eb ++_init_env=setenv _init_env ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/defenvs/bananapi_bpi-r4-lite_snand_env +@@ -0,0 +1,72 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x48000000 ++console=earlycon=uart8250,mmio32,0x11000000 console=ttyS0 ++bootconf=config-mt7987a-bananapi-bpi-r4-lite ++bootconf_base=config-mt7987a-bananapi-bpi-r4-lite#mt7987a-bananapi-bpi-r4-lite-1pcie-2L ++bootconf_nor=mt7987a-bananapi-bpi-r4-lite-nor ++bootconf_nand=mt7987a-bananapi-bpi-r4-lite-nand ++bootconf_sd=mt7987a-bananapi-bpi-r4-lite-sd ++bootconf_emmc=mt7987a-bananapi-bpi-r4-lite-emmc ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_ubi ; fi ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-snand-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-snand-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [SPI-NAND] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from NAND.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from NAND.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to NAND.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to NAND.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to NAND.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Install bootloader, recovery and production to eMMC.=if mmc partconf 0 ; then run emmc_init ; else echo "eMMC not detected" ; fi ; run bootmenu_confirm_return ++bootmenu_9=Reboot.=reset ++bootmenu_10=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=run boot_update_conf ; led $bootled_pwr on ; run ubi_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=run boot_update_conf ; led $bootled_rec on ; run ubi_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_ubi=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=run boot_update_conf ; tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run ubi_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=run boot_update_conf ; tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run ubi_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp=run boot_update_conf ; tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run ubi_write_fip && run reset_factory ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run snand_write_bl2 ++boot_update_conf=if mmc partconf 0 ; then setenv bootconf $bootconf_base#$bootconf_nand#$bootconf_emmc ; else setenv bootconf $bootconf_base#$bootconf_nand#$bootconf_sd ; fi ++part_default=production ++part_recovery=recovery ++reset_factory=ubi part ubi ; mw $loadaddr 0xff 0x1f000 ; ubi write $loadaddr ubootenv 0x1f000 ; ubi write $loadaddr ubootenv2 0x1f000 ++snand_write_bl2=mtd erase bl2-nand && mtd write bl2-nand $loadaddr 0x0 0x80000 && mtd write bl2-nand $loadaddr 0x80000 0x80000 && mtd write bl2-nand $loadaddr 0x100000 0x80000 && mtd write bl2-nand $loadaddr 0x180000 0x80000 ++ubi_create_env=ubi check ubootenv || ubi create ubootenv 0x1f000 dynamic ; ubi check ubootenv2 || ubi create ubootenv2 0x1f000 dynamic ++ubi_prepare_rootfs=if ubi check rootfs_data ; then else if env exists rootfs_data_max ; then ubi create rootfs_data $rootfs_data_max dynamic || ubi create rootfs_data - dynamic ; else ubi create rootfs_data - dynamic ; fi ; fi ++ubi_read_production=ubi read $loadaddr fit && iminfo $loadaddr && run ubi_prepare_rootfs ++ubi_read_recovery=ubi check recovery && ubi read $loadaddr recovery ++ubi_read_emmc_install=ubi check emmc_install && ubi read $loadaddr emmc_install ++ubi_remove_rootfs=ubi check rootfs_data && ubi remove rootfs_data ++ubi_write_fip=run ubi_remove_rootfs ; ubi check fip && ubi remove fip ; ubi create fip 0x200000 static ; ubi write $loadaddr fip 0x200000 ++ubi_write_production=ubi check fit && ubi remove fit ; run ubi_remove_rootfs ; ubi create fit $filesize dynamic && ubi write $loadaddr fit $filesize ++ubi_write_recovery=ubi check recovery && ubi remove recovery ; run ubi_remove_rootfs ; ubi create recovery $filesize dynamic && ubi write $loadaddr recovery $filesize ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++emmc_init=mmc dev 0 && run emmc_init_bl && run emmc_init_openwrt ; env default bootcmd ; saveenv ; saveenv ++emmc_init_bl=run ubi_read_emmc_install && setenv fileaddr $loadaddr && run emmc_write_bl2 && setexpr fileaddr $loadaddr + 0x100000 && run emmc_write_fip && setexpr fileaddr $loadaddr + 0x500000 && run emmc_write_hdr ++emmc_init_openwrt=run ubi_read_recovery && iminfo $loadaddr && run emmc_write_recovery ; run ubi_read_production && iminfo $loadaddr && run emmc_write_production ++emmc_write_bl2=mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $fileaddr 0x0 0x400 ; mmc partconf 0 1 1 0 ++emmc_write_fip=mmc erase 0x3400 0x2000 && mmc write $fileaddr 0x3400 0x2000 && mmc erase 0x2000 0x800 ++emmc_write_hdr=mmc erase 0x0 0x40 && mmc write $fileaddr 0x0 0x40 ++emmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++_init_env=setenv _init_env ; run ubi_create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/defenvs/bananapi_bpi-r4-lite_emmc_env +@@ -0,0 +1,60 @@ ++ipaddr=192.168.1.1 ++serverip=192.168.1.254 ++loadaddr=0x48000000 ++console=earlycon=uart8250,mmio32,0x11000000 console=ttyS0 ++bootcmd=if pstore check ; then run boot_recovery ; else run boot_emmc ; fi ++bootconf=config-mt7987a-bananapi-bpi-r4-lite ++bootconf_base=config-mt7987a-bananapi-bpi-r4-lite#mt7987a-bananapi-bpi-r4-lite-1pcie-2L ++bootconf_nor=mt7987a-bananapi-bpi-r4-lite-nor ++bootconf_nand=mt7987a-bananapi-bpi-r4-lite-nand ++bootconf_sd=mt7987a-bananapi-bpi-r4-lite-sd ++bootconf_emmc=mt7987a-bananapi-bpi-r4-lite-emmc ++bootdelay=0 ++bootfile=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-initramfs-recovery.itb ++bootfile_bl2=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-emmc-preloader.bin ++bootfile_fip=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-emmc-bl31-uboot.fip ++bootfile_upg=openwrt-mediatek-filogic-bananapi_bpi-r4-lite-squashfs-sysupgrade.itb ++bootled_pwr=green:status ++bootled_rec=blue:status ++bootmenu_confirm_return=askenv - Press ENTER to return to menu ; bootmenu 60 ++bootmenu_default=0 ++bootmenu_delay=0 ++bootmenu_title= ( ( ( OpenWrt ) ) ) [eMMC] ++bootmenu_0=Initialize environment.=run _firstboot ++bootmenu_0d=Run default boot command.=run boot_default ++bootmenu_1=Boot system via TFTP.=run boot_tftp ; run bootmenu_confirm_return ++bootmenu_2=Boot production system from eMMC.=run boot_production ; run bootmenu_confirm_return ++bootmenu_3=Boot recovery system from eMMC.=run boot_recovery ; run bootmenu_confirm_return ++bootmenu_4=Load production system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_production ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_5=Load recovery system via TFTP then write to eMMC.=setenv noboot 1 ; setenv replacevol 1 ; run boot_tftp_recovery ; setenv noboot ; setenv replacevol ; run bootmenu_confirm_return ++bootmenu_6=Load BL31+U-Boot FIP via TFTP then write to eMMC.=run boot_tftp_write_fip ; run bootmenu_confirm_return ++bootmenu_7=Load BL2 preloader via TFTP then write to eMMC.=run boot_tftp_write_bl2 ; run bootmenu_confirm_return ++bootmenu_8=Reboot.=reset ++bootmenu_9=Reset all settings to factory defaults.=run reset_factory ; reset ++boot_first=if button reset ; then led $bootled_rec on ; run boot_tftp_recovery ; setenv flag_recover 1 ; run boot_default ; fi ; bootmenu ++boot_default=if env exists flag_recover ; then else run bootcmd ; fi ; run boot_recovery ; setenv replacevol 1 ; run boot_tftp_forever ++boot_production=run boot_update_conf ; led $bootled_pwr on ; run emmc_read_production && bootm $loadaddr#$bootconf ; led $bootled_pwr off ++boot_recovery=run boot_update_conf ; led $bootled_rec on ; run emmc_read_recovery && bootm $loadaddr#$bootconf ; led $bootled_rec off ++boot_emmc=run boot_production ; run boot_recovery ++boot_tftp_forever=led $bootled_rec on ; while true ; do run boot_tftp_recovery ; sleep 1 ; done ++boot_tftp_production=run boot_update_conf ; tftpboot $loadaddr $bootfile_upg && env exists replacevol && iminfo $loadaddr && run emmc_write_production ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_recovery=run boot_update_conf ; tftpboot $loadaddr $bootfile && env exists replacevol && iminfo $loadaddr && run emmc_write_recovery ; if env exists noboot ; then else bootm $loadaddr#$bootconf ; fi ++boot_tftp_write_fip=tftpboot $loadaddr $bootfile_fip && run emmc_write_fip ++boot_tftp_write_bl2=tftpboot $loadaddr $bootfile_bl2 && run emmc_write_bl2 ++boot_tftp=run boot_update_conf ; tftpboot $loadaddr $bootfile && bootm $loadaddr#$bootconf ++boot_update_conf=if nand info ; then setenv bootconf $bootconf_base#$bootconf_emmc#$bootconf_nand ; else setenv bootconf $bootconf_base#$bootconf_emmc#$bootconf_nor ; fi ++mmc_write_vol=imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc erase 0x$part_addr 0x$image_size && mmc write $loadaddr 0x$part_addr 0x$image_size ++mmc_read_vol=mmc read $loadaddr $part_addr 0x100 && imszb $loadaddr image_size && test 0x$image_size -le 0x$part_size && mmc read $loadaddr 0x$part_addr 0x$image_size && setexpr filesize $image_size * 0x200 ++part_default=production ++part_recovery=recovery ++reset_factory=eraseenv && reset ++emmc_read_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_read_vol ++emmc_read_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_read_vol ++emmc_write_bl2=mmc partconf 0 1 1 1 && mmc erase 0x0 0x400 && mmc write $fileaddr 0x0 0x400 ; mmc partconf 0 1 1 0 ++emmc_write_fip=mmc erase 0x3400 0x2000 && mmc write $fileaddr 0x3400 0x2000 && mmc erase 0x2000 0x800 ++emmc_write_production=part start mmc 0 $part_default part_addr && part size mmc 0 $part_default part_size && run mmc_write_vol ++emmc_write_recovery=part start mmc 0 $part_recovery part_addr && part size mmc 0 $part_recovery part_size && run mmc_write_vol ++_init_env=setenv _init_env ; setenv _create_env ; saveenv ; saveenv ++_firstboot=setenv _firstboot ; run _switch_to_menu ; run _init_env ; run boot_first ++_switch_to_menu=setenv _switch_to_menu ; setenv bootdelay 3 ; setenv bootmenu_delay 3 ; setenv bootmenu_0 $bootmenu_0d ; setenv bootmenu_0d ; run _bootmenu_update_title ++_bootmenu_update_title=setenv _bootmenu_update_title ; setenv bootmenu_title "$bootmenu_title $ver" +--- /dev/null ++++ b/arch/arm/dts/mt7987a-bpi-r4-lite-sd.dts +@@ -0,0 +1,30 @@ ++// SPDX-License-Identifier: (GPL-2.0 OR MIT) ++ ++/dts-v1/; ++#include "mt7987a.dtsi" ++#include "mt7987-sd.dtsi" ++#include ++ ++/ { ++ model = "BananaPi BPi-R4 Lite"; ++ compatible = "mediatek,mt7987a-sd", ++ "mediatek,mt7987a", "mediatek,mt7987"; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&pio 1 GPIO_ACTIVE_LOW>; ++ debounce-interval = <10>; ++ }; ++ ++ wps { ++ label = "wps"; ++ linux,code = ; ++ gpios = <&pio 0 GPIO_ACTIVE_LOW>; ++ debounce-interval = <10>; ++ }; ++ }; ++}; +--- /dev/null ++++ b/arch/arm/dts/mt7987a-bpi-r4-lite-spim-nand.dts +@@ -0,0 +1,30 @@ ++// SPDX-License-Identifier: (GPL-2.0 OR MIT) ++ ++/dts-v1/; ++#include "mt7987a.dtsi" ++#include "mt7987-emmc.dtsi" ++#include ++ ++/ { ++ model = "BananaPi BPi-R4 Lite"; ++ compatible = "mediatek,mt7987a-emmc", ++ "mediatek,mt7987a", "mediatek,mt7987"; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&pio 1 GPIO_ACTIVE_LOW>; ++ debounce-interval = <10>; ++ }; ++ ++ wps { ++ label = "wps"; ++ linux,code = ; ++ gpios = <&pio 0 GPIO_ACTIVE_LOW>; ++ debounce-interval = <10>; ++ }; ++ }; ++}; +--- /dev/null ++++ b/arch/arm/dts/mt7987a-bpi-r4-lite-emmc.dts +@@ -0,0 +1,30 @@ ++// SPDX-License-Identifier: (GPL-2.0 OR MIT) ++ ++/dts-v1/; ++#include "mt7987a.dtsi" ++#include "mt7987-emmc.dtsi" ++#include ++ ++/ { ++ model = "BananaPi BPi-R4 Lite"; ++ compatible = "mediatek,mt7987a-emmc", ++ "mediatek,mt7987a", "mediatek,mt7987"; ++ ++ gpio-keys { ++ compatible = "gpio-keys"; ++ ++ reset { ++ label = "reset"; ++ linux,code = ; ++ gpios = <&pio 1 GPIO_ACTIVE_LOW>; ++ debounce-interval = <10>; ++ }; ++ ++ wps { ++ label = "wps"; ++ linux,code = ; ++ gpios = <&pio 0 GPIO_ACTIVE_LOW>; ++ debounce-interval = <10>; ++ }; ++ }; ++}; +--- a/arch/arm/dts/Makefile ++++ b/arch/arm/dts/Makefile +@@ -1136,6 +1136,9 @@ dtb-$(CONFIG_ARCH_MEDIATEK) += \ + mt7986b-sd-rfb.dtb \ + mt7986a-emmc-rfb.dtb \ + mt7986b-emmc-rfb.dtb \ ++ mt7987a-bpi-r4-lite-spim-nand.dtb \ ++ mt7987a-bpi-r4-lite-emmc.dtb \ ++ mt7987a-bpi-r4-lite-sd.dtb \ + mt7987a-emmc-rfb.dtb \ + mt7987a-rfb.dtb \ + mt7987a-sd-rfb.dtb \ +--- /dev/null ++++ b/arch/arm/dts/mt7987a-bpi-r4-lite-emmc-u-boot.dtsi +@@ -0,0 +1,123 @@ ++// SPDX-License-Identifier: GPL-2.0 ++ ++#include "mt7987a-u-boot.dtsi" ++#include "mt7987-netsys-u-boot.dtsi" ++ ++/ { ++ model = "mt7987"; ++ compatible = "bananapi,bpi-r4-lite-emmc", "mediatek,mt7987"; ++}; ++ ++ð0 { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mdio0_pins>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "auto"; ++ reset-gpios = <&pio 42 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ pause; ++ }; ++}; ++ ++&mmc0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mmc_pins_default>; ++ max-frequency = <48000000>; ++ bus-width = <4>; ++ cap-mmc-highspeed; ++ cap-mmc-hw-reset; ++ vmmc-supply = <®_3p3v>; ++ vqmmc-supply = <®_3p3v>; ++ non-removable; ++ status = "okay"; ++}; ++ ++&spi2 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi2_flash_pins>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ /delete-node/ spi_nor@0; ++ spi_nor@0 { ++ compatible = "jedec,spi-nor"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ spi-rx-bus-width = <4>; ++ spi-tx-bus-width = <4>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2-nor"; ++ reg = <0x0 0x40000>; ++ }; ++ ++ partition@40000 { ++ label = "u-boot-env"; ++ reg = <0x40000 0x40000>; ++ }; ++ ++ partition@50000 { ++ label = "factory"; ++ reg = <0x80000 0x80000>; ++ read-only; ++ }; ++ ++ partition@100000 { ++ label = "fip"; ++ reg = <0x100000 0x80000>; ++ }; ++ ++ partition@180000 { ++ label = "recovery"; ++ reg = <0x180000 0xe80000>; ++ }; ++ ++ partition@1000000 { ++ label = "fit"; ++ reg = <0x1000000 0x1000000>; ++ }; ++ }; ++ }; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ spi-rx-bus-width = <4>; ++ spi-tx-bus-width = <4>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2-nand"; ++ reg = <0x0 0x200000>; ++ }; ++ ++ partition@200000 { ++ label = "ubi"; ++ reg = <0x200000 0xfe00000>; ++ compatible = "linux,ubi"; ++ }; ++ }; ++ }; ++}; +--- /dev/null ++++ b/arch/arm/dts/mt7987a-bpi-r4-lite-spim-nand-u-boot.dtsi +@@ -0,0 +1,69 @@ ++// SPDX-License-Identifier: GPL-2.0 ++/* ++ * Copyright (c) 2025 MediaTek Inc. ++ * Author: Sam Shih ++ */ ++ ++#include "mt7987a-u-boot.dtsi" ++#include "mt7987-netsys-u-boot.dtsi" ++ ++/ { ++ model = "mt7987"; ++ compatible = "bananapi,bpi-r4-lite-spim-nand", "mediatek,mt7987"; ++}; ++ ++ð0 { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mdio0_pins>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "auto"; ++ reset-gpios = <&pio 42 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ pause; ++ }; ++}; ++ ++&spi2 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi2_flash_pins>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ /delete-node/ spi_nor@0; ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ spi-rx-bus-width = <4>; ++ spi-tx-bus-width = <4>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2-nand"; ++ reg = <0x0 0x200000>; ++ }; ++ ++ partition@200000 { ++ label = "ubi"; ++ reg = <0x200000 0xfe00000>; ++ compatible = "linux,ubi"; ++ }; ++ }; ++ }; ++}; +--- /dev/null ++++ b/arch/arm/dts/mt7987a-bpi-r4-lite-sd-u-boot.dtsi +@@ -0,0 +1,121 @@ ++// SPDX-License-Identifier: GPL-2.0 ++ ++#include "mt7987a-u-boot.dtsi" ++#include "mt7987-netsys-u-boot.dtsi" ++ ++/ { ++ model = "mt7987"; ++ compatible = "bananapi,bpi-r4-lite-sd", "mediatek,mt7987"; ++}; ++ ++ð0 { ++ status = "okay"; ++ pinctrl-names = "default"; ++ pinctrl-0 = <&mdio0_pins>; ++ phy-mode = "2500base-x"; ++ mediatek,switch = "auto"; ++ reset-gpios = <&pio 42 GPIO_ACTIVE_HIGH>; ++ ++ fixed-link { ++ speed = <2500>; ++ full-duplex; ++ pause; ++ }; ++}; ++ ++&mmc0 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&sd_pins_default>; ++ max-frequency = <48000000>; ++ bus-width = <4>; ++ cap-sd-highspeed; ++ vmmc-supply = <®_3p3v>; ++ vqmmc-supply = <®_3p3v>; ++ status = "okay"; ++}; ++ ++&spi2 { ++ pinctrl-names = "default"; ++ pinctrl-0 = <&spi2_flash_pins>; ++ #address-cells = <1>; ++ #size-cells = <0>; ++ status = "okay"; ++ must_tx; ++ enhance_timing; ++ dma_ext; ++ ipm_design; ++ support_quad; ++ tick_dly = <2>; ++ sample_sel = <0>; ++ ++ /delete-node/ spi_nor@0; ++ spi_nor@0 { ++ compatible = "jedec,spi-nor"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ spi-rx-bus-width = <4>; ++ spi-tx-bus-width = <4>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2-nor"; ++ reg = <0x0 0x40000>; ++ }; ++ ++ partition@40000 { ++ label = "u-boot-env"; ++ reg = <0x40000 0x40000>; ++ }; ++ ++ partition@50000 { ++ label = "factory"; ++ reg = <0x80000 0x80000>; ++ read-only; ++ }; ++ ++ partition@100000 { ++ label = "fip"; ++ reg = <0x100000 0x80000>; ++ }; ++ ++ partition@180000 { ++ label = "recovery"; ++ reg = <0x180000 0xe80000>; ++ }; ++ ++ partition@1000000 { ++ label = "fit"; ++ reg = <0x1000000 0x1000000>; ++ }; ++ }; ++ }; ++ ++ spi_nand@0 { ++ compatible = "spi-nand"; ++ reg = <0>; ++ spi-max-frequency = <52000000>; ++ spi-rx-bus-width = <4>; ++ spi-tx-bus-width = <4>; ++ ++ partitions { ++ compatible = "fixed-partitions"; ++ #address-cells = <1>; ++ #size-cells = <1>; ++ ++ partition@0 { ++ label = "bl2-nand"; ++ reg = <0x0 0x200000>; ++ }; ++ ++ partition@200000 { ++ label = "ubi"; ++ reg = <0x200000 0xfe00000>; ++ compatible = "linux,ubi"; ++ }; ++ }; ++ }; ++}; diff --git a/lede/package/boot/uboot-mediatek/patches/500-adapt-mt7987-rfb.patch b/lede/package/boot/uboot-mediatek/patches/500-adapt-mt7987-rfb.patch new file mode 100644 index 0000000000..39f6282d1c --- /dev/null +++ b/lede/package/boot/uboot-mediatek/patches/500-adapt-mt7987-rfb.patch @@ -0,0 +1,30 @@ +--- a/configs/mt7987_rfb_defconfig ++++ b/configs/mt7987_rfb_defconfig +@@ -70,6 +70,7 @@ CONFIG_SPI_FLASH_XTX=y + CONFIG_SPI_FLASH_ZBIT=y + CONFIG_SPI_FLASH_MTD=y + CONFIG_MTD_UBI=y ++CONFIG_OF_LIBFDT_OVERLAY=y + CONFIG_PHY_ETHERNET_ID=y + CONFIG_MEDIATEK_ETH=y + CONFIG_PINCTRL=y +--- a/configs/mt7987_emmc_rfb_defconfig ++++ b/configs/mt7987_emmc_rfb_defconfig +@@ -75,6 +75,7 @@ CONFIG_SPI_FLASH_XTX=y + CONFIG_SPI_FLASH_ZBIT=y + CONFIG_SPI_FLASH_MTD=y + CONFIG_MTD_UBI=y ++CONFIG_OF_LIBFDT_OVERLAY=y + CONFIG_PHY_ETHERNET_ID=y + CONFIG_MEDIATEK_ETH=y + CONFIG_PINCTRL=y +--- a/configs/mt7987_sd_rfb_defconfig ++++ b/configs/mt7987_sd_rfb_defconfig +@@ -75,6 +75,7 @@ CONFIG_SPI_FLASH_XTX=y + CONFIG_SPI_FLASH_ZBIT=y + CONFIG_SPI_FLASH_MTD=y + CONFIG_MTD_UBI=y ++CONFIG_OF_LIBFDT_OVERLAY=y + CONFIG_PHY_ETHERNET_ID=y + CONFIG_MEDIATEK_ETH=y + CONFIG_PINCTRL=y diff --git a/nodepass/.github/copilot-instructions.md b/nodepass/.github/copilot-instructions.md index 54b5d328c3..41ee779c86 100644 --- a/nodepass/.github/copilot-instructions.md +++ b/nodepass/.github/copilot-instructions.md @@ -2,7 +2,7 @@ ## Project Overview -NodePass is an enterprise-grade TCP/UDP network tunneling solution with a three-tier architecture supporting server, client, and master modes. The core is written in Go with a focus on performance, security, and minimal configuration. +NodePass is an enterprise-grade TCP/UDP network tunneling solution with a three-tier S/C/M architecture supporting server, client, and master modes. Written in Go 1.25+, focused on performance, security, and zero-configuration deployment. ## Architecture Essentials @@ -21,19 +21,28 @@ NodePass is an enterprise-grade TCP/UDP network tunneling solution with a three- - **Connection Pooling**: Pre-established connections via `github.com/NodePassProject/pool` library - Server controls `max` pool capacity, passes to client during handshake - Client manages `min` capacity for persistent connections + - QUIC multiplexing available as alternative transport (`quic=1`) - **Bidirectional Data Flow**: Automatic mode detection in `Common.runMode` - Mode 0: Auto-detect based on target address bindability - Mode 1: Reverse/single-end (server receives OR client listens locally) - Mode 2: Forward/dual-end (server sends OR client connects remotely) +### Key Components +- `/cmd/nodepass/main.go`: Entry point, version variable injection +- `/cmd/nodepass/core.go`: Mode dispatch, TLS setup, certificate hot-reload +- `/internal/common.go`: Shared primitives (buffer pools, slot management, DNS resolution, encoding) +- `/internal/{server,client,master}.go`: Mode-specific implementations inheriting `Common` + ### External Dependencies (NodePassProject Ecosystem) All critical networking primitives are in separate libraries: - `github.com/NodePassProject/cert`: TLS certificate generation and management -- `github.com/NodePassProject/conn`: Custom connection types (`StatConn`, `TimeoutReader`, `DataExchange`) -- `github.com/NodePassProject/logs`: Structured logging with levels (None/Debug/Info/Warn/Error/Event) -- `github.com/NodePassProject/pool`: Connection pool management for both server and client +- `github.com/NodePassProject/conn`: Enhanced connections (`StatConn` with traffic tracking) +- `github.com/NodePassProject/logs`: Multi-level logger (None/Debug/Info/Warn/Error/Event) +- `github.com/NodePassProject/name`: DNS resolver with caching and background refresh +- `github.com/NodePassProject/pool`: TCP connection pooling with auto-scaling +- `github.com/NodePassProject/quic`: QUIC multiplexing for 0-RTT connections **Never modify these libraries directly** - they're external dependencies. Use their exported APIs only. @@ -43,30 +52,45 @@ All critical networking primitives are in separate libraries: All modes use URL-style configuration: `scheme://[password@]host:port/target?param=value` -**Server**: `server://bind_addr:port/target_addr:port?max=1024&tls=1&log=debug` -**Client**: `client://server_addr:port/local_addr:port?min=128&mode=0&rate=100` -**Master**: `master://api_addr:port/prefix?log=info&tls=2&crt=path&key=path` +```bash +# Server: bind_addr/target_addr with pool capacity and TLS +server://password@0.0.0.0:10101/127.0.0.1:8080?max=1024&tls=1&log=debug + +# Client: server_addr/local_addr with min capacity and mode +client://password@server:10101/127.0.0.1:9090?min=128&mode=0&rate=100 + +# Master: api_addr/prefix with TLS and custom certs +master://0.0.0.0:9090/api?log=info&tls=2&crt=/path/cert.pem&key=/path/key.pem +``` ### Query Parameters - `log`: none|debug|info|warn|error|event (default: info) -- `tls`: 0=plain, 1=self-signed, 2=custom cert (server/master only) +- `tls`: 0=plain, 1=self-signed, 2=custom cert (server/master only, client inherits from server) - `min`/`max`: Connection pool capacity (client sets min, server sets max) - `mode`: 0=auto, 1=reverse/single-end, 2=forward/dual-end -- `read`: Timeout duration (e.g., 1h, 30m, 15s) +- `quic`: 0=TCP pool, 1=QUIC multiplexing (requires tls≥1) +- `dns`: Custom DNS servers (comma-separated, default: 1.1.1.1,8.8.8.8) +- `read`: Timeout duration (e.g., 1h, 30m, 15s, default: 0=no timeout) - `rate`: Mbps bandwidth limit (0=unlimited) - `slot`: Max concurrent connections (default: 65536) - `proxy`: PROXY protocol v1 support (0=off, 1=on) +- `dial`: Local bind IP for outbound connections (default: auto) +- `notcp`/`noudp`: Disable TCP/UDP (0=enabled, 1=disabled) ### Environment Variables for Tuning -See `internal/common.go` for all `NP_*` environment variables: -- `NP_TCP_DATA_BUF_SIZE`: TCP buffer size (default: 16384) -- `NP_UDP_DATA_BUF_SIZE`: UDP buffer size (default: 2048) -- `NP_HANDSHAKE_TIMEOUT`: Handshake timeout (default: 5s) -- `NP_POOL_GET_TIMEOUT`: Pool connection timeout (default: 5s) -- `NP_REPORT_INTERVAL`: Health check interval (default: 5s) -- `NP_RELOAD_INTERVAL`: TLS cert reload interval (default: 1h) +Runtime behavior tunable without recompilation (see `internal/common.go`): +```go +NP_TCP_DATA_BUF_SIZE=16384 // TCP buffer size +NP_UDP_DATA_BUF_SIZE=16384 // UDP buffer size +NP_HANDSHAKE_TIMEOUT=5s // Handshake timeout +NP_POOL_GET_TIMEOUT=5s // Pool connection acquisition timeout +NP_REPORT_INTERVAL=5s // Health check reporting interval +NP_RELOAD_INTERVAL=1h // TLS cert hot-reload interval (mode 2) +NP_SEMAPHORE_LIMIT=65536 // Signal channel buffer size +NP_DNS_CACHING_TTL=5m // DNS cache TTL +``` ## Development Workflow @@ -76,8 +100,8 @@ See `internal/common.go` for all `NP_*` environment variables: # Development build go build -o nodepass ./cmd/nodepass -# Release build (mimics .goreleaser.yml) -go build -trimpath -ldflags="-s -w -X main.version=dev" -o nodepass ./cmd/nodepass +# Release build with version injection (mimics .goreleaser.yml) +go build -trimpath -ldflags="-s -w -X main.version=1.0.0" -o nodepass ./cmd/nodepass ``` ### Testing Manually @@ -85,27 +109,39 @@ go build -trimpath -ldflags="-s -w -X main.version=dev" -o nodepass ./cmd/nodepa No automated test suite exists currently. Test via real-world scenarios: ```bash -# Terminal 1: Server with debug logging +# Terminal 1: Server with debug logging and self-signed TLS ./nodepass "server://0.0.0.0:10101/127.0.0.1:8080?log=debug&tls=1&max=256" -# Terminal 2: Client +# Terminal 2: Client connecting to server ./nodepass "client://localhost:10101/127.0.0.1:9090?log=debug&min=64" -# Terminal 3: Master mode for API testing +# Terminal 3: Master API mode ./nodepass "master://0.0.0.0:9090/api?log=debug&tls=0" ``` -Test all TLS modes (0, 1, 2) and protocol types (TCP, UDP). Verify graceful shutdown with SIGTERM/SIGINT. +**Test checklist** (from CONTRIBUTING.md): +1. Test each mode (server, client, master) with `log=debug` +2. Verify TCP and UDP forwarding separately +3. Test all TLS modes (0, 1, 2) with certificate validation +4. Test QUIC mode (`quic=1`) with TLS≥1 +5. Verify graceful shutdown with SIGTERM/SIGINT +6. Stress test with high concurrency and connection pool scaling + +### Docker Build + +```bash +docker build --build-arg VERSION=dev -t nodepass:dev . +``` ### Release Process Uses GoReleaser on tag push (`v*.*.*`). See `.goreleaser.yml` for build matrix (Linux, Windows, macOS, FreeBSD across multiple architectures). -## Code Patterns & Conventions +## Code Patterns and Conventions ### Error Handling -Always wrap errors with context using `fmt.Errorf("function: operation failed: %w", err)` +Always wrap errors with context using `fmt.Errorf("function: action failed: %w", err)`. See pattern in `start()`, `createCore()`, `NewServer()`, etc. ### Logging @@ -126,18 +162,17 @@ All long-running goroutines must: 3. Handle panics in critical sections 4. Release resources (slots, buffers, connections) on exit -### Buffer Pooling +### Buffer Management -Always use `Common.getTCPBuffer()` / `Common.putTCPBuffer()` or UDP equivalents to minimize allocations: +Use sync.Pool for TCP/UDP buffers to reduce GC pressure: ```go -buf := c.getTCPBuffer() +buf := c.getTCPBuffer() // Gets []byte from tcpBufferPool defer c.putTCPBuffer(buf) -// ... use buf ``` -### Connection Slot Management +### Slot Management -Before creating connections: +Connection slots prevent resource exhaustion: ```go if !c.tryAcquireSlot(isUDP) { return fmt.Errorf("slot limit reached") @@ -145,6 +180,18 @@ if !c.tryAcquireSlot(isUDP) { defer c.releaseSlot(isUDP) ``` +### Configuration via Environment Variables + +Runtime behavior tunable without recompilation: +```go +var tcpDataBufSize = getEnvAsInt("NP_TCP_DATA_BUF_SIZE", 16384) +``` +See `common.go` for full list: `NP_SEMAPHORE_LIMIT`, `NP_HANDSHAKE_TIMEOUT`, `NP_POOL_GET_TIMEOUT`, etc. + +### TLS Certificate Hot-Reload + +Mode 2 (custom certs) reloads certificates hourly without restart using `GetCertificate` callback in `core.go`. + ### Comments Style Maintain bilingual (Chinese/English) comments for public APIs and exported functions: @@ -154,14 +201,34 @@ Maintain bilingual (Chinese/English) comments for public APIs and exported funct func NewServer(parsedURL *url.URL, ...) (*Server, error) { ... } ``` +## External Dependencies + +All from `github.com/NodePassProject/*` ecosystem: +- **cert**: TLS certificate generation and management +- **conn**: Enhanced network connections with statistics tracking (`StatConn`) +- **logs**: Multi-level logger (None/Debug/Info/Warn/Error/Event) +- **name**: DNS resolver with caching and background refresh +- **pool**: TCP connection pooling with auto-scaling +- **quic**: QUIC multiplexing for 0-RTT connections + ## Master Mode Specifics -### API Structure +### API Patterns + +- Authentication via `X-API-Key` header (auto-generated, stored in `nodepass.gob`) +- SSE events at `/events` endpoint for real-time updates +- State persistence with `encoding/gob` for instance recovery +- OpenAPI spec at `/openapi.json`, Swagger UI at `/docs` RESTful endpoints at `/{prefix}/*` (default `/api/*`): - Instance CRUD: POST/GET/PATCH/PUT/DELETE on `/instances` and `/instances/{id}` - Real-time events: SSE stream at `/events` (types: initial, create, update, delete, shutdown, log) -- OpenAPI docs: `/openapi.json` and `/docs` (Swagger UI) +- Service info: GET/POST on `/info` for master details and alias updates +- TCPing utility: GET on `/tcping` for connection testing + +### Instance Management + +Each instance runs as a separate `exec.Cmd` process. Master tracks via `instances sync.Map` with status fields: `running`, `stopped`, `error`. Auto-restart enabled via `Restart` boolean field. ### State Persistence @@ -174,15 +241,26 @@ All instances stored in `nodepass.gob` using Go's `encoding/gob`: API Key in `X-API-Key` header. Special instance ID `********` for key regeneration via PATCH action `restart`. +## Testing and Validation + +No automated test suite currently. Manual testing workflow (from CONTRIBUTING.md): +1. Test each mode (server, client, master) with `log=debug` +2. Verify TCP and UDP forwarding separately +3. Test TLS modes 0, 1, 2 with certificate validation +4. Stress test with high concurrency and connection pool scaling + ## Common Pitfalls -1. **Don't modify NodePassProject libraries**: These are external dependencies, not internal packages -2. **Always decode before using tunnel URLs**: Use `Common.decode()` for base64+XOR encoded data -3. **TLS mode is server-controlled**: Clients receive TLS mode during handshake, don't override -4. **Pool capacity coordination**: Server sets `max`, client sets `min` - they must align correctly -5. **UDP session cleanup**: Sessions in `targetUDPSession` require explicit cleanup with timeouts -6. **Certificate hot-reload**: Only applies to `tls=2` mode with periodic checks every `ReloadInterval` -7. **Graceful shutdown**: Use context cancellation propagation, don't abruptly close connections +- **URL parsing**: Always include scheme (`server://`, `client://`, `master://`) or startup fails +- **TLS mismatch**: Client inherits TLS mode from server during handshake—don't configure client TLS manually +- **Pool capacity**: Server sets `max`, client sets `min`—mismatch causes connection issues +- **Local address detection**: Single-end mode triggers automatically for localhost/127.0.0.1 tunnel addresses +- **QUIC requirement**: QUIC mode (`quic=1`) forces TLS mode 1 minimum—cannot use mode 0 +- **Don't modify NodePassProject libraries**: These are external dependencies, not internal packages +- **Always decode before using tunnel URLs**: Use `Common.decode()` for base64+XOR encoded data +- **UDP session cleanup**: Sessions in `targetUDPSession` require explicit cleanup with timeouts +- **Certificate hot-reload**: Only applies to `tls=2` mode with periodic checks every `ReloadInterval` +- **Graceful shutdown**: Use context cancellation propagation, don't abruptly close connections ## Key Files Reference @@ -192,9 +270,6 @@ API Key in `X-API-Key` header. Special instance ID `********` for key regenerati - `internal/server.go`: Server lifecycle, tunnel handshake, forward/reverse modes - `internal/client.go`: Client lifecycle, single-end/dual-end modes, tunnel connection - `internal/master.go`: HTTP API, SSE events, instance subprocess management, state persistence -- `docs/en/how-it-works.md`: Detailed architecture documentation -- `docs/en/configuration.md`: Complete parameter reference -- `docs/en/api.md`: Master mode API specification ## Documentation Requirements @@ -212,3 +287,10 @@ When adding features: - Focus on zero-configuration deployment - defaults should work for most use cases - Performance-critical paths: buffer allocation, connection pooling, data transfer loops - Security considerations: TLS mode selection, API key protection, input validation on master API + +## Documentation References + +- `/docs/en/how-it-works.md`: Deep dive into control/data channel separation and data flow modes +- `/docs/en/configuration.md`: Complete parameter reference with examples +- `/docs/en/api.md`: Master mode API specification with authentication and SSE events +- `CONTRIBUTING.md`: Development setup, architecture overview, contribution guidelines diff --git a/nodepass/.github/workflows/docker.yml b/nodepass/.github/workflows/docker.yml index f27cc3903e..176d2b9583 100644 --- a/nodepass/.github/workflows/docker.yml +++ b/nodepass/.github/workflows/docker.yml @@ -19,20 +19,18 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v5.0.1 - name: Install cosign if: github.event_name != 'pull_request' - uses: sigstore/cosign-installer@v3.9.2 - with: - cosign-release: 'v2.2.4' + uses: sigstore/cosign-installer@v4.0.0 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3.11.1 - name: Log into registry ${{ env.REGISTRY }} if: github.event_name != 'pull_request' - uses: docker/login-action@v3.5.0 + uses: docker/login-action@v3.6.0 with: registry: ${{ env.REGISTRY }} username: ${{ github.actor }} @@ -40,7 +38,7 @@ jobs: - name: Extract Docker metadata id: meta - uses: docker/metadata-action@v5.8.0 + uses: docker/metadata-action@v5.9.0 with: images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} diff --git a/nodepass/.github/workflows/release.yml b/nodepass/.github/workflows/release.yml index fc7ffe83ab..12346e9082 100644 --- a/nodepass/.github/workflows/release.yml +++ b/nodepass/.github/workflows/release.yml @@ -9,13 +9,15 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v5.0.0 + uses: actions/checkout@v5.0.1 with: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@v5.5.0 + uses: actions/setup-go@v6.1.0 + with: + go-version: '1.25.0' - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v6.3.0 + uses: goreleaser/goreleaser-action@v6.4.0 with: distribution: goreleaser version: 'latest' diff --git a/nodepass/CODE_OF_CONDUCT.md b/nodepass/CODE_OF_CONDUCT.md index f33c19ff37..0501cae39b 100644 --- a/nodepass/CODE_OF_CONDUCT.md +++ b/nodepass/CODE_OF_CONDUCT.md @@ -7,25 +7,27 @@ We are committed to providing a friendly, safe and welcoming environment for all ## Our Standards **Positive behaviors include:** -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members **Unacceptable behaviors include:** -* Harassment, trolling, or discriminatory comments -* Personal attacks or insulting/derogatory language -* Publishing others' private information without permission -* Any conduct that could reasonably be considered inappropriate in a professional setting + +- Harassment, trolling, or discriminatory comments +- Personal attacks or insulting/derogatory language +- Publishing others' private information without permission +- Any conduct that could reasonably be considered inappropriate in a professional setting ## Enforcement Project maintainers are responsible for clarifying standards and may take appropriate corrective action in response to unacceptable behavior, including: -* Warning the individual -* Temporary restriction from project spaces -* Permanent ban from the project community +- Warning the individual +- Temporary restriction from project spaces +- Permanent ban from the project community ## Scope diff --git a/nodepass/CONTRIBUTING.md b/nodepass/CONTRIBUTING.md index df6bfde271..3cb029938d 100644 --- a/nodepass/CONTRIBUTING.md +++ b/nodepass/CONTRIBUTING.md @@ -23,7 +23,7 @@ Please read and follow our [Code of Conduct](CODE_OF_CONDUCT.md). We are committ ### Prerequisites -- **Go** (as specified in `go.mod`) +- **Go** 1.25+ (as specified in `go.mod`) - **Git** for version control - **Docker** (optional, for container-based development and testing) - Basic knowledge of TCP/UDP networking concepts @@ -38,6 +38,7 @@ NodePass is built on a three-tier architecture: - **Master Mode**: Provides RESTful API for dynamic instance management Key components: + - `/cmd/nodepass/`: Main application entry point and core dispatch logic - `/internal/`: Core implementation packages (server, client, master, common utilities) - `/docs/`: Comprehensive documentation in English and Chinese @@ -90,12 +91,12 @@ docker run --rm -p 10101:10101 nodepass:dev "server://:10101/127.0.0.1:8080?log= ### Types of Contributions -- **🐛 Bug Reports**: Help us identify and fix issues -- **✨ Feature Requests**: Suggest new features or improvements -- **📝 Documentation**: Improve existing docs or add new ones -- **🔧 Code Contributions**: Bug fixes, feature implementations, refactoring -- **🌐 Translations**: Help translate documentation to other languages -- **🧪 Testing**: Add test cases and improve test coverage +- **Bug Reports**: Help us identify and fix issues +- **Feature Requests**: Suggest new features or improvements +- **Documentation**: Improve existing docs or add new ones +- **Code Contributions**: Bug fixes, feature implementations, refactoring +- **Translations**: Help translate documentation to other languages +- **Testing**: Add test cases and improve test coverage ### Reporting Issues @@ -255,6 +256,7 @@ Use [Conventional Commits](https://www.conventionalcommits.org/) format: ### Pull Request Guidelines **Before submitting:** + - [ ] Code follows the project style guidelines - [ ] All tests pass (or explain why they should be skipped) - [ ] Documentation is updated if needed @@ -262,6 +264,7 @@ Use [Conventional Commits](https://www.conventionalcommits.org/) format: - [ ] No merge conflicts with the main branch **In your pull request:** + - [ ] Provide a clear description of changes - [ ] Reference any related issues - [ ] Include testing instructions @@ -270,6 +273,8 @@ Use [Conventional Commits](https://www.conventionalcommits.org/) format: ### Review Process +Pull requests go through the following stages: + 1. **Automated checks** run on all pull requests 2. **Code review** by project maintainers 3. **Testing** in various environments diff --git a/nodepass/README.md b/nodepass/README.md index 9418d6c4e5..64f456a5d6 100644 --- a/nodepass/README.md +++ b/nodepass/README.md @@ -25,8 +25,8 @@ English | [简体中文](README_zh.md) - Cross-platform, multi-architecture, single binary or container. - **🚀 Connection Pool** - - Pre-established connections for zero-latency switching and forwarding. - - Eliminates handshake delays, boosts performance. + - Dual transport options, TCP-based pools or QUIC-based multiplexing. + - Eliminates handshake delays, boosts performance with 0-RTT support. - Auto-scaling with real-time capacity adjustment. - **🧬 Innovative Architecture** diff --git a/nodepass/README_zh.md b/nodepass/README_zh.md index 7fe90bb058..6de70dd9f1 100644 --- a/nodepass/README_zh.md +++ b/nodepass/README_zh.md @@ -25,8 +25,8 @@ - 多平台、多架构支持,支持独立二进制文件、容器灵活部署。 - **🚀 内置连接池** - - 预先建立并维护连接,实现“零延迟”切换与高效流量转发。 - - 消除连接的握手等待,显著提升了性能体验。 + - 双传输选择,基于 TCP 的连接池或基于 QUIC 的多路复用。 + - 消除连接的握手等待,通过 0-RTT 支持显著提升性能体验。 - 支持实时容量自适应,动态调整连接池规模。 - **🧬 创新架构设计** diff --git a/nodepass/SECURITY.md b/nodepass/SECURITY.md index a9d2c6cea9..426a4110ac 100644 --- a/nodepass/SECURITY.md +++ b/nodepass/SECURITY.md @@ -14,9 +14,9 @@ NodePass implements multiple security layers: ### TLS Encryption Modes -- **TLS Mode 0**: Unencrypted mode for trusted networks (highest performance) -- **TLS Mode 1**: Self-signed certificates with TLS 1.3 (balanced security) -- **TLS Mode 2**: Custom certificate validation for enterprise security +- **TLS Mode 0**: Unencrypted mode for trusted networks (highest performance, no encryption) +- **TLS Mode 1**: Self-signed certificates with TLS 1.3 (balanced security, no verification) +- **TLS Mode 2**: Custom certificate validation with TLS 1.3 (enterprise security, full verification) ### Network Security @@ -36,16 +36,18 @@ We take security seriously. If you discover a security vulnerability in NodePass ### What to Include -Please provide the following information: +Please provide the following information in your report: 1. **Description** of the vulnerability 2. **Steps to reproduce** the issue 3. **Potential impact** and affected versions 4. **Your contact information** for follow-up -5. **Any proof-of-concept code** (if applicable) +5. **Proof-of-concept code** (if applicable) ### Response Process +Our security response timeline: + 1. **Acknowledgment**: We will acknowledge receipt within 48 hours 2. **Assessment**: Initial assessment within 5 business days 3. **Updates**: Regular updates on investigation progress @@ -53,6 +55,8 @@ Please provide the following information: ### Responsible Disclosure +We follow coordinated vulnerability disclosure: + - Please **do not** create public GitHub issues for security vulnerabilities - Give us reasonable time to investigate and patch the issue - We will coordinate public disclosure timing with you @@ -120,6 +124,7 @@ Security updates are released as: - **Documentation updates** for security best practices Subscribe to our release notifications: + - [GitHub Releases](https://github.com/yosebyte/nodepass/releases) - [Telegram Channel](https://t.me/NodePassChannel) diff --git a/nodepass/cmd/nodepass/core.go b/nodepass/cmd/nodepass/core.go index ef01d61285..f54cd2732c 100644 --- a/nodepass/cmd/nodepass/core.go +++ b/nodepass/cmd/nodepass/core.go @@ -21,14 +21,14 @@ func start(args []string) error { parsedURL, err := url.Parse(args[1]) if err != nil { - return fmt.Errorf("start: parse URL failed: %v", err) + return fmt.Errorf("start: parse URL failed: %w", err) } logger := initLogger(parsedURL.Query().Get("log")) core, err := createCore(parsedURL, logger) if err != nil { - return fmt.Errorf("start: create core failed: %v", err) + return fmt.Errorf("start: create core failed: %w", err) } core.Run() @@ -70,7 +70,7 @@ func createCore(parsedURL *url.URL, logger *logs.Logger) (interface{ Run() }, er tlsCode, tlsConfig := getTLSProtocol(parsedURL, logger) return internal.NewMaster(parsedURL, tlsCode, tlsConfig, logger, version) default: - return nil, fmt.Errorf("unknown core: %v", parsedURL) + return nil, fmt.Errorf("createCore: unknown core: %v", parsedURL) } } @@ -79,31 +79,24 @@ func getTLSProtocol(parsedURL *url.URL, logger *logs.Logger) (string, *tls.Confi // 生成基本TLS配置 tlsConfig, err := cert.NewTLSConfig(version) if err != nil { - logger.Error("Generate failed: %v", err) + logger.Error("Generate TLS config failed: %v", err) logger.Warn("TLS code-0: nil cert") return "0", nil } tlsConfig.MinVersion = tls.VersionTLS13 - tlsCode := parsedURL.Query().Get("tls") - - switch tlsCode { - case "0": - // 不使用加密 - logger.Info("TLS code-0: unencrypted") - return tlsCode, nil + switch parsedURL.Query().Get("tls") { case "1": - // 使用内存中的证书 + // 使用内存自签证书 logger.Info("TLS code-1: RAM cert with TLS 1.3") - return tlsCode, tlsConfig - + return "1", tlsConfig case "2": // 使用自定义证书 crtFile, keyFile := parsedURL.Query().Get("crt"), parsedURL.Query().Get("key") cert, err := tls.LoadX509KeyPair(crtFile, keyFile) if err != nil { - logger.Error("Cert load failed: %v", err) + logger.Error("Certificate load failed: %v", err) logger.Warn("TLS code-1: RAM cert with TLS 1.3") return "1", tlsConfig } @@ -118,7 +111,7 @@ func getTLSProtocol(parsedURL *url.URL, logger *logs.Logger) (string, *tls.Confi if time.Since(lastReload) >= internal.ReloadInterval { newCert, err := tls.LoadX509KeyPair(crtFile, keyFile) if err != nil { - logger.Error("Cert reload failed: %v", err) + logger.Error("Certificate reload failed: %v", err) } else { logger.Debug("TLS cert reloaded: %v", crtFile) cachedCert = newCert @@ -134,10 +127,14 @@ func getTLSProtocol(parsedURL *url.URL, logger *logs.Logger) (string, *tls.Confi } else { logger.Warn("TLS code-2: unknown cert name with TLS 1.3") } - return tlsCode, tlsConfig - + return "2", tlsConfig default: - // 默认不使用加密 + if parsedURL.Query().Get("quic") == "1" { + // QUIC模式下不支持明文传输 + logger.Info("TLS code-1: RAM cert with TLS 1.3 for QUIC") + return "1", tlsConfig + } + // 不使用加密 logger.Warn("TLS code-0: unencrypted") return "0", nil } diff --git a/nodepass/docs/en/api.md b/nodepass/docs/en/api.md index 5d71c85163..37240dc4fa 100644 --- a/nodepass/docs/en/api.md +++ b/nodepass/docs/en/api.md @@ -65,7 +65,7 @@ API Key authentication is enabled by default, automatically generated and saved "type": "client|server", "status": "running|stopped|error", "url": "...", - "config": "server://0.0.0.0:8080/localhost:3000?log=info&tls=1&max=1024&mode=0&read=1h&rate=0&slot=65536&proxy=0", + "config": "server://0.0.0.0:8080/localhost:3000?log=info&tls=1&dns=1.1.1.1,8.8.8.8&max=1024&mode=0&quic=0&dial=auto&read=1h&rate=100&slot=65536&proxy=0¬cp=0&noudp=0", "restart": true, "meta": { "peer": { @@ -111,20 +111,26 @@ API Key authentication is enabled by default, automatically generated and saved - Server: `server://:/:?` - Client: `client://:/:?` -- Supported parameters: `log`, `tls`, `crt`, `key`, `min`, `max`, `mode`, `read`, `rate` +- Supported parameters: `log`, `tls`, `crt`, `key`, `dns`, `min`, `max`, `mode`, `quic`, `dial`, `read`, `rate`, `slot`, `proxy`, `notcp`, `noudp` ### URL Query Parameters - `log`: Log level (`none`, `debug`, `info`, `warn`, `error`, `event`) - `tls`: TLS encryption mode (`0`, `1`, `2`) - Server/Master mode only - `crt`/`key`: Certificate/key file paths (when `tls=2`) +- `dns`: Custom DNS servers (comma-separated IP addresses, default: `1.1.1.1,8.8.8.8`) - Server/Client mode only - `min`/`max`: Connection pool capacity (`min` set by client, `max` set by server and passed to client during handshake) - `mode`: Runtime mode control (`0`, `1`, `2`) - Controls operation behavior - For server: `0`=auto, `1`=reverse mode, `2`=forward mode - For client: `0`=auto, `1`=single-end forwarding, `2`=dual-end handshake -- `read`: Data read timeout duration (e.g., 1h, 30m, 15s) +- `quic`: QUIC transport mode (`0`=TCP pool, `1`=QUIC pool, default: `0`) - Server mode only, client receives configuration during handshake +- `dial`: Source IP for outbound connections (default: `auto`) - Server/Client mode only +- `read`: Data read timeout duration (e.g., 1h, 30m, 15s, default: `0` for no timeout) - `rate`: Bandwidth rate limit in Mbps (0=unlimited) +- `slot`: Maximum concurrent connection limit (default: `65536`, 0=unlimited) - `proxy`: PROXY protocol support (`0`, `1`) - When enabled, sends PROXY protocol v1 header before data transmission +- `notcp`: TCP support control (`0`=enabled, `1`=disabled) - Server/Client mode only +- `noudp`: UDP support control (`0`=enabled, `1`=disabled) - Server/Client mode only ### Real-time Event Stream (SSE) @@ -1110,7 +1116,7 @@ The instance object in API responses contains the following fields: "type": "server", // Instance type: server or client "status": "running", // Instance status: running, stopped, or error "url": "server://...", // Instance configuration URL - "config": "server://0.0.0.0:8080/localhost:3000?log=info&tls=1&max=1024&mode=0&read=1h&rate=0&slot=65536&proxy=0", // Complete configuration URL + "config": "server://0.0.0.0:8080/localhost:3000?log=info&tls=1&dns=1.1.1.1,8.8.8.8&max=1024&mode=0&quic=0&dial=auto&read=1h&rate=100&slot=65536&proxy=0¬cp=0&noudp=0", // Complete configuration URL "restart": true, // Auto-restart policy "meta": { // Metadata for organization and peer tracking "peer": { @@ -1575,9 +1581,12 @@ Examples: | `tls` | TLS encryption level | `0`(none), `1`(self-signed), `2`(certificate) | `0` | Server only | | `crt` | Certificate path | File path | None | Server only | | `key` | Private key path | File path | None | Server only | +| `dns` | Custom DNS servers | Comma-separated IP addresses | `1.1.1.1,8.8.8.8` | Both | | `min` | Minimum pool capacity | Integer > 0 | `64` | Client dual-end handshake mode only | | `max` | Maximum pool capacity | Integer > 0 | `1024` | Dual-end handshake mode | | `mode` | Runtime mode control | `0`(auto), `1`(force mode 1), `2`(force mode 2) | `0` | Both | +| `quic` | QUIC protocol support | `0`(disabled), `1`(enabled) | `0` | Server only | +| `dial` | Source IP for outbound | IP address or `auto` | `auto` | Both | | `read` | Read timeout duration | Time duration (e.g., `10m`, `30s`, `1h`) | `0` | Both | | `rate` | Bandwidth rate limit | Integer (Mbps), 0=unlimited | `0` | Both | | `slot` | Connection slot count | Integer (1-65536) | `65536` | Both | diff --git a/nodepass/docs/en/configuration.md b/nodepass/docs/en/configuration.md index f6c3c8883c..a1be2bb81b 100644 --- a/nodepass/docs/en/configuration.md +++ b/nodepass/docs/en/configuration.md @@ -107,6 +107,170 @@ nodepass "server://0.0.0.0:10101/0.0.0.0:8080?mode=1" nodepass "server://0.0.0.0:10101/remote.example.com:8080?mode=2" ``` +## DNS Resolution Configuration + +NodePass supports custom DNS server configuration with intelligent caching for improved performance and reliability. The built-in DNS resolver provides background refresh, automatic failover, and configurable TTL management. + +- `dns`: Custom DNS server addresses (default: 1.1.1.1,8.8.8.8) + - Comma-separated list of IP addresses (IPv4 or IPv6) + - Multiple DNS servers provide automatic failover and round-robin load balancing + - Invalid IP addresses in the list are logged and skipped + - If all provided DNS servers fail, the system falls back to OS default DNS resolution + - DNS resolution uses a dedicated port (UDP port 53) for all queries + - Applies to both client and server modes for resolving all hostnames + +**DNS Resolver Features:** +- **Intelligent Caching**: Resolved hostnames are cached with configurable TTL to reduce DNS query overhead +- **Background Refresh**: Cached entries are proactively refreshed before expiration (at 80% of TTL) to prevent lookup delays +- **Automatic Failover**: When a DNS server fails, automatically tries the next server in the list +- **Round-Robin Distribution**: DNS queries are distributed across configured servers for load balancing +- **IP Address Bypass**: Direct IP addresses skip DNS resolution for maximum efficiency +- **Protocol-Aware**: Automatically selects IPv4 or IPv6 addresses based on connection requirements + +Example: +```bash +# Use Cloudflare and Google DNS servers (default behavior) +nodepass "server://0.0.0.0:10101/example.com:8080?dns=1.1.1.1,8.8.8.8" + +# Use custom DNS servers (e.g., corporate DNS) +nodepass "server://0.0.0.0:10101/internal.example.com:8080?dns=10.0.0.53,10.0.1.53" + +# Client with specific DNS configuration +nodepass "client://server.example.com:10101/database.local:3306?dns=192.168.1.1,192.168.1.2" + +# IPv6 DNS servers +nodepass "server://0.0.0.0:10101/service.example.com:8080?dns=2606:4700:4700::1111,2001:4860:4860::8888" + +# Combined with other parameters +nodepass "server://0.0.0.0:10101/backend.example.com:8080?dns=1.1.1.1,8.8.8.8&log=info&tls=1&mode=2" +``` + +**DNS Configuration Use Cases:** +- **Corporate Networks**: Use internal DNS servers to resolve private hostnames +- **Geographic Optimization**: Select DNS servers geographically close to your deployment +- **Privacy Enhancement**: Use privacy-focused DNS providers (e.g., 1.1.1.1, 9.9.9.9) +- **Reliability**: Configure multiple DNS servers for high availability +- **Compliance**: Meet regulatory requirements for DNS provider selection +- **Testing**: Use specific DNS servers for development or staging environments +- **Performance**: Reduce DNS lookup latency with closer or faster DNS servers + +**DNS Caching Behavior:** +- Cache TTL is controlled by `NP_DNS_CACHING_TTL` environment variable (default: 5 minutes) +- Background refresh occurs at 80% of TTL to maintain fresh data without delays +- Expired entries are removed and fresh lookups performed on next access +- Cache is per-instance and not shared between NodePass processes +- IP addresses are never cached (direct use, no DNS lookup needed) + +**Important Notes:** +- DNS servers must be specified as IP addresses, not hostnames +- Both IPv4 and IPv6 DNS server addresses are supported +- DNS resolution timeout is fixed at 5 seconds per query +- Failed DNS servers are retried in subsequent queries (no permanent blacklisting) +- When using target address groups, each address is resolved independently +- DNS resolution applies to both tunnel addresses and target addresses +- Tunnel address DNS resolution occurs once at startup +- Target address DNS resolution uses caching for repeated connections + +## Outbound Connection Source IP Control + +NodePass supports specifying the local IP address used for outbound connections to target addresses. This feature is useful for systems with multiple network interfaces where traffic routing needs to be controlled explicitly. + +- `dial`: Source IP address for outbound connections (default: auto) + - Value `auto` or omitted: System automatically selects the source IP based on routing table + - Valid IP address: Forces all outbound connections to use the specified local IP address + - Applies to both TCP and UDP connections to target addresses + - Applies to both client and server modes + - Automatic fallback to system-selected IP if the specified address fails + - Invalid IP addresses trigger an error log and fallback to auto mode + +The `dial` parameter provides precise control over which network interface NodePass uses for outbound connections, enabling advanced network configurations such as: + +Example: +```bash +# Server with specific source IP for outbound connections +nodepass "server://0.0.0.0:10101/remote.example.com:8080?dial=10.1.0.100" + +# Client with specific source IP for target connections +nodepass "client://server.example.com:10101/127.0.0.1:8080?dial=192.168.1.50" + +# Combined with other parameters +nodepass "server://0.0.0.0:10101/remote.example.com:8080?log=info&tls=1&dial=10.1.0.100&mode=2" +``` + +**Source IP Control Use Cases:** +- **Multi-Homed Systems**: Control which network interface is used for outbound traffic +- **Policy Routing**: Ensure traffic uses specific routes based on source IP +- **Network Segmentation**: Direct traffic through specific VLANs or network zones +- **Firewall Rules**: Match specific firewall rules that filter by source IP +- **Load Distribution**: Distribute outbound traffic across multiple network links +- **Testing**: Simulate traffic from specific network locations or interfaces + +**Automatic Fallback Behavior:** +- If the specified IP address cannot be bound (e.g., doesn't exist on the system), NodePass logs an error and automatically falls back to system-selected IP +- The fallback only occurs once per instance - after fallback, all subsequent connections use auto mode +- Fallback is logged at ERROR level for visibility: "dialWithRotation: fallback to system auto due to dialer failure" + +**Important Notes:** +- The specified IP must exist on the local system and be properly configured +- Source IP applies only to outbound connections to target addresses, not tunnel connections +- IPv4 and IPv6 addresses are both supported (address family must match target address) +- Binding failures trigger automatic fallback to prevent connection failures +- This parameter does not affect incoming tunnel connections or server listen addresses + +## QUIC Transport Protocol + +NodePass supports QUIC as an alternative transport protocol for connection pooling in dual-end handshake mode. QUIC provides UDP-based multiplexed streams with built-in encryption and improved performance characteristics compared to traditional TCP pools. + +- `quic`: QUIC transport mode (default: 0) + - Value 0: Use TCP-based connection pool (traditional pool library) + - Value 1: Use QUIC-based connection pool (UDP multiplexing with streams) + - Only applies to dual-end handshake mode (mode=2) + - Automatically enables TLS if not already configured (minimum tls=1) + - Uses QUIC streams for multiplexed connections over a single UDP connection + - Server configuration is automatically delivered to client during handshake + +**QUIC Advantages:** +- **Multiplexing**: Multiple streams over a single UDP connection +- **Reduced Latency**: Faster connection establishment with 0-RTT support +- **Better Loss Recovery**: Stream-level flow control and congestion management +- **NAT Traversal**: UDP-based protocol works better through NATs and firewalls +- **Built-in Encryption**: Mandatory TLS 1.3 encryption for all QUIC connections + +**QUIC Requirements:** +- Only server needs to configure the `quic` parameter - client receives configuration automatically +- TLS mode must be enabled (tls=1 or tls=2) - automatically set if quic=1 +- Only available in dual-end handshake mode (mode=2 or mode=0 with remote addresses) +- Not applicable to single-end forwarding mode (mode=1) + +Example: +```bash +# Server with QUIC transport (automatically enables TLS) +nodepass "server://0.0.0.0:10101/remote.example.com:8080?quic=1&mode=2" + +# Client automatically adopts QUIC transport from server +nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2" + +# QUIC with custom TLS certificate (server-side only) +nodepass "server://0.0.0.0:10101/remote.example.com:8080?quic=1&tls=2&crt=/path/to/cert.pem&key=/path/to/key.pem" + +# Traditional TCP pool (default behavior) +nodepass "server://0.0.0.0:10101/remote.example.com:8080?quic=0&mode=2" +``` + +**QUIC Use Cases:** +- **High-Latency Networks**: Reduced connection overhead in satellite or long-distance links +- **Mobile Networks**: Better handling of network transitions and packet loss +- **Real-Time Applications**: Lower latency for gaming, VoIP, or video streaming +- **NAT-Heavy Environments**: Improved connectivity through complex NAT scenarios +- **Concurrent Streams**: Efficient handling of multiple parallel data flows + +**Important Notes:** +- QUIC mode requires UDP port accessibility on both server and client +- Firewall rules must allow UDP traffic on the tunnel port +- Some network middleboxes may block or deprioritize UDP traffic +- QUIC connection uses keep-alive and automatic reconnection +- Stream multiplexing shares bandwidth across all concurrent connections + ## Connection Pool Capacity Parameters Connection pool capacity parameters only apply to dual-end handshake mode and are configured through different approaches: @@ -118,11 +282,15 @@ Connection pool capacity parameters only apply to dual-end handshake mode and ar - The `max` parameter set by client will be overridden by the value delivered from server during handshake - The `min` parameter is fully controlled by client and will not be modified by server - In client single-end forwarding mode, connection pools are not used and these parameters are ignored +- Applies to both TCP pools (quic=0) and QUIC pools (quic=1) Example: ```bash # Client sets minimum pool to 32, maximum pool will be determined by server nodepass "client://server.example.com:10101/127.0.0.1:8080?min=32" + +# Client with QUIC and custom pool capacity +nodepass "client://server.example.com:10101/127.0.0.1:8080?quic=1&min=128" ``` ## Data Read Timeout @@ -397,21 +565,24 @@ nodepass "client://127.0.0.1:3306/db-primary.local:3306,db-secondary.local:3306? NodePass allows flexible configuration via URL query parameters. The following table shows which parameters are applicable in server, client, and master modes: -| Parameter | Description | Default | server | client | master | -|-----------|----------------------|---------|:------:|:------:|:------:| -| `log` | Log level | `info` | O | O | O | -| `tls` | TLS encryption mode | `0` | O | X | O | -| `crt` | Custom certificate path| N/A | O | X | O | -| `key` | Custom key path | N/A | O | X | O | -| `min` | Minimum pool capacity | `64` | X | O | X | -| `max` | Maximum pool capacity | `1024` | O | X | X | -| `mode` | Run mode control | `0` | O | O | X | -| `read` | Data read timeout | `0` | O | O | X | -| `rate` | Bandwidth rate limit | `0` | O | O | X | -| `slot` | Maximum connection limit | `65536` | O | O | X | -| `proxy` | PROXY protocol support| `0` | O | O | X | -| `notcp` | TCP support control | `0` | O | O | X | -| `noudp` | UDP support control | `0` | O | O | X | +| Parameter | Description | Default | server | client | master | +|-----------|--------------------------|-------------------|:------:|:------:|:------:| +| `log` | Log level | `info` | O | O | O | +| `tls` | TLS encryption mode | `0` | O | X | O | +| `crt` | Custom certificate path | N/A | O | X | O | +| `key` | Custom key path | N/A | O | X | O | +| `dns` | Custom DNS servers | `1.1.1.1,8.8.8.8` | O | O | X | +| `min` | Minimum pool capacity | `64` | X | O | X | +| `max` | Maximum pool capacity | `1024` | O | X | X | +| `mode` | Run mode control | `0` | O | O | X | +| `quic` | QUIC protocol support | `0` | O | X | X | +| `dial` | Source IP for outbound | `auto` | O | O | X | +| `read` | Data read timeout | `0` | O | O | X | +| `rate` | Bandwidth rate limit | `0` | O | O | X | +| `slot` | Maximum connection limit | `65536` | O | O | X | +| `proxy` | PROXY protocol support | `0` | O | O | X | +| `notcp` | TCP support control | `0` | O | O | X | +| `noudp` | UDP support control | `0` | O | O | X | - O: Parameter is valid and recommended for configuration - X: Parameter is not applicable and should be ignored @@ -421,6 +592,7 @@ NodePass allows flexible configuration via URL query parameters. The following t - For client/server dual-end handshake modes, adjust connection pool capacity (`min`, `max`) based on traffic and resource constraints for optimal performance. - Use run mode control (`mode`) when automatic detection doesn't match your deployment requirements or for consistent behavior across environments. - Configure rate limiting (`rate`) to control bandwidth usage and prevent network congestion in shared environments. +- Configure QUIC transport (`quic`) on the server only - clients automatically receive the configuration during handshake. - Set `notcp=1` when only UDP traffic needs to be tunneled to reduce resource usage and simplify configuration. - Set `noudp=1` when only TCP traffic needs to be tunneled to reduce resource usage and simplify configuration. - Log level (`log`) can be set in all modes for easier operations and troubleshooting. @@ -433,7 +605,8 @@ NodePass behavior can be fine-tuned using environment variables. Below is the co |----------|-------------|---------|---------| | `NP_SEMAPHORE_LIMIT` | Signal channel buffer size | 65536 | `export NP_SEMAPHORE_LIMIT=2048` | | `NP_TCP_DATA_BUF_SIZE` | Buffer size for TCP data transfer | 16384 | `export NP_TCP_DATA_BUF_SIZE=65536` | -| `NP_UDP_DATA_BUF_SIZE` | Buffer size for UDP packets | 2048 | `export NP_UDP_DATA_BUF_SIZE=16384` | +| `NP_UDP_DATA_BUF_SIZE` | Buffer size for UDP packets | 16384 | `export NP_UDP_DATA_BUF_SIZE=16384` | +| `NP_DNS_CACHING_TTL` | DNS cache time-to-live duration | 5m | `export NP_DNS_CACHING_TTL=10m` | | `NP_HANDSHAKE_TIMEOUT` | Timeout for handshake operations | 5s | `export NP_HANDSHAKE_TIMEOUT=30s` | | `NP_UDP_READ_TIMEOUT` | Timeout for UDP read operations | 30s | `export NP_UDP_READ_TIMEOUT=60s` | | `NP_TCP_DIAL_TIMEOUT` | Timeout for establishing TCP connections | 5s | `export NP_TCP_DIAL_TIMEOUT=60s` | @@ -479,13 +652,40 @@ The connection pool parameters are important settings for performance tuning in - Too large: Increased memory usage - Recommended range: 1000-5000 +### DNS Resolution Tuning + +For applications with frequent hostname lookups or dynamic DNS scenarios: + +- `NP_DNS_CACHING_TTL`: DNS cache time-to-live duration + - Controls how long resolved DNS entries remain cached + - Default (5m) balances freshness and performance for most scenarios + - Increase for stable DNS environments to reduce query overhead (e.g., 15m, 30m, 1h) + - Decrease for dynamic DNS environments requiring fresh lookups (e.g., 1m, 2m) + - Background refresh at 80% of TTL ensures smooth transitions without lookup delays + +**DNS Caching Best Practices:** +- **Static Infrastructure**: Use longer TTL (15m-1h) for stable production environments +- **Dynamic DNS**: Use shorter TTL (1m-5m) for frequently changing hostnames +- **Development**: Use shorter TTL (1m-2m) for rapid iteration and testing +- **High-Traffic Services**: Balance between freshness and reduced DNS server load +- **Geographic Distribution**: Consider DNS propagation delays when setting TTL + +Example DNS tuning: +```bash +# Long TTL for stable production environment +export NP_DNS_CACHING_TTL=30m + +# Short TTL for dynamic development environment +export NP_DNS_CACHING_TTL=2m +``` + ### UDP Settings For applications relying heavily on UDP traffic: - `NP_UDP_DATA_BUF_SIZE`: Buffer size for UDP packets - Increase for applications sending large UDP packets - - Default (8192) works well for most cases + - Default (16384) works well for most cases - Consider increasing to 16384 or higher for media streaming or game servers - `NP_UDP_READ_TIMEOUT`: Timeout for UDP read operations diff --git a/nodepass/docs/en/examples.md b/nodepass/docs/en/examples.md index 8c4f0068f8..dc5a5888a9 100644 --- a/nodepass/docs/en/examples.md +++ b/nodepass/docs/en/examples.md @@ -212,32 +212,164 @@ This configuration: - Allows embedded devices to expose their local web interfaces securely - Centralizes device management through a single endpoint -## Multi-environment Development -### Example 13: Development Environment Access +## Multi-Homed Systems and Source IP Control -Access different development environments through tunnels: +### Example 13: Specific Network Interface Selection + +Control which network interface is used for outbound connections on multi-homed systems: ```bash -# Production API access tunnel -nodepass client://tunnel.example.com:10101/127.0.0.1:3443 +# Server using specific source IP for outbound connections (useful for policy routing) +nodepass "server://0.0.0.0:10101/remote.backend.com:8080?dial=10.1.0.100&mode=2&tls=1" -# Development environment -nodepass server://tunnel.example.com:10101/127.0.0.1:3000 +# Client using specific source IP for target connections (useful for firewall rules) +nodepass "client://server.example.com:10101/127.0.0.1:8080?dial=192.168.1.50&mode=2" +``` -# Testing environment -nodepass "server://tunnel.example.com:10101/127.0.0.1:3001?log=warn&tls=1" +This configuration: +- Forces outbound connections to use specific local IP address +- Useful for systems with multiple network interfaces (e.g., separate public/private networks) +- Enables policy-based routing by source IP +- Automatically falls back to system-selected IP if specified address fails +- Supports both IPv4 and IPv6 addresses + +### Example 14: Network Segmentation and VLAN Routing + +Direct traffic through specific network segments or VLANs: + +```bash +# Server routing traffic through management network (10.0.0.0/8) +nodepass "server://0.0.0.0:10101/mgmt.backend.local:8080?dial=10.200.1.10&mode=2&log=info" + +# Server routing traffic through production network (172.16.0.0/12) +nodepass "server://0.0.0.0:10102/prod.backend.local:8080?dial=172.16.50.20&mode=2&log=info" + +# Client with automatic source IP selection (default behavior) +nodepass "client://server.example.com:10101/127.0.0.1:8080?dial=auto" ``` This setup: -- Creates secure access to multiple environments (production, development, testing) -- Uses different levels of logging based on environment sensitivity -- Enables developers to access environments without direct network exposure -- Maps remote services to different local ports for easy identification +- Separates management and production traffic at the network layer +- Ensures traffic follows designated network paths based on source IP +- Complies with network security policies requiring source-based routing +- Automatic fallback prevents connection failures from misconfiguration +- `dial=auto` (default) lets the system choose the appropriate source IP + +**Source IP Control Use Cases**: +- **Multi-Homed Servers**: Systems with multiple NICs for different networks +- **Policy Routing**: Network policies requiring specific source IPs +- **Firewall Compliance**: Matching firewall rules that filter by source address +- **Load Distribution**: Distributing outbound traffic across multiple network links +- **Network Testing**: Simulating traffic from specific network locations + +## DNS Configuration for Custom Resolution + +### Example 15: Corporate DNS for Internal Services + +Use corporate DNS servers to resolve internal hostnames: + +```bash +# Server side: Use corporate DNS servers for internal service resolution +nodepass "server://0.0.0.0:10101/internal-api.corp.local:8080?dns=10.0.0.53,10.0.1.53&mode=2&tls=1" + +# Client side: Use same DNS servers for consistent resolution +nodepass "client://tunnel.corp.local:10101/127.0.0.1:8080?dns=10.0.0.53,10.0.1.53" +``` + +This configuration: +- Uses corporate DNS servers (10.0.0.53 and 10.0.1.53) instead of public DNS +- Resolves internal .corp.local domains that are not accessible via public DNS +- Automatic failover to second DNS server if first fails +- DNS results are cached for 5 minutes (default) to improve performance +- Both server and client use consistent DNS configuration + +### Example 16: Privacy-Focused DNS Providers + +Use privacy-enhanced DNS providers for improved security: + +```bash +# Server side: Use Cloudflare DNS (privacy-focused) +nodepass "server://0.0.0.0:10101/api.example.com:443?dns=1.1.1.1,1.0.0.1&tls=1&log=info" + +# Client side: Use Quad9 DNS (malware blocking) +nodepass "client://server.example.com:10101/127.0.0.1:8080?dns=9.9.9.9,149.112.112.112" +``` + +This setup: +- Server uses Cloudflare DNS (1.1.1.1) known for privacy protection +- Client uses Quad9 DNS (9.9.9.9) with built-in malware domain blocking +- Multiple DNS servers provide redundancy +- All DNS queries are encrypted via DNS-over-TLS when supported by resolvers + +### Example 17: Geographic DNS Optimization + +Select DNS servers geographically close to deployment for lower latency: + +```bash +# Asia-Pacific region: Use Google DNS Asia servers +nodepass "server://0.0.0.0:10101/service.example.com:8080?dns=8.8.8.8,8.8.4.4&mode=2" + +# Europe: Use Cloudflare DNS +nodepass "server://0.0.0.0:10101/service.example.com:8080?dns=1.1.1.1,1.0.0.1&mode=2" + +# Custom region: Use local ISP DNS for best performance +nodepass "server://0.0.0.0:10101/service.example.com:8080?dns=203.0.113.1,203.0.113.2&mode=2" +``` + +This configuration: +- Reduces DNS lookup latency by using geographically proximate servers +- Improves initial connection establishment time +- Works with any DNS server accessible via UDP port 53 + +### Example 18: IPv6 DNS Configuration + +Configure IPv6 DNS servers for IPv6-enabled networks: + +```bash +# Server side: Use IPv6 DNS servers (Cloudflare and Google) +nodepass "server://[::]:10101/ipv6.example.com:8080?dns=2606:4700:4700::1111,2001:4860:4860::8888&mode=2&tls=1" + +# Client side: Mixed IPv4 and IPv6 DNS servers +nodepass "client://server.example.com:10101/127.0.0.1:8080?dns=1.1.1.1,2606:4700:4700::1111" +``` + +This setup: +- Server listens on all IPv6 interfaces using [::] +- Uses IPv6 DNS servers for native IPv6 resolution +- Mixed IPv4/IPv6 DNS configuration provides maximum compatibility +- Automatically selects IPv4 or IPv6 addresses based on connection type + +### Example 19: DNS Caching Tuning for Different Environments + +Adjust DNS cache TTL for optimal performance: + +```bash +# Production: Stable DNS, longer cache TTL (30 minutes) +export NP_DNS_CACHING_TTL=30m +nodepass "server://0.0.0.0:10101/stable.backend.com:8080?dns=1.1.1.1,8.8.8.8&tls=1" + +# Development: Dynamic DNS, shorter cache TTL (1 minute) +export NP_DNS_CACHING_TTL=1m +nodepass "server://0.0.0.0:10101/dev.backend.local:8080?dns=10.0.0.53&tls=0&log=debug" +``` + +This configuration: +- **Production (30m TTL)**: Maximizes cache efficiency for stable environments +- **Development (1m TTL)**: Quick DNS updates for rapidly changing configurations +- Background refresh at 80% of TTL ensures smooth transitions + +**DNS Configuration Use Cases**: +- **Corporate Networks**: Resolve internal hostnames via corporate DNS infrastructure +- **Privacy Enhancement**: Use privacy-focused DNS providers (1.1.1.1, 9.9.9.9) +- **Geographic Optimization**: Reduce latency with regionally proximate DNS servers +- **Development/Testing**: Quick DNS updates with short TTL in dynamic environments +- **High Availability**: Multiple DNS servers provide redundancy and failover +- **Compliance**: Meet regulatory requirements for DNS provider selection ## High Availability and Load Balancing -### Example 14: Multi-Backend Server Load Balancing +### Example 20: Multi-Backend Server Load Balancing Use target address groups for even traffic distribution and automatic failover: @@ -255,7 +387,7 @@ This configuration: - Automatically resumes sending traffic to recovered servers - Uses TLS encryption to secure the tunnel -### Example 15: Database Primary-Replica Failover +### Example 21: Database Primary-Replica Failover Configure primary and replica database instances for high availability access: @@ -270,7 +402,7 @@ This setup: - Application requires no modification for transparent failover - Logs only warnings and errors to reduce output -### Example 16: API Gateway Backend Pool +### Example 22: API Gateway Backend Pool Configure multiple backend service instances for an API gateway: @@ -288,7 +420,7 @@ This configuration: - Client limits bandwidth to 100 Mbps with maximum 2000 concurrent connections - Single instance failure doesn't affect overall service availability -### Example 17: Geo-Distributed Services +### Example 23: Geo-Distributed Services Configure multi-region service nodes to optimize network latency: @@ -312,7 +444,7 @@ This setup: ## PROXY Protocol Integration -### Example 18: Load Balancer Integration with PROXY Protocol +### Example 24: Load Balancer Integration with PROXY Protocol Enable PROXY protocol support for integration with load balancers and reverse proxies: @@ -331,7 +463,7 @@ This configuration: - Compatible with HAProxy, Nginx, and other PROXY protocol aware services - Useful for maintaining accurate access logs and IP-based access controls -### Example 19: Reverse Proxy Support for Web Applications +### Example 25: Reverse Proxy Support for Web Applications Enable web applications behind NodePass to receive original client information: @@ -355,7 +487,7 @@ This setup: - Supports compliance requirements for connection auditing - Works with web servers that support PROXY protocol (Nginx, HAProxy, etc.) -### Example 20: Database Access with Client IP Preservation +### Example 26: Database Access with Client IP Preservation Maintain client IP information for database access logging and security: @@ -382,7 +514,7 @@ Benefits: ## Container Deployment -### Example 21: Containerized NodePass +### Example 27: Containerized NodePass Deploy NodePass in a Docker environment: @@ -417,7 +549,7 @@ This configuration: ## Master API Management -### Example 22: Centralized Management +### Example 28: Centralized Management Set up a central controller for multiple NodePass instances: @@ -454,7 +586,7 @@ This setup: - Offers a RESTful API for automation and integration - Includes a built-in Swagger UI at http://localhost:9090/api/v1/docs -### Example 23: Custom API Prefix +### Example 29: Custom API Prefix Use a custom API prefix for the master mode: @@ -473,7 +605,7 @@ This allows: - Custom URL paths for security or organizational purposes - Swagger UI access at http://localhost:9090/admin/v1/docs -### Example 24: Real-time Connection and Traffic Monitoring +### Example 30: Real-time Connection and Traffic Monitoring Monitor instance connection counts and traffic statistics through the master API: @@ -511,6 +643,120 @@ This monitoring setup provides: - **Capacity planning**: Resource planning based on historical connection data - **Troubleshooting**: Abnormal connection count changes may indicate network issues +## QUIC Transport Protocol + +### Example 31: QUIC-based Tunnel with Stream Multiplexing + +Use QUIC protocol for connection pooling with improved performance in high-latency networks: + +```bash +# Server side: Enable QUIC transport +nodepass "server://0.0.0.0:10101/remote.example.com:8080?quic=1&mode=2&tls=1&log=debug" + +# Client side: Automatically receives QUIC configuration from server +nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2&min=128&log=debug" +``` + +This configuration: +- Uses QUIC protocol for UDP-based multiplexed streams +- Single QUIC connection carries multiple concurrent data streams +- Mandatory TLS 1.3 encryption (automatically enabled) +- Better performance in packet loss scenarios (no head-of-line blocking) +- Improved connection establishment with 0-RTT support +- Client automatically receives QUIC configuration from server during handshake + +### Example 32: QUIC with Custom TLS Certificate + +Deploy QUIC tunnel with verified certificates for production: + +```bash +# Server side: QUIC with custom certificate +nodepass "server://0.0.0.0:10101/backend.internal:8080?quic=1&mode=2&tls=2&crt=/etc/nodepass/cert.pem&key=/etc/nodepass/key.pem" + +# Client side: Automatically receives QUIC configuration with certificate verification +nodepass "client://tunnel.example.com:10101/127.0.0.1:8080?mode=2&min=64&log=info" +``` + +This setup: +- Uses verified TLS certificates for highest security +- QUIC protocol provides mandatory TLS 1.3 encryption +- Suitable for production environments +- Full certificate validation on client side +- QUIC configuration automatically delivered from server + +### Example 33: QUIC for Mobile/High-Latency Networks + +Optimize for mobile networks or satellite connections: + +```bash +# Server side: QUIC with adaptive pool sizing +nodepass "server://0.0.0.0:10101/api.backend:443?quic=1&mode=2&max=512&tls=1&log=info" + +# Client side: Automatically receives QUIC, configure larger minimum pool for mobile +nodepass "client://mobile.tunnel.com:10101/127.0.0.1:8080?mode=2&min=256&log=warn" +``` + +This configuration: +- QUIC's UDP-based transport works better through NATs +- Larger pool size compensates for network transitions +- Stream multiplexing reduces connection overhead +- Better handling of packet loss and jitter +- 0-RTT reconnection for faster recovery after network changes +- Client automatically adopts QUIC from server + +### Example 34: QUIC vs TCP Pool Performance Comparison + +Side-by-side comparison of QUIC and TCP pools: + +```bash +# Traditional TCP pool (default) +nodepass "server://0.0.0.0:10101/backend.example.com:8080?quic=0&mode=2&tls=1&log=event" +nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2&min=128&log=event" + +# QUIC pool (modern approach) +nodepass "server://0.0.0.0:10102/backend.example.com:8080?quic=1&mode=2&tls=1&log=event" +nodepass "client://server.example.com:10102/127.0.0.1:8081?mode=2&min=128&log=event" +``` + +**TCP Pool Advantages**: +- Wider compatibility with network infrastructure +- Established protocol with predictable behavior +- Better support in some enterprise environments + +**QUIC Pool Advantages**: +- Reduced latency with 0-RTT connection resumption +- No head-of-line blocking across streams +- Better congestion control and loss recovery +- Improved NAT traversal capabilities +- Single UDP socket reduces resource usage + +### Example 35: QUIC for Real-Time Applications + +Configure QUIC tunnel for gaming, VoIP, or video streaming: + +```bash +# Server side: QUIC with optimized settings for real-time traffic +nodepass "server://0.0.0.0:10101/gameserver.local:7777?quic=1&mode=2&tls=1&read=30s&slot=10000" + +# Client side: Automatically receives QUIC configuration from server +nodepass "client://game.tunnel.com:10101/127.0.0.1:7777?mode=2&min=64&read=30s" +``` + +This setup: +- QUIC's stream-level flow control prevents interference between flows +- Lower latency compared to TCP pools in lossy networks +- 30-second read timeout for quick detection of stale connections +- Large slot limit supports many concurrent players/streams +- Reduced connection establishment overhead +- Client automatically adopts server's QUIC configuration + +**QUIC Use Case Summary**: +- **Mobile Networks**: Better handling of network transitions and packet loss +- **High-Latency Links**: Reduced overhead from 0-RTT and multiplexing +- **Real-Time Apps**: Stream independence prevents head-of-line blocking +- **NAT-Heavy Environments**: UDP-based protocol traverses NATs more reliably +- **Concurrent Streams**: Efficient bandwidth sharing across parallel flows + ## Next Steps Now that you've seen various usage examples, you might want to: diff --git a/nodepass/docs/en/how-it-works.md b/nodepass/docs/en/how-it-works.md index 94d85160d5..286d46a721 100644 --- a/nodepass/docs/en/how-it-works.md +++ b/nodepass/docs/en/how-it-works.md @@ -47,6 +47,11 @@ NodePass creates a network architecture with separate channels for control and d - **TCP**: Full bidirectional streaming with persistent connections, optimized for direct connection establishment in client single-end forwarding mode - **UDP**: Datagram forwarding with configurable buffer sizes and timeouts +6. **Smart DNS Resolution**: + - Intelligent caching with background refresh for optimal performance + - Custom DNS servers with automatic failover + - Native IPv4/IPv6 support for modern networks + ## Data Transmission Flow NodePass establishes a bidirectional data flow through its tunnel architecture, supporting both TCP and UDP protocols. The system supports three data flow modes: @@ -210,30 +215,106 @@ NodePass uses a sophisticated URL-based signaling protocol through the TCP tunne ## Connection Pool Architecture -NodePass implements an efficient connection pooling system for managing network connections, which forms the core of its performance advantages: +NodePass implements an efficient connection pooling system for managing network connections, which forms the core of its performance advantages. NodePass supports two transport protocols for connection pools: traditional TCP-based pools and modern QUIC-based UDP pools. + +### Transport Protocol Selection + +NodePass provides two connection pool transport options via the `quic` parameter: + +1. **TCP-based Pool (quic=0, default)**: + - Traditional TCP connections managed by the `pool` library + - Multiple independent TCP connections between client and server + - Standard TLS encryption over individual TCP connections + - Well-tested and widely compatible approach + +2. **QUIC-based Pool (quic=1)**: + - UDP-based multiplexed streams managed by the `quic` library + - Single QUIC connection with multiple concurrent streams + - Mandatory TLS 1.3 encryption with 0-RTT support + - Superior performance in high-latency and mobile networks + +### QUIC Pool Architecture + +When `quic=1` is enabled, NodePass uses QUIC protocol for connection pooling with the following characteristics: + +**Stream Multiplexing**: +- Single UDP connection carries multiple bidirectional streams +- Each stream represents an individual tunnel connection +- Streams are independent: one stream's packet loss doesn't affect others +- Stream-level flow control prevents head-of-line blocking + +**Connection Establishment**: +- Server listens on UDP port and accepts QUIC connections +- Client establishes single QUIC connection to server +- Server generates unique stream IDs for each incoming connection +- Client opens new streams on-demand using provided stream IDs + +**Stream Lifecycle**: +1. **Stream Creation** (Server side): + - Server accepts new QUIC connection from authorized client + - For each target connection, server opens bidirectional stream + - Server generates 4-byte random stream ID + - Stream ID sent to client for correlation + +2. **Stream Retrieval** (Client side): + - Client receives stream ID via control channel signal + - Client retrieves corresponding stream from QUIC connection + - Stream wrapped as `net.Conn` for compatibility + - Stream used for data exchange with target endpoint + +3. **Stream Termination**: + - Stream closed after data exchange completes + - Graceful closure with proper cleanup + - QUIC connection remains active for future streams + +**Dynamic Management**: +- Pool capacity adjusted based on stream creation success rate +- Stream creation intervals adapt to pool utilization +- Automatic stream capacity scaling within min/max boundaries +- Keep-alive mechanism maintains QUIC connection health + +**Security Features**: +- Mandatory TLS 1.3 encryption for all QUIC connections +- Three TLS modes supported: + - Mode 0/1: InsecureSkipVerify for testing/development + - Mode 2: Full certificate verification for production +- Client IP restriction available on server side +- ALPN protocol negotiation ("np-quic") + +**Performance Advantages**: +- Reduced connection overhead: single UDP socket for all streams +- 0-RTT connection resumption for faster reconnection +- Better congestion control with stream-level prioritization +- Improved NAT traversal compared to multiple TCP connections +- Lower latency in packet loss scenarios (no head-of-line blocking) ### Design Philosophy The connection pool design follows the principle of "warm-up over cold start," eliminating network latency through pre-established connections. This design philosophy draws from modern high-performance server best practices, amortizing the cost of connection establishment to the system startup phase rather than bearing this overhead on the critical path. +Both TCP and QUIC pools share this philosophy but implement it differently: +- **TCP pools**: Pre-establish multiple TCP connections +- **QUIC pools**: Pre-create multiple streams over a single QUIC connection + ### Pool Design 1. **Pool Types**: - - **Client Pool**: Pre-establishes connections to the remote endpoint with active connection management - - **Server Pool**: Manages incoming connections from clients with passive connection acceptance + - **Client Pool**: Pre-establishes connections/streams to the remote endpoint with active connection management + - **Server Pool**: Manages incoming connections/streams from clients with passive connection acceptance 2. **Pool Components**: - - **Connection Storage**: Thread-safe map of connection IDs to net.Conn objects, supporting high-concurrency access + - **Connection/Stream Storage**: Thread-safe map of connection IDs to net.Conn objects, supporting high-concurrency access - **ID Channel**: Buffered channel for available connection IDs, enabling lock-free rapid allocation - **Capacity Management**: Dynamic adjustment based on usage patterns, implementing intelligent scaling - Minimum capacity set by client, ensuring basic connection guarantee for client - Maximum capacity delivered by server during handshake, enabling global resource coordination - - **Interval Control**: Time-based throttling between connection creations, preventing network resource overload - - **Connection Factory**: Customizable connection creation function, supporting different TLS modes and network configurations + - **Interval Control**: Time-based throttling between connection/stream creations, preventing network resource overload + - **Connection Factory**: Customizable connection creation function (TCP) or stream management (QUIC) ### Advanced Design Features 1. **Zero-Latency Connections**: - Pre-established connection pools eliminate TCP three-way handshake delays - TLS handshakes complete during connection pool initialization, avoiding runtime encryption negotiation overhead - Connection warm-up strategies ensure hot connections are always available in the pool + - **QUIC Enhancement**: 0-RTT support further reduces reconnection latency 2. **Intelligent Load Awareness**: - Dynamic pool management based on real-time connection utilization @@ -242,9 +323,11 @@ The connection pool design follows the principle of "warm-up over cold start," e ### Connection Lifecycle 1. **Connection Creation**: - - Connections are created up to the configured capacity, ensuring resource controllability + - Connections/streams are created up to the configured capacity, ensuring resource controllability - Each connection is assigned a unique ID, supporting precise connection tracking and management - IDs and connections are stored in the pool with copy-on-write and delayed deletion strategies + - **TCP Mode**: Creates individual TCP connections with optional TLS + - **QUIC Mode**: Opens bidirectional streams over shared QUIC connection 2. **Connection Acquisition**: - Client retrieves connections using connection IDs, supporting precise matching and fast lookups diff --git a/nodepass/docs/en/installation.md b/nodepass/docs/en/installation.md index 80f4ba1d76..5f236a5bac 100644 --- a/nodepass/docs/en/installation.md +++ b/nodepass/docs/en/installation.md @@ -108,4 +108,4 @@ If you encounter any issues during installation: - Check that you have the correct permissions to install software - For Go-related issues, verify your Go installation with `go version` - For container-related issues, ensure Docker is properly installed and running -- See our [troubleshooting guide](/docs/en/troubleshooting.md) for more help +- See our [troubleshooting guide](/docs/en/troubleshooting.md) for more help \ No newline at end of file diff --git a/nodepass/docs/en/troubleshooting.md b/nodepass/docs/en/troubleshooting.md index ab6873bcaf..ef1a8eec90 100644 --- a/nodepass/docs/en/troubleshooting.md +++ b/nodepass/docs/en/troubleshooting.md @@ -237,6 +237,54 @@ This guide helps you diagnose and resolve common issues you might encounter when - Some applications have built-in UDP session timeouts - May need to adjust application-specific keepalive settings +## DNS Issues + +### DNS Resolution Failures + +**Symptoms**: Connections fail with "no such host" or DNS lookup errors. + +**Solutions**: + +1. **Verify DNS Configuration** + - Test DNS server reachability: `ping 1.1.1.1` + - Verify resolution works: `nslookup example.com 8.8.8.8` + - Ensure `dns` parameter contains valid IP addresses + +2. **Network Connectivity** + - Check if firewall blocks UDP port 53 + - Try alternative DNS: `dns=8.8.8.8,1.1.1.1` or `dns=223.5.5.5,119.29.29.29` + - Use internal DNS for corporate networks: `dns=10.0.0.1,8.8.8.8` + +### DNS Caching Problems + +**Symptoms**: Resolution returns stale IPs, connections go to wrong endpoints. + +**Solutions**: + +1. **Adjust Cache TTL** (default 5 minutes) + - Dynamic environments: `export NP_DNS_CACHING_TTL=1m` + - Stable environments: `export NP_DNS_CACHING_TTL=30m` + - Restart NodePass after critical changes + +2. **Load Balancing Scenarios** + - Use shorter TTL: `export NP_DNS_CACHING_TTL=30s` + - Or use IP addresses directly to bypass DNS caching + +### DNS Performance Optimization + +**Symptoms**: High connection latency, slow startup. + +**Solutions**: + +1. **Choose Appropriate DNS Servers** + - China: `dns=223.5.5.5,119.29.29.29` + - International: `dns=1.1.1.1,8.8.8.8` + - Use at least 2 DNS servers for redundancy + +2. **Reduce DNS Queries** + - Use IP addresses directly for performance-critical scenarios + - Increase TTL for stable environments: `export NP_DNS_CACHING_TTL=1h` + ## Master API Issues ### API Accessibility Problems @@ -322,6 +370,118 @@ This guide helps you diagnose and resolve common issues you might encounter when - In production environments, recommend regularly backing up `nodepass.gob` to different storage locations - Use configuration management tools to save text-form backups of instance configurations +## QUIC-Specific Issues + +### QUIC Connection Failures + +**Symptoms**: QUIC tunnel fails to establish when `quic=1` is enabled. + +**Possible Causes and Solutions**: + +1. **UDP Port Blocked** + - Verify UDP port is accessible on both server and client + - Check firewall rules: `sudo ufw allow 10101/udp` (Linux example) + - Test UDP connectivity with `nc -u server.example.com 10101` + - Some ISPs or networks block or throttle UDP traffic + +2. **TLS Configuration Issues** + - QUIC requires TLS to be enabled (minimum `tls=1`) + - If `quic=1` is set but TLS is disabled, system auto-enables `tls=1` + - For production, use `tls=2` with valid certificates + - Check certificate validity for QUIC connections + +3. **Client-Server QUIC Mismatch** + - Both server and client must use same `quic` setting + - Server with `quic=1` requires client with `quic=1` + - Server with `quic=0` requires client with `quic=0` + - Check logs for "QUIC connection not available" errors + +4. **Mode Compatibility** + - QUIC only works in dual-end handshake mode (mode=2) + - Not available in single-end forwarding mode (mode=1) + - System will fall back to TCP pool if mode incompatible + +### QUIC Performance Issues + +**Symptoms**: QUIC tunnel has lower performance than expected or worse than TCP pool. + +**Possible Causes and Solutions**: + +1. **Network Path Issues** + - Some networks deprioritize or shape UDP traffic + - Check if network middleboxes are interfering with QUIC + - Consider testing with TCP pool (`quic=0`) for comparison + - Monitor packet loss rates - QUIC performs better with low loss + +2. **Pool Capacity Configuration** + - Increase `min` and `max` parameters for higher throughput + - QUIC streams share single UDP connection - adequate capacity needed + - Monitor stream utilization with `log=debug` + - Balance between stream count and resource usage + +3. **Certificate Overhead** + - TLS 1.3 handshake (mandatory for QUIC) can add initial latency + - Use 0-RTT resumption for faster reconnection + - Ensure proper certificate chain to avoid validation delays + +4. **Application Compatibility** + - Some applications may not work optimally over QUIC streams + - Test with both TCP and QUIC pools to compare performance + - Consider TCP pool for applications requiring strict ordering + +### QUIC Stream Exhaustion + +**Symptoms**: "Insufficient streams" errors or connection timeouts when using QUIC. + +**Possible Causes and Solutions**: + +1. **Pool Capacity Too Low** + - Increase `max` parameter on server side + - Increase `min` parameter on client side + - Monitor active stream count in logs + - Default capacity may be insufficient for high-concurrency scenarios + +2. **Stream Leaks** + - Check application properly closes connections + - Monitor stream count over time for gradual increase + - Restart instances to clear leaked streams + - Review application code for connection handling + +3. **QUIC Connection Dropped** + - Check keep-alive settings (configured via `NP_REPORT_INTERVAL`) + - Monitor for "QUIC connection not available" errors + - NAT timeout may drop UDP connection - adjust NAT settings + - Increase connection timeout if network latency is high + +### QUIC vs TCP Pool Decision + +**When to Use QUIC** (`quic=1`): +- Mobile networks or frequently changing network conditions +- High-latency connections (satellite, long-distance) +- NAT-heavy environments where UDP traversal is better +- Real-time applications benefiting from stream independence +- Scenarios where 0-RTT reconnection provides value + +**When to Use TCP Pool** (`quic=0`): +- Networks that block or severely throttle UDP traffic +- Applications requiring strict TCP semantics +- Corporate environments with UDP restrictions +- Maximum compatibility requirements +- When testing shows better performance with TCP + +**Comparison Testing**: +```bash +# Test TCP pool performance +nodepass "server://0.0.0.0:10101/backend:8080?quic=0&mode=2&log=event" +nodepass "client://server:10101/127.0.0.1:8080?quic=0&mode=2&log=event" + +# Test QUIC pool performance +nodepass "server://0.0.0.0:10102/backend:8080?quic=1&mode=2&log=event" +nodepass "client://server:10102/127.0.0.1:8081?quic=1&mode=2&log=event" +``` + +Monitor traffic statistics and choose based on observed performance. + ## Next Steps If you encounter issues not covered in this guide: diff --git a/nodepass/docs/en/usage.md b/nodepass/docs/en/usage.md index a9a59dbf88..928d7ad93e 100644 --- a/nodepass/docs/en/usage.md +++ b/nodepass/docs/en/usage.md @@ -7,7 +7,7 @@ NodePass creates tunnels with an unencrypted TCP control channel and configurabl The general syntax for NodePass commands is: ```bash -nodepass ":///?log=&tls=&crt=&key=&min=&max=&mode=&read=&rate=&proxy=" +nodepass ":///?log=&tls=&crt=&key=&dns=&min=&max=&mode=&quic=&dial=&read=&rate=&slot=&proxy=¬cp=<0|1>&noudp=<0|1>" ``` Where: @@ -19,18 +19,29 @@ Where: Common query parameters: - `log=`: Log verbosity level (`none`, `debug`, `info`, `warn`, `error`, or `event`) +- `dns=`: Custom DNS servers (comma-separated IP addresses, default: `1.1.1.1,8.8.8.8`) - `min=`: Minimum connection pool capacity (default: 64, set by client) - `max=`: Maximum connection pool capacity (default: 1024, set by server and delivered to client) - `mode=`: Run mode control (`0`, `1`, or `2`) - controls operational behavior +- `quic=`: QUIC transport mode (`0` for TCP pool, `1` for QUIC UDP pool, default: 0, server-side only) +- `dial=`: Source IP address for outbound connections (default: `auto`, supports both IPv4 and IPv6) - `read=`: Data read timeout duration (default: 0, supports time units like 30s, 5m, 1h, etc.) - `rate=`: Bandwidth rate limit in Mbps (default: 0 for unlimited) +- `slot=`: Maximum concurrent connection limit (default: 65536, 0 for unlimited) - `proxy=`: PROXY protocol support (default: `0`, `1` enables PROXY protocol v1 header transmission) +- `notcp=<0|1>`: TCP support control (default: `0` enabled, `1` disabled) +- `noudp=<0|1>`: UDP support control (default: `0` enabled, `1` disabled) TLS-related parameters (server/master modes only): - `tls=`: TLS security level for data channels (`0`, `1`, or `2`) - `crt=`: Path to certificate file (when `tls=2`) - `key=`: Path to private key file (when `tls=2`) +QUIC transport protocol (server mode only): +- `quic=`: QUIC transport mode (`0` for TCP pool, `1` for QUIC UDP pool, default: 0) + - Server configuration is automatically delivered to client during handshake + - Client does not need to specify quic parameter + ## Operating Modes NodePass offers three complementary operating modes to suit various deployment scenarios. @@ -40,7 +51,7 @@ NodePass offers three complementary operating modes to suit various deployment s Server mode establishes tunnel control channels and supports bidirectional data flow forwarding. ```bash -nodepass "server:///?log=&tls=&crt=&key=&max=&mode=&read=&rate=&proxy=" +nodepass "server:///?log=&tls=&crt=&key=&dns=&quic=&max=&mode=&dial=&read=&rate=&slot=&proxy=¬cp=<0|1>&noudp=<0|1>" ``` #### Parameters @@ -48,6 +59,11 @@ nodepass "server:///?log=&tls=&crt=/?log=&tls=&crt=/?log=&min=&mode=&read=&rate=&proxy=" +nodepass "client:///?log=&dns=&quic=&min=&mode=&dial=&read=&rate=&slot=&proxy=¬cp=<0|1>&noudp=<0|1>" ``` #### Parameters @@ -109,14 +135,21 @@ nodepass "client:///?log=&min=&mode=< - `tunnel_addr`: Address of the NodePass server's tunnel endpoint to connect to (e.g., 10.1.0.1:10101) - `target_addr`: The destination address for business data with bidirectional flow support (e.g., 127.0.0.1:8080) - `log`: Log level (debug, info, warn, error, event) +- `dns`: Custom DNS servers (comma-separated IP addresses, default: 1.1.1.1,8.8.8.8) - `min`: Minimum connection pool capacity (default: 64) - `mode`: Run mode control for client behavior - `0`: Automatic detection (default) - attempts local binding first, falls back to handshake mode - `1`: Force single-end forwarding mode - local proxy with connection pooling - `2`: Force dual-end handshake mode - requires server coordination +- `dial`: Source IP address for outbound connections to target (default: `auto` for system-selected IP) - `read`: Data read timeout duration (default: 0, supports time units like 30s, 5m, 1h, etc.) - `rate`: Bandwidth rate limit (default: 0 means no limit) +- `slot`: Maximum concurrent connection limit (default: 65536, 0 means unlimited) - `proxy`: PROXY protocol support (default: `0`, `1` enables PROXY protocol v1 header before data transfer) +- `notcp`: TCP support control (default: `0` enabled, `1` disabled) +- `noudp`: UDP support control (default: `0` enabled, `1` disabled) + +**Note**: QUIC transport configuration is automatically received from the server during handshake. Clients do not need to specify the `quic` parameter. #### How Client Mode Works @@ -166,6 +199,12 @@ nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2&min=16&log=inf # Resource-constrained configuration - Small connection pool nodepass "client://server.example.com:10101/127.0.0.1:8080?min=16&log=info" + +# Client automatically receives QUIC configuration from server (no quic parameter needed) +nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2&min=128&log=debug" + +# Client for real-time applications (QUIC config from server) +nodepass "client://server.example.com:10101/127.0.0.1:7777?mode=2&min=64&read=30s" ``` ### Master Mode (API) diff --git a/nodepass/docs/zh/api.md b/nodepass/docs/zh/api.md index 6ae28b06de..77a296fded 100644 --- a/nodepass/docs/zh/api.md +++ b/nodepass/docs/zh/api.md @@ -65,7 +65,7 @@ API Key 认证默认启用,首次启动自动生成并保存在 `nodepass.gob` "type": "client|server", "status": "running|stopped|error", "url": "...", - "config": "server://0.0.0.0:8080/localhost:3000?log=info&tls=1&max=1024&mode=0&read=1h&rate=0&slot=65536&proxy=0", + "config": "server://0.0.0.0:8080/localhost:3000?log=info&tls=1&dns=1.1.1.1,8.8.8.8&max=1024&mode=0&quic=0&dial=auto&read=1h&rate=100&slot=65536&proxy=0¬cp=0&noudp=0", "restart": true, "meta": { "peer": { @@ -111,20 +111,26 @@ API Key 认证默认启用,首次启动自动生成并保存在 `nodepass.gob` - 服务端:`server://:/:?<参数>` - 客户端:`client://:/:?<参数>` -- 支持参数:`log`、`tls`、`crt`、`key`、`min`、`max`、`mode`、`read`、`rate` +- 支持参数:`log`、`tls`、`crt`、`key`、`dns`、`min`、`max`、`mode`、`quic`、`dial`、`read`、`rate`、`slot`、`proxy`、`notcp`、`noudp` ### URL 查询参数 - `log`:日志级别(`none`、`debug`、`info`、`warn`、`error`、`event`) - `tls`:TLS加密模式(`0`、`1`、`2`)- 仅服务端/主控模式 - `crt`/`key`:证书/密钥文件路径(当`tls=2`时) +- `dns`:自定义DNS服务器(逗号分隔的IP地址,默认:`1.1.1.1,8.8.8.8`)- 仅服务端/客户端模式 - `min`/`max`:连接池容量(`min`由客户端设置,`max`由服务端设置并在握手时传递给客户端) - `mode`:运行模式控制(`0`、`1`、`2`)- 控制操作行为 - 对于服务端:`0`=自动,`1`=反向模式,`2`=正向模式 - 对于客户端:`0`=自动,`1`=单端转发,`2`=双端握手 -- `read`:数据读取超时时长(如1h、30m、15s) +- `quic`:QUIC传输模式(`0`=TCP连接池,`1`=QUIC连接池,默认:`0`)- 仅服务端配置,客户端在握手时接收配置 +- `dial`:出站连接的源IP地址(默认:`auto`)- 仅服务端/客户端模式 +- `read`:数据读取超时时长(如1h、30m、15s,默认:`0`表示无超时) - `rate`:带宽速率限制,单位Mbps(0=无限制) +- `slot`:最大并发连接数限制(默认:`65536`,0=无限制) - `proxy`:PROXY协议支持(`0`、`1`)- 启用后在数据传输前发送PROXY协议v1头部 +- `notcp`:TCP支持控制(`0`=启用,`1`=禁用)- 仅服务端/客户端模式 +- `noudp`:UDP支持控制(`0`=启用,`1`=禁用)- 仅服务端/客户端模式 ### 实时事件流(SSE) @@ -1110,7 +1116,7 @@ API响应中的实例对象包含以下字段: "type": "server", // 实例类型:server 或 client "status": "running", // 实例状态:running、stopped 或 error "url": "server://...", // 实例配置URL - "config": "server://0.0.0.0:8080/localhost:3000?log=info&tls=1&max=1024&mode=0&read=1h&rate=0&slot=65536&proxy=0", // 完整配置URL + "config": "server://0.0.0.0:8080/localhost:3000?log=info&tls=1&dns=1.1.1.1,8.8.8.8&max=1024&mode=0&quic=0&dial=auto&read=1h&rate=100&slot=65536&proxy=0¬cp=0&noudp=0", // 完整配置URL "restart": true, // 自启动策略 "meta": { // 用于组织和对端跟踪的元数据 "peer": { @@ -1572,12 +1578,15 @@ client://:/:? | 参数 | 描述 | 值 | 默认值 | 适用范围 | |------|------|----|----|---------| | `log` | 日志级别 | `none`, `debug`, `info`, `warn`, `error`, `event` | `info` | 两者 | -| `tls` | TLS加密级别 | `0`(无), `1`(自签名), `2`(证书) | `0` | 仅服务器 | -| `crt` | 证书路径 | 文件路径 | 无 | 仅服务器 | -| `key` | 私钥路径 | 文件路径 | 无 | 仅服务器 | +| `tls` | TLS加密级别 | `0`(无), `1`(自签名), `2`(证书) | `0` | 仅服务端 | +| `crt` | 证书路径 | 文件路径 | 无 | 仅服务端 | +| `key` | 私钥路径 | 文件路径 | 无 | 仅服务端 | +| `dns` | 自定义DNS服务器 | IP地址,逗号分隔 | `1.1.1.1,8.8.8.8` | 两者 | | `min` | 最小连接池容量 | 整数 > 0 | `64` | 仅客户端双端握手模式 | | `max` | 最大连接池容量 | 整数 > 0 | `1024` | 双端握手模式 | | `mode` | 运行模式控制 | `0`(自动), `1`(强制模式1), `2`(强制模式2) | `0` | 两者 | +| `quic` | QUIC协议支持 | `0`(禁用), `1`(启用) | `0` | 仅服务端 | +| `dial` | 出站源IP地址 | IP地址或 `auto` | `auto` | 两者 | | `read` | 读取超时时间 | 时间长度 (如 `10m`, `30s`, `1h`) | `0` | 两者 | | `rate` | 带宽速率限制 | 整数 (Mbps), 0=无限制 | `0` | 两者 | | `slot` | 连接槽位数 | 整数 (1-65536) | `65536` | 两者 | diff --git a/nodepass/docs/zh/configuration.md b/nodepass/docs/zh/configuration.md index 904ac6ff0c..237e2b7d18 100644 --- a/nodepass/docs/zh/configuration.md +++ b/nodepass/docs/zh/configuration.md @@ -107,6 +107,170 @@ nodepass "server://0.0.0.0:10101/0.0.0.0:8080?mode=1" nodepass "server://0.0.0.0:10101/remote.example.com:8080?mode=2" ``` +## DNS解析配置 + +NodePass支持自定义DNS服务器配置,具有智能缓存功能,可提高性能和可靠性。内置DNS解析器提供后台刷新、自动故障转移和可配置的TTL管理。 + +- `dns`:自定义DNS服务器地址(默认:1.1.1.1,8.8.8.8) + - 以逗号分隔的IP地址列表(IPv4或IPv6) + - 多个DNS服务器提供自动故障转移和轮询负载均衡 + - 列表中的无效IP地址会被记录并跳过 + - 如果所有提供的DNS服务器都失败,系统会回退到操作系统默认DNS解析 + - DNS解析使用专用端口(UDP端口53)进行所有查询 + - 适用于客户端和服务端模式,用于解析所有主机名 + +**DNS解析器特性:** +- **智能缓存**:已解析的主机名会使用可配置的TTL进行缓存,以减少DNS查询开销 +- **后台刷新**:缓存条目在过期前(TTL的80%时)会主动刷新,以防止查找延迟 +- **自动故障转移**:当DNS服务器失败时,自动尝试列表中的下一个服务器 +- **轮询分发**:DNS查询在配置的服务器之间分发以实现负载均衡 +- **IP地址绕过**:直接IP地址跳过DNS解析以获得最高效率 +- **协议感知**:根据连接要求自动选择IPv4或IPv6地址 + +示例: +```bash +# 使用Cloudflare和Google DNS服务器(默认行为) +nodepass "server://0.0.0.0:10101/example.com:8080?dns=1.1.1.1,8.8.8.8" + +# 使用自定义DNS服务器(例如企业DNS) +nodepass "server://0.0.0.0:10101/internal.example.com:8080?dns=10.0.0.53,10.0.1.53" + +# 带有特定DNS配置的客户端 +nodepass "client://server.example.com:10101/database.local:3306?dns=192.168.1.1,192.168.1.2" + +# IPv6 DNS服务器 +nodepass "server://0.0.0.0:10101/service.example.com:8080?dns=2606:4700:4700::1111,2001:4860:4860::8888" + +# 与其他参数组合 +nodepass "server://0.0.0.0:10101/backend.example.com:8080?dns=1.1.1.1,8.8.8.8&log=info&tls=1&mode=2" +``` + +**DNS配置使用场景:** +- **企业网络**:使用内部DNS服务器解析私有主机名 +- **地理优化**:选择地理位置接近部署的DNS服务器 +- **隐私增强**:使用注重隐私的DNS提供商(例如1.1.1.1、9.9.9.9) +- **可靠性**:配置多个DNS服务器以实现高可用性 +- **合规性**:满足DNS提供商选择的监管要求 +- **测试**:为开发或暂存环境使用特定DNS服务器 +- **性能**:使用更近或更快的DNS服务器减少DNS查找延迟 + +**DNS缓存行为:** +- 缓存TTL由`NP_DNS_CACHING_TTL`环境变量控制(默认:5分钟) +- 后台刷新在TTL的80%时发生,以在不延迟的情况下保持新鲜数据 +- 过期条目被删除,下次访问时执行新的查找 +- 缓存是每个实例的,不在NodePass进程之间共享 +- IP地址永远不会被缓存(直接使用,不需要DNS查找) + +**重要说明:** +- DNS服务器必须指定为IP地址,而不是主机名 +- 支持IPv4和IPv6 DNS服务器地址 +- DNS解析超时固定为每次查询5秒 +- 失败的DNS服务器在后续查询中会重试(没有永久黑名单) +- 使用目标地址组时,每个地址独立解析 +- DNS解析适用于隧道地址和目标地址 +- 隧道地址DNS解析在启动时发生一次 +- 目标地址DNS解析使用缓存进行重复连接 + +## 出站连接源IP控制 + +NodePass支持指定用于连接目标地址的出站本地IP地址。此功能对于具有多个网络接口且需要显式控制流量路由的系统很有用。 + +- `dial`:出站连接的源IP地址(默认:auto) + - 值为`auto`或省略:系统根据路由表自动选择源IP + - 有效IP地址:强制所有出站连接使用指定的本地IP地址 + - 适用于TCP和UDP到目标地址的连接 + - 适用于客户端和服务端模式 + - 如果指定地址失败,自动回退到系统选择的IP + - 无效的IP地址会触发错误日志并回退到自动模式 + +`dial`参数提供对NodePass用于出站连接的网络接口的精确控制,支持高级网络配置,例如: + +示例: +```bash +# 服务器为出站连接指定特定源IP +nodepass "server://0.0.0.0:10101/remote.example.com:8080?dial=10.1.0.100" + +# 客户端为目标连接指定特定源IP +nodepass "client://server.example.com:10101/127.0.0.1:8080?dial=192.168.1.50" + +# 与其他参数组合使用 +nodepass "server://0.0.0.0:10101/remote.example.com:8080?log=info&tls=1&dial=10.1.0.100&mode=2" +``` + +**源IP控制使用场景:** +- **多宿主系统**:控制用于出站流量的网络接口 +- **策略路由**:确保流量基于源IP使用特定路由 +- **网络分段**:通过特定VLAN或网络区域引导流量 +- **防火墙规则**:匹配按源IP过滤的特定防火墙规则 +- **负载分配**:在多个网络链路之间分配出站流量 +- **测试**:模拟来自特定网络位置或接口的流量 + +**自动回退行为:** +- 如果无法绑定指定的IP地址(例如,系统上不存在),NodePass会记录错误并自动回退到系统选择的IP +- 回退仅在每个实例中发生一次 - 回退后,所有后续连接都使用自动模式 +- 回退以ERROR级别记录以提高可见性:"dialWithRotation: fallback to system auto due to dialer failure" + +**重要说明:** +- 指定的IP必须存在于本地系统上并正确配置 +- 源IP仅适用于到目标地址的出站连接,不适用于隧道连接 +- 支持IPv4和IPv6地址(地址族必须与目标地址匹配) +- 绑定失败会触发自动回退以防止连接失败 +- 此参数不影响传入的隧道连接或服务器监听地址 + +## QUIC传输协议 + +NodePass支持QUIC作为双端握手模式下连接池的替代传输协议。QUIC提供基于UDP的多路复用流,具有内置加密和与传统TCP池相比更优的性能特征。 + +- `quic`: QUIC传输模式(默认:0) + - 值0:使用基于TCP的连接池(传统连接池库) + - 值1:使用基于QUIC的连接池(UDP多路复用流) + - 仅适用于双端握手模式(mode=2) + - 如果尚未配置TLS则自动启用(最低tls=1) + - 在单个UDP连接上使用QUIC流进行多路复用连接 + - 服务端配置在握手时自动下发给客户端 + +**QUIC优势:** +- **多路复用**:在单个UDP连接上实现多个流 +- **降低延迟**:通过0-RTT支持实现更快的连接建立 +- **更好的丢包恢复**:流级别的流量控制和拥塞管理 +- **NAT穿透**:基于UDP的协议在NAT和防火墙环境中表现更好 +- **内置加密**:所有QUIC连接强制使用TLS 1.3加密 + +**QUIC要求:** +- 仅需服务端配置`quic`参数 - 客户端自动接收配置 +- 必须启用TLS模式(tls=1或tls=2)- 如果quic=1会自动设置 +- 仅在双端握手模式下可用(mode=2或带远程地址的mode=0) +- 不适用于单端转发模式(mode=1) + +示例: +```bash +# 使用QUIC传输的服务器(自动启用TLS) +nodepass "server://0.0.0.0:10101/remote.example.com:8080?quic=1&mode=2" + +# 客户端自动采用服务器的QUIC传输配置 +nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2" + +# 使用自定义TLS证书的QUIC(仅服务端配置) +nodepass "server://0.0.0.0:10101/remote.example.com:8080?quic=1&tls=2&crt=/path/to/cert.pem&key=/path/to/key.pem" + +# 传统TCP连接池(默认行为) +nodepass "server://0.0.0.0:10101/remote.example.com:8080?quic=0&mode=2" +``` + +**QUIC使用场景:** +- **高延迟网络**:在卫星或长距离链路中减少连接开销 +- **移动网络**:更好地处理网络切换和丢包 +- **实时应用**:为游戏、VoIP或视频流降低延迟 +- **复杂NAT环境**:在复杂NAT场景中改善连接性 +- **并发流**:高效处理多个并行数据流 + +**重要说明:** +- QUIC模式要求服务端和客户端的UDP端口可访问 +- 防火墙规则必须允许隧道端口上的UDP流量 +- 某些网络中间设备可能会阻止或降低UDP流量的优先级 +- QUIC连接使用保活和自动重连机制 +- 流多路复用在所有并发连接之间共享带宽 + ## 连接池容量参数 连接池容量参数仅适用于双端握手模式,通过不同方式进行配置: @@ -118,11 +282,15 @@ nodepass "server://0.0.0.0:10101/remote.example.com:8080?mode=2" - 客户端设置的`max`参数会被服务端在握手时传递的值覆盖 - `min`参数由客户端完全控制,服务端不会修改此值 - 在客户端单端转发模式下,不使用连接池,这些参数被忽略 +- 适用于TCP连接池(quic=0)和QUIC连接池(quic=1) 示例: ```bash # 客户端设置最小连接池为32,最大连接池将由服务端决定 nodepass "client://server.example.com:10101/127.0.0.1:8080?min=32" + +# 使用QUIC和自定义池容量的客户端 +nodepass "client://server.example.com:10101/127.0.0.1:8080?quic=1&min=128" ``` ## 数据读取超时 @@ -395,23 +563,26 @@ nodepass "client://127.0.0.1:3306/db-primary.local:3306,db-secondary.local:3306? ## URL查询参数配置及作用范围 -NodePass支持通过URL查询参数进行灵活配置,不同参数在 server、client、master 模式下的适用性如下表: +NodePass支持通过URL查询参数进行灵活配置,不同参数在 server、client、master 模式下的适用性如下表: -| 参数 | 说明 | 默认值 | server | client | master | -|-----------|----------------------|-----------|:------:|:------:|:------:| -| `log` | 日志级别 | `info` | O | O | O | -| `tls` | TLS加密模式 | `0` | O | X | O | -| `crt` | 自定义证书路径 | N/A | O | X | O | -| `key` | 自定义密钥路径 | N/A | O | X | O | -| `min` | 最小连接池容量 | `64` | X | O | X | -| `max` | 最大连接池容量 | `1024` | O | X | X | -| `mode` | 运行模式控制 | `0` | O | O | X | -| `read` | 数据读取超时 | `0` | O | O | X | -| `rate` | 带宽速率限制 | `0` | O | O | X | -| `slot` | 最大连接数限制 | `65536` | O | O | X | -| `proxy` | PROXY协议支持 | `0` | O | O | X | -| `notcp` | TCP支持控制 | `0` | O | O | X | -| `noudp` | UDP支持控制 | `0` | O | O | X | +| 参数 | 说明 | 默认值 | server | client | master | +|-----------|----------------------|-------------------|:------:|:------:|:------:| +| `log` | 日志级别 | `info` | O | O | O | +| `tls` | TLS加密模式 | `0` | O | X | O | +| `crt` | 自定义证书路径 | N/A | O | X | O | +| `key` | 自定义密钥路径 | N/A | O | X | O | +| `dns` | 自定义DNS服务器 | `1.1.1.1,8.8.8.8` | O | O | X | +| `min` | 最小连接池容量 | `64` | X | O | X | +| `max` | 最大连接池容量 | `1024` | O | X | X | +| `mode` | 运行模式控制 | `0` | O | O | X | +| `quic` | QUIC协议支持 | `0` | O | X | X | +| `dial` | 出站源IP地址 | `auto` | O | O | X | +| `read` | 数据读取超时 | `0` | O | O | X | +| `rate` | 带宽速率限制 | `0` | O | O | X | +| `slot` | 最大连接数限制 | `65536` | O | O | X | +| `proxy` | PROXY协议支持 | `0` | O | O | X | +| `notcp` | TCP支持控制 | `0` | O | O | X | +| `noudp` | UDP支持控制 | `0` | O | O | X | - O:参数有效,推荐根据实际场景配置 - X:参数无效,忽略设置 @@ -421,6 +592,7 @@ NodePass支持通过URL查询参数进行灵活配置,不同参数在 server - client/server 双端握手模式建议根据流量和资源情况调整连接池容量(min/max),优化性能。 - 当自动检测不符合部署需求时或需要跨环境一致行为时,使用运行模式控制(mode)。 - 配置速率限制(rate)以控制带宽使用,防止共享环境中的网络拥塞。 +- 配置QUIC传输(quic)时仅需在服务端设置 - 客户端在握手时自动接收配置。 - 仅需要隧道传输UDP流量时设置`notcp=1`,以减少资源使用并简化配置。 - 仅需要隧道传输TCP流量时设置`noudp=1`,以减少资源使用并简化配置。 - 日志级别(log)可在所有模式下灵活调整,便于运维和排查。 @@ -433,7 +605,8 @@ NodePass支持通过URL查询参数进行灵活配置,不同参数在 server |----------|-------------|---------|---------| | `NP_SEMAPHORE_LIMIT` | 信号缓冲区大小 | 65536 | `export NP_SEMAPHORE_LIMIT=2048` | | `NP_TCP_DATA_BUF_SIZE` | TCP数据传输缓冲区大小 | 16384 | `export NP_TCP_DATA_BUF_SIZE=65536` | -| `NP_UDP_DATA_BUF_SIZE` | UDP数据包缓冲区大小 | 2048 | `export NP_UDP_DATA_BUF_SIZE=16384` | +| `NP_UDP_DATA_BUF_SIZE` | UDP数据包缓冲区大小 | 16384 | `export NP_UDP_DATA_BUF_SIZE=16384` | +| `NP_DNS_CACHING_TTL` | DNS缓存保质期 | 5m | `export NP_DNS_CACHING_TTL=10m` | | `NP_HANDSHAKE_TIMEOUT` | 握手操作超时 | 5s | `export NP_HANDSHAKE_TIMEOUT=30s` | | `NP_UDP_READ_TIMEOUT` | UDP读取操作超时 | 30s | `export NP_UDP_READ_TIMEOUT=60s` | | `NP_TCP_DIAL_TIMEOUT` | TCP连接建立超时 | 5s | `export NP_TCP_DIAL_TIMEOUT=60s` | @@ -479,13 +652,40 @@ NodePass支持通过URL查询参数进行灵活配置,不同参数在 server - 太大:内存使用增加 - 推荐范围:1000-5000 +### DNS解析调优 + +对于频繁进行主机名查找或动态DNS场景的应用: + +- `NP_DNS_CACHING_TTL`:DNS缓存保质期 + - 控制已解析DNS条目在缓存中保留的时长 + - 默认值(5m)在大多数场景下平衡了新鲜度和性能 + - 对于稳定的DNS环境,增加此值以减少查询开销(例如15m、30m、1h) + - 对于需要新鲜查找的动态DNS环境,减小此值(例如1m、2m) + - 后台刷新在TTL的80%时进行,确保平滑过渡而不会出现查找延迟 + +**DNS缓存最佳实践:** +- **静态基础设施**:对于稳定的生产环境使用较长TTL(15m-1h) +- **动态DNS**:对于频繁变化的主机名使用较短TTL(1m-5m) +- **开发环境**:对于快速迭代和测试使用较短TTL(1m-2m) +- **高流量服务**:在新鲜度和减少DNS服务器负载之间取得平衡 +- **地理分布**:设置TTL时考虑DNS传播延迟 + +DNS调优示例: +```bash +# 稳定生产环境的长TTL +export NP_DNS_CACHING_TTL=30m + +# 动态开发环境的短TTL +export NP_DNS_CACHING_TTL=2m +``` + ### UDP设置 对于严重依赖UDP流量的应用: - `NP_UDP_DATA_BUF_SIZE`:UDP数据包缓冲区大小 - 对于发送大UDP数据包的应用增加此值 - - 默认值(8192)适用于大多数情况 + - 默认值(16384)适用于大多数情况 - 考虑为媒体流或游戏服务器增加到16384或更高 - `NP_UDP_READ_TIMEOUT`:UDP读取操作超时 diff --git a/nodepass/docs/zh/examples.md b/nodepass/docs/zh/examples.md index 5abe97b5b6..aca204e026 100644 --- a/nodepass/docs/zh/examples.md +++ b/nodepass/docs/zh/examples.md @@ -212,32 +212,164 @@ nodepass client://mgmt.example.com:10101/127.0.0.1:80 - 允许嵌入式设备安全地暴露其本地Web界面 - 通过单一端点集中设备管理 -## 多环境开发 -### 示例13:开发环境访问 +## 多网卡系统与源IP控制 -通过隧道访问不同的开发环境: +### 示例13:指定网络接口选择 + +在多网卡系统上控制出站连接使用的网络接口: ```bash -# 生产API访问隧道 -nodepass client://tunnel.example.com:10101/127.0.0.1:3443 +# 服务器为出站连接使用特定源IP(适用于策略路由) +nodepass "server://0.0.0.0:10101/remote.backend.com:8080?dial=10.1.0.100&mode=2&tls=1" -# 开发环境 -nodepass server://tunnel.example.com:10101/127.0.0.1:3000 +# 客户端为目标连接使用特定源IP(适用于防火墙规则) +nodepass "client://server.example.com:10101/127.0.0.1:8080?dial=192.168.1.50&mode=2" +``` -# 测试环境 -nodepass "server://tunnel.example.com:10101/127.0.0.1:3001?log=warn&tls=1" +此配置: +- 强制出站连接使用特定的本地IP地址 +- 适用于具有多个网络接口的系统(例如,独立的公网/内网) +- 通过源IP启用基于策略的路由 +- 如果指定地址失败,自动回退到系统选择的IP +- 支持IPv4和IPv6地址 + +### 示例14:网络分段和VLAN路由 + +通过特定网络段或VLAN引导流量: + +```bash +# 服务器通过管理网络路由流量(10.0.0.0/8) +nodepass "server://0.0.0.0:10101/mgmt.backend.local:8080?dial=10.200.1.10&mode=2&log=info" + +# 服务器通过生产网络路由流量(172.16.0.0/12) +nodepass "server://0.0.0.0:10102/prod.backend.local:8080?dial=172.16.50.20&mode=2&log=info" + +# 客户端使用自动源IP选择(默认行为) +nodepass "client://server.example.com:10101/127.0.0.1:8080?dial=auto" ``` 此设置: -- 创建对多个环境(生产、开发、测试)的安全访问 -- 根据环境敏感性使用不同级别的日志记录 -- 使开发人员能够访问环境而无需直接网络暴露 -- 将远程服务映射到不同的本地端口,便于识别 +- 在网络层分离管理和生产流量 +- 确保流量基于源IP遵循指定的网络路径 +- 符合要求基于源的路由的网络安全策略 +- 自动回退防止配置错误导致的连接失败 +- `dial=auto`(默认)让系统选择合适的源IP + +**源IP控制使用场景**: +- **多网卡服务器**:具有不同网络的多个网卡的系统 +- **策略路由**:需要特定源IP的网络策略 +- **防火墙合规**:匹配按源地址过滤的防火墙规则 +- **负载分配**:在多个网络链路之间分配出站流量 +- **网络测试**:模拟来自特定网络位置的流量 + +## DNS配置用于自定义解析 + +### 示例15:企业DNS用于内部服务 + +使用企业DNS服务器解析内部主机名: + +```bash +# 服务端:使用企业DNS服务器解析内部服务 +nodepass "server://0.0.0.0:10101/internal-api.corp.local:8080?dns=10.0.0.53,10.0.1.53&mode=2&tls=1" + +# 客户端:使用相同的DNS服务器以保持一致的解析 +nodepass "client://tunnel.corp.local:10101/127.0.0.1:8080?dns=10.0.0.53,10.0.1.53" +``` + +此配置: +- 使用企业DNS服务器(10.0.0.53和10.0.1.53)而不是公共DNS +- 解析无法通过公共DNS访问的内部.corp.local域 +- 如果第一个DNS服务器失败,自动故障转移到第二个 +- DNS结果缓存5分钟(默认)以提高性能 +- 服务端和客户端使用一致的DNS配置 + +### 示例16:注重隐私的DNS提供商 + +使用增强隐私的DNS提供商以提高安全性: + +```bash +# 服务端:使用Cloudflare DNS(注重隐私) +nodepass "server://0.0.0.0:10101/api.example.com:443?dns=1.1.1.1,1.0.0.1&tls=1&log=info" + +# 客户端:使用Quad9 DNS(恶意软件拦截) +nodepass "client://server.example.com:10101/127.0.0.1:8080?dns=9.9.9.9,149.112.112.112" +``` + +此设置: +- 服务端使用Cloudflare DNS(1.1.1.1),以隐私保护著称 +- 客户端使用Quad9 DNS(9.9.9.9),内置恶意域名拦截 +- 多个DNS服务器提供冗余 +- 当解析器支持时,所有DNS查询通过DNS-over-TLS加密 + +### 示例17:地理DNS优化 + +选择地理位置接近部署的DNS服务器以降低延迟: + +```bash +# 亚太地区:使用Google DNS亚洲服务器 +nodepass "server://0.0.0.0:10101/service.example.com:8080?dns=8.8.8.8,8.8.4.4&mode=2" + +# 欧洲:使用Cloudflare DNS +nodepass "server://0.0.0.0:10101/service.example.com:8080?dns=1.1.1.1,1.0.0.1&mode=2" + +# 自定义区域:使用本地ISP DNS以获得最佳性能 +nodepass "server://0.0.0.0:10101/service.example.com:8080?dns=203.0.113.1,203.0.113.2&mode=2" +``` + +此配置: +- 通过使用地理位置接近的服务器减少DNS查找延迟 +- 改善初始连接建立时间 +- 适用于通过UDP端口53可访问的任何DNS服务器 + +### 示例18:IPv6 DNS配置 + +为启用IPv6的网络配置IPv6 DNS服务器: + +```bash +# 服务端:使用IPv6 DNS服务器(Cloudflare和Google) +nodepass "server://[::]:10101/ipv6.example.com:8080?dns=2606:4700:4700::1111,2001:4860:4860::8888&mode=2&tls=1" + +# 客户端:混合IPv4和IPv6 DNS服务器 +nodepass "client://server.example.com:10101/127.0.0.1:8080?dns=1.1.1.1,2606:4700:4700::1111" +``` + +此设置: +- 服务端使用[::]监听所有IPv6接口 +- 使用IPv6 DNS服务器进行原生IPv6解析 +- 混合IPv4/IPv6 DNS配置提供最大兼容性 +- 根据连接类型自动选择IPv4或IPv6地址 + +### 示例19:不同环境的DNS缓存调优 + +调整DNS缓存TTL以获得最佳性能: + +```bash +# 生产环境:稳定DNS,较长缓存TTL(30分钟) +export NP_DNS_CACHING_TTL=30m +nodepass "server://0.0.0.0:10101/stable.backend.com:8080?dns=1.1.1.1,8.8.8.8&tls=1" + +# 开发环境:动态DNS,较短缓存TTL(1分钟) +export NP_DNS_CACHING_TTL=1m +nodepass "server://0.0.0.0:10101/dev.backend.local:8080?dns=10.0.0.53&tls=0&log=debug" +``` + +此配置: +- **生产环境(30m TTL)**:为稳定环境最大化缓存效率 +- **开发环境(1m TTL)**:为快速变化的配置提供快速DNS更新 +- 在TTL的80%时进行后台刷新确保平滑过渡 + +**DNS配置使用场景**: +- **企业网络**:通过企业DNS基础设施解析内部主机名 +- **隐私增强**:使用注重隐私的DNS提供商(1.1.1.1、9.9.9.9) +- **地理优化**:使用区域接近的DNS服务器减少延迟 +- **开发/测试**:在动态环境中使用短TTL快速更新DNS +- **高可用性**:多个DNS服务器提供冗余和故障转移 +- **合规性**:满足DNS提供商选择的监管要求 ## 高可用性与负载均衡 -### 示例14:多后端服务器负载均衡 +### 示例20:多后端服务器负载均衡 使用目标地址组实现流量均衡分配和自动故障转移: @@ -255,7 +387,7 @@ nodepass "client://server.example.com:10101/127.0.0.1:8080?log=info" - 故障服务器恢复后自动重新接入流量 - 使用TLS加密确保隧道安全 -### 示例15:数据库主从切换 +### 示例21:数据库主从切换 为数据库配置主从实例,实现高可用访问: @@ -270,7 +402,7 @@ nodepass "client://127.0.0.1:3306/db-primary.local:3306,db-secondary.local:3306? - 应用程序无需修改,透明地实现故障转移 - 仅记录警告和错误,减少日志输出 -### 示例16:API网关后端池 +### 示例22:API网关后端池 为API网关配置多个后端服务实例: @@ -288,7 +420,7 @@ nodepass "client://apigateway.example.com:10101/127.0.0.1:8080?rate=100&slot=200 - 客户端限制带宽100 Mbps,最大2000并发连接 - 单个实例故障不影响整体服务可用性 -### 示例17:地域分布式服务 +### 示例23:地域分布式服务 配置多地域服务节点,优化网络延迟: @@ -312,7 +444,7 @@ nodepass "server://0.0.0.0:10101/us-west.service:8080,us-east.service:8080,eu-ce ## PROXY协议集成 -### 示例18:负载均衡器与PROXY协议集成 +### 示例24:负载均衡器与PROXY协议集成 启用PROXY协议支持,与负载均衡器和反向代理集成: @@ -331,7 +463,7 @@ nodepass "client://tunnel.example.com:10101/127.0.0.1:3000?log=info&proxy=1" - 兼容HAProxy、Nginx和其他支持PROXY协议的服务 - 有助于维护准确的访问日志和基于IP的访问控制 -### 示例19:Web应用的反向代理支持 +### 示例25:Web应用的反向代理支持 使NodePass后的Web应用能够接收原始客户端信息: @@ -355,7 +487,7 @@ nodepass "server://0.0.0.0:10101/127.0.0.1:8080?log=warn&tls=2&crt=/path/to/cert - 支持连接审计的合规性要求 - 适用于支持PROXY协议的Web服务器(Nginx、HAProxy等) -### 示例20:数据库访问与客户端IP保留 +### 示例26:数据库访问与客户端IP保留 为数据库访问日志记录和安全维护客户端IP信息: @@ -382,7 +514,7 @@ nodepass "client://dbproxy.example.com:10101/127.0.0.1:5432?proxy=1" ## 容器部署 -### 示例21:容器化NodePass +### 示例27:容器化NodePass 在Docker环境中部署NodePass: @@ -417,7 +549,7 @@ docker run -d --name nodepass-client \ ## 主控API管理 -### 示例22:集中化管理 +### 示例28:集中化管理 为多个NodePass实例设置中央控制器: @@ -454,7 +586,7 @@ curl -X PUT http://localhost:9090/api/v1/instances/{id} \ - 提供用于自动化和集成的RESTful API - 包含内置的Swagger UI,位于http://localhost:9090/api/v1/docs -### 示例23:自定义API前缀 +### 示例29:自定义API前缀 为主控模式使用自定义API前缀: @@ -473,7 +605,7 @@ curl -X POST http://localhost:9090/admin/v1/instances \ - 用于安全或组织目的的自定义URL路径 - 在http://localhost:9090/admin/v1/docs访问Swagger UI -### 示例24:实时连接和流量监控 +### 示例30:实时连接和流量监控 通过主控API监控实例的连接数和流量统计: @@ -511,6 +643,120 @@ curl -H "X-API-Key: your-api-key" \ - **容量规划**:基于历史连接数据进行资源规划 - **故障诊断**:异常的连接数变化可能指示网络问题 +## QUIC传输协议 + +### 示例31: 基于QUIC的流多路复用隧道 + +使用QUIC协议进行连接池管理,在高延迟网络中提供更优性能: + +```bash +# 服务器端:启用QUIC传输 +nodepass "server://0.0.0.0:10101/remote.example.com:8080?quic=1&mode=2&tls=1&log=debug" + +# 客户端:自动从服务器接收QUIC配置 +nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2&min=128&log=debug" +``` + +此配置: +- 使用QUIC协议进行基于UDP的多路复用流 +- 单个QUIC连接承载多个并发数据流 +- 强制使用TLS 1.3加密(自动启用) +- 在丢包场景中性能更好(无队头阻塞) +- 通过0-RTT支持改善连接建立 +- 客户端在握手时自动接收服务器的QUIC配置 + +### 示例32: 使用自定义TLS证书的QUIC + +在生产环境部署带有验证证书的QUIC隧道: + +```bash +# 服务器端:使用自定义证书的QUIC +nodepass "server://0.0.0.0:10101/backend.internal:8080?quic=1&mode=2&tls=2&crt=/etc/nodepass/cert.pem&key=/etc/nodepass/key.pem" + +# 客户端:自动接收QUIC配置并进行证书验证 +nodepass "client://tunnel.example.com:10101/127.0.0.1:8080?mode=2&min=64&log=info" +``` + +此设置: +- 使用验证证书实现最高安全性 +- QUIC协议提供强制TLS 1.3加密 +- 适用于生产环境 +- 客户端进行完整证书验证 +- QUIC配置自动从服务器下发 + +### 示例33: 移动/高延迟网络的QUIC + +针对移动网络或卫星连接进行优化: + +```bash +# 服务器端:带自适应池大小的QUIC +nodepass "server://0.0.0.0:10101/api.backend:443?quic=1&mode=2&max=512&tls=1&log=info" + +# 客户端:自动接收QUIC,配置较大最小连接池用于移动网络 +nodepass "client://mobile.tunnel.com:10101/127.0.0.1:8080?mode=2&min=256&log=warn" +``` + +此配置: +- QUIC的基于UDP传输在NAT环境中表现更好 +- 更大的连接池大小补偿网络切换 +- 流多路复用减少连接开销 +- 更好地处理丢包和抖动 +- 0-RTT重连在网络变化后实现更快恢复 +- 客户端自动采用服务器的QUIC配置 + +### 示例34: QUIC与TCP连接池性能对比 + +QUIC和TCP连接池的并排比较: + +```bash +# 传统TCP连接池(默认) +nodepass "server://0.0.0.0:10101/backend.example.com:8080?quic=0&mode=2&tls=1&log=event" +nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2&min=128&log=event" + +# QUIC连接池(现代方法) +nodepass "server://0.0.0.0:10102/backend.example.com:8080?quic=1&mode=2&tls=1&log=event" +nodepass "client://server.example.com:10102/127.0.0.1:8081?mode=2&min=128&log=event" +``` + +**TCP连接池优势**: +- 与网络基础设施更广泛兼容 +- 已建立的协议,行为可预测 +- 在某些企业环境中支持更好 + +**QUIC连接池优势**: +- 通过0-RTT连接恢复降低延迟 +- 跨流无队头阻塞 +- 更好的拥塞控制和丢失恢复 +- 改善NAT穿透能力 +- 单个UDP套接字减少资源使用 + +### 示例35: 实时应用的QUIC + +为游戏、VoIP或视频流配置QUIC隧道: + +```bash +# 服务器端:为实时流量优化的QUIC设置 +nodepass "server://0.0.0.0:10101/gameserver.local:7777?quic=1&mode=2&tls=1&read=30s&slot=10000" + +# 客户端:自动从服务器接收QUIC配置 +nodepass "client://game.tunnel.com:10101/127.0.0.1:7777?mode=2&min=64&read=30s" +``` + +此设置: +- QUIC的流级别流量控制防止流之间的干扰 +- 在有损网络中比TCP连接池延迟更低 +- 30秒读取超时快速检测陈旧连接 +- 大槽位限制支持许多并发玩家/流 +- 减少连接建立开销 +- 客户端自动采用服务器的QUIC配置 + +**QUIC使用场景总结**: +- **移动网络**:更好地处理网络切换和丢包 +- **高延迟链路**:通过0-RTT和多路复用减少开销 +- **实时应用**:流独立性防止队头阻塞 +- **复杂NAT环境**:基于UDP的协议更可靠地穿透NAT +- **并发流**:在并行流之间高效共享带宽 + ## 下一步 现在您已经了解了各种使用示例,您可能想要: diff --git a/nodepass/docs/zh/how-it-works.md b/nodepass/docs/zh/how-it-works.md index aa2db2fc32..22a4311666 100644 --- a/nodepass/docs/zh/how-it-works.md +++ b/nodepass/docs/zh/how-it-works.md @@ -47,6 +47,11 @@ NodePass 创建了一个具有独立控制和数据通道的网络架构: - **TCP**:具有持久连接的全双工流式传输,在客户端单端转发模式下优化了直接连接建立 - **UDP**:具有可配置缓冲区大小和超时的数据报转发 +6. **智能DNS解析**: + - 智能缓存与后台刷新,提供最优性能 + - 自定义DNS服务器与自动故障转移 + - 原生支持IPv4/IPv6现代网络 + ## 数据传输流 NodePass 通过其隧道架构建立双向数据流,支持 TCP 和 UDP 协议。系统支持三种数据流模式: @@ -210,30 +215,106 @@ NodePass 通过 TCP 隧道使用复杂的基于 URL 的信号协议: ## 连接池架构 -NodePass 实现了一个高效的连接池系统来管理网络连接,这是其性能优势的核心设计: +NodePass 实现了一个高效的连接池系统来管理网络连接,这是其性能优势的核心设计。NodePass支持两种连接池传输协议:传统的基于TCP的连接池和现代的基于QUIC的UDP连接池。 + +### 传输协议选择 + +NodePass通过`quic`参数提供两种连接池传输选项: + +1. **基于TCP的连接池 (quic=0, 默认)**: + - 由`pool`库管理的传统TCP连接 + - 客户端和服务器之间的多个独立TCP连接 + - 在单独的TCP连接上进行标准TLS加密 + - 经过充分测试且广泛兼容的方法 + +2. **基于QUIC的连接池 (quic=1)**: + - 由`quic`库管理的基于UDP的多路复用流 + - 单个QUIC连接承载多个并发流 + - 强制使用TLS 1.3加密并支持0-RTT + - 在高延迟和移动网络中性能优越 + +### QUIC连接池架构 + +当启用`quic=1`时,NodePass使用QUIC协议进行连接池管理,具有以下特性: + +**流多路复用**: +- 单个UDP连接承载多个双向流 +- 每个流代表一个独立的隧道连接 +- 流是独立的:一个流的丢包不影响其他流 +- 流级别的流量控制防止队头阻塞 + +**连接建立**: +- 服务器监听UDP端口并接受QUIC连接 +- 客户端与服务器建立单个QUIC连接 +- 服务器为每个传入连接生成唯一的流ID +- 客户端使用提供的流ID按需打开新流 + +**流生命周期**: +1. **流创建**(服务器端): + - 服务器接受来自授权客户端的新QUIC连接 + - 对于每个目标连接,服务器打开双向流 + - 服务器生成4字节随机流ID + - 流ID发送给客户端用于关联 + +2. **流检索**(客户端): + - 客户端通过控制通道信号接收流ID + - 客户端从QUIC连接中检索相应的流 + - 流被包装为`net.Conn`以保持兼容性 + - 流用于与目标端点进行数据交换 + +3. **流终止**: + - 数据交换完成后关闭流 + - 优雅关闭并正确清理 + - QUIC连接保持活跃以供未来的流使用 + +**动态管理**: +- 基于流创建成功率调整连接池容量 +- 流创建间隔根据连接池利用率自适应 +- 在最小/最大边界内自动流容量扩缩 +- 保活机制维护QUIC连接健康 + +**安全特性**: +- 所有QUIC连接强制使用TLS 1.3加密 +- 支持三种TLS模式: + - 模式0/1:InsecureSkipVerify用于测试/开发 + - 模式2:生产环境完整证书验证 +- 服务器端可用客户端IP限制 +- ALPN协议协商("np-quic") + +**性能优势**: +- 减少连接开销:所有流使用单个UDP套接字 +- 0-RTT连接恢复实现更快重连 +- 具有流级别优先级的更好拥塞控制 +- 与多个TCP连接相比改善NAT穿透 +- 在丢包场景中降低延迟(无队头阻塞) ### 设计哲学 连接池的设计遵循"预热优于冷启动"的原则,通过预先建立连接消除网络延迟。这种设计理念借鉴了现代高性能服务器的最佳实践,将连接建立的成本分摊到系统启动阶段,而非在关键路径上承担这一开销。 +TCP和QUIC连接池共享这一理念,但实现方式不同: +- **TCP连接池**:预先建立多个TCP连接 +- **QUIC连接池**:在单个QUIC连接上预先创建多个流 + ### 池设计 1. **池类型**: - - **客户端池**:预先建立到远程端点的连接,采用主动式连接管理 - - **服务器池**:管理来自客户端的传入连接,采用被动式连接接收 + - **客户端池**:预先建立到远程端点的连接/流,采用主动式连接管理 + - **服务器池**:管理来自客户端的传入连接/流,采用被动式连接接收 2. **池组件**: - - **连接存储**:线程安全的连接 ID 到 net.Conn 对象的映射,支持高并发访问 - - **ID 通道**:用于可用连接 ID 的缓冲通道,实现无锁的快速分配 + - **连接/流存储**:线程安全的连接ID到net.Conn对象的映射,支持高并发访问 + - **ID通道**:用于可用连接ID的缓冲通道,实现无锁的快速分配 - **容量管理**:基于使用模式的动态调整,实现智能扩缩容 - 最小容量由客户端设置,确保客户端具备基础连接保障 - 最大容量由服务端在握手时统一下发,实现全局资源协调 - - **间隔控制**:连接创建之间的基于时间的限流,防止网络资源过载 - - **连接工厂**:可定制的连接创建函数,支持不同的TLS模式和网络配置 + - **间隔控制**:连接/流创建之间的基于时间的限流,防止网络资源过载 + - **连接工厂**:可定制的连接创建函数(TCP)或流管理(QUIC) ### 先进性设计 1. **零延迟连接**: - 预建立的连接池消除了TCP三次握手的延迟 - TLS握手在连接池初始化时完成,避免运行时加密协商开销 - 连接预热策略确保池中始终有可用的热连接 + - **QUIC增强**:0-RTT支持进一步降低重连延迟 2. **智能负载感知**: - 基于实时连接使用率的动态池管理 @@ -242,12 +323,14 @@ NodePass 实现了一个高效的连接池系统来管理网络连接,这是 ### 连接生命周期 1. **连接创建**: - - 连接创建数量不超过配置的容量,确保资源可控性 - - 每个连接都分配一个唯一 ID,支持精确的连接跟踪和管理 - - ID 和连接存储在池中,采用写时复制和延迟删除策略 + - 连接/流创建数量不超过配置的容量,确保资源可控性 + - 每个连接都分配一个唯一ID,支持精确的连接跟踪和管理 + - ID和连接存储在池中,采用写时复制和延迟删除策略 + - **TCP模式**:创建带有可选TLS的独立TCP连接 + - **QUIC模式**:在共享QUIC连接上打开双向流 2. **连接获取**: - - 客户端使用连接 ID 检索连接,支持精确匹配和快速查找 + - 客户端使用连接ID检索连接,支持精确匹配和快速查找 - 服务端从池中检索下一个可用连接,采用轮询或最少使用策略 - 在返回前验证连接有效性,包括网络状态和TLS会话检查 diff --git a/nodepass/docs/zh/installation.md b/nodepass/docs/zh/installation.md index d68f1f1cbe..fcdfd66744 100644 --- a/nodepass/docs/zh/installation.md +++ b/nodepass/docs/zh/installation.md @@ -108,4 +108,4 @@ nodepass - 检查是否具有安装软件的正确权限 - 对于Go相关问题,使用`go version`验证您的Go安装 - 对于容器相关问题,确保Docker正确安装并运行 -- 查看我们的[故障排除指南](/docs/zh/troubleshooting.md)获取更多帮助 +- 查看我们的[故障排除指南](/docs/zh/troubleshooting.md)获取更多帮助 \ No newline at end of file diff --git a/nodepass/docs/zh/troubleshooting.md b/nodepass/docs/zh/troubleshooting.md index 0c698fde13..0933861ed0 100644 --- a/nodepass/docs/zh/troubleshooting.md +++ b/nodepass/docs/zh/troubleshooting.md @@ -237,6 +237,54 @@ - 一些应用有内置UDP会话超时 - 可能需要调整应用特定的keepalive设置 +## DNS问题 + +### DNS解析失败 + +**症状**:连接失败,显示"no such host"或DNS查找错误。 + +**解决方案**: + +1. **验证DNS配置** + - 测试DNS服务器可达性:`ping 1.1.1.1` + - 验证解析功能:`nslookup example.com 8.8.8.8` + - 确保`dns`参数包含有效IP地址 + +2. **网络连接问题** + - 检查防火墙是否阻止UDP端口53 + - 尝试备用DNS:`dns=8.8.8.8,1.1.1.1`或`dns=223.5.5.5,119.29.29.29` + - 企业网络使用内部DNS:`dns=10.0.0.1,8.8.8.8` + +### DNS缓存问题 + +**症状**:解析返回过期IP,连接到错误端点。 + +**解决方案**: + +1. **调整缓存TTL**(默认5分钟) + - 动态环境:`export NP_DNS_CACHING_TTL=1m` + - 稳定环境:`export NP_DNS_CACHING_TTL=30m` + - 重要变更后重启NodePass + +2. **负载均衡场景** + - 使用较短TTL:`export NP_DNS_CACHING_TTL=30s` + - 或直接使用IP地址避免DNS缓存 + +### DNS性能优化 + +**症状**:连接延迟高,启动缓慢。 + +**解决方案**: + +1. **选择合适的DNS服务器** + - 中国:`dns=223.5.5.5,119.29.29.29` + - 国际:`dns=1.1.1.1,8.8.8.8` + - 使用至少2个DNS服务器实现冗余 + +2. **减少DNS查询** + - 性能关键场景直接使用IP地址 + - 稳定环境增加TTL:`export NP_DNS_CACHING_TTL=1h` + ## 主控API问题 ### API可访问性问题 @@ -322,6 +370,118 @@ - 在生产环境中,建议将 `nodepass.gob` 定期备份到不同的存储位置 - 使用配置管理工具保存实例配置的文本形式备份 +## QUIC特定问题 + +### QUIC连接失败 + +**症状**:启用`quic=1`时QUIC隧道无法建立。 + +**可能的原因和解决方案**: + +1. **UDP端口被阻止** + - 验证服务器和客户端的UDP端口可访问 + - 检查防火墙规则:`sudo ufw allow 10101/udp`(Linux示例) + - 使用`nc -u server.example.com 10101`测试UDP连接性 + - 某些ISP或网络会阻止或限制UDP流量 + +2. **TLS配置问题** + - QUIC需要启用TLS(至少`tls=1`) + - 如果设置了`quic=1`但禁用TLS,系统会自动启用`tls=1` + - 生产环境使用`tls=2`和有效证书 + - 检查QUIC连接的证书有效性 + +3. **客户端-服务器QUIC不匹配** + - 服务器和客户端必须使用相同的`quic`设置 + - 带`quic=1`的服务器需要带`quic=1`的客户端 + - 带`quic=0`的服务器需要带`quic=0`的客户端 + - 检查日志中的"QUIC connection not available"错误 + +4. **模式兼容性** + - QUIC仅在双端握手模式(mode=2)下工作 + - 单端转发模式(mode=1)不可用 + - 如果模式不兼容,系统将回退到TCP连接池 + +### QUIC性能问题 + +**症状**:QUIC隧道性能低于预期或不如TCP连接池。 + +**可能的原因和解决方案**: + +1. **网络路径问题** + - 某些网络会降低UDP流量的优先级或进行流量整形 + - 检查网络中间设备是否干扰QUIC + - 考虑使用TCP连接池(`quic=0`)进行对比测试 + - 监控丢包率 - QUIC在低丢包率下性能更好 + +2. **连接池容量配置** + - 增加`min`和`max`参数以获得更高吞吐量 + - QUIC流共享单个UDP连接 - 需要足够容量 + - 使用`log=debug`监控流利用率 + - 在流数量和资源使用之间取得平衡 + +3. **证书开销** + - TLS 1.3握手(QUIC强制要求)可能增加初始延迟 + - 使用0-RTT恢复实现更快重连 + - 确保正确的证书链以避免验证延迟 + +4. **应用兼容性** + - 某些应用程序在QUIC流上可能无法达到最佳性能 + - 使用TCP和QUIC连接池进行对比测试 + - 对于需要严格顺序的应用考虑使用TCP连接池 + +### QUIC流耗尽 + +**症状**:使用QUIC时出现"流不足"错误或连接超时。 + +**可能的原因和解决方案**: + +1. **连接池容量过低** + - 增加服务器端的`max`参数 + - 增加客户端的`min`参数 + - 在日志中监控活动流数量 + - 默认容量对于高并发场景可能不足 + +2. **流泄漏** + - 检查应用是否正确关闭连接 + - 监控流数量随时间的逐渐增长 + - 重启实例以清除泄漏的流 + - 检查应用代码的连接处理 + +3. **QUIC连接断开** + - 检查保活设置(通过`NP_REPORT_INTERVAL`配置) + - 监控"QUIC connection not available"错误 + - NAT超时可能断开UDP连接 - 调整NAT设置 + - 如果网络延迟高,增加连接超时 + +### QUIC与TCP连接池选择 + +**何时使用QUIC**(`quic=1`): +- 移动网络或频繁变化的网络条件 +- 高延迟连接(卫星、长距离) +- NAT密集环境,UDP穿透性能更好 +- 受益于流独立性的实时应用 +- 0-RTT重连提供价值的场景 + +**何时使用TCP连接池**(`quic=0`): +- 阻止或严重限制UDP流量的网络 +- 需要严格TCP语义的应用 +- 具有UDP限制的企业环境 +- 最大兼容性要求 +- 测试显示TCP性能更好时 + +**对比测试**: +```bash +# 测试TCP连接池性能 +nodepass "server://0.0.0.0:10101/backend:8080?quic=0&mode=2&log=event" +nodepass "client://server:10101/127.0.0.1:8080?quic=0&mode=2&log=event" + +# 测试QUIC连接池性能 +nodepass "server://0.0.0.0:10102/backend:8080?quic=1&mode=2&log=event" +nodepass "client://server:10102/127.0.0.1:8081?quic=1&mode=2&log=event" +``` + +监控流量统计并根据观察到的性能进行选择。 + ## 下一步 如果您遇到本指南未涵盖的问题: diff --git a/nodepass/docs/zh/usage.md b/nodepass/docs/zh/usage.md index 35166acd09..0fdf11604d 100644 --- a/nodepass/docs/zh/usage.md +++ b/nodepass/docs/zh/usage.md @@ -7,30 +7,41 @@ NodePass创建一个带有未加密TCP控制通道的隧道,并为数据交换 NodePass命令的一般语法是: ```bash -nodepass ":///?log=&tls=&crt=&key=&min=&max=&mode=&read=&rate=&proxy=" +nodepass ":///?log=&tls=&crt=&key=&dns=&min=&max=&mode=&quic=&dial=&read=&rate=&slot=&proxy=¬cp=<0|1>&noudp=<0|1>" ``` 其中: -- ``:指定操作模式(`server`、`client`或`master`) -- ``:控制通道通信的隧道端点地址 -- ``:业务数据的目标地址,支持双向模式(或在master模式下的API前缀) +- ``:指定运行模式(`server`、`client` 或 `master`) +- ``:用于控制通道通信的隧道端点地址 +- ``:支持双向流的业务数据目标地址(或主控模式下的API前缀) -### 查询参数说明 +### 查询参数 通用查询参数: -- `log=`:日志详细级别(`none`、`debug`、`info`、`warn`、`error`或`event`) +- `log=`:日志详细级别(`none`、`debug`、`info`、`warn`、`error` 或 `event`) +- `dns=`:自定义DNS服务器(逗号分隔的IP地址,默认:`1.1.1.1,8.8.8.8`) - `min=`:最小连接池容量(默认:64,由客户端设置) -- `max=`:最大连接池容量(默认:1024,服务端设置并传递给客户端) -- `mode=`:运行模式控制(`0`、`1`或`2`)- 控制操作行为 -- `read=`:数据读取超时时间(默认:0,支持时间单位如30s、5m、1h等) +- `max=`:最大连接池容量(默认:1024,由服务端设置并下发给客户端) +- `mode=`:运行模式控制(`0`、`1` 或 `2`)- 控制操作行为 +- `quic=`:QUIC传输模式(`0`为TCP连接池,`1`为QUIC UDP连接池,默认:0,仅服务端配置) +- `dial=`:出站连接的源IP地址(默认:`auto`,支持IPv4和IPv6) +- `read=`:数据读取超时时长(默认:0,支持时间单位如30s、5m、1h等) - `rate=`:带宽速率限制,单位Mbps(默认:0表示无限制) +- `slot=`:最大并发连接数限制(默认:65536,0表示无限制) - `proxy=`:PROXY协议支持(默认:`0`,`1`启用PROXY协议v1头部传输) +- `notcp=<0|1>`:TCP支持控制(默认:`0`启用,`1`禁用) +- `noudp=<0|1>`:UDP支持控制(默认:`0`启用,`1`禁用) TLS相关参数(仅适用于server/master模式): -- `tls=`:数据通道的TLS安全级别(`0`、`1`或`2`) +- `tls=`:数据通道的TLS安全级别(`0`、`1` 或 `2`) - `crt=`:证书文件路径(当`tls=2`时) - `key=`:私钥文件路径(当`tls=2`时) +QUIC传输协议(仅服务端模式): +- `quic=`:QUIC传输模式(`0`为TCP连接池,`1`为QUIC UDP连接池,默认:0) + - 服务端配置在握手时自动下发给客户端 + - 客户端无需指定quic参数 + ## 运行模式 NodePass提供三种互补的运行模式,以适应各种部署场景。 @@ -40,7 +51,7 @@ NodePass提供三种互补的运行模式,以适应各种部署场景。 服务端模式建立隧道控制通道,并支持双向数据流转发。 ```bash -nodepass "server:///?log=&tls=&crt=&key=&max=&mode=&read=&rate=&proxy=" +nodepass "server:///?log=&tls=&crt=&key=&dns=&quic=&max=&mode=&dial=&read=&rate=&slot=&proxy=¬cp=<0|1>&noudp=<0|1>" ``` #### 参数 @@ -48,6 +59,11 @@ nodepass "server:///?log=&tls=&crt=/?log=&tls=&crt=/?log=&min=&mode=&read=&rate=&proxy=" +nodepass "client:///?log=&dns=&quic=&min=&mode=&dial=&read=&rate=&slot=&proxy=¬cp=<0|1>&noudp=<0|1>" ``` #### 参数 @@ -109,14 +135,21 @@ nodepass "client:///?log=&min=&mode=< - `tunnel_addr`:要连接的NodePass服务端隧道端点地址(例如, 10.1.0.1:10101) - `target_addr`:业务数据的目标地址,支持双向数据流模式(例如, 127.0.0.1:8080) - `log`:日志级别(debug, info, warn, error, event) +- `dns`:自定义DNS服务器(逗号分隔的IP地址,默认:1.1.1.1,8.8.8.8) - `min`:最小连接池容量(默认:64) - `mode`:客户端行为的运行模式控制 - `0`:自动检测(默认)- 首先尝试本地绑定,如果失败则回退到握手模式 - `1`:强制单端转发模式 - 带连接池的本地代理 - `2`:强制双端握手模式 - 需要服务器协调 +- `dial`:连接目标的出站源IP地址(默认:`auto`为系统选择的IP) - `read`:数据读取超时时间(默认:0,支持时间单位如30s、5m、1h等) - `rate`:带宽速率限制,单位Mbps(默认:0表示无限制) +- `slot`:最大并发连接数限制(默认:65536,0表示无限制) - `proxy`:PROXY协议支持(默认:`0`,`1`在数据传输前启用PROXY协议v1头部) +- `notcp`:TCP支持控制(默认:`0`启用,`1`禁用) +- `noudp`:UDP支持控制(默认:`0`启用,`1`禁用) + +**注意**:QUIC传输配置在握手时自动从服务器接收。客户端无需指定`quic`参数。 #### 客户端模式工作原理 @@ -166,6 +199,12 @@ nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2&min=16&log=inf # 资源受限配置 - 小型连接池 nodepass "client://server.example.com:10101/127.0.0.1:8080?min=16&log=info" + +# 客户端自动从服务器接收QUIC配置(无需quic参数) +nodepass "client://server.example.com:10101/127.0.0.1:8080?mode=2&min=128&log=debug" + +# 实时应用客户端(从服务器获取QUIC配置) +nodepass "client://server.example.com:10101/127.0.0.1:7777?mode=2&min=64&read=30s" ``` ### 主控模式 (API) diff --git a/nodepass/go.mod b/nodepass/go.mod index e40a6acfe3..f944dc6566 100644 --- a/nodepass/go.mod +++ b/nodepass/go.mod @@ -6,5 +6,14 @@ require ( github.com/NodePassProject/cert v1.0.1 github.com/NodePassProject/conn v1.0.16 github.com/NodePassProject/logs v1.0.3 + github.com/NodePassProject/name v1.0.0 github.com/NodePassProject/pool v1.0.49 + github.com/NodePassProject/quic v1.0.6 +) + +require ( + github.com/quic-go/quic-go v0.56.0 // indirect + golang.org/x/crypto v0.45.0 // indirect + golang.org/x/net v0.47.0 // indirect + golang.org/x/sys v0.38.0 // indirect ) diff --git a/nodepass/go.sum b/nodepass/go.sum index bf2696b3f1..408f67f2ae 100644 --- a/nodepass/go.sum +++ b/nodepass/go.sum @@ -4,5 +4,29 @@ github.com/NodePassProject/conn v1.0.16 h1:ojHfyBveZMcyOikdUs1SOW4yKp92NOBnNhfNe github.com/NodePassProject/conn v1.0.16/go.mod h1:xfQ7ZLUxrtdLsljGHYYCToW+Hdg6DAbmL1Cs94n5h6E= github.com/NodePassProject/logs v1.0.3 h1:CDUZVQ477vmmFQHazrQCWM0gJPNINm0C2N3FzC4jVyw= github.com/NodePassProject/logs v1.0.3/go.mod h1:TwtPXOzLtb8iH+fdduQjEEywICXivsM39cy9AinMSks= +github.com/NodePassProject/name v1.0.0 h1:PBHKMLVzNEDSh6ldlhvdh2ZKj0L22mEoPDGX09zTuv0= +github.com/NodePassProject/name v1.0.0/go.mod h1:tKCe5F/irxW6NpdHK3kpKSJGhAdu5EB1ed1bIdS3u3A= github.com/NodePassProject/pool v1.0.49 h1:gktVmE+GsQ0/C0MF8qgRraR7eS3na4k0QrQfR6o4fkM= github.com/NodePassProject/pool v1.0.49/go.mod h1:joQFk1oocg56QpJ1QK/2g5Jv/AyqYUQgPXMG1gWe8iA= +github.com/NodePassProject/quic v1.0.6 h1:LzfWsflDbEel8UfVOg5RT9qzp+msqtk/SdujBOS2PQE= +github.com/NodePassProject/quic v1.0.6/go.mod h1:EJgX8fdugc7w3ISbJ0abIuy1mFMr3uO4XSxci6QB8jg= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/quic-go/quic-go v0.56.0 h1:q/TW+OLismmXAehgFLczhCDTYB3bFmua4D9lsNBWxvY= +github.com/quic-go/quic-go v0.56.0/go.mod h1:9gx5KsFQtw2oZ6GZTyh+7YEvOxWCL9WZAepnHxgAo6c= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +go.uber.org/mock v0.5.2 h1:LbtPTcP8A5k9WPXj54PPPbjcI4Y6lhyOZXn+VS7wNko= +go.uber.org/mock v0.5.2/go.mod h1:wLlUxC2vVTPTaE3UD51E0BGOAElKrILxhVSDYQLld5o= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/nodepass/internal/client.go b/nodepass/internal/client.go index 12ccee61e8..5789f8545f 100644 --- a/nodepass/internal/client.go +++ b/nodepass/internal/client.go @@ -19,6 +19,7 @@ import ( "github.com/NodePassProject/conn" "github.com/NodePassProject/logs" "github.com/NodePassProject/pool" + "github.com/NodePassProject/quic" ) // Client 实现客户端模式功能 @@ -61,9 +62,10 @@ func NewClient(parsedURL *url.URL, logger *logs.Logger) (*Client, error) { // Run 管理客户端生命周期 func (c *Client) Run() { logInfo := func(prefix string) { - c.logger.Info("%v: client://%v@%v/%v?min=%v&mode=%v&read=%v&rate=%v&slot=%v&proxy=%v¬cp=%v&noudp=%v", - prefix, c.tunnelKey, c.tunnelTCPAddr, c.getTargetAddrsString(), - c.minPoolCapacity, c.runMode, c.readTimeout, c.rateLimit/125000, c.slotLimit, c.proxyProtocol, c.disableTCP, c.disableUDP) + c.logger.Info("%v: client://%v@%v/%v?dns=%v&min=%v&mode=%v&quic=%v&dial=%v&read=%v&rate=%v&slot=%v&proxy=%v¬cp=%v&noudp=%v", + prefix, c.tunnelKey, c.tunnelTCPAddr, c.getTargetAddrsString(), strings.Join(c.dnsIPs, ","), c.minPoolCapacity, + c.runMode, c.quicMode, c.dialerIP, c.readTimeout, c.rateLimit/125000, c.slotLimit, + c.proxyProtocol, c.disableTCP, c.disableUDP) } logInfo("Client started") @@ -143,18 +145,36 @@ func (c *Client) commonStart() error { } // 初始化连接池 - c.tunnelPool = pool.NewClientPool( - c.minPoolCapacity, - c.maxPoolCapacity, - minPoolInterval, - maxPoolInterval, - reportInterval, - c.tlsCode, - c.tunnelName, - func() (net.Conn, error) { - return net.DialTimeout("tcp", c.tunnelTCPAddr.String(), tcpDialTimeout) - }) - go c.tunnelPool.ClientManager() + switch c.quicMode { + case "0": + tcpPool := pool.NewClientPool( + c.minPoolCapacity, + c.maxPoolCapacity, + minPoolInterval, + maxPoolInterval, + reportInterval, + c.tlsCode, + c.tunnelName, + func() (net.Conn, error) { + return net.DialTimeout("tcp", c.tunnelTCPAddr.String(), tcpDialTimeout) + }) + go tcpPool.ClientManager() + c.tunnelPool = tcpPool + case "1": + udpPool := quic.NewClientPool( + c.minPoolCapacity, + c.maxPoolCapacity, + minPoolInterval, + maxPoolInterval, + reportInterval, + c.tlsCode, + c.tunnelName, + c.tunnelUDPAddr.String()) + go udpPool.ClientManager() + c.tunnelPool = udpPool + default: + return fmt.Errorf("commonStart: unknown quic mode: %s", c.quicMode) + } // 判断数据流向 if c.dataFlow == "+" { @@ -209,9 +229,10 @@ func (c *Client) tunnelHandshake() error { } // 更新客户端配置 - if tunnelURL.Host == "" || tunnelURL.Path == "" || tunnelURL.Fragment == "" { + if tunnelURL.User.Username() == "" || tunnelURL.Host == "" || tunnelURL.Path == "" || tunnelURL.Fragment == "" { return net.UnknownNetworkError(tunnelURL.String()) } + c.quicMode = tunnelURL.User.Username() if max, err := strconv.Atoi(tunnelURL.Host); err != nil { return fmt.Errorf("tunnelHandshake: parse max pool capacity failed: %w", err) } else { diff --git a/nodepass/internal/common.go b/nodepass/internal/common.go index 5d821a7597..7029e3bb25 100644 --- a/nodepass/internal/common.go +++ b/nodepass/internal/common.go @@ -23,18 +23,23 @@ import ( "github.com/NodePassProject/conn" "github.com/NodePassProject/logs" - "github.com/NodePassProject/pool" + "github.com/NodePassProject/name" ) // Common 包含所有模式共享的核心功能 type Common struct { mu sync.Mutex // 互斥锁 logger *logs.Logger // 日志记录器 + resolver *name.Resolver // 域名解析器 + dnsIPs []string // DNS服务器组 tlsCode string // TLS模式代码 tlsConfig *tls.Config // TLS配置 coreType string // 核心类型 runMode string // 运行模式 + quicMode string // QUIC模式 dataFlow string // 数据流向 + dialerIP string // 拨号本地IP + dialerFallback uint32 // 拨号回落标志 tunnelKey string // 隧道密钥 tunnelTCPAddr *net.TCPAddr // 隧道TCP地址 tunnelUDPAddr *net.UDPAddr // 隧道UDP地址 @@ -47,7 +52,7 @@ type Common struct { tunnelUDPConn *conn.StatConn // 隧道UDP连接 targetUDPConn *conn.StatConn // 目标UDP连接 targetUDPSession sync.Map // 目标UDP会话 - tunnelPool *pool.Pool // 隧道连接池 + tunnelPool TransportPool // 隧道连接池 minPoolCapacity int // 最小池容量 maxPoolCapacity int // 最大池容量 proxyProtocol string // 代理协议 @@ -75,11 +80,27 @@ type Common struct { cancel context.CancelFunc // 取消函数 } +// TransportPool 统一连接池接口 +type TransportPool interface { + IncomingGet(timeout time.Duration) (string, net.Conn, error) + OutgoingGet(id string, timeout time.Duration) (net.Conn, error) + Flush() + Close() + Ready() bool + Active() int + Capacity() int + Interval() time.Duration + AddError() + ErrorCount() int + ResetError() +} + // 配置变量,可通过环境变量调整 var ( semaphoreLimit = getEnvAsInt("NP_SEMAPHORE_LIMIT", 65536) // 信号量限制 tcpDataBufSize = getEnvAsInt("NP_TCP_DATA_BUF_SIZE", 16384) // TCP缓冲区大小 - udpDataBufSize = getEnvAsInt("NP_UDP_DATA_BUF_SIZE", 2048) // UDP缓冲区大小 + udpDataBufSize = getEnvAsInt("NP_UDP_DATA_BUF_SIZE", 16384) // UDP缓冲区大小 + dnsCachingTTL = getEnvAsDuration("NP_DNS_CACHING_TTL", 5*time.Minute) // DNS缓存TTL handshakeTimeout = getEnvAsDuration("NP_HANDSHAKE_TIMEOUT", 5*time.Second) // 握手超时 tcpDialTimeout = getEnvAsDuration("NP_TCP_DIAL_TIMEOUT", 5*time.Second) // TCP拨号超时 udpDialTimeout = getEnvAsDuration("NP_UDP_DIAL_TIMEOUT", 5*time.Second) // UDP拨号超时 @@ -95,15 +116,18 @@ var ( // 默认配置 const ( - defaultMinPool = 64 // 默认最小池容量 - defaultMaxPool = 1024 // 默认最大池容量 - defaultRunMode = "0" // 默认运行模式 - defaultReadTimeout = 0 * time.Second // 默认读取超时 - defaultRateLimit = 0 // 默认速率限制 - defaultSlotLimit = 65536 // 默认槽位限制 - defaultProxyProtocol = "0" // 默认代理协议 - defaultTCPStrategy = "0" // 默认TCP策略 - defaultUDPStrategy = "0" // 默认UDP策略 + defaultDNSIPs = "1.1.1.1,8.8.8.8" // 默认DNS服务器 + defaultMinPool = 64 // 默认最小池容量 + defaultMaxPool = 1024 // 默认最大池容量 + defaultRunMode = "0" // 默认运行模式 + defaultQuicMode = "0" // 默认QUIC模式 + defaultDialerIP = "auto" // 默认拨号本地IP + defaultReadTimeout = 0 * time.Second // 默认读取超时 + defaultRateLimit = 0 // 默认速率限制 + defaultSlotLimit = 65536 // 默认槽位限制 + defaultProxyProtocol = "0" // 默认代理协议 + defaultTCPStrategy = "0" // 默认TCP策略 + defaultUDPStrategy = "0" // 默认UDP策略 ) // getTCPBuffer 获取TCP缓冲区 @@ -226,6 +250,26 @@ func (c *Common) decode(data []byte) ([]byte, error) { return c.xor(decoded), nil } +// resolveAddr 解析单个地址 +func (c *Common) resolveAddr(network, address string) (any, error) { + host, _, err := net.SplitHostPort(address) + if err != nil { + return nil, fmt.Errorf("invalid address %s: %w", address, err) + } + + if host == "" { + if network == "tcp" { + return net.ResolveTCPAddr("tcp", address) + } + return net.ResolveUDPAddr("udp", address) + } + + if network == "tcp" { + return c.resolver.ResolveTCPAddr("tcp", address) + } + return c.resolver.ResolveUDPAddr("udp", address) +} + // getAddress 解析和设置地址信息 func (c *Common) getAddress(parsedURL *url.URL) error { // 解析隧道地址 @@ -235,18 +279,18 @@ func (c *Common) getAddress(parsedURL *url.URL) error { } // 解析隧道TCP地址 - if tunnelTCPAddr, err := net.ResolveTCPAddr("tcp", tunnelAddr); err == nil { - c.tunnelTCPAddr = tunnelTCPAddr - } else { + tcpAddr, err := c.resolveAddr("tcp", tunnelAddr) + if err != nil { return fmt.Errorf("getAddress: resolveTCPAddr failed: %w", err) } + c.tunnelTCPAddr = tcpAddr.(*net.TCPAddr) // 解析隧道UDP地址 - if tunnelUDPAddr, err := net.ResolveUDPAddr("udp", tunnelAddr); err == nil { - c.tunnelUDPAddr = tunnelUDPAddr - } else { + udpAddr, err := c.resolveAddr("udp", tunnelAddr) + if err != nil { return fmt.Errorf("getAddress: resolveUDPAddr failed: %w", err) } + c.tunnelUDPAddr = udpAddr.(*net.UDPAddr) // 处理目标地址组 targetAddr := strings.TrimPrefix(parsedURL.Path, "/") @@ -265,19 +309,19 @@ func (c *Common) getAddress(parsedURL *url.URL) error { } // 解析目标TCP地址 - tcpAddr, err := net.ResolveTCPAddr("tcp", addr) + tcpAddr, err := c.resolveAddr("tcp", addr) if err != nil { return fmt.Errorf("getAddress: resolveTCPAddr failed for %s: %w", addr, err) } // 解析目标UDP地址 - udpAddr, err := net.ResolveUDPAddr("udp", addr) + udpAddr, err := c.resolveAddr("udp", addr) if err != nil { return fmt.Errorf("getAddress: resolveUDPAddr failed for %s: %w", addr, err) } - tempTCPAddrs = append(tempTCPAddrs, tcpAddr) - tempUDPAddrs = append(tempUDPAddrs, udpAddr) + tempTCPAddrs = append(tempTCPAddrs, tcpAddr.(*net.TCPAddr)) + tempUDPAddrs = append(tempUDPAddrs, udpAddr.(*net.UDPAddr)) } if len(tempTCPAddrs) == 0 || len(tempUDPAddrs) == 0 || len(tempTCPAddrs) != len(tempUDPAddrs) { @@ -289,6 +333,14 @@ func (c *Common) getAddress(parsedURL *url.URL) error { c.targetUDPAddrs = tempUDPAddrs c.targetIdx = 0 + // 无限循环检查 + tunnelPort := c.tunnelTCPAddr.Port + for _, targetAddr := range c.targetTCPAddrs { + if targetAddr.Port == tunnelPort && (targetAddr.IP.IsLoopback() || c.tunnelTCPAddr.IP.IsUnspecified()) { + return fmt.Errorf("getAddress: tunnel port %d conflicts with target address %s", tunnelPort, targetAddr.String()) + } + } + return nil } @@ -327,18 +379,37 @@ func (c *Common) dialWithRotation(network string, timeout time.Duration) (net.Co getAddr = func(i int) string { return c.targetUDPAddrs[i].String() } } + // 配置拨号器 + dialer := &net.Dialer{Timeout: timeout} + if c.dialerIP != defaultDialerIP && atomic.LoadUint32(&c.dialerFallback) == 0 { + if network == "tcp" { + dialer.LocalAddr = &net.TCPAddr{IP: net.ParseIP(c.dialerIP)} + } else { + dialer.LocalAddr = &net.UDPAddr{IP: net.ParseIP(c.dialerIP)} + } + } + + // 尝试拨号并自动回落 + tryDial := func(addr string) (net.Conn, error) { + conn, err := dialer.Dial(network, addr) + if err != nil && dialer.LocalAddr != nil && atomic.CompareAndSwapUint32(&c.dialerFallback, 0, 1) { + c.logger.Error("dialWithRotation: fallback to system auto due to dialer failure: %v", err) + dialer.LocalAddr = nil + return dialer.Dial(network, addr) + } + return conn, err + } + // 单目标地址:快速路径 if addrCount == 1 { - return net.DialTimeout(network, getAddr(0), timeout) + return tryDial(getAddr(0)) } // 多目标地址:负载均衡 + 故障转移 startIdx := c.nextTargetIdx() var lastErr error - for i := range addrCount { - currentIdx := (startIdx + i) % addrCount - conn, err := net.DialTimeout(network, getAddr(currentIdx), timeout) + conn, err := tryDial(getAddr((startIdx + i) % addrCount)) if err == nil { return conn, nil } @@ -359,6 +430,28 @@ func (c *Common) getTunnelKey(parsedURL *url.URL) { } } +// getDNSIPs 获取DNS服务器组 +func (c *Common) getDNSIPs(parsedURL *url.URL) { + if dns := parsedURL.Query().Get("dns"); dns != "" { + ips := strings.SplitSeq(dns, ",") + for ipStr := range ips { + ipStr = strings.TrimSpace(ipStr) + if ipStr == "" { + continue + } + if ip := net.ParseIP(ipStr); ip != nil { + c.dnsIPs = append(c.dnsIPs, ip.String()) + } else { + c.logger.Warn("getDNSIPs: invalid IP address: %v", ipStr) + } + } + } else { + for ipStr := range strings.SplitSeq(defaultDNSIPs, ",") { + c.dnsIPs = append(c.dnsIPs, strings.TrimSpace(ipStr)) + } + } +} + // getPoolCapacity 获取连接池容量设置 func (c *Common) getPoolCapacity(parsedURL *url.URL) { if min := parsedURL.Query().Get("min"); min != "" { @@ -387,6 +480,31 @@ func (c *Common) getRunMode(parsedURL *url.URL) { } } +// getQuicMode 获取QUIC模式 +func (c *Common) getQuicMode(parsedURL *url.URL) { + if quicMode := parsedURL.Query().Get("quic"); quicMode != "" { + c.quicMode = quicMode + } else { + c.quicMode = defaultQuicMode + } + if c.quicMode != "0" && c.tlsCode == "0" { + c.tlsCode = "1" + } +} + +// getDialerIP 获取拨号本地IP设置 +func (c *Common) getDialerIP(parsedURL *url.URL) { + if dialerIP := parsedURL.Query().Get("dial"); dialerIP != "" && dialerIP != "auto" { + if ip := net.ParseIP(dialerIP); ip != nil { + c.dialerIP = dialerIP + return + } else { + c.logger.Error("getDialerIP: fallback to system auto due to invalid IP address: %v", dialerIP) + } + } + c.dialerIP = defaultDialerIP +} + // getReadTimeout 获取读取超时设置 func (c *Common) getReadTimeout(parsedURL *url.URL) { if timeout := parsedURL.Query().Get("read"); timeout != "" { @@ -449,6 +567,9 @@ func (c *Common) getUDPStrategy(parsedURL *url.URL) { // initConfig 初始化配置 func (c *Common) initConfig(parsedURL *url.URL) error { + c.getDNSIPs(parsedURL) + c.resolver = name.NewResolver(dnsCachingTTL, c.dnsIPs) + if err := c.getAddress(parsedURL); err != nil { return err } @@ -457,6 +578,8 @@ func (c *Common) initConfig(parsedURL *url.URL) error { c.getTunnelKey(parsedURL) c.getPoolCapacity(parsedURL) c.getRunMode(parsedURL) + c.getQuicMode(parsedURL) + c.getDialerIP(parsedURL) c.getReadTimeout(parsedURL) c.getRateLimit(parsedURL) c.getSlotLimit(parsedURL) @@ -644,6 +767,11 @@ func (c *Common) stop() { if c.rateLimiter != nil { c.rateLimiter.Reset() } + + // 清空DNS缓存 + if c.resolver != nil { + c.resolver.ClearCache() + } } // shutdown 共用优雅关闭 @@ -722,13 +850,15 @@ func (c *Common) healthCheck() error { ticker := time.NewTicker(reportInterval) defer ticker.Stop() - go func() { - select { - case <-c.ctx.Done(): - case <-ticker.C: - c.incomingVerify() - } - }() + if c.tlsCode == "1" || c.tlsCode == "2" { + go func() { + select { + case <-c.ctx.Done(): + case <-ticker.C: + c.incomingVerify() + } + }() + } for c.ctx.Err() == nil { // 尝试获取锁 @@ -835,10 +965,10 @@ func (c *Common) commonLoop() { for c.ctx.Err() == nil { // 等待连接池准备就绪 if c.tunnelPool.Ready() { - if c.targetListener != nil { + if c.targetListener != nil || c.disableTCP != "1" { go c.commonTCPLoop() } - if c.targetUDPConn != nil { + if c.targetUDPConn != nil || c.disableUDP != "1" { go c.commonUDPLoop() } return @@ -990,6 +1120,7 @@ func (c *Common) commonUDPLoop() { if err != nil { c.logger.Warn("commonUDPLoop: request timeout: %v", err) c.releaseSlot(true) + c.putUDPBuffer(buffer) continue } c.targetUDPSession.Store(sessionKey, remoteConn) @@ -1190,13 +1321,12 @@ func (c *Common) outgoingVerify(signalURL *url.URL) { defer testConn.Close() if testConn != nil { - tlsConn, ok := testConn.(*tls.Conn) + conn, ok := testConn.(interface{ ConnectionState() tls.ConnectionState }) if !ok { - c.logger.Error("outgoingVerify: connection is not TLS") return } + state := conn.ConnectionState() - state := tlsConn.ConnectionState() if len(state.PeerCertificates) == 0 { c.logger.Error("outgoingVerify: no peer certificates found") return @@ -1433,10 +1563,10 @@ func (c *Common) singleControl() error { if len(c.targetTCPAddrs) > 0 { go func() { errChan <- c.singleEventLoop() }() } - if c.tunnelListener != nil { + if c.tunnelListener != nil || c.disableTCP != "1" { go func() { errChan <- c.singleTCPLoop() }() } - if c.tunnelUDPConn != nil { + if c.tunnelUDPConn != nil || c.disableUDP != "1" { go func() { errChan <- c.singleUDPLoop() }() } diff --git a/nodepass/internal/master.go b/nodepass/internal/master.go index a8dbf42dd3..14836ba318 100644 --- a/nodepass/internal/master.go +++ b/nodepass/internal/master.go @@ -1353,7 +1353,7 @@ func (m *Master) regenerateAPIKey(instance *Instance) { func (m *Master) processInstanceAction(instance *Instance, action string) { switch action { case "start": - if instance.Status != "running" { + if instance.Status == "stopped" { go m.startInstance(instance) } case "stop": @@ -1556,7 +1556,7 @@ func (m *Master) startInstance(instance *Instance) { // 获取最新实例状态 if value, exists := m.instances.Load(instance.ID); exists { instance = value.(*Instance) - if instance.Status == "running" { + if instance.Status != "stopped" { return } } @@ -1785,13 +1785,22 @@ func (m *Master) generateConfigURL(instance *Instance) string { // 根据实例类型设置默认参数 switch instance.Type { case "client": - // client参数: min, mode, read, rate, slot, proxy, notcp, noudp + // client参数: dns, min, mode, quic, dial, read, rate, slot, proxy, notcp, noudp + if query.Get("dns") == "" { + query.Set("dns", defaultDNSIPs) + } if query.Get("min") == "" { query.Set("min", strconv.Itoa(defaultMinPool)) } if query.Get("mode") == "" { query.Set("mode", defaultRunMode) } + if query.Get("quic") == "" { + query.Set("quic", defaultQuicMode) + } + if query.Get("dial") == "" { + query.Set("dial", defaultDialerIP) + } if query.Get("read") == "" { query.Set("read", defaultReadTimeout.String()) } @@ -1811,13 +1820,22 @@ func (m *Master) generateConfigURL(instance *Instance) string { query.Set("noudp", defaultUDPStrategy) } case "server": - // server参数: max, mode, read, rate, slot, proxy, notcp, noudp + // server参数: dns, max, mode, quic, dial, read, rate, slot, proxy, notcp, noudp + if query.Get("dns") == "" { + query.Set("dns", defaultDNSIPs) + } if query.Get("max") == "" { query.Set("max", strconv.Itoa(defaultMaxPool)) } if query.Get("mode") == "" { query.Set("mode", defaultRunMode) } + if query.Get("quic") == "" { + query.Set("quic", defaultQuicMode) + } + if query.Get("dial") == "" { + query.Set("dial", defaultDialerIP) + } if query.Get("read") == "" { query.Set("read", defaultReadTimeout.String()) } diff --git a/nodepass/internal/server.go b/nodepass/internal/server.go index 5c98492aad..d14168f808 100644 --- a/nodepass/internal/server.go +++ b/nodepass/internal/server.go @@ -12,6 +12,7 @@ import ( "os" "os/signal" "strconv" + "strings" "sync" "syscall" "time" @@ -19,6 +20,7 @@ import ( "github.com/NodePassProject/conn" "github.com/NodePassProject/logs" "github.com/NodePassProject/pool" + "github.com/NodePassProject/quic" ) // Server 实现服务端模式功能 @@ -62,9 +64,10 @@ func NewServer(parsedURL *url.URL, tlsCode string, tlsConfig *tls.Config, logger // Run 管理服务端生命周期 func (s *Server) Run() { logInfo := func(prefix string) { - s.logger.Info("%v: server://%v@%v/%v?max=%v&mode=%v&read=%v&rate=%v&slot=%v&proxy=%v¬cp=%v&noudp=%v", - prefix, s.tunnelKey, s.tunnelTCPAddr, s.getTargetAddrsString(), - s.maxPoolCapacity, s.runMode, s.readTimeout, s.rateLimit/125000, s.slotLimit, s.proxyProtocol, s.disableTCP, s.disableUDP) + s.logger.Info("%v: server://%v@%v/%v?dns=%v&max=%v&mode=%v&quic=%v&dial=%v&read=%v&rate=%v&slot=%v&proxy=%v¬cp=%v&noudp=%v", + prefix, s.tunnelKey, s.tunnelTCPAddr, s.getTargetAddrsString(), strings.Join(s.dnsIPs, ","), s.maxPoolCapacity, + s.runMode, s.quicMode, s.dialerIP, s.readTimeout, s.rateLimit/125000, s.slotLimit, + s.proxyProtocol, s.disableTCP, s.disableUDP) } logInfo("Server started") @@ -142,13 +145,28 @@ func (s *Server) start() error { } // 初始化隧道连接池 - s.tunnelPool = pool.NewServerPool( - s.maxPoolCapacity, - s.clientIP, - s.tlsConfig, - s.tunnelListener, - reportInterval) - go s.tunnelPool.ServerManager() + switch s.quicMode { + case "0": + tcpPool := pool.NewServerPool( + s.maxPoolCapacity, + s.clientIP, + s.tlsConfig, + s.tunnelListener, + reportInterval) + go tcpPool.ServerManager() + s.tunnelPool = tcpPool + case "1": + udpPool := quic.NewServerPool( + s.maxPoolCapacity, + s.clientIP, + s.tlsConfig, + s.tunnelUDPAddr.String(), + reportInterval) + go udpPool.ServerManager() + s.tunnelPool = udpPool + default: + return fmt.Errorf("start: unknown quic mode: %s", s.quicMode) + } // 判断数据流向 if s.dataFlow == "-" { @@ -236,6 +254,7 @@ func (s *Server) tunnelHandshake() error { // 发送客户端配置 tunnelURL := &url.URL{ Scheme: "np", + User: url.User(s.quicMode), Host: strconv.Itoa(s.maxPoolCapacity), Path: s.dataFlow, Fragment: s.tlsCode, diff --git a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua index 7b0231afda..5de50fcca8 100644 --- a/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua +++ b/openwrt-passwall/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua @@ -386,6 +386,9 @@ o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translat o.default = "0" o:depends({ [_n("tls")] = true, [_n("reality")] = false }) +o = s:option(Value, _n("tls_chain_fingerprint"), translate("TLS Chain Fingerprint (SHA256)"), translate("Once set, connects only when the server’s chain fingerprint matches.")) +o:depends({ [_n("tls")] = true, [_n("reality")] = false }) + o = s:option(Flag, _n("ech"), translate("ECH")) o.default = "0" o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false }) diff --git a/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_xray.lua b/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_xray.lua index 253784b3d9..61f2df6b8a 100644 --- a/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/openwrt-passwall/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -155,6 +155,7 @@ function gen_outbound(flag, node, tag, proxy_table) serverName = node.tls_serverName, allowInsecure = (node.tls_allowInsecure == "1") and true or false, fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil, + pinnedPeerCertificateChainSha256 = node.tls_chain_fingerprint and { node.tls_chain_fingerprint } or nil, echConfigList = (node.ech == "1") and node.ech_config or nil, echForceQuery = (node.ech == "1") and (node.ech_ForceQuery or "none") or nil } or nil, diff --git a/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po b/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po index 959b426cf7..8e9fefa8c8 100644 --- a/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po +++ b/openwrt-passwall/luci-app-passwall/po/zh-cn/passwall.po @@ -1723,6 +1723,12 @@ msgstr "协议参数。如果启用会随机浪费流量。" msgid "Protocol parameter. Enable length block encryption." msgstr "协议参数。启用长度块加密。" +msgid "TLS Chain Fingerprint (SHA256)" +msgstr "TLS 证书链指纹(SHA256)" + +msgid "Once set, connects only when the server’s chain fingerprint matches." +msgstr "设置后,仅在服务器证书链指纹匹配时连接。" + msgid "ECH Config" msgstr "ECH 配置" diff --git a/pingtunnel/go.mod b/pingtunnel/go.mod index ee668a71b0..bbfcc61c52 100644 --- a/pingtunnel/go.mod +++ b/pingtunnel/go.mod @@ -5,8 +5,8 @@ go 1.24.1 require ( github.com/esrrhs/gohome v0.0.0-20250426022937-504d912bccf7 github.com/golang/protobuf v1.5.4 - golang.org/x/crypto v0.37.0 - golang.org/x/net v0.39.0 + golang.org/x/crypto v0.45.0 + golang.org/x/net v0.47.0 ) require ( @@ -30,7 +30,7 @@ require ( go.uber.org/mock v0.5.1 // indirect golang.org/x/mod v0.24.0 // indirect golang.org/x/sync v0.13.0 // indirect - golang.org/x/sys v0.32.0 // indirect + golang.org/x/sys v0.38.0 // indirect golang.org/x/tools v0.32.0 // indirect google.golang.org/protobuf v1.36.6 // indirect ) diff --git a/pingtunnel/go.sum b/pingtunnel/go.sum index f3db168282..2a6f8c221c 100644 --- a/pingtunnel/go.sum +++ b/pingtunnel/go.sum @@ -81,8 +81,8 @@ go.uber.org/mock v0.5.1/go.mod h1:ge71pBPLYDk7QIi1LupWxdAykm7KIEFchiOqd6z7qMM= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201012173705-84dcc777aaee/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= -golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/crypto v0.45.0 h1:jMBrvKuj23MTlT0bQEOBcAE0mjg8mK9RXFhRH6nyF3Q= +golang.org/x/crypto v0.45.0/go.mod h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -95,8 +95,8 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= -golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -107,12 +107,12 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= -golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= -golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= diff --git a/shadowsocks-rust/Cargo.lock b/shadowsocks-rust/Cargo.lock index c5c45c87f0..47fbf778e6 100644 --- a/shadowsocks-rust/Cargo.lock +++ b/shadowsocks-rust/Cargo.lock @@ -219,12 +219,6 @@ version = "1.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8" -[[package]] -name = "base16ct" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf" - [[package]] name = "base64" version = "0.22.1" @@ -550,18 +544,18 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.52" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "aa8120877db0e5c011242f96806ce3c94e0737ab8108532a76a3300a01db2ab8" +checksum = "c9e340e012a1bf4935f5282ed1436d1489548e8f72308207ea5df0e23d2d03f8" dependencies = [ "clap_builder", ] [[package]] name = "clap_builder" -version = "4.5.52" +version = "4.5.53" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02576b399397b659c26064fbc92a75fede9d18ffd5f80ca1cd74ddab167016e1" +checksum = "d76b5d13eaa18c901fd2f7fca939fefe3a0727a953561fefdf3b2922b8569d00" dependencies = [ "anstream", "anstyle", @@ -686,18 +680,6 @@ version = "0.8.21" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" -[[package]] -name = "crypto-bigint" -version = "0.5.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0dc92fb57ca44df6db8059111ab3af99a63d5d0f8375d9972e319a379c6bab76" -dependencies = [ - "generic-array", - "rand_core 0.6.4", - "subtle", - "zeroize", -] - [[package]] name = "crypto-common" version = "0.1.7" @@ -840,7 +822,7 @@ dependencies = [ "libc", "option-ext", "redox_users", - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -874,17 +856,6 @@ dependencies = [ "syn 2.0.110", ] -[[package]] -name = "ecdsa" -version = "0.16.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ee27f32b5c5292967d2d4a9d7f1e0b0aed2c15daded5a60300e4abb9d8020bca" -dependencies = [ - "der", - "elliptic-curve", - "signature", -] - [[package]] name = "ed25519" version = "2.2.3" @@ -901,24 +872,6 @@ version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" -[[package]] -name = "elliptic-curve" -version = "0.13.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b5e6043086bf7973472e0c7dff2142ea0b680d30e18d9cc40f267efbf222bd47" -dependencies = [ - "base16ct", - "crypto-bigint", - "digest", - "ff", - "generic-array", - "group", - "rand_core 0.6.4", - "sec1", - "subtle", - "zeroize", -] - [[package]] name = "encoding_rs" version = "0.8.35" @@ -976,7 +929,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb" dependencies = [ "libc", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -1015,16 +968,6 @@ version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" -[[package]] -name = "ff" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0b50bfb653653f9ca9095b427bed08ab8d75a137839d9ad64eb11810d5b6393" -dependencies = [ - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "find-msvc-tools" version = "0.1.5" @@ -1193,7 +1136,6 @@ checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" dependencies = [ "typenum", "version_check", - "zeroize", ] [[package]] @@ -1239,17 +1181,6 @@ version = "0.3.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0cc23270f6e1808e30a928bdc84dea0b9b4136a8bc82338574f23baf47bbd280" -[[package]] -name = "group" -version = "0.13.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63" -dependencies = [ - "ff", - "rand_core 0.6.4", - "subtle", -] - [[package]] name = "h2" version = "0.4.12" @@ -1836,17 +1767,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "json5" -version = "0.4.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" -dependencies = [ - "pest", - "pest_derive", - "serde", -] - [[package]] name = "kqueue" version = "1.1.1" @@ -2189,7 +2109,7 @@ version = "0.50.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7957b9740744892f114936ab4a57b3f487491bbeafaf8083688b16841a4240e5" dependencies = [ - "windows-sys 0.59.0", + "windows-sys 0.61.2", ] [[package]] @@ -2307,27 +2227,6 @@ dependencies = [ "num-traits", ] -[[package]] -name = "p256" -version = "0.13.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b" -dependencies = [ - "ecdsa", - "elliptic-curve", -] - -[[package]] -name = "p384" -version = "0.13.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe42f1670a52a47d448f14b6a5c61dd78fce51856e68edaa38f7ae3a46b8d6b6" -dependencies = [ - "ecdsa", - "elliptic-curve", - "primeorder", -] - [[package]] name = "parking" version = "2.2.1" @@ -2527,15 +2426,6 @@ dependencies = [ "zerocopy", ] -[[package]] -name = "primeorder" -version = "0.13.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "353e1ca18966c16d9deb1c69278edbc5f194139612772bd9537af60ac231e1e6" -dependencies = [ - "elliptic-curve", -] - [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -2626,7 +2516,7 @@ dependencies = [ "once_cell", "socket2 0.6.1", "tracing", - "windows-sys 0.52.0", + "windows-sys 0.60.2", ] [[package]] @@ -2786,9 +2676,9 @@ dependencies = [ [[package]] name = "resolv-conf" -version = "0.7.5" +version = "0.7.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b3789b30bd25ba102de4beabd95d21ac45b69b1be7d14522bab988c526d6799" +checksum = "1e061d1b48cb8d38042de4ae0a7a6401009d6143dc80d2e2d6f31f0bdd6470c7" [[package]] name = "ring" @@ -2811,16 +2701,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ccce7bae150b815f0811db41b8312fcb74bffa4cab9cee5429ee00f356dd5bd4" dependencies = [ "aead", - "digest", - "ecdsa", "ed25519", "generic-array", - "p256", - "p384", "pkcs8", - "rand_core 0.6.4", "ring", - "signature", ] [[package]] @@ -2899,7 +2783,7 @@ dependencies = [ "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -2997,19 +2881,6 @@ dependencies = [ "syn 2.0.110", ] -[[package]] -name = "sec1" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc" -dependencies = [ - "base16ct", - "der", - "generic-array", - "subtle", - "zeroize", -] - [[package]] name = "security-framework" version = "2.11.1" @@ -3125,6 +2996,17 @@ dependencies = [ "serde_core", ] +[[package]] +name = "serde_json5" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d34d03f54462862f2a42918391c9526337f53171eaa4d8894562be7f252edd3" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3213,9 +3095,9 @@ dependencies = [ [[package]] name = "shadowsocks-crypto" -version = "0.6.1" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bda401a0ad32c82981d8862f2795713618de9bbf9768f03c17d9d145c6d805df" +checksum = "3d038a3d17586f1c1ab3c1c3b9e4d5ef8fba98fb3890ad740c8487038b2e2ca5" dependencies = [ "aead", "aes", @@ -3254,7 +3136,6 @@ dependencies = [ "futures", "ipnet", "jemallocator", - "json5", "libc", "log", "log4rs", @@ -3265,6 +3146,7 @@ dependencies = [ "rpassword", "rpmalloc", "serde", + "serde_json5", "shadowsocks-service", "snmalloc-rs", "sysexits", @@ -3303,7 +3185,6 @@ dependencies = [ "idna", "ipnet", "iprange", - "json5", "libc", "log", "lru_time_cache", @@ -3316,6 +3197,8 @@ dependencies = [ "rocksdb", "rustls-native-certs", "serde", + "serde_json", + "serde_json5", "shadowsocks", "smoltcp", "socket2 0.6.1", @@ -3360,9 +3243,6 @@ name = "signature" version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" -dependencies = [ - "rand_core 0.6.4", -] [[package]] name = "simd-adler32" @@ -3610,7 +3490,7 @@ dependencies = [ "getrandom 0.3.4", "once_cell", "rustix", - "windows-sys 0.52.0", + "windows-sys 0.61.2", ] [[package]] @@ -4258,7 +4138,7 @@ version = "0.1.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2a7b1c03c876122aa43f3020e6c3c3ee5c05081c9a00739faf7503aeba10d22" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.61.2", ] [[package]] diff --git a/shadowsocks-rust/Cargo.toml b/shadowsocks-rust/Cargo.toml index dbb276108e..a832e8ce4e 100644 --- a/shadowsocks-rust/Cargo.toml +++ b/shadowsocks-rust/Cargo.toml @@ -218,7 +218,7 @@ tracing-appender = { version = "0.2.3", optional = true, default-features = fals time = { version = "0.3", optional = true } serde = { version = "1.0", features = ["derive"] } -json5 = "0.4" +serde_json5 = "0.2" thiserror = "2.0" base64 = "0.22" diff --git a/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml b/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml index b49f270869..3a5193d08d 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml +++ b/shadowsocks-rust/crates/shadowsocks-service/Cargo.toml @@ -170,7 +170,10 @@ hickory-resolver = { version = "0.25", optional = true, features = ["serde"] } idna = "1.0" ipnet = "2.10" iprange = "0.6" -regex = { version = "1.4", default-features = false, features = ["std", "perf"] } +regex = { version = "1.4", default-features = false, features = [ + "std", + "perf", +] } mime = { version = "0.3", optional = true } flate2 = { version = "1.0", optional = true } @@ -192,7 +195,8 @@ smoltcp = { version = "0.12", optional = true, default-features = false, feature ] } serde = { version = "1.0", features = ["derive"] } -json5 = "0.4" +serde_json5 = "0.2" +serde_json = "1.0" bson = { version = "3.0.0", features = ["serde"], optional = true } shadowsocks = { version = "1.23.2", path = "../shadowsocks", default-features = false } diff --git a/shadowsocks-rust/crates/shadowsocks-service/src/config.rs b/shadowsocks-rust/crates/shadowsocks-service/src/config.rs index 65aec145e5..74ad2b824e 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/src/config.rs +++ b/shadowsocks-rust/crates/shadowsocks-service/src/config.rs @@ -1457,7 +1457,8 @@ macro_rules! impl_from { } impl_from!(::std::io::Error, ErrorKind::IoError, "error while reading file"); -impl_from!(json5::Error, ErrorKind::JsonParsingError, "json parse error"); +impl_from!(serde_json5::Error, ErrorKind::JsonParsingError, "json parse error"); +impl_from!(serde_json::Error, ErrorKind::JsonParsingError, "json parse error"); impl Debug for Error { fn fmt(&self, f: &mut Formatter) -> fmt::Result { @@ -2564,7 +2565,13 @@ impl Config { /// Load Config from a `str` pub fn load_from_str(s: &str, config_type: ConfigType) -> Result { - let c = json5::from_str::(s)?; + let c = serde_json5::from_str::(s)?; + Self::load_from_ssconfig(c, config_type) + } + + /// Load Config from a JSON `str` + pub fn load_from_json_str(s: &str, config_type: ConfigType) -> Result { + let c = serde_json::from_str::(s)?; Self::load_from_ssconfig(c, config_type) } @@ -3178,7 +3185,7 @@ impl fmt::Display for Config { }); } - write!(f, "{}", json5::to_string(&jconf).unwrap()) + write!(f, "{}", serde_json5::to_string(&jconf).unwrap()) } } diff --git a/shadowsocks-rust/crates/shadowsocks-service/src/local/online_config/mod.rs b/shadowsocks-rust/crates/shadowsocks-service/src/local/online_config/mod.rs index 9ef741aa64..94300be9b3 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/src/local/online_config/mod.rs +++ b/shadowsocks-rust/crates/shadowsocks-service/src/local/online_config/mod.rs @@ -190,7 +190,7 @@ impl OnlineConfigService { Err(..) => return Err(io::Error::other("body contains non-utf8 bytes")), }; - let online_config = match Config::load_from_str(&parsed_body, ConfigType::OnlineConfig) { + let online_config = match Config::load_from_json_str(&parsed_body, ConfigType::OnlineConfig) { Ok(c) => c, Err(err) => { error!( diff --git a/shadowsocks-rust/crates/shadowsocks-service/src/local/socks/config.rs b/shadowsocks-rust/crates/shadowsocks-service/src/local/socks/config.rs index 5378fac980..c2dd16dc2d 100644 --- a/shadowsocks-rust/crates/shadowsocks-service/src/local/socks/config.rs +++ b/shadowsocks-rust/crates/shadowsocks-service/src/local/socks/config.rs @@ -66,7 +66,7 @@ impl Socks5AuthConfig { let mut content = String::new(); reader.read_to_string(&mut content)?; - let jconf: SSSocks5AuthConfig = match json5::from_str(&content) { + let jconf: SSSocks5AuthConfig = match serde_json5::from_str(&content) { Ok(c) => c, Err(err) => return Err(io::Error::other(err)), }; diff --git a/shadowsocks-rust/src/config.rs b/shadowsocks-rust/src/config.rs index dacfeb3dc2..4c423275d1 100644 --- a/shadowsocks-rust/src/config.rs +++ b/shadowsocks-rust/src/config.rs @@ -88,7 +88,7 @@ pub enum ConfigError { IoError(#[from] io::Error), /// JSON parsing error #[error("{0}")] - JsonError(#[from] json5::Error), + JsonError(#[from] serde_json5::Error), /// Invalid value #[error("Invalid value: {0}")] InvalidValue(String), @@ -120,7 +120,7 @@ impl Config { /// Load `Config` from string pub fn load_from_str(s: &str) -> Result { - json5::from_str(s).map_err(ConfigError::from) + serde_json5::from_str(s).map_err(ConfigError::from) } /// Set by command line options diff --git a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua index 7b0231afda..5de50fcca8 100644 --- a/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua +++ b/small/luci-app-passwall/luasrc/model/cbi/passwall/client/type/ray.lua @@ -386,6 +386,9 @@ o = s:option(Flag, _n("tls_allowInsecure"), translate("allowInsecure"), translat o.default = "0" o:depends({ [_n("tls")] = true, [_n("reality")] = false }) +o = s:option(Value, _n("tls_chain_fingerprint"), translate("TLS Chain Fingerprint (SHA256)"), translate("Once set, connects only when the server’s chain fingerprint matches.")) +o:depends({ [_n("tls")] = true, [_n("reality")] = false }) + o = s:option(Flag, _n("ech"), translate("ECH")) o.default = "0" o:depends({ [_n("tls")] = true, [_n("flow")] = "", [_n("reality")] = false }) diff --git a/small/luci-app-passwall/luasrc/passwall/util_xray.lua b/small/luci-app-passwall/luasrc/passwall/util_xray.lua index 253784b3d9..61f2df6b8a 100644 --- a/small/luci-app-passwall/luasrc/passwall/util_xray.lua +++ b/small/luci-app-passwall/luasrc/passwall/util_xray.lua @@ -155,6 +155,7 @@ function gen_outbound(flag, node, tag, proxy_table) serverName = node.tls_serverName, allowInsecure = (node.tls_allowInsecure == "1") and true or false, fingerprint = (node.type == "Xray" and node.utls == "1" and node.fingerprint and node.fingerprint ~= "") and node.fingerprint or nil, + pinnedPeerCertificateChainSha256 = node.tls_chain_fingerprint and { node.tls_chain_fingerprint } or nil, echConfigList = (node.ech == "1") and node.ech_config or nil, echForceQuery = (node.ech == "1") and (node.ech_ForceQuery or "none") or nil } or nil, diff --git a/small/luci-app-passwall/po/zh-cn/passwall.po b/small/luci-app-passwall/po/zh-cn/passwall.po index 959b426cf7..8e9fefa8c8 100644 --- a/small/luci-app-passwall/po/zh-cn/passwall.po +++ b/small/luci-app-passwall/po/zh-cn/passwall.po @@ -1723,6 +1723,12 @@ msgstr "协议参数。如果启用会随机浪费流量。" msgid "Protocol parameter. Enable length block encryption." msgstr "协议参数。启用长度块加密。" +msgid "TLS Chain Fingerprint (SHA256)" +msgstr "TLS 证书链指纹(SHA256)" + +msgid "Once set, connects only when the server’s chain fingerprint matches." +msgstr "设置后,仅在服务器证书链指纹匹配时连接。" + msgid "ECH Config" msgstr "ECH 配置" diff --git a/small/v2ray-geodata/Makefile b/small/v2ray-geodata/Makefile index 465fb6d8d6..06a296f628 100644 --- a/small/v2ray-geodata/Makefile +++ b/small/v2ray-geodata/Makefile @@ -21,13 +21,13 @@ define Download/geoip HASH:=2445b44d9ae3ab9a867c9d1e0e244646c4c378622e14b9afaf3658ecf46a40b9 endef -GEOSITE_VER:=20251119044456 +GEOSITE_VER:=20251120132211 GEOSITE_FILE:=dlc.dat.$(GEOSITE_VER) define Download/geosite URL:=https://github.com/v2fly/domain-list-community/releases/download/$(GEOSITE_VER)/ URL_FILE:=dlc.dat FILE:=$(GEOSITE_FILE) - HASH:=9f1d68cacb68baf5b6a71988d3913f951d4aeff846043ab3b64408be199e8f95 + HASH:=441358172fc8b142ca2470db5d903ab9934d7c4f00673683b9f64bbb27c1c201 endef GEOSITE_IRAN_VER:=202511170041 diff --git a/socratex/README.md b/socratex/README.md index 84bfdc8030..0ba4a68ce8 100644 --- a/socratex/README.md +++ b/socratex/README.md @@ -1,4 +1,4 @@ -# Socratex +# 🧱 Socratex [![MIT licensed](https://img.shields.io/badge/license-MIT-blue)](./LICENSE) [![Node.js Package, Docker Image](https://github.com/Leask/socratex/actions/workflows/build.yml/badge.svg)](https://github.com/Leask/socratex/actions/workflows/build.yml) diff --git a/socratex/package.json b/socratex/package.json index 21c9400277..fb3fd1dffa 100644 --- a/socratex/package.json +++ b/socratex/package.json @@ -1,7 +1,7 @@ { "name": "socratex", "description": "A Secure Web Proxy. Which is fast, secure, and easy to use.", - "version": "2.0.20", + "version": "2.0.21", "private": false, "homepage": "https://github.com/Leask/socratex", "main": "index.mjs", diff --git a/v2rayn/.github/workflows/build-linux.yml b/v2rayn/.github/workflows/build-linux.yml index 42a1a3433b..8fe09d48ad 100644 --- a/v2rayn/.github/workflows/build-linux.yml +++ b/v2rayn/.github/workflows/build-linux.yml @@ -44,10 +44,10 @@ jobs: - name: Build run: | cd v2rayN - dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-x64 --self-contained=true -o "$OutputPath64" - dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-arm64 --self-contained=true -o "$OutputPathArm64" - dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-x64 --self-contained=true -p:PublishTrimmed=true -o "$OutputPath64" - dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-arm64 --self-contained=true -p:PublishTrimmed=true -o "$OutputPathArm64" + dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-x64 -p:SelfContained=true -o "$OutputPath64" + dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r linux-arm64 -p:SelfContained=true -o "$OutputPathArm64" + dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-x64 -p:SelfContained=true -p:PublishTrimmed=true -o "$OutputPath64" + dotnet publish ./AmazTool/AmazTool.csproj -c Release -r linux-arm64 -p:SelfContained=true -p:PublishTrimmed=true -o "$OutputPathArm64" - name: Upload build artifacts uses: actions/upload-artifact@v5.0.0 diff --git a/v2rayn/.github/workflows/build-osx.yml b/v2rayn/.github/workflows/build-osx.yml index 9edbbf9995..b8f3e20241 100644 --- a/v2rayn/.github/workflows/build-osx.yml +++ b/v2rayn/.github/workflows/build-osx.yml @@ -39,10 +39,10 @@ jobs: - name: Build run: | cd v2rayN - dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-x64 --self-contained=true -o $OutputPath64 - dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-arm64 --self-contained=true -o $OutputPathArm64 - dotnet publish ./AmazTool/AmazTool.csproj -c Release -r osx-x64 --self-contained=true -p:PublishTrimmed=true -o $OutputPath64 - dotnet publish ./AmazTool/AmazTool.csproj -c Release -r osx-arm64 --self-contained=true -p:PublishTrimmed=true -o $OutputPathArm64 + dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-x64 -p:SelfContained=true -o $OutputPath64 + dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r osx-arm64 -p:SelfContained=true -o $OutputPathArm64 + dotnet publish ./AmazTool/AmazTool.csproj -c Release -r osx-x64 -p:SelfContained=true -p:PublishTrimmed=true -o $OutputPath64 + dotnet publish ./AmazTool/AmazTool.csproj -c Release -r osx-arm64 -p:SelfContained=true -p:PublishTrimmed=true -o $OutputPathArm64 - name: Upload build artifacts uses: actions/upload-artifact@v5.0.0 diff --git a/v2rayn/.github/workflows/build-windows-desktop.yml b/v2rayn/.github/workflows/build-windows-desktop.yml index ec85793811..73f679fe27 100644 --- a/v2rayn/.github/workflows/build-windows-desktop.yml +++ b/v2rayn/.github/workflows/build-windows-desktop.yml @@ -39,10 +39,10 @@ jobs: - name: Build run: | cd v2rayN - dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r win-x64 --self-contained=true -p:EnableWindowsTargeting=true -o $OutputPath64 - dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r win-arm64 --self-contained=true -p:EnableWindowsTargeting=true -o $OutputPathArm64 - dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 --self-contained=true -p:EnableWindowsTargeting=true -p:PublishTrimmed=true -o $OutputPath64 - dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-arm64 --self-contained=true -p:EnableWindowsTargeting=true -p:PublishTrimmed=true -o $OutputPathArm64 + dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r win-x64 -p:SelfContained=true -p:EnableWindowsTargeting=true -o $OutputPath64 + dotnet publish ./v2rayN.Desktop/v2rayN.Desktop.csproj -c Release -r win-arm64 -p:SelfContained=true -p:EnableWindowsTargeting=true -o $OutputPathArm64 + dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 -p:SelfContained=true -p:EnableWindowsTargeting=true -p:PublishTrimmed=true -o $OutputPath64 + dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-arm64 -p:SelfContained=true -p:EnableWindowsTargeting=true -p:PublishTrimmed=true -o $OutputPathArm64 - name: Upload build artifacts uses: actions/upload-artifact@v5.0.0 diff --git a/v2rayn/.github/workflows/build-windows.yml b/v2rayn/.github/workflows/build-windows.yml index 288f776cf9..0ffe971aea 100644 --- a/v2rayn/.github/workflows/build-windows.yml +++ b/v2rayn/.github/workflows/build-windows.yml @@ -37,12 +37,12 @@ jobs: - name: Build run: | cd v2rayN - dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-x64 --self-contained=false -p:EnableWindowsTargeting=true -o $OutputPath64 - dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-arm64 --self-contained=false -p:EnableWindowsTargeting=true -o $OutputPathArm64 - dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-x64 --self-contained=true -p:EnableWindowsTargeting=true -o $OutputPath64Sc - dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 --self-contained=false -p:EnableWindowsTargeting=true -o $OutputPath64 - dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-arm64 --self-contained=false -p:EnableWindowsTargeting=true -o $OutputPathArm64 - dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 --self-contained=true -p:EnableWindowsTargeting=true -p:PublishTrimmed=true -o $OutputPath64Sc + dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-x64 -p:SelfContained=false -p:EnableWindowsTargeting=true -o $OutputPath64 + dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-arm64 -p:SelfContained=false -p:EnableWindowsTargeting=true -o $OutputPathArm64 + dotnet publish ./v2rayN/v2rayN.csproj -c Release -r win-x64 -p:SelfContained=true -p:EnableWindowsTargeting=true -o $OutputPath64Sc + dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 -p:SelfContained=false -p:EnableWindowsTargeting=true -o $OutputPath64 + dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-arm64 -p:SelfContained=false -p:EnableWindowsTargeting=true -o $OutputPathArm64 + dotnet publish ./AmazTool/AmazTool.csproj -c Release -r win-x64 -p:SelfContained=true -p:EnableWindowsTargeting=true -p:PublishTrimmed=true -o $OutputPath64Sc - name: Upload build artifacts @@ -68,4 +68,4 @@ jobs: file: ${{ github.workspace }}/v2rayN*.zip tag: ${{ github.event.inputs.release_tag }} file_glob: true - prerelease: true \ No newline at end of file + prerelease: true diff --git a/v2rayn/v2rayN/Directory.Packages.props b/v2rayn/v2rayN/Directory.Packages.props index 33903afcf1..beb870f2ed 100644 --- a/v2rayn/v2rayN/Directory.Packages.props +++ b/v2rayn/v2rayN/Directory.Packages.props @@ -6,11 +6,11 @@ - - - + + + - + diff --git a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/ShadowsocksFmt.cs b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/ShadowsocksFmt.cs index adaeb95468..04f52232be 100644 --- a/v2rayn/v2rayN/ServiceLib/Handler/Fmt/ShadowsocksFmt.cs +++ b/v2rayn/v2rayN/ServiceLib/Handler/Fmt/ShadowsocksFmt.cs @@ -41,7 +41,68 @@ public class ShadowsocksFmt : BaseFmt //url = Utile.Base64Encode(url); //new Sip002 var pw = Utils.Base64Encode($"{item.Security}:{item.Id}", true); - return ToUri(EConfigType.Shadowsocks, item.Address, item.Port, pw, null, remark); + + // plugin + var plugin = string.Empty; + var pluginArgs = string.Empty; + + if (item.Network == nameof(ETransport.tcp) && item.HeaderType == Global.TcpHeaderHttp) + { + plugin = "obfs-local"; + pluginArgs = $"obfs=http;obfs-host={item.RequestHost};"; + } + else + { + if (item.Network == nameof(ETransport.ws)) + { + pluginArgs += "mode=websocket;"; + pluginArgs += $"host={item.RequestHost};"; + pluginArgs += $"path={item.Path};"; + } + else if (item.Network == nameof(ETransport.quic)) + { + pluginArgs += "mode=quic;"; + } + if (item.StreamSecurity == Global.StreamSecurity) + { + pluginArgs += "tls;"; + var certs = CertPemManager.ParsePemChain(item.Cert); + if (certs.Count > 0) + { + var cert = certs.First(); + const string beginMarker = "-----BEGIN CERTIFICATE-----\n"; + const string endMarker = "\n-----END CERTIFICATE-----"; + + var base64Start = beginMarker.Length; + var endIndex = cert.IndexOf(endMarker, base64Start, StringComparison.Ordinal); + var base64Content = cert.Substring(base64Start, endIndex - base64Start); + + // https://github.com/shadowsocks/v2ray-plugin/blob/e9af1cdd2549d528deb20a4ab8d61c5fbe51f306/args.go#L172 + // Equal signs and commas [and backslashes] must be escaped with a backslash. + base64Content = base64Content.Replace("\\", "\\\\").Replace("=", "\\=").Replace(",", "\\,"); + + pluginArgs += $"certRaw={base64Content};"; + } + } + if (pluginArgs.Length > 0) + { + plugin = "v2ray-plugin"; + } + } + + var dicQuery = new Dictionary(); + if (plugin.IsNotEmpty()) + { + var pluginStr = plugin + ";" + pluginArgs; + // pluginStr remove last ';' and url encode + if (pluginStr.EndsWith(';')) + { + pluginStr = pluginStr[..^1]; + } + dicQuery["plugin"] = Utils.UrlEncode(pluginStr); + } + + return ToUri(EConfigType.Shadowsocks, item.Address, item.Port, pw, dicQuery, remark); } private static readonly Regex UrlFinder = new(@"ss://(?[A-Za-z0-9+-/=_]+)(?:#(?\S+))?", RegexOptions.IgnoreCase | RegexOptions.Compiled); @@ -124,19 +185,81 @@ public class ShadowsocksFmt : BaseFmt var queryParameters = Utils.ParseQueryString(parsedUrl.Query); if (queryParameters["plugin"] != null) { - //obfs-host exists - var obfsHost = queryParameters["plugin"]?.Split(';').FirstOrDefault(t => t.Contains("obfs-host")); - if (queryParameters["plugin"].Contains("obfs=http") && obfsHost.IsNotEmpty()) - { - obfsHost = obfsHost?.Replace("obfs-host=", ""); - item.Network = Global.DefaultNetwork; - item.HeaderType = Global.TcpHeaderHttp; - item.RequestHost = obfsHost ?? ""; - } - else + var pluginStr = queryParameters["plugin"]; + var pluginParts = pluginStr.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); + + if (pluginParts.Length == 0) { return null; } + + var pluginName = pluginParts[0]; + + // A typo in https://github.com/shadowsocks/shadowsocks-org/blob/6b1c064db4129de99c516294960e731934841c94/docs/doc/sip002.md?plain=1#L15 + // "simple-obfs" should be "obfs-local" + if (pluginName == "simple-obfs") + { + pluginName = "obfs-local"; + } + + // Parse obfs-local plugin + if (pluginName == "obfs-local") + { + var obfsMode = pluginParts.FirstOrDefault(t => t.StartsWith("obfs=")); + var obfsHost = pluginParts.FirstOrDefault(t => t.StartsWith("obfs-host=")); + + if ((!obfsMode.IsNullOrEmpty()) && obfsMode.Contains("obfs=http") && obfsHost.IsNotEmpty()) + { + obfsHost = obfsHost.Replace("obfs-host=", ""); + item.Network = Global.DefaultNetwork; + item.HeaderType = Global.TcpHeaderHttp; + item.RequestHost = obfsHost; + } + } + // Parse v2ray-plugin + else if (pluginName == "v2ray-plugin") + { + var mode = pluginParts.FirstOrDefault(t => t.StartsWith("mode="), "websocket"); + var host = pluginParts.FirstOrDefault(t => t.StartsWith("host=")); + var path = pluginParts.FirstOrDefault(t => t.StartsWith("path=")); + var hasTls = pluginParts.Any(t => t == "tls"); + var certRaw = pluginParts.FirstOrDefault(t => t.StartsWith("certRaw=")); + + var modeValue = mode.Replace("mode=", ""); + if (modeValue == "websocket") + { + item.Network = nameof(ETransport.ws); + if (!host.IsNullOrEmpty()) + { + item.RequestHost = host.Replace("host=", ""); + } + if (!path.IsNullOrEmpty()) + { + item.Path = path.Replace("path=", ""); + } + } + else if (modeValue == "quic") + { + item.Network = nameof(ETransport.quic); + } + + if (hasTls) + { + item.StreamSecurity = Global.StreamSecurity; + + if (!certRaw.IsNullOrEmpty()) + { + var certBase64 = certRaw.Replace("certRaw=", ""); + + certBase64 = certBase64.Replace("\\=", "=").Replace("\\,", ",").Replace("\\\\", "\\"); + + const string beginMarker = "-----BEGIN CERTIFICATE-----\n"; + const string endMarker = "\n-----END CERTIFICATE-----"; + var certPem = beginMarker + certBase64 + endMarker; + item.Cert = certPem; + } + } + } } return item; diff --git a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs index 9671dc7739..1bda5981ff 100644 --- a/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs +++ b/v2rayn/v2rayN/ServiceLib/Services/CoreConfig/Singbox/SingboxOutboundService.cs @@ -26,6 +26,7 @@ public partial class CoreConfigSingboxService } await GenOutboundMux(node, outbound); + await GenOutboundTransport(node, outbound); break; } case EConfigType.Shadowsocks: @@ -33,6 +34,52 @@ public partial class CoreConfigSingboxService outbound.method = AppManager.Instance.GetShadowsocksSecurities(node).Contains(node.Security) ? node.Security : Global.None; outbound.password = node.Id; + if (node.Network == nameof(ETransport.tcp) && node.HeaderType == Global.TcpHeaderHttp) + { + outbound.plugin = "obfs-local"; + outbound.plugin_opts = $"obfs=http;obfs-host={node.RequestHost};"; + } + else + { + var pluginArgs = string.Empty; + if (node.Network == nameof(ETransport.ws)) + { + pluginArgs += "mode=websocket;"; + pluginArgs += $"host={node.RequestHost};"; + pluginArgs += $"path={node.Path};"; + } + else if (node.Network == nameof(ETransport.quic)) + { + pluginArgs += "mode=quic;"; + } + if (node.StreamSecurity == Global.StreamSecurity) + { + pluginArgs += "tls;"; + var certs = CertPemManager.ParsePemChain(node.Cert); + if (certs.Count > 0) + { + var cert = certs.First(); + const string beginMarker = "-----BEGIN CERTIFICATE-----\n"; + const string endMarker = "\n-----END CERTIFICATE-----"; + + var base64Start = beginMarker.Length; + var endIndex = cert.IndexOf(endMarker, base64Start, StringComparison.Ordinal); + var base64Content = cert.Substring(base64Start, endIndex - base64Start); + + // https://github.com/shadowsocks/v2ray-plugin/blob/e9af1cdd2549d528deb20a4ab8d61c5fbe51f306/args.go#L172 + // Equal signs and commas [and backslashes] must be escaped with a backslash. + base64Content = base64Content.Replace("\\", "\\\\").Replace("=", "\\=").Replace(",", "\\,"); + + pluginArgs += $"certRaw={base64Content};"; + } + } + if (pluginArgs.Length > 0) + { + outbound.plugin = "v2ray-plugin"; + outbound.plugin_opts = pluginArgs; + } + } + await GenOutboundMux(node, outbound); break; } @@ -71,6 +118,8 @@ public partial class CoreConfigSingboxService { outbound.flow = node.Flow; } + + await GenOutboundTransport(node, outbound); break; } case EConfigType.Trojan: @@ -78,6 +127,7 @@ public partial class CoreConfigSingboxService outbound.password = node.Id; await GenOutboundMux(node, outbound); + await GenOutboundTransport(node, outbound); break; } case EConfigType.Hysteria2: @@ -127,8 +177,6 @@ public partial class CoreConfigSingboxService } await GenOutboundTls(node, outbound); - - await GenOutboundTransport(node, outbound); } catch (Exception ex) { @@ -232,54 +280,59 @@ public partial class CoreConfigSingboxService { try { - if (node.StreamSecurity is Global.StreamSecurityReality or Global.StreamSecurity) + if (node.StreamSecurity is not (Global.StreamSecurityReality or Global.StreamSecurity)) { - var server_name = string.Empty; - if (node.Sni.IsNotEmpty()) - { - server_name = node.Sni; - } - else if (node.RequestHost.IsNotEmpty()) - { - server_name = Utils.String2List(node.RequestHost)?.First(); - } - var tls = new Tls4Sbox() + return await Task.FromResult(0); + } + if (node.ConfigType is EConfigType.Shadowsocks or EConfigType.SOCKS or EConfigType.WireGuard) + { + return await Task.FromResult(0); + } + var server_name = string.Empty; + if (node.Sni.IsNotEmpty()) + { + server_name = node.Sni; + } + else if (node.RequestHost.IsNotEmpty()) + { + server_name = Utils.String2List(node.RequestHost)?.First(); + } + var tls = new Tls4Sbox() + { + enabled = true, + record_fragment = _config.CoreBasicItem.EnableFragment ? true : null, + server_name = server_name, + insecure = Utils.ToBool(node.AllowInsecure.IsNullOrEmpty() ? _config.CoreBasicItem.DefAllowInsecure.ToString().ToLower() : node.AllowInsecure), + alpn = node.GetAlpn(), + }; + if (node.Fingerprint.IsNotEmpty()) + { + tls.utls = new Utls4Sbox() { enabled = true, - record_fragment = _config.CoreBasicItem.EnableFragment ? true : null, - server_name = server_name, - insecure = Utils.ToBool(node.AllowInsecure.IsNullOrEmpty() ? _config.CoreBasicItem.DefAllowInsecure.ToString().ToLower() : node.AllowInsecure), - alpn = node.GetAlpn(), + fingerprint = node.Fingerprint.IsNullOrEmpty() ? _config.CoreBasicItem.DefFingerprint : node.Fingerprint }; - if (node.Fingerprint.IsNotEmpty()) + } + if (node.StreamSecurity == Global.StreamSecurity) + { + var certs = CertPemManager.ParsePemChain(node.Cert); + if (certs.Count > 0) { - tls.utls = new Utls4Sbox() - { - enabled = true, - fingerprint = node.Fingerprint.IsNullOrEmpty() ? _config.CoreBasicItem.DefFingerprint : node.Fingerprint - }; - } - if (node.StreamSecurity == Global.StreamSecurity) - { - var certs = CertPemManager.ParsePemChain(node.Cert); - if (certs.Count > 0) - { - tls.certificate = certs; - tls.insecure = false; - } - } - else if (node.StreamSecurity == Global.StreamSecurityReality) - { - tls.reality = new Reality4Sbox() - { - enabled = true, - public_key = node.PublicKey, - short_id = node.ShortId - }; + tls.certificate = certs; tls.insecure = false; } - outbound.tls = tls; } + else if (node.StreamSecurity == Global.StreamSecurityReality) + { + tls.reality = new Reality4Sbox() + { + enabled = true, + public_key = node.PublicKey, + short_id = node.ShortId + }; + tls.insecure = false; + } + outbound.tls = tls; } catch (Exception ex) { @@ -305,17 +358,9 @@ public partial class CoreConfigSingboxService case nameof(ETransport.tcp): //http if (node.HeaderType == Global.TcpHeaderHttp) { - if (node.ConfigType == EConfigType.Shadowsocks) - { - outbound.plugin = "obfs-local"; - outbound.plugin_opts = $"obfs=http;obfs-host={node.RequestHost};"; - } - else - { - transport.type = nameof(ETransport.http); - transport.host = node.RequestHost.IsNullOrEmpty() ? null : Utils.String2List(node.RequestHost); - transport.path = node.Path.IsNullOrEmpty() ? null : node.Path; - } + transport.type = nameof(ETransport.http); + transport.host = node.RequestHost.IsNullOrEmpty() ? null : Utils.String2List(node.RequestHost); + transport.path = node.Path.IsNullOrEmpty() ? null : node.Path; } break; diff --git a/xray-core/.github/docker/Dockerfile b/xray-core/.github/docker/Dockerfile index 0b6f293256..867e671a99 100644 --- a/xray-core/.github/docker/Dockerfile +++ b/xray-core/.github/docker/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /src COPY . . ARG TARGETOS ARG TARGETARCH -RUN GOOS=$TARGETOS GOARCH=$TARGETARCH CGO_ENABLED=0 go build -o xray -trimpath -ldflags "-s -w -buildid=" ./main +RUN GOOS=$TARGETOS GOARCH=$TARGETARCH CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -gcflags="all=-l=4" -ldflags "-s -w -buildid=" ./main # Download geodat into a staging directory ADD https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/geoip.dat /tmp/geodat/geoip.dat diff --git a/xray-core/.github/docker/Dockerfile.usa b/xray-core/.github/docker/Dockerfile.usa index b307bc4b10..80cc523aa2 100644 --- a/xray-core/.github/docker/Dockerfile.usa +++ b/xray-core/.github/docker/Dockerfile.usa @@ -6,7 +6,7 @@ WORKDIR /src COPY . . ARG TARGETOS ARG TARGETARCH -RUN GOOS=$TARGETOS GOARCH=$TARGETARCH CGO_ENABLED=0 go build -o xray -trimpath -ldflags "-s -w -buildid=" ./main +RUN GOOS=$TARGETOS GOARCH=$TARGETARCH CGO_ENABLED=0 go build -o xray -trimpath -buildvcs=false -gcflags="all=-l=4" -ldflags "-s -w -buildid=" ./main # Download geodat into a staging directory ADD https://raw.githubusercontent.com/Loyalsoldier/v2ray-rules-dat/release/geoip.dat /tmp/geodat/geoip.dat diff --git a/xray-core/README.md b/xray-core/README.md index 6c7c05fa0b..7e13caaf09 100644 --- a/xray-core/README.md +++ b/xray-core/README.md @@ -121,12 +121,14 @@ - [OneXray](https://github.com/OneXray/OneXray) - [GoXRay](https://github.com/goxray/desktop) - [AnyPortal](https://github.com/AnyPortal/AnyPortal) + - [v2rayN](https://github.com/2dust/v2rayN) - Linux - [v2rayA](https://github.com/v2rayA/v2rayA) - [Furious](https://github.com/LorenEteval/Furious) - [GorzRay](https://github.com/ketetefid/GorzRay) - [GoXRay](https://github.com/goxray/desktop) - [AnyPortal](https://github.com/AnyPortal/AnyPortal) + - [v2rayN](https://github.com/2dust/v2rayN) ## Others that support VLESS, XTLS, REALITY, XUDP, PLUX... diff --git a/xray-core/app/reverse/bridge.go b/xray-core/app/reverse/bridge.go index fc83a7405d..324fea59ef 100644 --- a/xray-core/app/reverse/bridge.go +++ b/xray-core/app/reverse/bridge.go @@ -4,7 +4,6 @@ import ( "context" "time" - "github.com/xtls/xray-core/app/dispatcher" "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/mux" "github.com/xtls/xray-core/common/net" @@ -231,7 +230,9 @@ func (w *BridgeWorker) DispatchLink(ctx context.Context, dest net.Destination, l return w.Dispatcher.DispatchLink(ctx, dest, link) } - link = w.Dispatcher.(*dispatcher.DefaultDispatcher).WrapLink(ctx, link) + if d, ok := w.Dispatcher.(routing.WrapLinkDispatcher); ok { + link = d.WrapLink(ctx, link) + } w.handleInternalConn(link) return nil diff --git a/xray-core/common/mux/server.go b/xray-core/common/mux/server.go index f01c325d08..1c09018536 100644 --- a/xray-core/common/mux/server.go +++ b/xray-core/common/mux/server.go @@ -5,7 +5,6 @@ import ( "io" "time" - "github.com/xtls/xray-core/app/dispatcher" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" "github.com/xtls/xray-core/common/errors" @@ -64,7 +63,9 @@ func (s *Server) DispatchLink(ctx context.Context, dest net.Destination, link *t if dest.Address != muxCoolAddress { return s.dispatcher.DispatchLink(ctx, dest, link) } - link = s.dispatcher.(*dispatcher.DefaultDispatcher).WrapLink(ctx, link) + if d, ok := s.dispatcher.(routing.WrapLinkDispatcher); ok { + link = d.WrapLink(ctx, link) + } worker, err := NewServerWorker(ctx, s.dispatcher, link) if err != nil { return err diff --git a/xray-core/features/routing/dispatcher.go b/xray-core/features/routing/dispatcher.go index 53d3bf900f..c8354446c5 100644 --- a/xray-core/features/routing/dispatcher.go +++ b/xray-core/features/routing/dispatcher.go @@ -26,3 +26,9 @@ type Dispatcher interface { func DispatcherType() interface{} { return (*Dispatcher)(nil) } + +// Just for type assertion +type WrapLinkDispatcher interface { + Dispatcher + WrapLink(ctx context.Context, link *transport.Link) *transport.Link +} diff --git a/xray-core/go.mod b/xray-core/go.mod index 4e19f4dea5..e51632aee6 100644 --- a/xray-core/go.mod +++ b/xray-core/go.mod @@ -21,10 +21,10 @@ require ( github.com/vishvananda/netlink v1.3.1 github.com/xtls/reality v0.0.0-20251014195629-e4eec4520535 go4.org/netipx v0.0.0-20231129151722-fdeea329fbba - golang.org/x/crypto v0.43.0 - golang.org/x/net v0.46.1-0.20251013234738-63d1a5100f82 - golang.org/x/sync v0.17.0 - golang.org/x/sys v0.37.0 + golang.org/x/crypto v0.44.0 + golang.org/x/net v0.47.0 + golang.org/x/sync v0.18.0 + golang.org/x/sys v0.38.0 golang.zx2c4.com/wireguard v0.0.0-20231211153847-12269c276173 google.golang.org/grpc v1.77.0 google.golang.org/protobuf v1.36.10 @@ -46,10 +46,10 @@ require ( github.com/quic-go/qpack v0.5.1 // indirect github.com/riobard/go-bloom v0.0.0-20200614022211-cdc8013cb5b3 // indirect github.com/vishvananda/netns v0.0.5 // indirect - golang.org/x/mod v0.28.0 // indirect - golang.org/x/text v0.30.0 // indirect + golang.org/x/mod v0.29.0 // indirect + golang.org/x/text v0.31.0 // indirect golang.org/x/time v0.12.0 // indirect - golang.org/x/tools v0.37.0 // indirect + golang.org/x/tools v0.38.0 // indirect golang.zx2c4.com/wintun v0.0.0-20230126152724-0fa3db229ce2 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20251022142026-3a174f9686a8 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/xray-core/go.sum b/xray-core/go.sum index 2451ff89da..77ee8b99d2 100644 --- a/xray-core/go.sum +++ b/xray-core/go.sum @@ -95,20 +95,20 @@ go4.org/netipx v0.0.0-20231129151722-fdeea329fbba h1:0b9z3AuHCjxk0x/opv64kcgZLBs go4.org/netipx v0.0.0-20231129151722-fdeea329fbba/go.mod h1:PLyyIXexvUFg3Owu6p/WfdlivPbZJsZdgWZlrGope/Y= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.43.0 h1:dduJYIi3A3KOfdGOHX8AVZ/jGiyPa3IbBozJ5kNuE04= -golang.org/x/crypto v0.43.0/go.mod h1:BFbav4mRNlXJL4wNeejLpWxB7wMbc79PdRGhWKncxR0= +golang.org/x/crypto v0.44.0 h1:A97SsFvM3AIwEEmTBiaxPPTYpDC47w720rdiiUvgoAU= +golang.org/x/crypto v0.44.0/go.mod h1:013i+Nw79BMiQiMsOPcVCB5ZIJbYkerPrGnOa00tvmc= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.28.0 h1:gQBtGhjxykdjY9YhZpSlZIsbnaE2+PgjfLWUQTnoZ1U= -golang.org/x/mod v0.28.0/go.mod h1:yfB/L0NOf/kmEbXjzCPOx1iK1fRutOydrCMsqRhEBxI= +golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA= +golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.46.1-0.20251013234738-63d1a5100f82 h1:6/3JGEh1C88g7m+qzzTbl3A0FtsLguXieqofVLU/JAo= -golang.org/x/net v0.46.1-0.20251013234738-63d1a5100f82/go.mod h1:Q9BGdFy1y4nkUwiLvT5qtyhAnEHgnQ/zd8PfU6nc210= +golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY= +golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.17.0 h1:l60nONMj9l5drqw6jlhIELNv9I0A4OFgRsG9k2oT9Ug= -golang.org/x/sync v0.17.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= +golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I= +golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -116,21 +116,21 @@ golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= -golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= +golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.30.0 h1:yznKA/E9zq54KzlzBEAWn1NXSQ8DIp/NYMy88xJjl4k= -golang.org/x/text v0.30.0/go.mod h1:yDdHFIX9t+tORqspjENWgzaCVXgk0yYnYuSZ8UzzBVM= +golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= +golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.37.0 h1:DVSRzp7FwePZW356yEAChSdNcQo6Nsp+fex1SUW09lE= -golang.org/x/tools v0.37.0/go.mod h1:MBN5QPQtLMHVdvsbtarmTNukZDdgwdwlO5qGacAzF0w= +golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ= +golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/xray-core/proxy/socks/protocol.go b/xray-core/proxy/socks/protocol.go index 9bccf60777..76ceb47c08 100644 --- a/xray-core/proxy/socks/protocol.go +++ b/xray-core/proxy/socks/protocol.go @@ -353,6 +353,11 @@ func EncodeUDPPacket(request *protocol.RequestHeader, data []byte) (*buf.Buffer, b.Release() return nil, err } + // if data is too large, return an empty buffer (drop too big data) + if b.Available() < int32(len(data)) { + b.Clear() + return b, nil + } common.Must2(b.Write(data)) return b, nil } diff --git a/xray-core/proxy/vless/inbound/inbound.go b/xray-core/proxy/vless/inbound/inbound.go index 223aade08b..277ab06819 100644 --- a/xray-core/proxy/vless/inbound/inbound.go +++ b/xray-core/proxy/vless/inbound/inbound.go @@ -12,7 +12,6 @@ import ( "time" "unsafe" - "github.com/xtls/xray-core/app/dispatcher" "github.com/xtls/xray-core/app/reverse" "github.com/xtls/xray-core/common" "github.com/xtls/xray-core/common/buf" @@ -76,7 +75,7 @@ type Handler struct { validator vless.Validator decryption *encryption.ServerInstance outboundHandlerManager outbound.Manager - defaultDispatcher *dispatcher.DefaultDispatcher + wrapLink func(ctx context.Context, link *transport.Link) *transport.Link ctx context.Context fallbacks map[string]map[string]map[string]*Fallback // or nil // regexps map[string]*regexp.Regexp // or nil @@ -85,12 +84,16 @@ type Handler struct { // New creates a new VLess inbound handler. func New(ctx context.Context, config *Config, dc dns.Client, validator vless.Validator) (*Handler, error) { v := core.MustFromContext(ctx) + var wrapLinkFunc func(ctx context.Context, link *transport.Link) *transport.Link + if dispatcher, ok := v.GetFeature(routing.DispatcherType()).(routing.WrapLinkDispatcher); ok { + wrapLinkFunc = dispatcher.WrapLink + } handler := &Handler{ inboundHandlerManager: v.GetFeature(feature_inbound.ManagerType()).(feature_inbound.Manager), policyManager: v.GetFeature(policy.ManagerType()).(policy.Manager), validator: validator, outboundHandlerManager: v.GetFeature(outbound.ManagerType()).(outbound.Manager), - defaultDispatcher: v.GetFeature(routing.DispatcherType()).(*dispatcher.DefaultDispatcher), + wrapLink: wrapLinkFunc, ctx: ctx, } @@ -619,7 +622,10 @@ func (h *Handler) Process(ctx context.Context, network net.Network, connection s if err != nil { return err } - return r.NewMux(ctx, h.defaultDispatcher.WrapLink(ctx, &transport.Link{Reader: clientReader, Writer: clientWriter})) + if h.wrapLink == nil { + return errors.New("VLESS reverse must have a dispatcher that implemented routing.WrapLinkDispatcher") + } + return r.NewMux(ctx, h.wrapLink(ctx, &transport.Link{Reader: clientReader, Writer: clientWriter})) } if err := dispatcher.DispatchLink(ctx, request.Destination(), &transport.Link{ diff --git a/yt-dlp/yt_dlp/extractor/urplay.py b/yt-dlp/yt_dlp/extractor/urplay.py index a0ac2a0bc6..ad48e350ef 100644 --- a/yt-dlp/yt_dlp/extractor/urplay.py +++ b/yt-dlp/yt_dlp/extractor/urplay.py @@ -7,15 +7,15 @@ from ..utils import ( parse_age_limit, try_get, unified_timestamp, + url_or_none, ) -from ..utils.traversal import traverse_obj +from ..utils.traversal import require, traverse_obj class URPlayIE(InfoExtractor): _VALID_URL = r'https?://(?:www\.)?ur(?:play|skola)\.se/(?:program|Produkter)/(?P[0-9]+)' _TESTS = [{ 'url': 'https://urplay.se/program/203704-ur-samtiden-livet-universum-och-rymdens-markliga-musik-om-vetenskap-kritiskt-tankande-och-motstand', - 'md5': '5ba36643c77cc3d34ffeadad89937d1e', 'info_dict': { 'id': '203704', 'ext': 'mp4', @@ -31,6 +31,7 @@ class URPlayIE(InfoExtractor): 'episode': 'Om vetenskap, kritiskt tänkande och motstånd', 'age_limit': 15, }, + 'params': {'skip_download': 'm3u8'}, }, { 'url': 'https://urplay.se/program/222967-en-foralders-dagbok-mitt-barn-skadar-sig-sjalv', 'info_dict': { @@ -49,6 +50,7 @@ class URPlayIE(InfoExtractor): 'tags': 'count:7', 'episode': 'Mitt barn skadar sig själv', }, + 'params': {'skip_download': 'm3u8'}, }, { 'url': 'https://urskola.se/Produkter/190031-Tripp-Trapp-Trad-Sovkudde', 'info_dict': { @@ -68,6 +70,27 @@ class URPlayIE(InfoExtractor): 'episode': 'Sovkudde', 'season': 'Säsong 1', }, + 'params': {'skip_download': 'm3u8'}, + }, { + # Only accessible through new media api + 'url': 'https://urplay.se/program/242932-vulkanernas-krafter-fran-kraftfull-till-forgorande', + 'info_dict': { + 'id': '242932', + 'ext': 'mp4', + 'title': 'Vulkanernas krafter : Från kraftfull till förgörande', + 'description': 'md5:742bb87048e7d5a7f209d28f9bb70ab1', + 'age_limit': 15, + 'duration': 2613, + 'thumbnail': 'https://assets.ur.se/id/242932/images/1_hd.jpg', + 'categories': ['Vetenskap & teknik'], + 'tags': ['Geofysik', 'Naturvetenskap', 'Vulkaner', 'Vulkanutbrott'], + 'series': 'Vulkanernas krafter', + 'episode': 'Från kraftfull till förgörande', + 'episode_number': 2, + 'timestamp': 1763514000, + 'upload_date': '20251119', + }, + 'params': {'skip_download': 'm3u8'}, }, { 'url': 'http://urskola.se/Produkter/155794-Smasagor-meankieli-Grodan-i-vida-varlden', 'only_matching': True, @@ -88,21 +111,12 @@ class URPlayIE(InfoExtractor): webpage, 'urplayer data'), video_id)['accessibleEpisodes'] urplayer_data = next(e for e in accessible_episodes if e.get('id') == int_or_none(video_id)) episode = urplayer_data['title'] - - host = self._download_json('http://streaming-loadbalancer.ur.se/loadbalancer.json', video_id)['redirect'] - formats = [] - urplayer_streams = urplayer_data.get('streamingInfo', {}) - - for k, v in urplayer_streams.get('raw', {}).items(): - if not (k in ('sd', 'hd', 'mp3', 'm4a') and isinstance(v, dict)): - continue - file_http = v.get('location') - if file_http: - formats.extend(self._extract_wowza_formats( - f'http://{host}/{file_http}playlist.m3u8', - video_id, skip_protocols=['f4m', 'rtmp', 'rtsp'])) - - subtitles = {} + sources = self._download_json( + f'https://media-api.urplay.se/config-streaming/v1/urplay/sources/{video_id}', video_id, + note='Downloading streaming information') + hls_url = traverse_obj(sources, ('sources', 'hls', {url_or_none}, {require('HLS URL')})) + formats, subtitles = self._extract_m3u8_formats_and_subtitles( + hls_url, video_id, 'mp4', m3u8_id='hls') def parse_lang_code(code): "3-character language code or None (utils candidate)"