From 248c6dada5daa872014be30acb722ce18181c08d Mon Sep 17 00:00:00 2001
From: John Klug <john.klug@multitech.com>
Date: Tue, 4 Apr 2017 11:08:46 -0500
Subject: Add password creation utility mts-ubpasswd

---
 recipes-bsp/multitech/mts-id-eeprom.inc       | 2 +-
 recipes-bsp/multitech/mts-id-eeprom_0.2.10.bb | 3 +++
 recipes-bsp/multitech/mts-id-eeprom_0.2.6.bb  | 3 ---
 3 files changed, 4 insertions(+), 4 deletions(-)
 create mode 100644 recipes-bsp/multitech/mts-id-eeprom_0.2.10.bb
 delete mode 100644 recipes-bsp/multitech/mts-id-eeprom_0.2.6.bb

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/mts-id-eeprom.inc b/recipes-bsp/multitech/mts-id-eeprom.inc
index 61f024d..3bef9e9 100644
--- a/recipes-bsp/multitech/mts-id-eeprom.inc
+++ b/recipes-bsp/multitech/mts-id-eeprom.inc
@@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
 INC_PR = "r0"
 DEPENDS = "mts-io"
 
-SRCREV = "${PV}"
+SRCREV = "8801af07013ddfdf517d42bb50a21ebfad621460"
 
 SRC_URI = "git://git.multitech.net/mts-id-eeprom.git;protocol=git"
 S = "${WORKDIR}/git"
diff --git a/recipes-bsp/multitech/mts-id-eeprom_0.2.10.bb b/recipes-bsp/multitech/mts-id-eeprom_0.2.10.bb
new file mode 100644
index 0000000..9c5bd5f
--- /dev/null
+++ b/recipes-bsp/multitech/mts-id-eeprom_0.2.10.bb
@@ -0,0 +1,3 @@
+require mts-id-eeprom.inc
+
+PR = "${INC_PR}.1A"
diff --git a/recipes-bsp/multitech/mts-id-eeprom_0.2.6.bb b/recipes-bsp/multitech/mts-id-eeprom_0.2.6.bb
deleted file mode 100644
index ccf3521..0000000
--- a/recipes-bsp/multitech/mts-id-eeprom_0.2.6.bb
+++ /dev/null
@@ -1,3 +0,0 @@
-require mts-id-eeprom.inc
-
-PR = "${INC_PR}.0"
-- 
cgit v1.2.3


From 87223519b59a8bf42d05f8f8b4ac76c0b811c990 Mon Sep 17 00:00:00 2001
From: Mykyta Dorokhin <mykyta.dorokhin@globallogic.com>
Date: Tue, 31 Jan 2017 13:41:42 +0200
Subject: Add password creation utility to mts-id-eeprom

---
 recipes-bsp/multitech/mts-id-eeprom.inc          |   3 +-
 recipes-bsp/multitech/mts-id-eeprom/eeprom.patch | 262 +++++++++++++++++++++++
 recipes-bsp/multitech/mts-io_1.1.4.bb            |   4 -
 recipes-bsp/multitech/mts-io_1.5.9.bb            |   4 +
 4 files changed, 268 insertions(+), 5 deletions(-)
 create mode 100644 recipes-bsp/multitech/mts-id-eeprom/eeprom.patch
 delete mode 100644 recipes-bsp/multitech/mts-io_1.1.4.bb
 create mode 100644 recipes-bsp/multitech/mts-io_1.5.9.bb

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/mts-id-eeprom.inc b/recipes-bsp/multitech/mts-id-eeprom.inc
index 3bef9e9..d1e08b6 100644
--- a/recipes-bsp/multitech/mts-id-eeprom.inc
+++ b/recipes-bsp/multitech/mts-id-eeprom.inc
@@ -9,7 +9,8 @@ DEPENDS = "mts-io"
 
 SRCREV = "8801af07013ddfdf517d42bb50a21ebfad621460"
 
-SRC_URI = "git://git.multitech.net/mts-id-eeprom.git;protocol=git"
+SRC_URI = "git://git.multitech.net/mts-id-eeprom.git;protocol=git \
+	   file://eeprom.patch"
 S = "${WORKDIR}/git"
 
 inherit autotools
