forked from dlink-dir_819/openwrt
The following upstreamed / superseded patches were dropped:
060-01-clk-mediatek-mt7629-fix-parent-clock-of-some-top-clo.patch
060-02-arm-dts-mt7629-fix-sgmii-clock-selection-for-etherne.patch
060-03-net-mediatek-use-correct-register-field-for-SGMII-sp.patch
060-04-net-mediatek-correct-register-name-of-ethsys-syscfg1.patch
060-05-net-mediatek-fix-sgmii-selection-for-mt7622.patch
060-06-net-mediatek-fix-gmac2-usability-for-mt7629.patch
060-07-net-mediatek-add-support-for-10GBASE-R.patch
060-08-net-mediatek-make-sgmii-usxgmii-optional.patch
060-09-net-mediatek-don-t-enable-GDMA-cpu-bridge-unconditio.patch
060-10-net-mediatek-fix-usability-with-wget-command.patch
061-01-net-mediatek-split-ethernet-switch-code-from-mtk_eth.patch
061-02-net-mediatek-add-support-for-MediaTek-MT7987-SoC.patch
061-03-net-mediatek-add-support-for-Airoha-AN8855-ethernet-.patch
070-01-board-mediatek-mt7622-remove-board_late_init.patch
070-02-clk-mediatek-fix-uninitialized-fields-issue-in-INFRA.patch
070-03-configs-mt7629-move-image-load-address-to-0x42000000.patch
070-04-configs-mt7988-move-image-load-address-to-0x44000000.patch
070-05-spi-mtk_spim-add-support-to-use-DT-live-tree.patch
070-06-spi-mtk_spim-check-slave-device-mode-in-spi-mem-s-su.patch
070-07-arm-dts-mediatek-add-quad-mode-capabilities-for-SPI-.patch
070-08-pwm-mediatek-add-pwm3-support-for-mt7981.patch
070-09-pci-mediatek-add-support-for-multiple-ports-in-media.patch
070-10-arm-dts-mediatek-add-pcie-support-for-mt7988.patch
070-11-arm-dts-medaitek-fix-internal-switch-link-speed-of-m.patch
070-12-arm-dts-mediatek-add-support-for-all-three-GMACs-for.patch
070-13-arm-dts-medaitek-add-flash-interface-driving-setting.patch
070-14-arm-dts-mediatek-update-mt7981-mmc-node.patch
070-15-MAINTAINERS-update-file-list-for-MediaTek-ARM-platfo.patch
071-01-pinctrl-mediatek-update-mt7981-pinctrl-driver-based-.patch
100-18-board-mt7629-add-support-for-booting-from-SPI-NAND.patch
290-mt7981-add-USB-nodes.patch
Refreshed all the patches needing it.
Run-tested: GatoNetworks GDSP, Arcadyan Mozart (ynezz),
Zbt WG3526 (dangowrt)
Signed-off-by: Enrico Mioso <mrkiko.rs@gmail.com>
Signed-off-by: Petr Štetiar <ynezz@true.cz> [patch refresh, Mozart testing]
Signed-off-by: Daniel Golle <daniel@makrotopia.org> [rebased, tested on MT7621]
261 lines
6.3 KiB
Diff
261 lines
6.3 KiB
Diff
From 240d98e6ad0aed3c11236aa40a60bbd6fe01fae5 Mon Sep 17 00:00:00 2001
|
|
From: Weijie Gao <weijie.gao@mediatek.com>
|
|
Date: Mon, 25 Jul 2022 10:50:46 +0800
|
|
Subject: [PATCH 45/71] env: add support for NMBM upper MTD layer
|
|
|
|
Add an env driver for NMBM upper MTD layer
|
|
|
|
Signed-off-by: Weijie Gao <weijie.gao@mediatek.com>
|
|
---
|
|
env/Kconfig | 19 ++++-
|
|
env/Makefile | 1 +
|
|
env/env.c | 3 +
|
|
env/nmbm.c | 155 +++++++++++++++++++++++++++++++++++++++++
|
|
include/env_internal.h | 1 +
|
|
tools/Makefile | 1 +
|
|
6 files changed, 178 insertions(+), 2 deletions(-)
|
|
create mode 100644 env/nmbm.c
|
|
|
|
--- a/env/Kconfig
|
|
+++ b/env/Kconfig
|
|
@@ -74,7 +74,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_MTD
|
|
+ !ENV_IS_IN_UBI && !ENV_IS_IN_NMBM && !ENV_IS_IN_MTD
|
|
select ENV_IS_NOWHERE
|
|
|
|
config ENV_IS_NOWHERE
|
|
@@ -318,6 +318,21 @@ config ENV_IS_IN_NAND
|
|
Currently, CONFIG_ENV_OFFSET_REDUND is not supported when
|
|
using CONFIG_ENV_OFFSET_OOB.
|
|
|
|
+config ENV_IS_IN_NMBM
|
|
+ bool "Environment in a NMBM upper MTD layer"
|
|
+ depends on !CHAIN_OF_TRUST
|
|
+ depends on NMBM_MTD
|
|
+ help
|
|
+ Define this if you have a NMBM upper MTD which you want to use for
|
|
+ the environment.
|
|
+
|
|
+ - CONFIG_ENV_OFFSET:
|
|
+ - CONFIG_ENV_SIZE:
|
|
+
|
|
+ These two #defines specify the offset and size of the environment
|
|
+ area within the first NAND device. CONFIG_ENV_OFFSET must be
|
|
+ aligned to an erase block boundary.
|
|
+
|
|
config ENV_RANGE
|
|
hex "Length of the region in which the environment can be written"
|
|
depends on ENV_IS_IN_NAND
|
|
@@ -604,7 +619,7 @@ config ENV_MTD_NAME
|
|
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_MTD
|
|
+ ENV_IS_IN_SPI_FLASH || ENV_IS_IN_NMBM || 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
|
|
--- a/env/Makefile
|
|
+++ b/env/Makefile
|
|
@@ -26,6 +26,7 @@ obj-$(CONFIG_$(PHASE_)ENV_IS_IN_FAT) +=
|
|
obj-$(CONFIG_$(PHASE_)ENV_IS_IN_EXT4) += ext4.o
|
|
obj-$(CONFIG_$(PHASE_)ENV_IS_IN_MTD) += mtd.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_FLASH) += flash.o
|
|
|
|
--- a/env/env.c
|
|
+++ b/env/env.c
|
|
@@ -52,6 +52,9 @@ static enum env_location env_locations[]
|
|
#ifdef CONFIG_ENV_IS_IN_NAND
|
|
ENVL_NAND,
|
|
#endif
|
|
+#ifdef CONFIG_ENV_IS_IN_NMBM
|
|
+ ENVL_NMBM,
|
|
+#endif
|
|
#ifdef CONFIG_ENV_IS_IN_NVRAM
|
|
ENVL_NVRAM,
|
|
#endif
|
|
--- /dev/null
|
|
+++ b/env/nmbm.c
|
|
@@ -0,0 +1,155 @@
|
|
+/* SPDX-License-Identifier: GPL-2.0 */
|
|
+/*
|
|
+ * Copyright (C) 2020 MediaTek Inc. All Rights Reserved.
|
|
+ *
|
|
+ * Author: Weijie Gao <weijie.gao@mediatek.com>
|
|
+ */
|
|
+
|
|
+#include <command.h>
|
|
+#include <env.h>
|
|
+#include <env_internal.h>
|
|
+#include <errno.h>
|
|
+#include <linux/kernel.h>
|
|
+#include <linux/stddef.h>
|
|
+#include <linux/types.h>
|
|
+#include <malloc.h>
|
|
+#include <memalign.h>
|
|
+#include <search.h>
|
|
+
|
|
+#include <nmbm/nmbm-mtd.h>
|
|
+
|
|
+#if defined(CONFIG_CMD_SAVEENV) && defined(CONFIG_NMBM_MTD)
|
|
+#define CMD_SAVEENV
|
|
+#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_nmbm_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;
|
|
+}
|
|
+
|
|
+#ifdef CMD_SAVEENV
|
|
+static int env_nmbm_save(void)
|
|
+{
|
|
+ ALLOC_CACHE_ALIGN_BUFFER(env_t, env_new, 1);
|
|
+ struct mtd_info *mtd;
|
|
+ struct erase_info ei;
|
|
+ int ret = 0;
|
|
+
|
|
+ ret = env_export(env_new);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ mtd = nmbm_mtd_get_upper_by_index(0);
|
|
+ if (!mtd)
|
|
+ return 1;
|
|
+
|
|
+ printf("Erasing on NMBM...\n");
|
|
+ memset(&ei, 0, sizeof(ei));
|
|
+
|
|
+ ei.mtd = mtd;
|
|
+ ei.addr = CONFIG_ENV_OFFSET;
|
|
+ ei.len = CONFIG_ENV_SIZE;
|
|
+
|
|
+ if (mtd_erase(mtd, &ei))
|
|
+ return 1;
|
|
+
|
|
+ printf("Writing on NMBM... ");
|
|
+ ret = mtd_write(mtd, CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE, NULL,
|
|
+ (u_char *)env_new);
|
|
+ puts(ret ? "FAILED!\n" : "OK\n");
|
|
+
|
|
+ return !!ret;
|
|
+}
|
|
+#endif /* CMD_SAVEENV */
|
|
+
|
|
+static int readenv(size_t offset, u_char *buf)
|
|
+{
|
|
+ struct mtd_info *mtd;
|
|
+ struct mtd_oob_ops ops;
|
|
+ int ret;
|
|
+ size_t len = CONFIG_ENV_SIZE;
|
|
+
|
|
+ mtd = nmbm_mtd_get_upper_by_index(0);
|
|
+ if (!mtd)
|
|
+ return 1;
|
|
+
|
|
+ ops.mode = MTD_OPS_AUTO_OOB;
|
|
+ ops.ooblen = 0;
|
|
+ while(len > 0) {
|
|
+ ops.datbuf = buf;
|
|
+ ops.len = min(len, (size_t)mtd->writesize);
|
|
+ ops.oobbuf = NULL;
|
|
+
|
|
+ ret = mtd_read_oob(mtd, offset, &ops);
|
|
+ if (ret)
|
|
+ return 1;
|
|
+
|
|
+ buf += mtd->writesize;
|
|
+ len -= mtd->writesize;
|
|
+ offset += mtd->writesize;
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int env_nmbm_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(nmbm) = {
|
|
+ .location = ENVL_NMBM,
|
|
+ ENV_NAME("NMBM")
|
|
+ .load = env_nmbm_load,
|
|
+#if defined(CMD_SAVEENV)
|
|
+ .save = env_save_ptr(env_nmbm_save),
|
|
+#endif
|
|
+ .init = env_nmbm_init,
|
|
+};
|
|
--- a/include/env_internal.h
|
|
+++ b/include/env_internal.h
|
|
@@ -110,6 +110,7 @@ enum env_location {
|
|
ENVL_MMC,
|
|
ENVL_MTD,
|
|
ENVL_NAND,
|
|
+ ENVL_NMBM,
|
|
ENVL_NVRAM,
|
|
ENVL_ONENAND,
|
|
ENVL_REMOTE,
|
|
--- a/tools/Makefile
|
|
+++ b/tools/Makefile
|
|
@@ -39,6 +39,7 @@ 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
|
|
ENVCRC-$(CONFIG_ENV_IS_IN_SPI_FLASH) = y
|
|
BUILD_ENVCRC ?= $(ENVCRC-y)
|