Index: head/sysutils/u-boot-sinovoip-bpi-m3/Makefile =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/Makefile +++ head/sysutils/u-boot-sinovoip-bpi-m3/Makefile @@ -1,51 +1,10 @@ # $FreeBSD$ -PORTNAME= u-boot -PORTVERSION= 2016.05 -CATEGORIES= sysutils -MASTER_SITES= ftp://ftp.denx.de/pub/u-boot/ -PKGNAMESUFFIX?= -sinovoip-bpi-m3 +MAINTAINER= uboot@FreeBSD.org +MASTERDIR= ${.CURDIR}/../u-boot-master -MAINTAINER= jmcneill@FreeBSD.org -COMMENT= Cross-build U-Boot loader for Sinovoip Banana Pi M3 +MODEL= sinovoip-bpi-m3 +BOARD_CONFIG= Sinovoip_BPI_M3_defconfig +FAMILY= allwinner -LICENSE= GPLv2 - -BUILD_DEPENDS= arm-none-eabi-gcc:devel/arm-none-eabi-gcc - -USES= gmake tar:bzip2 -WRKSRC= ${WRKDIR}/u-boot-${DISTVERSION} - -.include -NO_ARCH= yes - -MODEL?= sinovoip-bpi-m3 -CONF_TARGET?= Sinovoip_BPI_M3_defconfig - -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}; ${MAKE_CMD} ${CONF_TARGET}) - -do-install: - ${MKDIR} ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR} - ${INSTALL_DATA} ${WRKSRC}/spl/sunxi-spl.bin ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR} - ${INSTALL_DATA} ${WRKSRC}/u-boot-sunxi-with-spl.bin \ - ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR} - ${INSTALL_DATA} ${WRKSRC}/u-boot.img ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR} - ${INSTALL_DATA} ${DESCR} ${STAGEDIR}/${PREFIX}/${U_BOOT_DIR}/README - -.include +.include "${MASTERDIR}/Makefile" Index: head/sysutils/u-boot-sinovoip-bpi-m3/distinfo =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/distinfo +++ head/sysutils/u-boot-sinovoip-bpi-m3/distinfo @@ -1,3 +0,0 @@ -TIMESTAMP = 1467921377 -SHA256 (u-boot-2016.05.tar.bz2) = 87d02275615aaf0cd007b54cbe9fbadceef2bee7c79e6c323ea1ae8956dcb171 -SIZE (u-boot-2016.05.tar.bz2) = 11325053 Index: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-api_api.c =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-api_api.c +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-api_api.c @@ -1,81 +0,0 @@ ---- api/api.c.orig 2016-04-12 02:22:25 UTC -+++ api/api.c -@@ -495,45 +495,49 @@ 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; -+ size_t buflen; - - 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; -+ buflen = strlen(match->key) + strlen(match->data) + 2; -+ buf = realloc(buf, buflen); -+ snprintf(buf, buflen, "%s=%s", match->key, match->data); -+ *next = buf; - return 0; -+done: -+ free(buf); -+ buf = NULL; -+ *next = NULL; -+ return i; - } - - /* Index: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-api_api__net.c =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-api_api__net.c +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-api_api__net.c @@ -1,11 +0,0 @@ ---- api/api_net.c.orig 2016-04-12 02:22:25 UTC -+++ api/api_net.c -@@ -25,7 +25,7 @@ DECLARE_GLOBAL_DATA_PTR; - - #define errf(fmt, args...) do { printf("ERROR @ %s(): ", __func__); printf(fmt, ##args); } while (0) - --#ifdef CONFIG_CMD_NET -+#if defined(CONFIG_CMD_NET) && !defined(CONFIG_DM_ETH) - - static int dev_valid_net(void *cookie) - { Index: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-board_sunxi_board.c =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-board_sunxi_board.c +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-board_sunxi_board.c @@ -1,13 +0,0 @@ ---- board/sunxi/board.c.orig 2016-04-12 02:22:25 UTC -+++ board/sunxi/board.c -@@ -524,6 +524,10 @@ void sunxi_board_init(void) - power_failed |= axp_set_fldo(2, CONFIG_AXP_FLDO2_VOLT); - power_failed |= axp_set_fldo(3, CONFIG_AXP_FLDO3_VOLT); - #endif -+ -+#ifdef CONFIG_AXP818_POWER -+ power_failed |= axp_set_dc1sw(CONFIG_AXP_DC1SW_EN); -+#endif - #endif - printf("DRAM:"); - ramsize = sunxi_dram_init(); Index: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-cmd_elf.c =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-cmd_elf.c +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-cmd_elf.c @@ -1,29 +0,0 @@ ---- cmd/elf.c.orig 2016-04-12 02:22:25 UTC -+++ cmd/elf.c -@@ -110,22 +110,12 @@ static unsigned long do_bootelf_exec(ulo - 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: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-cmd_test.c =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-cmd_test.c +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-cmd_test.c @@ -1,19 +0,0 @@ ---- cmd/test.c.orig 2016-04-12 02:22:25 UTC -+++ cmd/test.c -@@ -56,9 +56,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: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-configs_Sinovoip__BPI__M3__defconfig =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-configs_Sinovoip__BPI__M3__defconfig +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-configs_Sinovoip__BPI__M3__defconfig @@ -1,14 +0,0 @@ ---- configs/Sinovoip_BPI_M3_defconfig.orig 2016-05-16 11:40:32.000000000 -0300 -+++ configs/Sinovoip_BPI_M3_defconfig 2016-07-07 17:05:19.339338000 -0300 -@@ -32,3 +32,11 @@ - CONFIG_AXP_DLDO3_VOLT=2500 - CONFIG_USB_EHCI_HCD=y - CONFIG_USB_MUSB_HOST=y -+ -+# FreeBSD changes -+CONFIG_CMD_GPIO=y -+CONFIG_AXP_DCDC1_VOLT=3300 -+CONFIG_AXP_DC1SW_EN=1 -+# SATA port -+#CONFIG_INITIAL_USB_SCAN_DELAY=500 -+#CONFIG_SYS_EXTRA_OPTIONS="SATAPWR=SUNXI_GPD(25)" Index: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-drivers_mmc_mmc.c =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-drivers_mmc_mmc.c +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-drivers_mmc_mmc.c @@ -1,78 +0,0 @@ ---- drivers/mmc/mmc.c.orig 2016-04-12 02:22:25 UTC -+++ drivers/mmc/mmc.c -@@ -23,6 +23,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) - { -@@ -1586,9 +1587,14 @@ void mmc_destroy(struct mmc *mmc) - struct blk_desc *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 -@@ -1623,7 +1629,7 @@ int mmc_start_init(struct mmc *mmc) - err = mmc->cfg->ops->init(mmc); - - if (err) -- return err; -+ goto done; - - mmc->ddr_mode = 0; - mmc_set_bus_width(mmc, 1); -@@ -1633,7 +1639,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->block_dev.hwpart = 0; -@@ -1650,15 +1656,31 @@ int mmc_start_init(struct mmc *mmc) - - if (err) { - #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; -+ goto done; - } - } - - if (!err) - 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: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-drivers_power_Kconfig =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-drivers_power_Kconfig +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-drivers_power_Kconfig @@ -1,16 +0,0 @@ ---- drivers/power/Kconfig.orig 2016-04-12 02:22:25 UTC -+++ drivers/power/Kconfig -@@ -125,6 +125,13 @@ config AXP_DCDC5_VOLT - On A23 / A31 / A33 / A83T boards dcdc5 is VCC-DRAM and should be 1.5V, - 1.35V if DDR3L is used. - -+config AXP_DC1SW_EN -+ int "axp pmic dc1sw enable" -+ depends on AXP818_POWER -+ default 0 if AXP818_POWER -+ ---help--- -+ Enable DC1SW switch. -+ - config AXP_ALDO1_VOLT - int "axp pmic (a)ldo1 voltage" - depends on AXP221_POWER || AXP818_POWER Index: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-drivers_power_axp818.c =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-drivers_power_axp818.c +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-drivers_power_axp818.c @@ -1,24 +0,0 @@ ---- drivers/power/axp818.c.orig 2016-04-12 02:22:25 UTC -+++ drivers/power/axp818.c -@@ -225,6 +225,21 @@ int axp_set_fldo(int fldo_num, unsigned - AXP818_OUTPUT_CTRL3_FLDO1_EN << (fldo_num - 1)); - } - -+int -+axp_set_dc1sw(int onoff) -+{ -+ int ret; -+ -+ if (onoff) -+ ret = pmic_bus_setbits(AXP818_OUTPUT_CTRL2, -+ AXP818_OUTPUT_CTRL2_DC1SW_EN); -+ else -+ ret = pmic_bus_clrbits(AXP818_OUTPUT_CTRL2, -+ AXP818_OUTPUT_CTRL2_DC1SW_EN); -+ -+ return ret; -+} -+ - int axp_init(void) - { - u8 axp_chip_id; Index: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-include_axp818.h =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-include_axp818.h +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-include_axp818.h @@ -1,10 +0,0 @@ ---- include/axp818.h.orig 2016-04-12 02:22:25 UTC -+++ include/axp818.h -@@ -24,6 +24,7 @@ - #define AXP818_OUTPUT_CTRL2_DLDO2_EN (1 << 4) - #define AXP818_OUTPUT_CTRL2_DLDO3_EN (1 << 5) - #define AXP818_OUTPUT_CTRL2_DLDO4_EN (1 << 6) -+#define AXP818_OUTPUT_CTRL2_DC1SW_EN (1 << 7) - #define AXP818_OUTPUT_CTRL3 0x13 - #define AXP818_OUTPUT_CTRL3_FLDO1_EN (1 << 2) - #define AXP818_OUTPUT_CTRL3_FLDO2_EN (1 << 3) Index: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-include_axp__pmic.h =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-include_axp__pmic.h +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-include_axp__pmic.h @@ -1,10 +0,0 @@ ---- include/axp_pmic.h.orig 2016-04-12 02:22:25 UTC -+++ include/axp_pmic.h -@@ -32,6 +32,7 @@ int axp_set_aldo4(unsigned int mvolt); - int axp_set_dldo(int dldo_num, unsigned int mvolt); - int axp_set_eldo(int eldo_num, unsigned int mvolt); - int axp_set_fldo(int fldo_num, unsigned int mvolt); -+int axp_set_dc1sw(int onoff); - int axp_init(void); - int axp_get_sid(unsigned int *sid); - Index: head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-include_configs_sunxi-common.h =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-include_configs_sunxi-common.h +++ head/sysutils/u-boot-sinovoip-bpi-m3/files/patch-include_configs_sunxi-common.h @@ -1,78 +0,0 @@ ---- include/configs/sunxi-common.h.orig 2016-05-16 11:40:32.000000000 -0300 -+++ include/configs/sunxi-common.h 2016-07-07 17:00:25.673890000 -0300 -@@ -513,4 +513,75 @@ - #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 -+#ifndef CONFIG_CMD_ELF -+#define CONFIG_CMD_ELF -+#endif -+#ifndef CONFIG_CMD_ENV_EXISTS -+#define CONFIG_CMD_ENV_EXISTS -+#endif -+#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: head/sysutils/u-boot-sinovoip-bpi-m3/pkg-descr =================================================================== --- head/sysutils/u-boot-sinovoip-bpi-m3/pkg-descr +++ head/sysutils/u-boot-sinovoip-bpi-m3/pkg-descr @@ -1,19 +1,19 @@ U-Boot loader for Banana Pi M3. -To install this bootloader, follow the instructions in - http://linux-sunxi.org/Bootable_SD_card#Bootloader +To install this bootloader on an sdcard just do : +dd if=/usr/local/share/u-boot/u-boot-sinovoip-bpi-m3/u-boot-sunxi-with-spl.bin of=/path/to/sdcarddevice bs=1k seek=8 conv=notrunc,sync 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 DTB file name is chosen based on the board model and passed to ubldr.bin + using the fdtfile env variable. ubldr.bin loads the DTB from /boot/dtb/ on the FreeBSD partition. - * By default, it loads ELF ubldr from file ubldr on the FAT partition + * By default, it loads PIE ubldr.bin from file ubldr.bin on the FAT partition to address 0x42000000, and launches it. -For information about running FreeBSD on Banana Pi M3, see +For information about running FreeBSD on Allwinner boards, see https://wiki.freebsd.org/FreeBSD/arm/Allwinner For general information about U-Boot see WWW: http://www.denx.de/wiki/U-Boot