From ca3736511ef17608157169c8f36fd83292ae5c02 Mon Sep 17 00:00:00 2001 From: Fabio Berton Date: Tue, 19 Jul 2016 09:18:19 -0300 Subject: imx-kobs: Allow kobs-ng to flash the SPL on the 4.x kernel Add function to check if kernel support raw_mode and fix function that calculates the geometry based on known info from the mtd partitionmtd geometry. These patches were copied from: https://github.com/Gateworks/openwrt/commit/379e87df4fb67198fe900ffe2a394e69fbd47801 Signed-off-by: Fabio Berton Signed-off-by: Otavio Salvador --- .../imx-kobs/imx-kobs/fix-cal_nfc_geometry.patch | 31 ++++++++++++++ recipes-bsp/imx-kobs/imx-kobs/raw-mode.patch | 48 ++++++++++++++++++++++ recipes-bsp/imx-kobs/imx-kobs_5.4.bb | 2 + 3 files changed, 81 insertions(+) create mode 100644 recipes-bsp/imx-kobs/imx-kobs/fix-cal_nfc_geometry.patch create mode 100644 recipes-bsp/imx-kobs/imx-kobs/raw-mode.patch diff --git a/recipes-bsp/imx-kobs/imx-kobs/fix-cal_nfc_geometry.patch b/recipes-bsp/imx-kobs/imx-kobs/fix-cal_nfc_geometry.patch new file mode 100644 index 00000000..dddb49a1 --- /dev/null +++ b/recipes-bsp/imx-kobs/imx-kobs/fix-cal_nfc_geometry.patch @@ -0,0 +1,31 @@ +The Freescale downstream vendor kernel has a patch that exports the bch +flash geometry via a debugfs file. This is not available in mainline linux +kernels so the fallback method calculates the geometry based on known info +from the mtd partition. A bug exists in this funcion where it fails to +assume that block0 ECC is the same as the other blocks by default. + +Upstream-Status: Pending + +--- a/src/mtd.c ++++ b/src/mtd.c +@@ -610,7 +610,7 @@ static int cal_nfc_geometry(struct mtd_d + /* The two are fixed, please change them when the driver changes. */ + geo->metadata_size_in_bytes = 10; + geo->gf_len = 13; +- geo->ecc_chunkn_size_in_bytes = 512; ++ geo->ecc_chunkn_size_in_bytes = geo->ecc_chunk0_size_in_bytes = 512; + + if (mtd->oobsize > geo->ecc_chunkn_size_in_bytes) { + geo->gf_len = 14; +@@ -700,8 +700,9 @@ int parse_nfc_geometry(struct mtd_data * + unsigned int value; + + if (!plat_config_data->m_u32UseNfcGeo) { ++ /* fsl kernel patch provides bch_geometry via debugfs */ + if (!(node = fopen(dbg_geometry_node_path, "r"))) { +- fprintf(stderr, "Cannot open BCH geometry node: \"%s\"", ++ fprintf(stderr, "Cannot open BCH geometry node: \"%s\"\n", + dbg_geometry_node_path); + return cal_nfc_geometry(md); + } + diff --git a/recipes-bsp/imx-kobs/imx-kobs/raw-mode.patch b/recipes-bsp/imx-kobs/imx-kobs/raw-mode.patch new file mode 100644 index 00000000..76c2440a --- /dev/null +++ b/recipes-bsp/imx-kobs/imx-kobs/raw-mode.patch @@ -0,0 +1,48 @@ +The downstream Freescale vendor kernel has a patch that allows determining +if raw NAND flash mode is provided via a debugfs file. This is not present +in upstream kernels, but the raw access support was added in the 3.19 +kernel, so we will check the kernel version if we can't find the file. + +Upstream-Status: Pending + +--- a/src/mtd.c ++++ b/src/mtd.c +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + + #include "mtd.h" + #include "rand.h" +@@ -808,15 +809,27 @@ struct mtd_data *mtd_open(const struct m + md->cfg = *cfg; + + /* check if use new raw access mode */ ++ /* by looking for debugfs from fsl patch */ ++ md->raw_mode_flag = 0; + fp = fopen("/sys/kernel/debug/gpmi-nand/raw_mode", "r"); + if (!fp) { +- md->raw_mode_flag = 0; +- vp(md, "mtd: use legacy raw access mode\n"); ++ /* fallback to kernel version: raw access added in 3.19 */ ++ struct utsname uts; ++ if (!uname(&uts)) { ++ int major = 0, minor = 0; ++ sscanf(uts.release, "%d.%d", &major, &minor); ++ vp(md, "mtd: Linux %d.%d\n", major, minor); ++ if ((major << 8 | minor) > (3 << 8 | 18)) ++ md->raw_mode_flag = 1; ++ } + } else { + fclose(fp); + md->raw_mode_flag = 1; +- vp(md, "mtd: use new bch layout raw access mode\n"); + } ++ if (md->raw_mode_flag) ++ vp(md, "mtd: use new bch layout raw access mode\n"); ++ else ++ vp(md, "mtd: use legacy raw access mode\n"); + + if (plat_config_data->m_u32UseMultiBootArea) { + diff --git a/recipes-bsp/imx-kobs/imx-kobs_5.4.bb b/recipes-bsp/imx-kobs/imx-kobs_5.4.bb index 1d33d40b..de396a17 100644 --- a/recipes-bsp/imx-kobs/imx-kobs_5.4.bb +++ b/recipes-bsp/imx-kobs/imx-kobs_5.4.bb @@ -7,6 +7,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=393a5ca445f6965873eca0259a17f833" SRC_URI = "${FSL_MIRROR}/imx-kobs-${PV}.tar.gz \ file://fix-compile.patch \ + file://raw-mode.patch \ + file://fix-cal_nfc_geometry.patch \ " SRC_URI[md5sum] = "77467d834f858c2ec216841583e5f437" -- cgit v1.2.3-54-g00ecf