diff --git a/recipes-bsp/multitech/mts-id-eeprom/eeprom.patch b/recipes-bsp/multitech/mts-id-eeprom/eeprom.patch
new file mode 100644
index 0000000..4c19e22
--- /dev/null
+++ b/recipes-bsp/multitech/mts-id-eeprom/eeprom.patch
@@ -0,0 +1,262 @@
+diff -uNr old/src/eeprom_main.c new/src/eeprom_main.c
+--- old/src/eeprom_main.c	2017-04-04 12:38:41.561484898 -0500
++++ new/src/eeprom_main.c	2017-04-04 12:30:33.877499336 -0500
+@@ -1,7 +1,7 @@
+ /*
+  * Create an image file for the MTCDP ID EEPROM
+  *
+- * Copyright (C) 2016 by Multi-Tech Systems
++ * Copyright (C) 2013 by Multi-Tech Systems
+  *
+  * Author: James Maki <jmaki@multitech.com>
+  *
+@@ -160,7 +160,6 @@
+ 	fprintf(file, "capa-adc: %s\n", DEVICE_CAPA(id_eeprom->capa, CAPA_ADC) ? "true" : "false");
+ 	fprintf(file, "capa-wifi: %s\n", DEVICE_CAPA(id_eeprom->capa, CAPA_WIFI) ? "true" : "false");
+ 	fprintf(file, "capa-bluetooth: %s\n", DEVICE_CAPA(id_eeprom->capa, CAPA_BLUETOOTH) ? "true" : "false");
+-	fprintf(file, "capa-lora: %s\n", DEVICE_CAPA(id_eeprom->capa, CAPA_LORA) ? "true" : "false");
+ 
+ 	fprintf(file, "capa: \"");
+ 	
+@@ -188,20 +187,6 @@
+ 		ptr += sprintf(ptr, "%02X", id_eeprom->uuid[i]);
+ 	}
+ 	fprintf(file, "uuid: \"%s\"\n",  (char*)buf);
+-
+-	fprintf(file, "lora-eui: \"%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\"\n",
+-			id_eeprom->lora_eui[0],
+-			id_eeprom->lora_eui[1],
+-			id_eeprom->lora_eui[2],
+-			id_eeprom->lora_eui[3],
+-			id_eeprom->lora_eui[4],
+-			id_eeprom->lora_eui[5],
+-			id_eeprom->lora_eui[6],
+-			id_eeprom->lora_eui[7]);
+-
+-	fprintf(file, "lora-product-id: \"%.32s\"\n",  id_eeprom->lora_product_id);
+-	fprintf(file, "lora-hw-version: \"%.32s\"\n",  id_eeprom->lora_hw_version);
+-
+ 	fprintf(file, "...\n");
+ 
+ 	fclose(file);
+@@ -307,7 +292,6 @@
+ 	log_info("capa-adc: %s", DEVICE_CAPA(id_eeprom->capa, CAPA_ADC) ? "yes" : "no");
+ 	log_info("capa-wifi: %s", DEVICE_CAPA(id_eeprom->capa, CAPA_WIFI) ? "yes" : "no");
+ 	log_info("capa-bluetooth: %s", DEVICE_CAPA(id_eeprom->capa, CAPA_BLUETOOTH) ? "yes" : "no");
+-	log_info("capa-lora: %s", DEVICE_CAPA(id_eeprom->capa, CAPA_LORA) ?  "yes" : "no");
+ 
+ 	log_info("mac-bluetooth: %02X:%02X:%02X:%02X:%02X:%02X",
+             id_eeprom->mac_bluetooth[0],
+@@ -329,19 +313,6 @@
+ 		ptr += sprintf(ptr, "%02X", id_eeprom->uuid[i]);
+ 	}
+ 	log_info("uuid: %s", (char*)buf);
+-
+-	log_info("lora-eui: \"%02X:%02X:%02X:%02X:%02X:%02X:%02X:%02X\"",
+-			id_eeprom->lora_eui[0],
+-			id_eeprom->lora_eui[1],
+-			id_eeprom->lora_eui[2],
+-			id_eeprom->lora_eui[3],
+-			id_eeprom->lora_eui[4],
+-			id_eeprom->lora_eui[5],
+-			id_eeprom->lora_eui[6],
+-			id_eeprom->lora_eui[7]);
+-
+-	log_info("lora-product-id: %.32s",  id_eeprom->lora_product_id);
+-	log_info("lora-hw-version: %.32s",  id_eeprom->lora_hw_version);
+ }
+ 
+ static void mts_ap_eeprom_inspect(struct mts_ap_eeprom_layout *ap_eeprom)
+@@ -391,9 +362,7 @@
+ 	fprintf(out, "         --mac-addr <mac-addr> |\n");
+ 	fprintf(out, "         --mac-bluetooth <mac-addr> |\n");
+ 	fprintf(out, "         --mac-wifi <mac-addr> |\n");
+-	fprintf(out, "         --lora-eui <EUI-64> |\n");
+-	fprintf(out, "         --lora-hw-version <hw-version> |\n");
+-	fprintf(out, "         --lora-product-id <product-id> |\n");
++	fprintf(out, "         --eui <EUI-64> |\n");
+ 	fprintf(out, "         --imei <imei> |\n");
+ 	fprintf(out, "         --capa-gps |\n");
+ 	fprintf(out, "         --capa-din |\n");
+@@ -401,9 +370,7 @@
+ 	fprintf(out, "         --capa-adc |\n");
+ 	fprintf(out, "         --capa-wifi |\n");
+ 	fprintf(out, "         --capa-bluetooth |\n");
+-	fprintf(out, "         --capa-lora |\n");
+ 	fprintf(out, "         --capa-clear (clears all flags) |\n");
+-	fprintf(out, "         --hex-to-bin | \n");
+ 	fprintf(out, "         --out-format { bin | yaml (default) } |\n");
+ 	fprintf(out, "         --update |\n");
+ 	fprintf(out, "         --accessory-card\n");
+@@ -422,9 +389,7 @@
+ 	CMD_OPT_MAC_ADDR,
+ 	CMD_OPT_MAC_BLUETOOTH,
+ 	CMD_OPT_MAC_WIFI,
+-	CMD_OPT_LORA_EUI,
+-	CMD_OPT_LORA_HW_VERSION,
+-	CMD_OPT_LORA_PRODUCT_ID,
++	CMD_OPT_EUI,
+ 	CMD_OPT_IMEI,
+ 	CMD_OPT_CAPA_GPS,
+ 	CMD_OPT_CAPA_DIN,
+@@ -432,15 +397,12 @@
+ 	CMD_OPT_CAPA_ADC,
+ 	CMD_OPT_CAPA_WIFI,
+ 	CMD_OPT_CAPA_BLUETOOTH,
+-	CMD_OPT_CAPA_LORA,
+ 	CMD_OPT_CAPA_CLEAR,
+ 	CMD_OPT_OUT_FORMAT,
+ 	CMD_OPT_UPDATE,
+ 	CMD_OPT_ACCESSORY_CARD,
+-
+ 	CMD_OPT_VERSION,
+ 	CMD_OPT_HELP,
+-	CMD_OPT_HEX_TO_BIN,
+ };
+ 
+ static char *short_options = "f:";
+@@ -452,12 +414,10 @@
+ 	{"device-id", 1, NULL, CMD_OPT_DEVICE_ID},
+ 	{"uuid", 1, NULL, CMD_OPT_UUID},
+ 	{"hw-version", 1, NULL, CMD_OPT_HW_VERSION},
+-	{"lora-product-id", 1, NULL, CMD_OPT_LORA_PRODUCT_ID},
+-	{"lora-hw-version", 1, NULL, CMD_OPT_LORA_HW_VERSION},
+ 	{"mac-addr", 1, NULL, CMD_OPT_MAC_ADDR},
+ 	{"mac-bluetooth", 1, NULL, CMD_OPT_MAC_BLUETOOTH},
+ 	{"mac-wifi", 1, NULL, CMD_OPT_MAC_WIFI},
+-	{"lora-eui", 1, NULL, CMD_OPT_LORA_EUI},
++	{"eui", 1, NULL, CMD_OPT_EUI},
+ 	{"imei", 1, NULL, CMD_OPT_IMEI},
+ 	{"capa-gps", 0, NULL, CMD_OPT_CAPA_GPS},
+ 	{"capa-din", 0, NULL, CMD_OPT_CAPA_DIN},
+@@ -465,9 +425,7 @@
+ 	{"capa-adc", 0, NULL, CMD_OPT_CAPA_ADC},
+ 	{"capa-wifi", 0, NULL, CMD_OPT_CAPA_WIFI},
+ 	{"capa-bluetooth", 0, NULL, CMD_OPT_CAPA_BLUETOOTH},
+-	{"capa-lora", 0, NULL, CMD_OPT_CAPA_LORA},
+ 	{"capa-clear", 0, NULL, CMD_OPT_CAPA_CLEAR},
+-	{"hex-to-bin", 0, NULL, CMD_OPT_HEX_TO_BIN},
+ 	{"out-format", 1, NULL, CMD_OPT_OUT_FORMAT},
+ 	{"update", 0, NULL, CMD_OPT_UPDATE},
+ 	{"accessory-card", 0, NULL, CMD_OPT_ACCESSORY_CARD},
+@@ -494,9 +452,7 @@
+ 	char *uuid = NULL;
+ 	char *hw_version = NULL;
+ 	char *mac_addr = NULL;
+-	char *lora_eui = NULL;
+-	char *lora_product_id = NULL;
+-	char *lora_hw_version = NULL;
++	char *eui = NULL;
+ 
+ 	struct mts_id_eeprom_layout id_eeprom;
+ 	struct mts_ap_eeprom_layout ap_eeprom;
+@@ -616,10 +572,6 @@
+ 			product_id = optarg;
+ 			break;
+ 
+-		case CMD_OPT_LORA_PRODUCT_ID:
+-			lora_product_id = optarg;
+-			break;
+-
+ 		case CMD_OPT_DEVICE_ID:
+ 			device_id = optarg;
+ 			break;
+@@ -641,10 +593,6 @@
+ 			hw_version = optarg;
+ 			break;
+ 
+-		case CMD_OPT_LORA_HW_VERSION:
+-			lora_hw_version = optarg;
+-			break;
+-
+ 		case CMD_OPT_MAC_ADDR:
+ 			mac_addr = optarg;
+ 			break;
+@@ -667,8 +615,8 @@
+ 			}
+ 			break;
+ 
+-		case CMD_OPT_LORA_EUI:
+-			lora_eui = optarg;
++		case CMD_OPT_EUI:
++			eui = optarg;
+ 			break;
+ 
+ 		case CMD_OPT_IMEI:
+@@ -699,10 +647,6 @@
+ 		    DEVICE_CAPA_SET(id_eeprom.capa, CAPA_BLUETOOTH);
+ 				break;
+ 
+-		case CMD_OPT_CAPA_LORA:
+-		    DEVICE_CAPA_SET(id_eeprom.capa, CAPA_LORA);
+-				break;
+-				
+ 		case CMD_OPT_CAPA_CLEAR:
+ 			memset(id_eeprom.capa, 0, sizeof(id_eeprom.capa));
+ 			break;
+@@ -716,22 +660,7 @@
+ 			out_format = optarg;
+ 
+ 			break;
+-		case CMD_OPT_HEX_TO_BIN:
+-			{
+-			  char buf[1025];
+-			  char outbuf[1024];
+-			  size_t sz, len;
+-			  while((sz=read(0,buf,sizeof buf)) > 0) {
+-			    buf[sz] = 0;
+-			    sz = asciiHexToBin(buf,outbuf);
+-			    len = write(1,outbuf,sz);
+-			    if(len != sz) {
+-			      log_error("failure to write to stdout: %s",strerror(errno));
+-			      exit(1);
+-			    }
+-			  }
+-			  exit(0);
+-			}
++
+ 		default:
+ 			usage(stderr);
+ 			exit(1);
+@@ -779,35 +708,16 @@
+ 			exit(1);
+ 		}
+ 	}
+-	// on-board lora product id
+-	if (lora_product_id) {
+-		if (! accessory_card) {
+-			strncpy(id_eeprom.lora_product_id, lora_product_id, sizeof(id_eeprom.lora_product_id) - 1);
+-		} else {
+-			log_error("--lora-product-id option is not supported on accessory card eeprom");
+-			usage(stderr);
+-			exit(1);
+-		}
+-	}
+-	// on-board lora hw version
+-	if (lora_hw_version) {
+-		if (! accessory_card) {
+-			strncpy(id_eeprom.lora_hw_version, lora_hw_version, sizeof(id_eeprom.lora_hw_version) - 1);
+-		} else {
+-			log_error("--lora-hw-version option is not supported on accessory card eeprom");
++	if (eui) {
++		if (!accessory_card) {
++			log_error("EUI only supported on accessory card eeprom");
+ 			usage(stderr);
+ 			exit(1);
+ 		}
+-	}
+-	if (lora_eui) {
+-		if (!accessory_card) {
+-			tmp = hwaddr_aton(lora_eui, id_eeprom.lora_eui, sizeof(id_eeprom.lora_eui));
+-		}
+-		else {
+-			tmp = hwaddr_aton(lora_eui, ap_eeprom.eui, sizeof(ap_eeprom.eui));
+-		}
++
++		tmp = hwaddr_aton(eui, ap_eeprom.eui, sizeof(ap_eeprom.eui));
+ 		if (!tmp) {
+-			log_error("invalid EUI %s", lora_eui);
++			log_error("invalid EUI %s", eui);
+ 			usage(stderr);
+ 			exit(1);
+ 		}
diff --git a/recipes-bsp/multitech/mts-io_1.1.4.bb b/recipes-bsp/multitech/mts-io_1.1.4.bb
deleted file mode 100644
index 85b3de1..0000000
--- a/recipes-bsp/multitech/mts-io_1.1.4.bb
+++ /dev/null
@@ -1,4 +0,0 @@
-require mts-io.inc
-
-PR = "${INC_PR}.0"
-
diff --git a/recipes-bsp/multitech/mts-io_1.5.9.bb b/recipes-bsp/multitech/mts-io_1.5.9.bb
new file mode 100644
index 0000000..85b3de1
--- /dev/null
+++ b/recipes-bsp/multitech/mts-io_1.5.9.bb
@@ -0,0 +1,4 @@
+require mts-io.inc
+
+PR = "${INC_PR}.0"
+
-- 
cgit v1.2.3


From 8254d468bd749a5aa7df3dde68b3a1175b5e23e8 Mon Sep 17 00:00:00 2001
From: John Klug <john.klug@multitech.com>
Date: Thu, 6 Apr 2017 11:55:29 -0500
Subject: Debug patch to cause dbg() function to print

---
 recipes-bsp/multitech/u-boot-linux-utils/dbg.patch | 15 +++++++++++++++
 1 file changed, 15 insertions(+)
 create mode 100644 recipes-bsp/multitech/u-boot-linux-utils/dbg.patch

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/u-boot-linux-utils/dbg.patch b/recipes-bsp/multitech/u-boot-linux-utils/dbg.patch
new file mode 100644
index 0000000..af81220
--- /dev/null
+++ b/recipes-bsp/multitech/u-boot-linux-utils/dbg.patch
@@ -0,0 +1,15 @@
+# Set the debug flag for the build so we can monitor
+# what is going on.
+diff --git a/configure.in b/configure.in
+index 8fdc9ef..7a2eb01 100644
+--- a/configure.in
++++ b/configure.in
+@@ -15,7 +15,7 @@ required header missing]))
+ 
+ AC_CHECK_LIB([z], [crc32], [], AC_MSG_ERROR([libz is required]))
+ 
+-AC_DEFINE([DEBUG], 0, [set to 1 to enable debug])
++AC_DEFINE([DEBUG], 1, [set to 1 to enable debug])
+ AC_DEFINE([MTD_ENV1], "/dev/mtd3", [set to the first u-boot env mtd])
+ AC_DEFINE([MTD_ENV2], "/dev/mtd4", [set to the second (redundant) u-boot env mtd])
+ AC_DEFINE([MTD_SIZE], 0x20000, [size of u-boot env mtd])
-- 
cgit v1.2.3


From 1c83ec7a7931d63a6ac7cc7a28c277ae802b0e8e Mon Sep 17 00:00:00 2001
From: John Klug <john.klug@multitech.com>
Date: Thu, 6 Apr 2017 11:56:23 -0500
Subject: patch to prevent inadvertant erasure of environment and allow
 deliberate erasure

---
 .../multitech/u-boot-linux-utils/crc_erase.patch   | 97 ++++++++++++++++++++++
 1 file changed, 97 insertions(+)
 create mode 100644 recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch b/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch
new file mode 100644
index 0000000..67cd5ef
--- /dev/null
+++ b/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch
@@ -0,0 +1,97 @@
+# Print out the CRC's if debugging.
+# Prevent the erasure of the environment.
+# Allow the deliberate erasure of the environment with the
+# clearenv command. 
+diff --git a/src/u_boot.c b/src/u_boot.c
+index e240475..f10eaa3 100644
+--- a/src/u_boot.c
++++ b/src/u_boot.c
+@@ -64,6 +64,8 @@ static int write_uboot_env(const char *device, struct environment *env)
+ 		error("mtd_erase_all %s failed", device);
+ 		return -1;
+ 	}
++	if(env == NULL)
++		return 0;
+ 
+ 	fd = open(device, O_WRONLY);
+ 	if (fd < 0) {
+@@ -213,7 +215,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
+ 	}
+ 
+ 	env->crc = crc32(0, (uint8_t *) env->data, sizeof(env->data));
+-	dbg("crc: 0x%08X", env->crc);
++	dbg("Calculated crc: 0x%08X", env->crc);
+ 	env->flags = 0;
+ 
+ 	tmp = write_uboot_env(MTD_ENV1, env);
+@@ -252,6 +254,7 @@ int main(int argc, char *argv[]) {
+ 	struct environment *env2;
+ 	uint32_t crc1_ok;
+ 	uint32_t crc2_ok;
++        uint32_t mycrc;
+ 
+ 	if (argc <= 1) {
+ 		usage(stderr);
+@@ -301,12 +304,18 @@ int main(int argc, char *argv[]) {
+ 		error("read_uboot_env failed");
+ 		return 1;
+ 	}
+-	dbg("env1 crc: 0x%08X", env1->crc);
++	dbg("env1 stored crc: 0x%08X", env1->crc);
+ 	dbg("env1 flags: %d", env1->flags);
+-	if (crc32(0, (uint8_t *) env1->data, sizeof(env1->data)) == env1->crc) {
++	mycrc = crc32(0, (uint8_t *) env1->data, sizeof(env1->data));
++	if (mycrc == env1->crc) {
+ 		crc1_ok = 1;
+ 	} else {
+-		error("crc does not match on primary env");
++                dbg("env1 stored crc 0x%x, calculated crc 0x%x",env1->crc,mycrc);
++                if(env1->flags != 255)
++			error("crc does not match on env1");
++		else
++                	dbg("uninitialized env1");
++			
+ 		crc1_ok = 0;
+ 	}
+ 
+@@ -315,20 +324,26 @@ int main(int argc, char *argv[]) {
+ 		error("read_uboot_env failed");
+ 		return 1;
+ 	}
+-	dbg("env2 crc: 0x%08X", env2->crc);
++	dbg("env2 stored crc: 0x%08X", env2->crc);
+ 	dbg("env2 flags: %d", env2->flags);
+-	if (crc32(0, (uint8_t *) env2->data, sizeof(env2->data)) == env2->crc) {
++	mycrc = crc32(0, (uint8_t *) env2->data, sizeof(env2->data));
++	if (mycrc == env2->crc) {
+ 		crc2_ok = 1;
+ 	} else {
+-		error("crc does not match on redundant env");
++                dbg("env2 stored crc 0x%x, calculated crc 0x%x",env2->crc,mycrc);
++                if(env2->flags != 255)
++			error("crc does not match on env2");
++		else
++                	dbg("uninitialized env2");
+ 		crc2_ok = 0;
+ 	}
+ 
+ 	if (!crc1_ok && !crc2_ok) {
+-		error("both environments are bad: loading DEFAULT_ENV");
++		error("both environments are bad: not loading DEFAULT_ENV");
+ 		env = env1;
+ 		env->flags = 0;
+ 		memcpy(env->data, DEFAULT_ENV, sizeof(DEFAULT_ENV));
++                exit(1);
+ 	} else if (crc1_ok && !crc2_ok) {
+ 		env = env1;
+ 	} else if (!crc1_ok && crc2_ok) {
+@@ -353,6 +368,9 @@ int main(int argc, char *argv[]) {
+ 		err = cmd_printenv(env, argc, argv);
+ 	} else if (!tokcmp(cmd, "setenv")) {
+ 		err = cmd_setenv(env, argc, argv);
++	} else if (!tokcmp(cmd, "clearenv")) {
++		(void)write_uboot_env(MTD_ENV1, NULL);
++		(void)write_uboot_env(MTD_ENV2, NULL);
+ 	} else {
+ 		usage(stderr);
+ 		exit(1);
-- 
cgit v1.2.3


From e6fe39351d3363273365ef9be3c4ed4fa274e602 Mon Sep 17 00:00:00 2001
From: John Klug <john.klug@multitech.com>
Date: Thu, 6 Apr 2017 14:13:38 -0500
Subject: 2nd attempt:patch to prevent inadvertant erasure of environment and
 allow deliberate erasure

---
 recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch | 10 ++++++----
 1 file changed, 6 insertions(+), 4 deletions(-)

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch b/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch
index 67cd5ef..5d78703 100644
--- a/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch
+++ b/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch
@@ -3,7 +3,7 @@
 # Allow the deliberate erasure of the environment with the
 # clearenv command. 
 diff --git a/src/u_boot.c b/src/u_boot.c
-index e240475..f10eaa3 100644
+index e240475..94f18ed 100644
 --- a/src/u_boot.c
 +++ b/src/u_boot.c
 @@ -64,6 +64,8 @@ static int write_uboot_env(const char *device, struct environment *env)
@@ -54,7 +54,7 @@ index e240475..f10eaa3 100644
  		crc1_ok = 0;
  	}
  
-@@ -315,20 +324,26 @@ int main(int argc, char *argv[]) {
+@@ -315,20 +324,27 @@ int main(int argc, char *argv[]) {
  		error("read_uboot_env failed");
  		return 1;
  	}
@@ -75,8 +75,10 @@ index e240475..f10eaa3 100644
  		crc2_ok = 0;
  	}
  
- 	if (!crc1_ok && !crc2_ok) {
+-	if (!crc1_ok && !crc2_ok) {
 -		error("both environments are bad: loading DEFAULT_ENV");
++	if (!crc1_ok && !crc2_ok && env1->crc == 0xffffffff &&
++	  (env1->flags == 0xff) && (env2->flags == 0xff) && (env2->crc == 0xffffffff)) {
 +		error("both environments are bad: not loading DEFAULT_ENV");
  		env = env1;
  		env->flags = 0;
@@ -85,7 +87,7 @@ index e240475..f10eaa3 100644
  	} else if (crc1_ok && !crc2_ok) {
  		env = env1;
  	} else if (!crc1_ok && crc2_ok) {
-@@ -353,6 +368,9 @@ int main(int argc, char *argv[]) {
+@@ -353,6 +369,9 @@ int main(int argc, char *argv[]) {
  		err = cmd_printenv(env, argc, argv);
  	} else if (!tokcmp(cmd, "setenv")) {
  		err = cmd_setenv(env, argc, argv);
-- 
cgit v1.2.3


From 35b6b59cc3aabc1cd062aed3f7298e12d914ce98 Mon Sep 17 00:00:00 2001
From: John Klug <john.klug@multitech.com>
Date: Fri, 7 Apr 2017 18:58:12 -0500
Subject: Update configure

---
 recipes-bsp/multitech/u-boot-linux-utils/dbg.patch | 15 ------------
 .../u-boot-linux-utils/uboot_configure.patch       | 28 ++++++++++++++++++++++
 2 files changed, 28 insertions(+), 15 deletions(-)
 delete mode 100644 recipes-bsp/multitech/u-boot-linux-utils/dbg.patch
 create mode 100644 recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/u-boot-linux-utils/dbg.patch b/recipes-bsp/multitech/u-boot-linux-utils/dbg.patch
deleted file mode 100644
index af81220..0000000
--- a/recipes-bsp/multitech/u-boot-linux-utils/dbg.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-# Set the debug flag for the build so we can monitor
-# what is going on.
-diff --git a/configure.in b/configure.in
-index 8fdc9ef..7a2eb01 100644
---- a/configure.in
-+++ b/configure.in
-@@ -15,7 +15,7 @@ required header missing]))
- 
- AC_CHECK_LIB([z], [crc32], [], AC_MSG_ERROR([libz is required]))
- 
--AC_DEFINE([DEBUG], 0, [set to 1 to enable debug])
-+AC_DEFINE([DEBUG], 1, [set to 1 to enable debug])
- AC_DEFINE([MTD_ENV1], "/dev/mtd3", [set to the first u-boot env mtd])
- AC_DEFINE([MTD_ENV2], "/dev/mtd4", [set to the second (redundant) u-boot env mtd])
- AC_DEFINE([MTD_SIZE], 0x20000, [size of u-boot env mtd])
diff --git a/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch b/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch
new file mode 100644
index 0000000..e7a7fe0
--- /dev/null
+++ b/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch
@@ -0,0 +1,28 @@
+commit 0de7b48ba5bfca360d7c1840e9415f8a8177eede
+Author: John Klug <john.klug@multitech.com>
+Date:   Fri Apr 7 16:33:13 2017 -0500
+
+    Defaults for u-boot-linux-utils + debug turned on
+
+diff --git a/configure.in b/configure.in
+index 8fdc9ef..85998a9 100644
+--- a/configure.in
++++ b/configure.in
+@@ -15,12 +15,15 @@ required header missing]))
+ 
+ AC_CHECK_LIB([z], [crc32], [], AC_MSG_ERROR([libz is required]))
+ 
+-AC_DEFINE([DEBUG], 0, [set to 1 to enable debug])
++AC_DEFINE([DEBUG], 1, [set to 1 to enable debug])
+ AC_DEFINE([MTD_ENV1], "/dev/mtd3", [set to the first u-boot env mtd])
+ AC_DEFINE([MTD_ENV2], "/dev/mtd4", [set to the second (redundant) u-boot env mtd])
+ AC_DEFINE([MTD_SIZE], 0x20000, [size of u-boot env mtd])
+-AC_DEFINE([DEFAULT_ENV], ["bootargs=mem=64M console=ttyS0,115200 root=/dev/mtdblock8 ro rootfstype=jffs2\0" "bootcmd=nboot.jffs2 ${loadaddr} 0 ${kernel_addr}; bootm ${loadaddr}\0" "bootdelay=3\0" "baudrate=115200\0" "ethaddr=00:D0:A0:02:0D:E1\0" "ipaddr=192.168.2.1\0" "serverip=192.168.2.2\0" "netmask=255.255.255.0\0" "hostname=AT91SAM9G20\0" "loadaddr=0x21400000\0" "kernel_addr=0x000A0000\0" "\0"]
++
++AC_DEFINE([DEFAULT_ENV], ["baudrate=115200\0" "bootargs=mem=256M console=ttyS0,115200 root=/dev/mtdblock8 ro rootfstype=jffs2\0" "bootcmd=nboot.jffs2 ${loadaddr} 0 ${kernel_addr}; bootm ${loadaddr}\0" "bootdelay=0\0" "ethact=macb0\0" "hostname=AT91SAM9G25\0" "ipaddr=192.168.2.1\0" "kernel_addr=0x200000\0" "loadaddr=0x22000000\0" "serverip=192.168.2.2\0" "netmask=255.255.255.0\0" "stderr=serial\0" "stdin=serial\0" "stdout=serial\0"]
+ , [default env if corrupt])
+ 
++AC_DEFINE([MAC_PATH],["/sys/devices/platform/mts-io/mac-eth"], [MAC_PATH for defining ethaddr= in boot environment])
++
+ AC_OUTPUT([Makefile src/Makefile])
+ 
-- 
cgit v1.2.3


From 851eb02635f7dfbf20864cb8e9b01d59ad07ec45 Mon Sep 17 00:00:00 2001
From: John Klug <john.klug@multitech.com>
Date: Mon, 10 Apr 2017 12:26:19 -0500
Subject: Fix MAC address in default environment

---
 .../multitech/u-boot-linux-utils/crc_erase.patch   |  99 ------------
 .../multitech/u-boot-linux-utils/uboot_mac.patch   | 169 +++++++++++++++++++++
 recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb  |   7 +-
 3 files changed, 174 insertions(+), 101 deletions(-)
 delete mode 100644 recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch
 create mode 100644 recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch b/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch
deleted file mode 100644
index 5d78703..0000000
--- a/recipes-bsp/multitech/u-boot-linux-utils/crc_erase.patch
+++ /dev/null
@@ -1,99 +0,0 @@
-# Print out the CRC's if debugging.
-# Prevent the erasure of the environment.
-# Allow the deliberate erasure of the environment with the
-# clearenv command. 
-diff --git a/src/u_boot.c b/src/u_boot.c
-index e240475..94f18ed 100644
---- a/src/u_boot.c
-+++ b/src/u_boot.c
-@@ -64,6 +64,8 @@ static int write_uboot_env(const char *device, struct environment *env)
- 		error("mtd_erase_all %s failed", device);
- 		return -1;
- 	}
-+	if(env == NULL)
-+		return 0;
- 
- 	fd = open(device, O_WRONLY);
- 	if (fd < 0) {
-@@ -213,7 +215,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
- 	}
- 
- 	env->crc = crc32(0, (uint8_t *) env->data, sizeof(env->data));
--	dbg("crc: 0x%08X", env->crc);
-+	dbg("Calculated crc: 0x%08X", env->crc);
- 	env->flags = 0;
- 
- 	tmp = write_uboot_env(MTD_ENV1, env);
-@@ -252,6 +254,7 @@ int main(int argc, char *argv[]) {
- 	struct environment *env2;
- 	uint32_t crc1_ok;
- 	uint32_t crc2_ok;
-+        uint32_t mycrc;
- 
- 	if (argc <= 1) {
- 		usage(stderr);
-@@ -301,12 +304,18 @@ int main(int argc, char *argv[]) {
- 		error("read_uboot_env failed");
- 		return 1;
- 	}
--	dbg("env1 crc: 0x%08X", env1->crc);
-+	dbg("env1 stored crc: 0x%08X", env1->crc);
- 	dbg("env1 flags: %d", env1->flags);
--	if (crc32(0, (uint8_t *) env1->data, sizeof(env1->data)) == env1->crc) {
-+	mycrc = crc32(0, (uint8_t *) env1->data, sizeof(env1->data));
-+	if (mycrc == env1->crc) {
- 		crc1_ok = 1;
- 	} else {
--		error("crc does not match on primary env");
-+                dbg("env1 stored crc 0x%x, calculated crc 0x%x",env1->crc,mycrc);
-+                if(env1->flags != 255)
-+			error("crc does not match on env1");
-+		else
-+                	dbg("uninitialized env1");
-+			
- 		crc1_ok = 0;
- 	}
- 
-@@ -315,20 +324,27 @@ int main(int argc, char *argv[]) {
- 		error("read_uboot_env failed");
- 		return 1;
- 	}
--	dbg("env2 crc: 0x%08X", env2->crc);
-+	dbg("env2 stored crc: 0x%08X", env2->crc);
- 	dbg("env2 flags: %d", env2->flags);
--	if (crc32(0, (uint8_t *) env2->data, sizeof(env2->data)) == env2->crc) {
-+	mycrc = crc32(0, (uint8_t *) env2->data, sizeof(env2->data));
-+	if (mycrc == env2->crc) {
- 		crc2_ok = 1;
- 	} else {
--		error("crc does not match on redundant env");
-+                dbg("env2 stored crc 0x%x, calculated crc 0x%x",env2->crc,mycrc);
-+                if(env2->flags != 255)
-+			error("crc does not match on env2");
-+		else
-+                	dbg("uninitialized env2");
- 		crc2_ok = 0;
- 	}
- 
--	if (!crc1_ok && !crc2_ok) {
--		error("both environments are bad: loading DEFAULT_ENV");
-+	if (!crc1_ok && !crc2_ok && env1->crc == 0xffffffff &&
-+	  (env1->flags == 0xff) && (env2->flags == 0xff) && (env2->crc == 0xffffffff)) {
-+		error("both environments are bad: not loading DEFAULT_ENV");
- 		env = env1;
- 		env->flags = 0;
- 		memcpy(env->data, DEFAULT_ENV, sizeof(DEFAULT_ENV));
-+                exit(1);
- 	} else if (crc1_ok && !crc2_ok) {
- 		env = env1;
- 	} else if (!crc1_ok && crc2_ok) {
-@@ -353,6 +369,9 @@ int main(int argc, char *argv[]) {
- 		err = cmd_printenv(env, argc, argv);
- 	} else if (!tokcmp(cmd, "setenv")) {
- 		err = cmd_setenv(env, argc, argv);
-+	} else if (!tokcmp(cmd, "clearenv")) {
-+		(void)write_uboot_env(MTD_ENV1, NULL);
-+		(void)write_uboot_env(MTD_ENV2, NULL);
- 	} else {
- 		usage(stderr);
- 		exit(1);
diff --git a/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch b/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch
new file mode 100644
index 0000000..5b92f35
--- /dev/null
+++ b/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch
@@ -0,0 +1,169 @@
+commit de3ea4470a6da4c01bfff9377649324747c1e3c9
+Author: John Klug <john.klug@multitech.com>
+Date:   Mon Apr 10 12:16:08 2017 -0500
+
+    Add MAC address in default environment and add clearenv functionality.
+
+diff --git a/src/u_boot.c b/src/u_boot.c
+index e240475..7eea5e9 100644
+--- a/src/u_boot.c
++++ b/src/u_boot.c
+@@ -36,6 +36,12 @@
+ 
+ #include "u_boot.h"
+ 
++
++#define DUMMY_MAC "00:00:00:00:00:00"
++#define MACNAME   "ethaddr"
++
++#define EMPTY_CRC 0xf9137807
++
+ static int tokcmp(const char *cmd, const char *pattern) {
+ 	int len = strlen(cmd);
+ 	if (len > strlen(pattern)) {
+@@ -64,6 +70,8 @@ static int write_uboot_env(const char *device, struct environment *env)
+ 		error("mtd_erase_all %s failed", device);
+ 		return -1;
+ 	}
++	if(env == NULL)
++		return 0;
+ 
+ 	fd = open(device, O_WRONLY);
+ 	if (fd < 0) {
+@@ -166,7 +174,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
+ 	var = env->data;
+ 	while (*var) {
+ 		if (!strncmp(var, name, name_len) && var[name_len] == '=') {
+-			dbg("found variable (%s) at %lld", var, (long long int) var);
++			dbg("found variable (%s) at %p", var, var);
+ 
+ 			cp = next_var(var);
+ 			while (*cp) {
+@@ -213,7 +221,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
+ 	}
+ 
+ 	env->crc = crc32(0, (uint8_t *) env->data, sizeof(env->data));
+-	dbg("crc: 0x%08X", env->crc);
++	dbg("Calculated crc (to be stored): 0x%08X", env->crc);
+ 	env->flags = 0;
+ 
+ 	tmp = write_uboot_env(MTD_ENV1, env);
+@@ -238,7 +246,7 @@ static void print_version(const char *name) {
+ }
+ 
+ static void usage(FILE *out) {
+-	fprintf(out, "Usage: u-boot { printenv [ name ] | setenv name [ value ] }\n");
++	fprintf(out, "Usage: u-boot { printenv [ name ] | setenv name [ value ] | clearenv }\n");
+ 	fprintf(out, "\n");
+ }
+ 
+@@ -252,6 +260,7 @@ int main(int argc, char *argv[]) {
+ 	struct environment *env2;
+ 	uint32_t crc1_ok;
+ 	uint32_t crc2_ok;
++	uint32_t crc1_calc, crc2_calc;
+ 
+ 	if (argc <= 1) {
+ 		usage(stderr);
+@@ -301,12 +310,18 @@ int main(int argc, char *argv[]) {
+ 		error("read_uboot_env failed");
+ 		return 1;
+ 	}
+-	dbg("env1 crc: 0x%08X", env1->crc);
++	dbg("env1 stored crc: 0x%08X", env1->crc);
+ 	dbg("env1 flags: %d", env1->flags);
+-	if (crc32(0, (uint8_t *) env1->data, sizeof(env1->data)) == env1->crc) {
++	crc1_calc = crc32(0, (uint8_t *) env1->data, sizeof(env1->data));
++	if (crc1_calc == env1->crc) {
+ 		crc1_ok = 1;
+ 	} else {
+-		error("crc does not match on primary env");
++                dbg("env1 stored crc 0x%x, calculated crc 0x%x",env1->crc,crc1_calc);
++                if ((env1->crc != 0xffffffff) || (crc1_calc != EMPTY_CRC))
++			error("crc does not match on env1");
++		else
++			dbg("uninitialized env1");
++
+ 		crc1_ok = 0;
+ 	}
+ 
+@@ -315,20 +330,64 @@ int main(int argc, char *argv[]) {
+ 		error("read_uboot_env failed");
+ 		return 1;
+ 	}
+-	dbg("env2 crc: 0x%08X", env2->crc);
++	dbg("env2 stored crc: 0x%08X", env2->crc);
+ 	dbg("env2 flags: %d", env2->flags);
+-	if (crc32(0, (uint8_t *) env2->data, sizeof(env2->data)) == env2->crc) {
++	crc2_calc = crc32(0, (uint8_t *) env2->data, sizeof(env2->data));
++	if (crc2_calc == env2->crc) {
+ 		crc2_ok = 1;
+ 	} else {
+-		error("crc does not match on redundant env");
++                dbg("env2 stored crc 0x%x, calculated crc 0x%x",env2->crc,crc2_calc);
++                if ((env2->crc != 0xffffffff) || (crc2_calc != EMPTY_CRC) )
++			error("crc does not match on env2");
++		else
++			dbg("uninitialized env2");
+ 		crc2_ok = 0;
+ 	}
+ 
+-	if (!crc1_ok && !crc2_ok) {
+-		error("both environments are bad: loading DEFAULT_ENV");
++	if (!crc1_ok && !crc2_ok && (env1->crc == 0xffffffff) &&
++	   (env2->crc == 0xffffffff) && (crc1_calc == EMPTY_CRC) &&
++		 (crc2_calc == EMPTY_CRC) ) {
++		int mp_fd = open(MAC_PATH, O_RDONLY);
++		int len,retval;
++		char *p;
++
++		fputs("WARNING: Flash is in initial state, so use defaults\n",stderr);
+ 		env = env1;
+ 		env->flags = 0;
+ 		memcpy(env->data, DEFAULT_ENV, sizeof(DEFAULT_ENV));
++		/* Now need to find the MAC address */
++		if (mp_fd == -1) {
++		  perror("Cannot open: " MAC_PATH);
++		  exit(1);
++                }
++
++		len = sizeof DUMMY_MAC - 1;  /* remove null from count */
++		p = malloc(len);
++		retval = read(mp_fd,p,len);
++                dbg("Mac read of %d returned %d",len,retval);
++		if(retval != len) {
++		  if(retval == -1) {
++			perror("Failed to read: " MAC_PATH);
++			exit(1);
++		  }
++		  if (retval != len) {
++			fprintf(stderr,"%s: Only read %d characters of %d for the MAC address\n",
++				MAC_PATH,retval,len);
++			fprintf(stderr,"%s: Read %*.*s\n",MAC_PATH,retval,retval,p);
++			exit(1);
++		  }
++                }
++		len = sizeof(DEFAULT_ENV);
++		memcpy(env->data + len - 1, MACNAME, sizeof MACNAME);
++		len += sizeof MACNAME - 1;
++		env->data[len-1] = '=';
++		memcpy(env->data + len, p, sizeof DUMMY_MAC - 1);
++		len += sizeof DUMMY_MAC;
++		env->data[len-1] = 0;
++		env->data[len] = 0;
++	} else if (!crc1_ok && !crc2_ok) {
++		error("both environments are bad: not loading DEFAULT_ENV");
++                exit(1);
+ 	} else if (crc1_ok && !crc2_ok) {
+ 		env = env1;
+ 	} else if (!crc1_ok && crc2_ok) {
+@@ -353,6 +412,9 @@ int main(int argc, char *argv[]) {
+ 		err = cmd_printenv(env, argc, argv);
+ 	} else if (!tokcmp(cmd, "setenv")) {
+ 		err = cmd_setenv(env, argc, argv);
++	} else if (!tokcmp(cmd, "clearenv")) {
++		(void)write_uboot_env(MTD_ENV1, NULL);
++		(void)write_uboot_env(MTD_ENV2, NULL);
+ 	} else {
+ 		usage(stderr);
+ 		exit(1);
diff --git a/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb b/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb
index 36510f8..0d5f2dc 100644
--- a/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb
+++ b/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb
@@ -4,14 +4,17 @@ SECTION = "console/utils"
 PRIORITY = "optional"
 LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
-PR = "r0"
+PR = "r3"
 
 DEPENDS = "mtd-utils"
 
 # tag 0.0.1
 SRCREV = "9c154405c2d01648f41c6a72bcc96f9865c4f07c"
 
-SRC_URI = "git://git.multitech.net/u-boot-linux-utils.git;protocol=git"
+SRC_URI = "git://git.multitech.net/u-boot-linux-utils.git;protocol=git \
+           file://uboot_mac.patch \
+	   file://uboot_configure.patch"
+
 S = "${WORKDIR}/git"
 
 inherit autotools
-- 
cgit v1.2.3


From 649ca4f91935ac2843c661cd1ff437ee83effe3e Mon Sep 17 00:00:00 2001
From: John Klug <john.klug@multitech.com>
Date: Tue, 11 Apr 2017 18:01:18 -0500
Subject: Start of deriving the environment from the u-boot package.

---
 .../u-boot-linux-utils/uboot_configure.patch       | 18 +++----
 .../multitech/u-boot-linux-utils/uboot_mac.patch   | 55 +++++++++++++++-------
 recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb  |  7 +--
 3 files changed, 53 insertions(+), 27 deletions(-)

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch b/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch
index e7a7fe0..d8f5223 100644
--- a/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch
+++ b/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch
@@ -1,11 +1,11 @@
-commit 0de7b48ba5bfca360d7c1840e9415f8a8177eede
+commit 591d0dab81465e5e0df5b5ba6b70e2ec74f25bbc
 Author: John Klug <john.klug@multitech.com>
-Date:   Fri Apr 7 16:33:13 2017 -0500
+Date:   Tue Apr 11 17:35:38 2017 -0500
 
-    Defaults for u-boot-linux-utils + debug turned on
+    Allow a DEFAULT ENV file, and get the MTD_SIZE from CONFIG_ENV_SIZE in uboot
 
 diff --git a/configure.in b/configure.in
-index 8fdc9ef..85998a9 100644
+index 8fdc9ef..8f6a1db 100644
 --- a/configure.in
 +++ b/configure.in
 @@ -15,12 +15,15 @@ required header missing]))
