u-boot-sinovoip-bpi-m3: Update to u-boot-master

Update to u-boot-master model, moved MAINTAINER to uboot@. This brings the
version from 2016.05 (super old) to 2017.09 under the unified FreeBSD u-boot
model.

All of the patches previously here have been made redundant, either by
upstream or by using our U-Boot repository with FreeBSD patches applied.

Reviewed by:	imp, manu
Approved by:	imp, jmcneill (maintainer)
Differential Revision:	https://reviews.freebsd.org/D13352
This commit is contained in:
Kyle Evans 2017-12-05 21:51:11 +00:00
parent 64958279a1
commit d570e33f55
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=455629
15 changed files with 12 additions and 439 deletions

View File

@ -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 <bsd.port.pre.mk>
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 <bsd.port.post.mk>
.include "${MASTERDIR}/Makefile"

View File

@ -1,3 +0,0 @@
TIMESTAMP = 1467921377
SHA256 (u-boot-2016.05.tar.bz2) = 87d02275615aaf0cd007b54cbe9fbadceef2bee7c79e6c323ea1ae8956dcb171
SIZE (u-boot-2016.05.tar.bz2) = 11325053

View File

@ -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;
}
/*

View File

@ -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)
{

View File

@ -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();

View File

@ -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;
}

View File

@ -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
{

View File

@ -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)"

View File

@ -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;
}

View File

@ -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

View File

@ -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;

View File

@ -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)

View File

@ -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);

View File

@ -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 */

View File

@ -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