svn commit: r374428 - in head/sysutils/u-boot-wandboard: . files

Warner Losh imp at FreeBSD.org
Tue Dec 9 20:09:05 UTC 2014


Author: imp
Date: Tue Dec  9 20:09:01 2014
New Revision: 374428
URL: https://svnweb.freebsd.org/changeset/ports/374428
QAT: https://qat.redports.org/buildarchive/r374428/

Log:
  FreeBSD customized u-boot loader for wandboard
  
  Submitted by: ian@

Added:
  head/sysutils/u-boot-wandboard/
  head/sysutils/u-boot-wandboard/Makefile   (contents, props changed)
  head/sysutils/u-boot-wandboard/distinfo   (contents, props changed)
  head/sysutils/u-boot-wandboard/files/
  head/sysutils/u-boot-wandboard/files/patch-api_api.c   (contents, props changed)
  head/sysutils/u-boot-wandboard/files/patch-api_api__storage.c   (contents, props changed)
  head/sysutils/u-boot-wandboard/files/patch-board_technexion_edm__cf__imx6_edm__cf__imx6.c   (contents, props changed)
  head/sysutils/u-boot-wandboard/files/patch-common_cmd__elf.c   (contents, props changed)
  head/sysutils/u-boot-wandboard/files/patch-common_cmd__nvedit.c   (contents, props changed)
  head/sysutils/u-boot-wandboard/files/patch-common_cmd__test.c   (contents, props changed)
  head/sysutils/u-boot-wandboard/files/patch-config.mk   (contents, props changed)
  head/sysutils/u-boot-wandboard/files/patch-drivers_mmc_mmc.c   (contents, props changed)
  head/sysutils/u-boot-wandboard/files/patch-include_configs_edm__cf__imx6.h   (contents, props changed)
  head/sysutils/u-boot-wandboard/pkg-descr   (contents, props changed)

Added: head/sysutils/u-boot-wandboard/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/Makefile	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,49 @@
+# $FreeBSD$
+
+PORTNAME=	u-boot
+PORTVERSION=	2013.10
+CATEGORIES=	sysutils
+PKGNAMESUFFIX=	-wandboard
+DISTNAME=	u-boot-${PORTVERSION}-technexion-edm
+
+MAINTAINER=	ian at FreeBSD.org
+COMMENT=	Cross-build U-Boot loader for Wandboard (solo, dual, and quad)
+
+LICENSE=	GPLv2
+
+BUILD_DEPENDS=  arm-none-eabi-gcc:${PORTSDIR}/devel/arm-none-eabi-gcc
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	TechNexion
+GH_PROJECT=	u-boot-edm
+GH_COMMIT=	87f595d
+GH_TAGNAME=	${GH_COMMIT}
+NO_ARCH=	yes
+
+WRKSRC=		${WRKDIR}/${GH_ACCOUNT}-${GH_PROJECT}-${GH_TAGNAME}
+USES=		gmake
+SSP_UNSAFE=	yes # cross-build static linking dies with -fstack-protector
+
+U_BOOT_DIR=	share/u-boot/${PORTNAME}${PKGNAMESUFFIX}
+PLIST_DIRS=	${U_BOOT_DIR} share/u-boot
+PLIST_FILES=	${U_BOOT_DIR}/u-boot.imx \
+		${U_BOOT_DIR}/README
+
+MAKE_ARGS+=	ARCH=arm \
+		CROSS_COMPILE=arm-none-eabi- \
+		HOSTCC=clang
+
+do-configure:
+	cd ${WRKSRC}; ${GMAKE} ${MAKE_ARGS} edm_cf_imx6_config
+
+# The build results in two output files: SPL, and u-boot.img.
+# Combine them into a single u-boot.imx so that there is only one file to be
+# copied onto the boot media starting at a 1K offset on the disk.
+IMXFILE=	${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}/u-boot.imx
+do-install:
+	${MKDIR} ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}
+	dd bs=1k oseek=0  conv=sync of=${IMXFILE} if=${WRKSRC}/SPL
+	dd bs=1k oseek=68 conv=sync of=${IMXFILE} if=${WRKSRC}/u-boot.img
+	${CP} ${.CURDIR}/pkg-descr ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}/README
+
+.include <bsd.port.mk>

Added: head/sysutils/u-boot-wandboard/distinfo
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/distinfo	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,2 @@
+SHA256 (u-boot-2013.10-technexion-edm.tar.gz) = 8e9fd96fcc3ea979a8ec65f982563c958fe27108af82ed17d3cc314476b96a2d
+SIZE (u-boot-2013.10-technexion-edm.tar.gz) = 13136282