@@ -16,13 +16,15 @@ index 8fdc9ef..85998a9 100644
 +AC_DEFINE([DEBUG], 1, [set to 1 to enable debug])
  AC_DEFINE([MTD_ENV1], "/dev/mtd3", [set to the first u-boot env mtd])
  AC_DEFINE([MTD_ENV2], "/dev/mtd4", [set to the second (redundant) u-boot env mtd])
- AC_DEFINE([MTD_SIZE], 0x20000, [size of u-boot env mtd])
+-AC_DEFINE([MTD_SIZE], 0x20000, [size of u-boot env mtd])
 -AC_DEFINE([DEFAULT_ENV], ["bootargs=mem=64M console=ttyS0,115200 root=/dev/mtdblock8 ro rootfstype=jffs2\0" "bootcmd=nboot.jffs2 ${loadaddr} 0 ${kernel_addr}; bootm ${loadaddr}\0" "bootdelay=3\0" "baudrate=115200\0" "ethaddr=00:D0:A0:02:0D:E1\0" "ipaddr=192.168.2.1\0" "serverip=192.168.2.2\0" "netmask=255.255.255.0\0" "hostname=AT91SAM9G20\0" "loadaddr=0x21400000\0" "kernel_addr=0x000A0000\0" "\0"]
+-, [default env if corrupt])
 +
