Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F144819607
D2874.id6345.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
15 KB
Referenced Files
None
Subscribers
None
D2874.id6345.diff
View Options
Index: sysutils/Makefile
===================================================================
--- sysutils/Makefile
+++ sysutils/Makefile
@@ -990,7 +990,10 @@
SUBDIR += ttyload
SUBDIR += tw_cli
SUBDIR += tzdialog
+ SUBDIR += u-boot-bananapi
SUBDIR += u-boot-beaglebone
+ SUBDIR += u-boot-cubieboard
+ SUBDIR += u-boot-cubieboard2
SUBDIR += u-boot-cubox-hummingboard
SUBDIR += u-boot-duovero
SUBDIR += u-boot-pandaboard
Index: sysutils/u-boot-bananapi/Makefile
===================================================================
--- /dev/null
+++ sysutils/u-boot-bananapi/Makefile
@@ -0,0 +1,14 @@
+# $FreeBSD$
+
+PKGNAMESUFFIX= -bananapi
+
+COMMENT= Cross-build U-Boot loader for Banana Pi
+
+MASTERDIR= ${.CURDIR}/../u-boot-cubieboard
+
+DESCR= ${.CURDIR}/pkg-descr
+
+MODEL= bananapi
+CONF_TARGET= Bananapi_defconfig
+
+.include "${MASTERDIR}/Makefile"
Index: sysutils/u-boot-bananapi/pkg-descr
===================================================================
--- /dev/null
+++ sysutils/u-boot-bananapi/pkg-descr
@@ -0,0 +1,19 @@
+U-Boot loader for Banana Pi.
+
+To install this bootloader, follow the instructions in
+ http://linux-sunxi.org/Bootable_SD_card#Bootloader
+
+This version is patched so that:
+ * ELF and API features are enabled.
+ * The default environment is trimmed to just what's needed to boot.
+ * The saveenv command writes to the file u-boot.env on the FAT partition.
+ * The DTB file name is chosen based on the board model and passed to ubldr
+ using the fdtfile env variable. ubldr loads the DTB from /boot/dtb/ on
+ the FreeBSD partition.
+ * By default, it loads ELF ubldr from file ubldr on the FAT partition
+ to address 0x42000000, and launches it.
+
+For information about running FreeBSD on Banana Pi, see
+ https://wiki.freebsd.org/FreeBSD/arm/Allwinner
+
+For general information about U-Boot see WWW: http://www.denx.de/wiki/U-Boot
Index: sysutils/u-boot-cubieboard/Makefile
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard/Makefile
@@ -0,0 +1,48 @@
+# $FreeBSD$
+
+PORTNAME= u-boot
+PORTVERSION= 2015.04
+CATEGORIES= sysutils
+MASTER_SITES= ftp://ftp.denx.de/pub/u-boot/
+PKGNAMESUFFIX?= -cubieboard
+
+MAINTAINER= loos@FreeBSD.org
+COMMENT?= Cross-build U-Boot loader for Cubieboard
+
+LICENSE= GPLv2
+
+BUILD_DEPENDS= arm-none-eabi-gcc:${PORTSDIR}/devel/arm-none-eabi-gcc
+
+MODEL?= cubieboard
+CONF_TARGET?= Cubieboard_defconfig
+
+NO_ARCH= yes
+
+WRKSRC= ${WRKDIR}/u-boot-${DISTVERSION}
+USES= gmake tar:bzip2
+SSP_UNSAFE= yes # cross-LD does not support -fstack-protector
+
+U_BOOT_DIR= share/u-boot/${PORTNAME}${PKGNAMESUFFIX}
+PLIST_FILES= ${U_BOOT_DIR}/u-boot.img \
+ ${U_BOOT_DIR}/u-boot-sunxi-with-spl.bin \
+ ${U_BOOT_DIR}/sunxi-spl.bin \
+ ${U_BOOT_DIR}/README
+
+MAKE_ARGS+= ARCH=arm \
+ CROSS_COMPILE=arm-none-eabi-
+
+post-patch:
+ @${REINPLACE_CMD} -e "s,%%MODEL%%,${MODEL}," \
+ ${WRKSRC}/include/configs/sunxi-common.h
+
+do-configure:
+ (cd ${WRKSRC}; ${GMAKE} ${CONF_TARGET})
+
+do-install:
+ ${MKDIR} ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}
+ ${CP} ${WRKSRC}/spl/sunxi-spl.bin ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}
+ ${CP} ${WRKSRC}/u-boot-sunxi-with-spl.bin ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}
+ ${CP} ${WRKSRC}/u-boot.img ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}
+ ${CP} ${.CURDIR}/pkg-descr ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}/README
+
+.include <bsd.port.mk>
Index: sysutils/u-boot-cubieboard/distinfo
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard/distinfo
@@ -0,0 +1,2 @@
+SHA256 (u-boot-2015.04.tar.bz2) = 0a1a70df586655f527befa6f12e184e96ed61b126e5a567382321b17200f5d60
+SIZE (u-boot-2015.04.tar.bz2) = 9471487
Index: sysutils/u-boot-cubieboard/files/patch-api_api.c
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard/files/patch-api_api.c
@@ -0,0 +1,79 @@
+--- api/api.c.orig 2014-10-14 08:47:15 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;
+ }
+
+ /*
Index: sysutils/u-boot-cubieboard/files/patch-api_api__storage.c
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard/files/patch-api_api__storage.c
@@ -0,0 +1,28 @@
+--- api/api_storage.c.orig 2014-10-14 08:47:15 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;
Index: sysutils/u-boot-cubieboard/files/patch-common_cmd__elf.c
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard/files/patch-common_cmd__elf.c
@@ -0,0 +1,29 @@
+--- common/cmd_elf.c.orig 2014-10-14 08:47:15 UTC
++++ common/cmd_elf.c
+@@ -35,22 +35,12 @@ unsigned long do_bootelf_exec(ulong (*en
+ unsigned long ret;
+
+ /*
+- * QNX images require the data cache is disabled.
+- * Data cache is already flushed, so just turn it off.
+- */
+- int dcache = dcache_status();
+- if (dcache)
+- dcache_disable();
+-
+- /*
+- * pass address parameter as argv[0] (aka command name),
+- * and all remaining args
++ * FreeBSD wants the caches enabled while ubldr runs, and as of r276397
++ * the kernel can tolerate being entered with internal (but not external
++ * PL310) caches enabled on armv6/7 systems. So don't disable caches
++ * here, just launch the program directly.
+ */
+ ret = entry(argc, argv);
+-
+- if (dcache)
+- dcache_enable();
+-
+ return ret;
+ }
+
Index: sysutils/u-boot-cubieboard/files/patch-common_cmd__test.c
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard/files/patch-common_cmd__test.c
@@ -0,0 +1,19 @@
+--- common/cmd_test.c.orig 2014-10-14 08:47:15 UTC
++++ common/cmd_test.c
+@@ -65,9 +65,14 @@ static int do_test(cmd_tbl_t *cmdtp, int
+ char * const *ap;
+ int i, op, left, adv, expr, last_expr, last_unop, last_binop;
+
+- /* 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
+ {
Index: sysutils/u-boot-cubieboard/files/patch-drivers_mmc_mmc.c
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard/files/patch-drivers_mmc_mmc.c
@@ -0,0 +1,80 @@
+--- drivers/mmc/mmc.c.orig 2014-10-14 08:47:15 UTC
++++ drivers/mmc/mmc.c
+@@ -20,6 +20,7 @@
+
+ static struct list_head mmc_devices;
+ static int cur_dev_num = -1;
++static int mmc_error_print_max = -1;
+
+ __weak int board_mmc_getwp(struct mmc *mmc)
+ {
+@@ -1270,9 +1271,14 @@ void mmc_destroy(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
+@@ -1297,7 +1303,7 @@ int mmc_start_init(struct mmc *mmc)
+ err = mmc->cfg->ops->init(mmc);
+
+ if (err)
+- return err;
++ goto done;
+
+ mmc_set_bus_width(mmc, 1);
+ mmc_set_clock(mmc, 1);
+@@ -1306,7 +1312,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;
+@@ -1323,15 +1329,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;
+ }
+
Index: sysutils/u-boot-cubieboard/files/patch-include_configs_sunxi__common.h
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard/files/patch-include_configs_sunxi__common.h
@@ -0,0 +1,74 @@
+--- include/configs/sunxi-common.h.orig 2015-03-17 17:37:48.000000000 -0300
++++ include/configs/sunxi-common.h
+@@ -406,4 +406,71 @@
+ #define CONFIG_EXTRA_ENV_SETTINGS
+ #endif
+
++/*****************************************************************************
++ * FreeBSD customizations from here down.
++ ****************************************************************************/
++
++/* Add the API and ELF features needed for ubldr. */
++#ifndef CONFIG_SPL_BUILD
++#define CONFIG_API
++#define CONFIG_CMD_ELF
++#define CONFIG_CMD_ENV_EXISTS
++#define CONFIG_EFI_PARTITION
++#endif
++
++/* Turn off dcache. */
++#ifndef CONFIG_SPL_BUILD
++#define CONFIG_SYS_DCACHE_OFF
++#define CONFIG_CMD_CACHE
++#endif
++
++/* Save the env to the fat partition. */
++#ifndef CONFIG_SPL_BUILD
++#undef CONFIG_ENV_IS_NOWHERE
++#undef CONFIG_ENV_IS_IN_NAND
++#undef CONFIG_ENV_IS_IN_MMC
++#undef CONFIG_ENV_IS_IN_SPI_FLASH
++#define CONFIG_ENV_IS_IN_FAT
++#define CONFIG_FAT_WRITE
++#define CONFIG_SYS_MMC_MAX_DEVICE 4
++#define FAT_ENV_INTERFACE "mmc"
++#define FAT_ENV_DEVICE_AND_PART "0:1"
++#define FAT_ENV_FILE "u-boot.env"
++#endif
++
++/* Create a small(ish) boot environment for FreeBSD. */
++#ifndef CONFIG_SPL_BUILD
++#undef CONFIG_EXTRA_ENV_SETTINGS
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ MEM_LAYOUT_ENV_SETTINGS \
++ CONSOLE_STDOUT_SETTINGS \
++ "stdin=serial,usbkbd\0" \
++ "fdtfile=%%MODEL%%.dtb\0" \
++ "console=ttyS0,115200\0" \
++ "Fatboot=" \
++ "env exists loaderdev || env set loaderdev ${fatdev}; " \
++ "env exists UserFatboot && run UserFatboot; " \
++ "echo Booting from: ${fatdev} ${bootfile}; " \
++ "fatload ${fatdev} ${kernel_addr_r} ${bootfile} && bootelf; " \
++ "\0" \
++ "Netboot=" \
++ "env exists loaderdev || env set loaderdev net; " \
++ "env exists UserNetboot && run UserNetboot; " \
++ "dhcp ${kernel_addr_r} ${bootfile} && bootelf; " \
++ "\0" \
++ "preboot=usb start; " \
++ "env exists bootfile || env set bootfile ubldr; " \
++ "env exists SetupFatdev && run SetupFatdev; " \
++ "env exists UserPreboot && run UserPreboot; " \
++ "\0" \
++ "SetupFatdev=" \
++ "env exists fatdev || env set fatdev 'mmc 0'; " \
++ "\0"
++
++#undef CONFIG_BOOTCOMMAND
++#define CONFIG_BOOTCOMMAND "run Fatboot"
++#undef CONFIG_PREBOOT
++#define CONFIG_PREBOOT "run preboot"
++#endif
++
+ #endif /* _SUNXI_COMMON_CONFIG_H */
Index: sysutils/u-boot-cubieboard/pkg-descr
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard/pkg-descr
@@ -0,0 +1,19 @@
+U-Boot loader for Cubieboard.
+
+To install this bootloader, follow the instructions in
+ http://linux-sunxi.org/Bootable_SD_card#Bootloader
+
+This version is patched so that:
+ * ELF and API features are enabled.
+ * The default environment is trimmed to just what's needed to boot.
+ * The saveenv command writes to the file u-boot.env on the FAT partition.
+ * The DTB file name is chosen based on the board model and passed to ubldr
+ using the fdtfile env variable. ubldr loads the DTB from /boot/dtb/ on
+ the FreeBSD partition.
+ * By default, it loads ELF ubldr from file ubldr on the FAT partition
+ to address 0x42000000, and launches it.
+
+For information about running FreeBSD on Cubieboard, see
+ https://wiki.freebsd.org/FreeBSD/arm/Allwinner
+
+For general information about U-Boot see WWW: http://www.denx.de/wiki/U-Boot
Index: sysutils/u-boot-cubieboard2/Makefile
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard2/Makefile
@@ -0,0 +1,14 @@
+# $FreeBSD$
+
+PKGNAMESUFFIX= -cubieboard2
+
+COMMENT= Cross-build U-Boot loader for Cubieboard2
+
+MASTERDIR= ${.CURDIR}/../u-boot-cubieboard
+
+DESCR= ${.CURDIR}/pkg-descr
+
+MODEL= cubieboard2
+CONF_TARGET= Cubieboard2_defconfig
+
+.include "${MASTERDIR}/Makefile"
Index: sysutils/u-boot-cubieboard2/pkg-descr
===================================================================
--- /dev/null
+++ sysutils/u-boot-cubieboard2/pkg-descr
@@ -0,0 +1,19 @@
+U-Boot loader for Cubieboard2.
+
+To install this bootloader, follow the instructions in
+ http://linux-sunxi.org/Bootable_SD_card#Bootloader
+
+This version is patched so that:
+ * ELF and API features are enabled.
+ * The default environment is trimmed to just what's needed to boot.
+ * The saveenv command writes to the file u-boot.env on the FAT partition.
+ * The DTB file name is chosen based on the board model and passed to ubldr
+ using the fdtfile env variable. ubldr loads the DTB from /boot/dtb/ on
+ the FreeBSD partition.
+ * By default, it loads ELF ubldr from file ubldr on the FAT partition
+ to address 0x42000000, and launches it.
+
+For information about running FreeBSD on Cubieboard, see
+ https://wiki.freebsd.org/FreeBSD/arm/Allwinner
+
+For general information about U-Boot see WWW: http://www.denx.de/wiki/U-Boot
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Feb 14, 1:45 AM (21 h, 53 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28684015
Default Alt Text
D2874.id6345.diff (15 KB)
Attached To
Mode
D2874: u-boot for Allwinner (sunxi) SoCs - Banana pi, Cubieboard and Cubieboard2
Attached
Detach File
Event Timeline
Log In to Comment