Added: head/sysutils/u-boot-wandboard/files/patch-api_api.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/files/patch-api_api.c	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,79 @@
+--- api/api.c.orig	2014-08-14 14:51:09 UTC
++++ api/api.c
+@@ -495,45 +495,47 @@ static int API_env_set(va_list ap)
+  */
+ static int API_env_enum(va_list ap)
+ {
+-	int i, n;
+-	char *last, **next;
++	int i;
++	char *last, **next, *s;
++	ENTRY *match, search;
++	static char *buf;
+ 
+ 	last = (char *)va_arg(ap, u_int32_t);
+ 
+ 	if ((next = (char **)va_arg(ap, u_int32_t)) == NULL)
+ 		return API_EINVAL;
+ 
+-	if (last == NULL)
+-		/* start over */
+-		*next = ((char *)env_get_addr(0));
+-	else {
+-		*next = last;
+-
+-		for (i = 0; env_get_char(i) != '\0'; i = n + 1) {
+-			for (n = i; env_get_char(n) != '\0'; ++n) {
+-				if (n >= CONFIG_ENV_SIZE) {
+-					/* XXX shouldn't we set *next = NULL?? */
+-					return 0;
+-				}
+-			}
+-
+-			if (envmatch((uchar *)last, i) < 0)
+-				continue;
+-
+-			/* try to get next name */
+-			i = n + 1;
+-			if (env_get_char(i) == '\0') {
+-				/* no more left */
+-				*next = NULL;
+-				return 0;
+-			}
+-
+-			*next = ((char *)env_get_addr(i));
+-			return 0;
++	/*
++	 * This leverages realloc's behavior of growing but never shrinking the
++	 * existing buffer.
++	 */
++	if (last == NULL) {
++		i = 0;
++		buf = realloc(buf, 512); /* Start with reasonable size buf. */
++	} else {
++		buf = realloc(buf, strlen(last) + 1);
++		strcpy(buf, last);
++		if ((s = strchr(buf, '=')) != NULL)
++		     *s = 0;
++		search.key = buf;
++		if ((i = hsearch_r(search, FIND, &match, &env_htab, 0)) == 0) {
++			i = API_EINVAL;
++			goto done;
+ 		}
+ 	}
+ 
++	/* hmatch on empty string is effectively "get next entry after i". */
++	if ((i = hmatch_r("", i, &match, &env_htab)) == 0)
++		goto done;
++	buf = realloc(buf, strlen(match->key) + strlen(match->data) + 2);
++	snprintf(buf, buflen, "%s=%s", match->key, match->data);
++	*next = buf;
+ 	return 0;
++done:
++	free(buf);
++	buf = NULL;
++	*next = NULL;
++	return i;
+ }
+ 
+ /*

Added: head/sysutils/u-boot-wandboard/files/patch-api_api__storage.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/files/patch-api_api__storage.c	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,28 @@
+--- api/api_storage.c.orig	2014-08-14 14:51:09 UTC
++++ api/api_storage.c
+@@ -107,10 +107,13 @@ static int dev_stor_get(int type, int fi
+ 
+ 	if (first) {
+ 		di->cookie = (void *)get_dev(specs[type].name, 0);
+-		if (di->cookie == NULL)
++		if (di->cookie == NULL) {
+ 			return 0;
+-		else
++		} else {
+ 			found = 1;
++			if (specs[type].max_dev > 1)
++				*more = 1;
++		}
+ 
+ 	} else {
+ 		for (i = 0; i < specs[type].max_dev; i++)
+@@ -146,7 +149,8 @@ static int dev_stor_get(int type, int fi
+ 			dd = (block_dev_desc_t *)di->cookie;
+ 			if (dd->type == DEV_TYPE_UNKNOWN) {
+ 				debugf("device instance exists, but is not active..");
+-				found = 0;
++				di->di_stor.block_count = 0;
++				di->di_stor.block_size = 0;
+ 			} else {
+ 				di->di_stor.block_count = dd->lba;
+ 				di->di_stor.block_size = dd->blksz;

Added: head/sysutils/u-boot-wandboard/files/patch-board_technexion_edm__cf__imx6_edm__cf__imx6.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/files/patch-board_technexion_edm__cf__imx6_edm__cf__imx6.c	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,59 @@
+--- board/technexion/edm_cf_imx6/edm_cf_imx6.c.orig	2014-08-14 14:51:10 UTC
++++ board/technexion/edm_cf_imx6/edm_cf_imx6.c
+@@ -63,10 +63,16 @@ enum boot_device get_boot_device(void);
+ 
+ static inline void setup_boot_device(void)
+ {
+-	uint soc_sbmr = readl(SRC_BASE_ADDR + 0x4);
+-	uint bt_mem_ctl = (soc_sbmr & 0x000000FF) >> 4 ;
+-	uint bt_mem_type = (soc_sbmr & 0x00000008) >> 3;
+-	uint bt_mem_mmc = (soc_sbmr & 0x00001000) >> 12;
++	uint bt_mem_ctl, bt_mem_mmc, bt_mem_type, soc_sbmr;
++
++	/* Use GPR9 if non-zero, else SBMR. */
++	soc_sbmr = readl(SRC_BASE_ADDR + 0x40);
++	if (soc_sbmr == 0)
++		soc_sbmr = readl(SRC_BASE_ADDR + 0x4);
++
++	bt_mem_ctl = (soc_sbmr & 0x000000FF) >> 4 ;
++	bt_mem_type = (soc_sbmr & 0x00000008) >> 3;
++	bt_mem_mmc = (soc_sbmr & 0x00001000) >> 12;
+ 
+ 	switch (bt_mem_ctl) {
+ 	case 0x0:
+@@ -623,6 +629,26 @@ static const struct boot_mode board_boot
+ 
+ int board_late_init(void)
+ {
++	const char *imxname;
++	uint cpurev, imxtype;
++
++	cpurev = get_cpu_rev();
++	imxtype = (cpurev & 0xFF000) >> 12;
++
++	switch (imxtype){
++	case MXC_CPU_MX6SOLO:
++		imxname = "imx6sx";	
++		break;
++	case MXC_CPU_MX6Q:
++		imxname = "imx6q";	
++		break;
++	case MXC_CPU_MX6DL:
++	default:
++		imxname = "imx6dl";	
++		break;	
++	}
++	setenv("imxname", imxname);
++
+ #ifdef CONFIG_CMD_BMODE
+ 	add_board_boot_modes(board_boot_modes);
+ #endif
+@@ -647,7 +673,7 @@ int board_init(void)
+ 
+ int checkboard(void)
+ {
+-	puts("Board: edm_cf_imx6\n");
++	puts("Board: Wandboard\n");
+ 
+ 	return 0;
+ }

Added: head/sysutils/u-boot-wandboard/files/patch-common_cmd__elf.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/files/patch-common_cmd__elf.c	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,10 @@
+--- common/cmd_elf.c.orig	2014-08-14 14:51:10 UTC
++++ common/cmd_elf.c
+@@ -46,6 +46,7 @@ unsigned long do_bootelf_exec(ulong (*en
+ 	 * pass address parameter as argv[0] (aka command name),
+ 	 * and all remaining args
+ 	 */
++	cleanup_before_linux();
+ 	ret = entry(argc, argv);
+ 
+ 	if (dcache)

Added: head/sysutils/u-boot-wandboard/files/patch-common_cmd__nvedit.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/files/patch-common_cmd__nvedit.c	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,46 @@
+--- common/cmd_nvedit.c.orig	2014-08-14 14:51:10 UTC
++++ common/cmd_nvedit.c
+@@ -1061,6 +1061,23 @@ sep_err:
+ }
+ #endif
+ 
++#if defined(CONFIG_CMD_ENV_EXISTS)
++static int do_env_exists(cmd_tbl_t *cmdtp, int flag, int argc,
++		       char * const argv[])
++{
++	ENTRY e, *ep;
++
++	if (argc < 2)
++		return CMD_RET_USAGE;
++
++	e.key = argv[1];
++	e.data = NULL;
++	hsearch_r(e, FIND, &ep, &env_htab, 0);
++
++	return (ep == NULL) ? 1 : 0;
++}
++#endif
++
+ /*
+  * New command line interface: "env" command with subcommands
+  */
+@@ -1096,6 +1113,9 @@ static cmd_tbl_t cmd_env_sub[] = {
+ 	U_BOOT_CMD_MKENT(save, 1, 0, do_env_save, "", ""),
+ #endif
+ 	U_BOOT_CMD_MKENT(set, CONFIG_SYS_MAXARGS, 0, do_env_set, "", ""),
++#if defined(CONFIG_CMD_ENV_EXISTS)
++	U_BOOT_CMD_MKENT(exists, 2, 0, do_env_exists, "", ""),
++#endif
+ };
+ 
+ #if defined(CONFIG_NEEDS_MANUAL_RELOC)
+@@ -1138,6 +1158,9 @@ static char env_help_text[] =
+ #if defined(CONFIG_CMD_EDITENV)
+ 	"env edit name - edit environment variable\n"
+ #endif
++#if defined(CONFIG_CMD_ENV_EXISTS)
++	"env exists name - tests for existence of variable\n"
++#endif
+ #if defined(CONFIG_CMD_EXPORTENV)
+ 	"env export [-t | -b | -c] [-s size] addr [var ...] - export environment\n"
+ #endif

Added: head/sysutils/u-boot-wandboard/files/patch-common_cmd__test.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/files/patch-common_cmd__test.c	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,19 @@
+--- common/cmd_test.c.orig	2014-08-14 14:51:10 UTC
++++ common/cmd_test.c
+@@ -22,9 +22,14 @@ static int do_test(cmd_tbl_t *cmdtp, int
+ 	char * const *ap;
+ 	int left, adv, expr, last_expr, neg, last_cmp;
+ 
+-	/* args? */
+-	if (argc < 3)
++	/*
++	 * If no args, that's bogus, return false.
++	 * If op is -z and no other args, answer is Yes, string is empty.
++	 */
++	if (argc < 2)
+ 		return 1;
++	else if (argc == 2)
++		return !(strcmp(argv[1], "-z") == 0);
+ 
+ #ifdef DEBUG
+ 	{

Added: head/sysutils/u-boot-wandboard/files/patch-config.mk
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/files/patch-config.mk	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,11 @@
+--- config.mk.orig	2014-08-14 14:51:10 UTC
++++ config.mk
+@@ -92,7 +92,7 @@ HOSTCC		 = $(call os_x_before, 10, 5, "c
+ HOSTCFLAGS	+= $(call os_x_before, 10, 4, "-traditional-cpp")
+ HOSTLDFLAGS	+= $(call os_x_before, 10, 5, "-multiply_defined suppress")
+ else
+-HOSTCC		= gcc
++HOSTCC		?= gcc
+ endif
+ 
+ ifeq ($(HOSTOS),cygwin)

Added: head/sysutils/u-boot-wandboard/files/patch-drivers_mmc_mmc.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/files/patch-drivers_mmc_mmc.c	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,80 @@
+--- drivers/mmc/mmc.c.orig	2014-08-14 14:51:10 UTC
++++ drivers/mmc/mmc.c
+@@ -24,6 +24,7 @@
+ 
+ static struct list_head mmc_devices;
+ static int cur_dev_num = -1;
++static int mmc_error_print_max = -1;
+ 
+ int __weak board_mmc_getwp(struct mmc *mmc)
+ {
+@@ -1175,9 +1176,14 @@ int mmc_register(struct mmc *mmc)
+ block_dev_desc_t *mmc_get_dev(int dev)
+ {
+ 	struct mmc *mmc = find_mmc_device(dev);
+-	if (!mmc || mmc_init(mmc))
++	if (!mmc)
+ 		return NULL;
+ 
++	/* If mmc_init fails, mmc->block_dev will be of type
++	 * DEV_TYPE_UNKNOWN with blksz and lba set to zero.
++	 */
++	mmc_init(mmc);
++
+ 	return &mmc->block_dev;
+ }
+ #endif
+@@ -1200,7 +1206,7 @@ int mmc_start_init(struct mmc *mmc)
+ 	err = mmc->init(mmc);
+ 
+ 	if (err)
+-		return err;
++		goto done;
+ 
+ 	mmc_set_bus_width(mmc, 1);
+ 	mmc_set_clock(mmc, 1);
+@@ -1209,7 +1215,7 @@ int mmc_start_init(struct mmc *mmc)
+ 	err = mmc_go_idle(mmc);
+ 
+ 	if (err)
+-		return err;
++		goto done;
+ 
+ 	/* The internal partition reset to user partition(0) at every CMD0*/
+ 	mmc->part_num = 0;
+@@ -1226,15 +1232,33 @@ int mmc_start_init(struct mmc *mmc)
+ 
+ 		if (err && err != IN_PROGRESS) {
+ #if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+-			printf("Card did not respond to voltage select!\n");
++			if (mmc_error_print_max < 4) {
++				mmc_error_print_max++;
++				printf("Card did not respond to voltage select!\n");
++
++				if (mmc_error_print_max == 4) {
++					printf("Discarding further error messages\n");
++				}
++			}
+ #endif
+-			return UNUSABLE_ERR;
++//			return UNUSABLE_ERR;
++			goto done;
+ 		}
+ 	}
+ 
+ 	if (err == IN_PROGRESS)
+ 		mmc->init_in_progress = 1;
+ 
++done:
++	if (err) {
++		mmc->has_init = 0;
++		mmc->block_dev.type = DEV_TYPE_UNKNOWN;
++		mmc->block_dev.blksz = 0;
++		mmc->block_dev.lba = 0;
++	} else {
++		mmc->has_init = 1;
++	}
++
+ 	return err;
+ }
+ 

Added: head/sysutils/u-boot-wandboard/files/patch-include_configs_edm__cf__imx6.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/files/patch-include_configs_edm__cf__imx6.h	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,57 @@
+--- include/configs/edm_cf_imx6.h.orig	2014-08-14 14:51:10 UTC
++++ include/configs/edm_cf_imx6.h
+@@ -338,4 +338,54 @@
+ #define CONFIG_CMD_CACHE
+ #endif
+ 
++/*****************************************************************************
++ * FreeBSD customizations from here down.
++ ****************************************************************************/
++
++#define CONFIG_API
++#define CONFIG_CMD_ELF
++#define CONFIG_CMD_ENV_EXISTS
++#define CONFIG_EFI_PARTITION
++#define CONFIG_PREBOOT
++
++#undef  CONFIG_CMD_BMODE
++#define CONFIG_CMD_BMODE
++
++#undef  CONFIG_SYS_MMC_MAX_DEVICE
++#define CONFIG_SYS_MMC_MAX_DEVICE CONFIG_SYS_FSL_USDHC_NUM
++
++#undef  CONFIG_LOADADDR
++#define CONFIG_LOADADDR 	0x11000000
++
++/* Create a small(ish) boot environment for FreeBSD. */
++#undef  CONFIG_EXTRA_ENV_SETTINGS
++#define CONFIG_EXTRA_ENV_SETTINGS \
++	"boardname=wandboard\0" \
++	"bootfile=ubldr\0" \
++	"fatdev=mmc 0:1\0" \
++	"loaderdev=disk\0" \
++	"uenv_file=uEnv.txt\0" \
++	\
++	"fatboot=" \
++	  "env exists user_fatboot && run user_fatboot; " \
++	  "fatload ${fatdev} ${loadaddr} ${bootfile} && bootelf; " \
++	"\0" \
++	"netboot=" \
++	  "env exists user_netboot && run user_netboot; " \
++	  "dhcp ${loadaddr} ${bootfile} && bootelf; " \
++	"\0" \
++	"preboot=" \
++	  "env exists setfdt && run setfdt; " \
++	  "env exists uenv_import && run uenv_import; " \
++	  "env exists user_preboot && run user_preboot; " \
++	"\0" \
++	"setfdt=env set fdt_file ${imxname}-${boardname}.dtb\0" \
++	"uenv_import=" \
++	  "fatload ${fatdev} ${loadaddr} ${uenv_file} && " \
++	    "env import -t ${loadaddr} ${filesize}; " \
++	"\0"
++
++#undef  CONFIG_BOOTCOMMAND
++#define CONFIG_BOOTCOMMAND "run fatboot"
++
+ #endif			       /* __CONFIG_H * */

Added: head/sysutils/u-boot-wandboard/pkg-descr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sysutils/u-boot-wandboard/pkg-descr	Tue Dec  9 20:09:01 2014	(r374428)
@@ -0,0 +1,24 @@
+U-Boot loader for Wandboard Solo, Dual, and Quad.
+
+Install the u-boot.imx file onto the boot disk using:
+
+  dd if=u-boot.imx of=/dev/whatever bs=1k oseek=1 conv=sync
+
+The U-Boot built by this port expects the first 1MB of the boot media to
+be reserved for the U-Boot executable and saved environment.  The u-boot.imx
+file begins at an offset of 1K from the start of the boot disk.  The U-Boot
+environment area begins at an offset of 512K.
+
+This version is patched so that:
+ * ELF and API features are enabled to support ubldr.
+ * A single U-Boot image supports Solo, Dual[lite], and Quad processors.
+ * When the selected board has multiple SD or MMC devices available, the
+   mmc0 device in U-Boot (and thus the disk0 device in loader(8)) will be
+   whichever device U-Boot was loaded from by the ROM bootloader routines.
+
+The sources for this port were originally obtained from commit 87f595d1ee
+at https://github.com/TechNexion/U-Boot-edm/ which appears to be a slightly
+modified fork of the stock U-Boot 2013.10 release.  As of this writing,
+the changes in this fork have not been rolled back into upstream U-Boot.
+
+For general information about U-Boot see WWW: http://www.denx.de/wiki/U-Boot


More information about the svn-ports-head mailing list