-+AC_DEFINE([DEFAULT_ENV], ["baudrate=115200\0" "bootargs=mem=256M console=ttyS0,115200 root=/dev/mtdblock8 ro rootfstype=jffs2\0" "bootcmd=nboot.jffs2 ${loadaddr} 0 ${kernel_addr}; bootm ${loadaddr}\0" "bootdelay=0\0" "ethact=macb0\0" "hostname=AT91SAM9G25\0" "ipaddr=192.168.2.1\0" "kernel_addr=0x200000\0" "loadaddr=0x22000000\0" "serverip=192.168.2.2\0" "netmask=255.255.255.0\0" "stderr=serial\0" "stdin=serial\0" "stdout=serial\0"]
- , [default env if corrupt])
- 
 +AC_DEFINE([MAC_PATH],["/sys/devices/platform/mts-io/mac-eth"], [MAC_PATH for defining ethaddr= in boot environment])
 +
++AC_DEFINE_UNQUOTED([DEFAULT_ENV],
++                   [$(cat ../DEFAULT_ENV.cfg | tr -d '\n')],
++                   [default environment values])
+ 
  AC_OUTPUT([Makefile src/Makefile])
  
diff --git a/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch b/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch
index 5b92f35..77f28a2 100644
--- a/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch
+++ b/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch
@@ -1,27 +1,50 @@
-commit de3ea4470a6da4c01bfff9377649324747c1e3c9
+commit afa8fc0d0b3d8ccde464ab207724491c7b732c3d
 Author: John Klug <john.klug@multitech.com>
-Date:   Mon Apr 10 12:16:08 2017 -0500
+Date:   Tue Apr 11 17:58:15 2017 -0500
 
-    Add MAC address in default environment and add clearenv functionality.
+    Derive MTD size from CONFIG_ENV_SIZE
 
 diff --git a/src/u_boot.c b/src/u_boot.c
-index e240475..7eea5e9 100644
+index e240475..8c4fced 100644
 --- a/src/u_boot.c
 +++ b/src/u_boot.c
-@@ -36,6 +36,12 @@
+@@ -33,8 +33,25 @@
+ #include <fcntl.h>
  
+ #include <zlib.h>
+-
++#include <u-boot/config.h>
  #include "u_boot.h"
- 
++static char *env_strings(void)
++{
++	char *p;
++	int count;
++	static const char *bd = "bootdelay=";
++	count = strlen(bd);
++	count += snprintf(NULL,0,"%d",CONFIG_BOOTDELAY);
++	p = malloc(count);
++	snprintf(p,count,"%d",CONFIG_BOOTDELAY);
++	return p;
++}
++
 +
 +#define DUMMY_MAC "00:00:00:00:00:00"
 +#define MACNAME   "ethaddr"
 +
 +#define EMPTY_CRC 0xf9137807
-+
+ 
  static int tokcmp(const char *cmd, const char *pattern) {
  	int len = strlen(cmd);
- 	if (len > strlen(pattern)) {
-@@ -64,6 +70,8 @@ static int write_uboot_env(const char *device, struct environment *env)
+@@ -46,7 +63,7 @@ static int tokcmp(const char *cmd, const char *pattern) {
+ }
+ 
+ #define ENV_HEADER_SIZE		(sizeof(uint32_t) + sizeof(uint8_t))
+-#define ENV_DATA_SIZE		(MTD_SIZE - ENV_HEADER_SIZE)
++#define ENV_DATA_SIZE		(CONFIG_ENV_SIZE - ENV_HEADER_SIZE)
+ 
+ struct environment {
+ 	uint32_t crc;
+@@ -64,6 +81,8 @@ static int write_uboot_env(const char *device, struct environment *env)
  		error("mtd_erase_all %s failed", device);
  		return -1;
  	}
@@ -30,7 +53,7 @@ index e240475..7eea5e9 100644
  
  	fd = open(device, O_WRONLY);
  	if (fd < 0) {
-@@ -166,7 +174,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
+@@ -166,7 +185,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
  	var = env->data;
  	while (*var) {
  		if (!strncmp(var, name, name_len) && var[name_len] == '=') {
@@ -39,7 +62,7 @@ index e240475..7eea5e9 100644
  
  			cp = next_var(var);
  			while (*cp) {
-@@ -213,7 +221,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
+@@ -213,7 +232,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
  	}
  
  	env->crc = crc32(0, (uint8_t *) env->data, sizeof(env->data));
@@ -48,7 +71,7 @@ index e240475..7eea5e9 100644
  	env->flags = 0;
  
  	tmp = write_uboot_env(MTD_ENV1, env);
-@@ -238,7 +246,7 @@ static void print_version(const char *name) {
+@@ -238,7 +257,7 @@ static void print_version(const char *name) {
  }
  
  static void usage(FILE *out) {
@@ -57,7 +80,7 @@ index e240475..7eea5e9 100644
  	fprintf(out, "\n");
  }
  
-@@ -252,6 +260,7 @@ int main(int argc, char *argv[]) {
+@@ -252,6 +271,7 @@ int main(int argc, char *argv[]) {
  	struct environment *env2;
  	uint32_t crc1_ok;
  	uint32_t crc2_ok;
@@ -65,7 +88,7 @@ index e240475..7eea5e9 100644
  
  	if (argc <= 1) {
  		usage(stderr);
-@@ -301,12 +310,18 @@ int main(int argc, char *argv[]) {
+@@ -301,12 +321,18 @@ int main(int argc, char *argv[]) {
  		error("read_uboot_env failed");
  		return 1;
  	}
@@ -87,7 +110,7 @@ index e240475..7eea5e9 100644
  		crc1_ok = 0;
  	}
  
-@@ -315,20 +330,64 @@ int main(int argc, char *argv[]) {
+@@ -315,20 +341,64 @@ int main(int argc, char *argv[]) {
  		error("read_uboot_env failed");
  		return 1;
  	}
@@ -157,7 +180,7 @@ index e240475..7eea5e9 100644
  	} else if (crc1_ok && !crc2_ok) {
  		env = env1;
  	} else if (!crc1_ok && crc2_ok) {
-@@ -353,6 +412,9 @@ int main(int argc, char *argv[]) {
+@@ -353,6 +423,9 @@ int main(int argc, char *argv[]) {
  		err = cmd_printenv(env, argc, argv);
  	} else if (!tokcmp(cmd, "setenv")) {
  		err = cmd_setenv(env, argc, argv);
diff --git a/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb b/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb
index 0d5f2dc..3d69336 100644
--- a/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb
+++ b/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb
@@ -6,17 +6,18 @@ LICENSE = "GPLv2"
 LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
 PR = "r3"
 
-DEPENDS = "mtd-utils"
+DEPENDS = "mtd-utils u-boot"
 
 # tag 0.0.1
 SRCREV = "9c154405c2d01648f41c6a72bcc96f9865c4f07c"
 
 SRC_URI = "git://git.multitech.net/u-boot-linux-utils.git;protocol=git \
            file://uboot_mac.patch \
-	   file://uboot_configure.patch"
+	   file://uboot_configure.patch \
+	   file://DEFAULT_ENV.cfg"
 
 S = "${WORKDIR}/git"
-
+CFLAGS += "-idirafter ${STAGING_DIR_TARGET}/usr/include/u-boot -save-temps -MD"
 inherit autotools
 
 PARALLEL_MAKE = ""
-- 
cgit v1.2.3


From 0da88426f7a78c477e7f3132e9a8e04621112e5a Mon Sep 17 00:00:00 2001
From: John Klug <john.klug@multitech.com>
Date: Wed, 12 Apr 2017 09:11:00 -0500
Subject: Add DEFAULT_ENV for easily adding custom to the environment.

---
 recipes-bsp/multitech/u-boot-linux-utils/DEFAULT_ENV.cfg | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 recipes-bsp/multitech/u-boot-linux-utils/DEFAULT_ENV.cfg

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/u-boot-linux-utils/DEFAULT_ENV.cfg b/recipes-bsp/multitech/u-boot-linux-utils/DEFAULT_ENV.cfg
new file mode 100644
index 0000000..261fc86
--- /dev/null
+++ b/recipes-bsp/multitech/u-boot-linux-utils/DEFAULT_ENV.cfg
@@ -0,0 +1 @@
+"ethact=macb0\0" "stderr=serial\0" "stdin=serial\0" "stdout=serial\0"
-- 
cgit v1.2.3


From 6961cf49ca534aa612ebcf32b9fafa2abe52e31c Mon Sep 17 00:00:00 2001
From: John Klug <john.klug@multitech.com>
Date: Wed, 12 Apr 2017 13:00:14 -0500
Subject: Parameters for environment defaults now come mostly from u-boot
 header files

---
 .../multitech/u-boot-linux-utils/uboot_c.patch     | 283 +++++++++++++++++++++
 .../u-boot-linux-utils/uboot_configure.patch       |  16 +-
 .../multitech/u-boot-linux-utils/uboot_mac.patch   | 192 --------------
 recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb  |   4 +-
 4 files changed, 291 insertions(+), 204 deletions(-)
 create mode 100644 recipes-bsp/multitech/u-boot-linux-utils/uboot_c.patch
 delete mode 100644 recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch

(limited to 'recipes-bsp/multitech')

diff --git a/recipes-bsp/multitech/u-boot-linux-utils/uboot_c.patch b/recipes-bsp/multitech/u-boot-linux-utils/uboot_c.patch
new file mode 100644
index 0000000..33374dd
--- /dev/null
+++ b/recipes-bsp/multitech/u-boot-linux-utils/uboot_c.patch
@@ -0,0 +1,283 @@
+commit 4099235d80474025bb86b75caddbb6c25f573d9b
+Author: John Klug <john.klug@multitech.com>
+Date:   Wed Apr 12 12:50:36 2017 -0500
+
+    Parameters for defaults come mostly from u-boot header files
+
+diff --git a/src/u_boot.c b/src/u_boot.c
+index e240475..9480471 100644
+--- a/src/u_boot.c
++++ b/src/u_boot.c
+@@ -33,8 +33,16 @@
+ #include <fcntl.h>
+ 
+ #include <zlib.h>
+-
++#include <u-boot/config.h>
+ #include "u_boot.h"
++#include "mtd_erase_all.h"
++
++#define XMK_STR(x)	#x
++#define MK_STR(x)	XMK_STR(x)
++
++#define DUMMY_MAC "00:00:00:00:00:00"
++
++#define EMPTY_CRC 0xf9137807
+ 
+ static int tokcmp(const char *cmd, const char *pattern) {
+ 	int len = strlen(cmd);
+@@ -46,8 +54,10 @@ static int tokcmp(const char *cmd, const char *pattern) {
+ }
+ 
+ #define ENV_HEADER_SIZE		(sizeof(uint32_t) + sizeof(uint8_t))
+-#define ENV_DATA_SIZE		(MTD_SIZE - ENV_HEADER_SIZE)
++#define ENV_DATA_SIZE		(CONFIG_ENV_SIZE - ENV_HEADER_SIZE)
+ 
++#define DO_WRITE_ENV 1
++#define SKIP_WRITE_ENV 0
+ struct environment {
+ 	uint32_t crc;
+ 	uint8_t flags;
+@@ -64,6 +74,8 @@ static int write_uboot_env(const char *device, struct environment *env)
+ 		error("mtd_erase_all %s failed", device);
+ 		return -1;
+ 	}
++	if(env == NULL)
++		return 0;
+ 
+ 	fd = open(device, O_WRONLY);
+ 	if (fd < 0) {
+@@ -144,7 +156,7 @@ static int cmd_printenv(struct environment *env, int argc, char **argv)
+ 	return true;
+ }
+ 
+-static int cmd_setenv(struct environment *env, int argc, char **argv)
++static int cmd_setenv(struct environment *env, int argc, char **argv, int do_write)
+ {
+ 	int tmp;
+ 	char *var;
+@@ -166,7 +178,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
+ 	var = env->data;
+ 	while (*var) {
+ 		if (!strncmp(var, name, name_len) && var[name_len] == '=') {
+-			dbg("found variable (%s) at %lld", var, (long long int) var);
++			dbg("found variable (%s) at %p", var, var);
+ 
+ 			cp = next_var(var);
+ 			while (*cp) {
+@@ -213,18 +225,19 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
+ 	}
+ 
+ 	env->crc = crc32(0, (uint8_t *) env->data, sizeof(env->data));
+-	dbg("crc: 0x%08X", env->crc);
++	dbg("Calculated crc (to be stored): 0x%08X", env->crc);
+ 	env->flags = 0;
+ 
+-	tmp = write_uboot_env(MTD_ENV1, env);
+-	if (tmp < 0) {
+-		dbg("write_uboot_env %s failed with %d", MTD_ENV1, tmp);
+-	}
+-	tmp = write_uboot_env(MTD_ENV2, env);
+-	if (tmp < 0) {
+-		dbg("write_uboot_env %s failed with %d", MTD_ENV1, tmp);
++	if(do_write == DO_WRITE_ENV) {
++	      tmp = write_uboot_env(MTD_ENV1, env);
++	      if (tmp < 0) {
++		      dbg("write_uboot_env %s failed with %d", MTD_ENV1, tmp);
++	      }
++	      tmp = write_uboot_env(MTD_ENV2, env);
++	      if (tmp < 0) {
++		      dbg("write_uboot_env %s failed with %d", MTD_ENV1, tmp);
++	      }
+ 	}
+-
+ 	return true;
+ }
+ 
+@@ -238,7 +251,7 @@ static void print_version(const char *name) {
+ }
+ 
+ static void usage(FILE *out) {
+-	fprintf(out, "Usage: u-boot { printenv [ name ] | setenv name [ value ] }\n");
++	fprintf(out, "Usage: u-boot { printenv [ name ] | setenv name [ value ] | clearenv }\n");
+ 	fprintf(out, "\n");
+ }
+ 
+@@ -252,6 +265,7 @@ int main(int argc, char *argv[]) {
+ 	struct environment *env2;
+ 	uint32_t crc1_ok;
+ 	uint32_t crc2_ok;
++	uint32_t crc1_calc, crc2_calc;
+ 
+ 	if (argc <= 1) {
+ 		usage(stderr);
+@@ -301,12 +315,18 @@ int main(int argc, char *argv[]) {
+ 		error("read_uboot_env failed");
+ 		return 1;
+ 	}
+-	dbg("env1 crc: 0x%08X", env1->crc);
++	dbg("env1 stored crc: 0x%08X", env1->crc);
+ 	dbg("env1 flags: %d", env1->flags);
+-	if (crc32(0, (uint8_t *) env1->data, sizeof(env1->data)) == env1->crc) {
++	crc1_calc = crc32(0, (uint8_t *) env1->data, sizeof(env1->data));
++	if (crc1_calc == env1->crc) {
+ 		crc1_ok = 1;
+ 	} else {
+-		error("crc does not match on primary env");
++                dbg("env1 stored crc 0x%x, calculated crc 0x%x",env1->crc,crc1_calc);
++                if ((env1->crc != 0xffffffff) || (crc1_calc != EMPTY_CRC))
++			error("crc does not match on env1");
++		else
++			dbg("uninitialized env1");
++
+ 		crc1_ok = 0;
+ 	}
+ 
+@@ -315,20 +335,130 @@ int main(int argc, char *argv[]) {
+ 		error("read_uboot_env failed");
+ 		return 1;
+ 	}
+-	dbg("env2 crc: 0x%08X", env2->crc);
++	dbg("env2 stored crc: 0x%08X", env2->crc);
+ 	dbg("env2 flags: %d", env2->flags);
+-	if (crc32(0, (uint8_t *) env2->data, sizeof(env2->data)) == env2->crc) {
++	crc2_calc = crc32(0, (uint8_t *) env2->data, sizeof(env2->data));
++	if (crc2_calc == env2->crc) {
+ 		crc2_ok = 1;
+ 	} else {
+-		error("crc does not match on redundant env");
++                dbg("env2 stored crc 0x%x, calculated crc 0x%x",env2->crc,crc2_calc);
++                if ((env2->crc != 0xffffffff) || (crc2_calc != EMPTY_CRC) )
++			error("crc does not match on env2");
++		else
++			dbg("uninitialized env2");
+ 		crc2_ok = 0;
+ 	}
+ 
+-	if (!crc1_ok && !crc2_ok) {
+-		error("both environments are bad: loading DEFAULT_ENV");
++	if (!crc1_ok && !crc2_ok && (env1->crc == 0xffffffff) &&
++	   (env2->crc == 0xffffffff) && (crc1_calc == EMPTY_CRC) &&
++		 (crc2_calc == EMPTY_CRC) ) {
++		int mp_fd = open(MAC_PATH, O_RDONLY);
++		int len,retval;
++		char *p;
++		char *genarg[2];
++		char number[128];
++
++		fputs("WARNING: Flash is in initial state, so use defaults\n",stderr);
+ 		env = env1;
+ 		env->flags = 0;
+ 		memcpy(env->data, DEFAULT_ENV, sizeof(DEFAULT_ENV));
++		/* Now need to find the MAC address */
++		if (mp_fd == -1) {
++		  perror("Cannot open: " MAC_PATH);
++		  exit(1);
++                }
++
++		len = sizeof DUMMY_MAC - 1;  /* remove null from count */
++		p = malloc(len+1);
++		retval = read(mp_fd,p,len);
++                dbg("Mac read of %d returned %d",len,retval);
++		if(retval != len) {
++		  if(retval == -1) {
++			perror("Failed to read: " MAC_PATH);
++			exit(1);
++		  }
++		  if (retval != len) {
++			fprintf(stderr,"%s: Only read %d characters of %d for the MAC address\n",
++				MAC_PATH,retval,len);
++			fprintf(stderr,"%s: Read %*.*s\n",MAC_PATH,retval,retval,p);
++			exit(1);
++		  }
++                }
++                p[len] = 0;
++                genarg[0] = "ethaddr";
++		genarg[1] = p;
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++		free(p);
++		genarg[1] = number;
++		
++#ifdef CONFIG_BAUDRATE
++		genarg[0] = "baudrate";
++		sprintf(number,"%lld",(long long)(CONFIG_BAUDRATE));
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++#endif
++#ifdef CONFIG_BOOTDELAY
++		genarg[0] = "bootdelay";
++		sprintf(number,"%lld",(long long)(CONFIG_BOOTDELAY));
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++#endif
++#ifdef CONFIG_LOADADDR
++		genarg[0] = "loadaddr";
++		sprintf(number,"0x%llx",(long long)(CONFIG_LOADADDR));
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++#endif
++#ifdef CONFIG_HOSTNAME
++		genarg[0] = "hostname";
++		genarg[1] = MK_STR(CONFIG_HOSTNAME);
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++#endif
++#ifdef CONFIG_IPADDR
++		genarg[0] = "ipaddr";
++		genarg[1] = MK_STR(CONFIG_IPADDR);
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++#endif
++#ifdef CONFIG_SERVERIP
++		genarg[0] = "serverip";
++		genarg[1] = MK_STR(CONFIG_SERVERIP);
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++#endif
++#ifdef CONFIG_NETMASK
++		genarg[0] = "netmask";
++		genarg[1] = MK_STR(CONFIG_NETMASK);
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++#endif
++#ifdef CONFIG_EXTRA_ENV_SETTINGS
++		p = env->data;
++		while((p = next_var(p)) && *p);
++		  len = (p - env->data);
++		if (len + sizeof CONFIG_EXTRA_ENV_SETTINGS < ENV_DATA_SIZE)
++		   memcpy(env->data + len,CONFIG_EXTRA_ENV_SETTINGS,sizeof CONFIG_EXTRA_ENV_SETTINGS);
++		else
++		   fprintf(stderr,"Default memory settings overflow. Current size %d, CONFIG_EXTRA_ENV_SETTINGS size %d, Maximum %d\n",
++		     len,sizeof CONFIG_EXTRA_ENV_SETTINGS,ENV_DATA_SIZE);
++#endif
++#ifdef CONFIG_BOOTARGS
++   		genarg[0] = "bootargs";
++		genarg[1] = CONFIG_BOOTARGS;
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++#endif
++#ifdef CONFIG_BOOTCOMMAND
++   		genarg[0] = "bootcmd";
++		genarg[1] = CONFIG_BOOTCOMMAND;
++		if (cmd_setenv(env,2,genarg,SKIP_WRITE_ENV) == false)
++		  exit(1);
++#endif
++	} else if (!crc1_ok && !crc2_ok) {
++		error("both environments are bad: not loading DEFAULT_ENV");
++                exit(1);
+ 	} else if (crc1_ok && !crc2_ok) {
+ 		env = env1;
+ 	} else if (!crc1_ok && crc2_ok) {
+@@ -352,7 +482,10 @@ int main(int argc, char *argv[]) {
+ 	if (!tokcmp(cmd, "printenv")) {
+ 		err = cmd_printenv(env, argc, argv);
+ 	} else if (!tokcmp(cmd, "setenv")) {
+-		err = cmd_setenv(env, argc, argv);
++		err = cmd_setenv(env, argc, argv, DO_WRITE_ENV);
++	} else if (!tokcmp(cmd, "clearenv")) {
++		(void)write_uboot_env(MTD_ENV1, NULL);
++		(void)write_uboot_env(MTD_ENV2, NULL);
+ 	} else {
+ 		usage(stderr);
+ 		exit(1);
diff --git a/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch b/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch
index d8f5223..eb650a0 100644
--- a/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch
+++ b/recipes-bsp/multitech/u-boot-linux-utils/uboot_configure.patch
@@ -1,19 +1,15 @@
-commit 591d0dab81465e5e0df5b5ba6b70e2ec74f25bbc
+commit cc5abf5a1ed0f0cc5487e8f87b8cf69c6b8173ea
 Author: John Klug <john.klug@multitech.com>
-Date:   Tue Apr 11 17:35:38 2017 -0500
+Date:   Wed Apr 12 12:31:28 2017 -0500
 
-    Allow a DEFAULT ENV file, and get the MTD_SIZE from CONFIG_ENV_SIZE in uboot
+    Remove debug
 
 diff --git a/configure.in b/configure.in
-index 8fdc9ef..8f6a1db 100644
+index 8fdc9ef..0377375 100644
 --- a/configure.in
 +++ b/configure.in
-@@ -15,12 +15,15 @@ required header missing]))
- 
- AC_CHECK_LIB([z], [crc32], [], AC_MSG_ERROR([libz is required]))
- 
--AC_DEFINE([DEBUG], 0, [set to 1 to enable debug])
-+AC_DEFINE([DEBUG], 1, [set to 1 to enable debug])
+@@ -18,9 +18,12 @@ AC_CHECK_LIB([z], [crc32], [], AC_MSG_ERROR([libz is required]))
+ AC_DEFINE([DEBUG], 0, [set to 1 to enable debug])
  AC_DEFINE([MTD_ENV1], "/dev/mtd3", [set to the first u-boot env mtd])
  AC_DEFINE([MTD_ENV2], "/dev/mtd4", [set to the second (redundant) u-boot env mtd])
 -AC_DEFINE([MTD_SIZE], 0x20000, [size of u-boot env mtd])
diff --git a/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch b/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch
deleted file mode 100644
index 77f28a2..0000000
--- a/recipes-bsp/multitech/u-boot-linux-utils/uboot_mac.patch
+++ /dev/null
@@ -1,192 +0,0 @@
-commit afa8fc0d0b3d8ccde464ab207724491c7b732c3d
-Author: John Klug <john.klug@multitech.com>
-Date:   Tue Apr 11 17:58:15 2017 -0500
-
-    Derive MTD size from CONFIG_ENV_SIZE
-
-diff --git a/src/u_boot.c b/src/u_boot.c
-index e240475..8c4fced 100644
---- a/src/u_boot.c
-+++ b/src/u_boot.c
-@@ -33,8 +33,25 @@
- #include <fcntl.h>
- 
- #include <zlib.h>
--
-+#include <u-boot/config.h>
- #include "u_boot.h"
-+static char *env_strings(void)
-+{
-+	char *p;
-+	int count;
-+	static const char *bd = "bootdelay=";
-+	count = strlen(bd);
-+	count += snprintf(NULL,0,"%d",CONFIG_BOOTDELAY);
-+	p = malloc(count);
-+	snprintf(p,count,"%d",CONFIG_BOOTDELAY);
-+	return p;
-+}
-+
-+
-+#define DUMMY_MAC "00:00:00:00:00:00"
-+#define MACNAME   "ethaddr"
-+
-+#define EMPTY_CRC 0xf9137807
- 
- static int tokcmp(const char *cmd, const char *pattern) {
- 	int len = strlen(cmd);
-@@ -46,7 +63,7 @@ static int tokcmp(const char *cmd, const char *pattern) {
- }
- 
- #define ENV_HEADER_SIZE		(sizeof(uint32_t) + sizeof(uint8_t))
--#define ENV_DATA_SIZE		(MTD_SIZE - ENV_HEADER_SIZE)
-+#define ENV_DATA_SIZE		(CONFIG_ENV_SIZE - ENV_HEADER_SIZE)
- 
- struct environment {
- 	uint32_t crc;
-@@ -64,6 +81,8 @@ static int write_uboot_env(const char *device, struct environment *env)
- 		error("mtd_erase_all %s failed", device);
- 		return -1;
- 	}
-+	if(env == NULL)
-+		return 0;
- 
- 	fd = open(device, O_WRONLY);
- 	if (fd < 0) {
-@@ -166,7 +185,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
- 	var = env->data;
- 	while (*var) {
- 		if (!strncmp(var, name, name_len) && var[name_len] == '=') {
--			dbg("found variable (%s) at %lld", var, (long long int) var);
-+			dbg("found variable (%s) at %p", var, var);
- 
- 			cp = next_var(var);
- 			while (*cp) {
-@@ -213,7 +232,7 @@ static int cmd_setenv(struct environment *env, int argc, char **argv)
- 	}
- 
- 	env->crc = crc32(0, (uint8_t *) env->data, sizeof(env->data));
--	dbg("crc: 0x%08X", env->crc);
-+	dbg("Calculated crc (to be stored): 0x%08X", env->crc);
- 	env->flags = 0;
- 
- 	tmp = write_uboot_env(MTD_ENV1, env);
-@@ -238,7 +257,7 @@ static void print_version(const char *name) {
- }
- 
- static void usage(FILE *out) {
--	fprintf(out, "Usage: u-boot { printenv [ name ] | setenv name [ value ] }\n");
-+	fprintf(out, "Usage: u-boot { printenv [ name ] | setenv name [ value ] | clearenv }\n");
- 	fprintf(out, "\n");
- }
- 
-@@ -252,6 +271,7 @@ int main(int argc, char *argv[]) {
- 	struct environment *env2;
- 	uint32_t crc1_ok;
- 	uint32_t crc2_ok;
-+	uint32_t crc1_calc, crc2_calc;
- 
- 	if (argc <= 1) {
- 		usage(stderr);
-@@ -301,12 +321,18 @@ int main(int argc, char *argv[]) {
- 		error("read_uboot_env failed");
- 		return 1;
- 	}
--	dbg("env1 crc: 0x%08X", env1->crc);
-+	dbg("env1 stored crc: 0x%08X", env1->crc);
- 	dbg("env1 flags: %d", env1->flags);
--	if (crc32(0, (uint8_t *) env1->data, sizeof(env1->data)) == env1->crc) {
-+	crc1_calc = crc32(0, (uint8_t *) env1->data, sizeof(env1->data));
-+	if (crc1_calc == env1->crc) {
- 		crc1_ok = 1;
- 	} else {
--		error("crc does not match on primary env");
-+                dbg("env1 stored crc 0x%x, calculated crc 0x%x",env1->crc,crc1_calc);
-+                if ((env1->crc != 0xffffffff) || (crc1_calc != EMPTY_CRC))
-+			error("crc does not match on env1");
-+		else
-+			dbg("uninitialized env1");
-+
- 		crc1_ok = 0;
- 	}
- 
-@@ -315,20 +341,64 @@ int main(int argc, char *argv[]) {
- 		error("read_uboot_env failed");
- 		return 1;
- 	}
--	dbg("env2 crc: 0x%08X", env2->crc);
-+	dbg("env2 stored crc: 0x%08X", env2->crc);
- 	dbg("env2 flags: %d", env2->flags);
--	if (crc32(0, (uint8_t *) env2->data, sizeof(env2->data)) == env2->crc) {
-+	crc2_calc = crc32(0, (uint8_t *) env2->data, sizeof(env2->data));
-+	if (crc2_calc == env2->crc) {
- 		crc2_ok = 1;
- 	} else {
--		error("crc does not match on redundant env");
-+                dbg("env2 stored crc 0x%x, calculated crc 0x%x",env2->crc,crc2_calc);
-+                if ((env2->crc != 0xffffffff) || (crc2_calc != EMPTY_CRC) )
-+			error("crc does not match on env2");
-+		else
-+			dbg("uninitialized env2");
- 		crc2_ok = 0;
- 	}
- 
--	if (!crc1_ok && !crc2_ok) {
--		error("both environments are bad: loading DEFAULT_ENV");
-+	if (!crc1_ok && !crc2_ok && (env1->crc == 0xffffffff) &&
-+	   (env2->crc == 0xffffffff) && (crc1_calc == EMPTY_CRC) &&
-+		 (crc2_calc == EMPTY_CRC) ) {
-+		int mp_fd = open(MAC_PATH, O_RDONLY);
-+		int len,retval;
-+		char *p;
-+
-+		fputs("WARNING: Flash is in initial state, so use defaults\n",stderr);
- 		env = env1;
- 		env->flags = 0;
- 		memcpy(env->data, DEFAULT_ENV, sizeof(DEFAULT_ENV));
-+		/* Now need to find the MAC address */
-+		if (mp_fd == -1) {
-+		  perror("Cannot open: " MAC_PATH);
-+		  exit(1);
-+                }
-+
-+		len = sizeof DUMMY_MAC - 1;  /* remove null from count */
-+		p = malloc(len);
-+		retval = read(mp_fd,p,len);
-+                dbg("Mac read of %d returned %d",len,retval);
-+		if(retval != len) {
-+		  if(retval == -1) {
-+			perror("Failed to read: " MAC_PATH);
-+			exit(1);
-+		  }
-+		  if (retval != len) {
-+			fprintf(stderr,"%s: Only read %d characters of %d for the MAC address\n",
-+				MAC_PATH,retval,len);
-+			fprintf(stderr,"%s: Read %*.*s\n",MAC_PATH,retval,retval,p);
-+			exit(1);
-+		  }
-+                }
-+		len = sizeof(DEFAULT_ENV);
-+		memcpy(env->data + len - 1, MACNAME, sizeof MACNAME);
-+		len += sizeof MACNAME - 1;
-+		env->data[len-1] = '=';
-+		memcpy(env->data + len, p, sizeof DUMMY_MAC - 1);
-+		len += sizeof DUMMY_MAC;
-+		env->data[len-1] = 0;
-+		env->data[len] = 0;
-+	} else if (!crc1_ok && !crc2_ok) {
-+		error("both environments are bad: not loading DEFAULT_ENV");
-+                exit(1);
- 	} else if (crc1_ok && !crc2_ok) {
- 		env = env1;
- 	} else if (!crc1_ok && crc2_ok) {
-@@ -353,6 +423,9 @@ int main(int argc, char *argv[]) {
- 		err = cmd_printenv(env, argc, argv);
- 	} else if (!tokcmp(cmd, "setenv")) {
- 		err = cmd_setenv(env, argc, argv);
-+	} else if (!tokcmp(cmd, "clearenv")) {
-+		(void)write_uboot_env(MTD_ENV1, NULL);
-+		(void)write_uboot_env(MTD_ENV2, NULL);
- 	} else {
- 		usage(stderr);
- 		exit(1);
diff --git a/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb b/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb
index 3d69336..6135d5d 100644
--- a/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb
+++ b/recipes-bsp/multitech/u-boot-linux-utils_0.0.1.bb
@@ -12,12 +12,12 @@ DEPENDS = "mtd-utils u-boot"
 SRCREV = "9c154405c2d01648f41c6a72bcc96f9865c4f07c"
 
 SRC_URI = "git://git.multitech.net/u-boot-linux-utils.git;protocol=git \
-           file://uboot_mac.patch \
+           file://uboot_c.patch \
 	   file://uboot_configure.patch \
 	   file://DEFAULT_ENV.cfg"
 
 S = "${WORKDIR}/git"
-CFLAGS += "-idirafter ${STAGING_DIR_TARGET}/usr/include/u-boot -save-temps -MD"
+CFLAGS += "-idirafter ${STAGING_DIR_TARGET}/usr/include/u-boot"
 inherit autotools
 
 PARALLEL_MAKE = ""
-- 
cgit v1.2.3