diff --git a/arch/arm/boards/beaglebone/board.c b/arch/arm/boards/beaglebone/board.c index ad0d3b3..bd9a54a 100644 --- a/arch/arm/boards/beaglebone/board.c +++ b/arch/arm/boards/beaglebone/board.c @@ -72,6 +72,9 @@ armlinux_set_architecture(MACH_TYPE_BEAGLEBONE); + if (IS_ENABLED(CONFIG_SHELL_NONE)) + return am33xx_of_register_bootdevice(); + return 0; } coredevice_initcall(beaglebone_devices_init); diff --git a/arch/arm/boards/beaglebone/lowlevel.c b/arch/arm/boards/beaglebone/lowlevel.c index 66fd371..9b60092 100644 --- a/arch/arm/boards/beaglebone/lowlevel.c +++ b/arch/arm/boards/beaglebone/lowlevel.c @@ -104,6 +104,7 @@ }; extern char __dtb_am335x_boneblack_start[]; +extern char __dtb_am335x_bone_common_start[]; extern char __dtb_am335x_bone_start[]; /** @@ -120,13 +121,12 @@ uint32_t sdram_size; void *fdt; - if (is_beaglebone_black()) { + fdt = __dtb_am335x_bone_common_start; + + if (is_beaglebone_black()) sdram_size = SZ_512M; - fdt = __dtb_am335x_boneblack_start; - } else { + else sdram_size = SZ_256M; - fdt = __dtb_am335x_bone_start; - } /* WDT1 is already running when the bootloader gets control * Disable it to avoid "random" resets diff --git a/arch/arm/boards/freescale-mx53-qsb/board.c b/arch/arm/boards/freescale-mx53-qsb/board.c index 38d1ee6..0209e07 100644 --- a/arch/arm/boards/freescale-mx53-qsb/board.c +++ b/arch/arm/boards/freescale-mx53-qsb/board.c @@ -84,7 +84,8 @@ struct mc13xxx *mc34708; int rev; - if (!of_machine_is_compatible("fsl,imx53-qsb")) + if (!of_machine_is_compatible("fsl,imx53-qsb") && + !of_machine_is_compatible("fsl,imx53-qsrb")) return 0; device_detect_by_name("mmc0"); @@ -171,7 +172,8 @@ static int loco_postcore_init(void) { - if (!of_machine_is_compatible("fsl,imx53-qsb")) + if (!of_machine_is_compatible("fsl,imx53-qsb") && + !of_machine_is_compatible("fsl,imx53-qsrb")) return 0; imx53_init_lowlevel(1000); diff --git a/arch/arm/dts/Makefile b/arch/arm/dts/Makefile index 76fba43..a79ac17 100644 --- a/arch/arm/dts/Makefile +++ b/arch/arm/dts/Makefile @@ -1,6 +1,7 @@ dtb-$(CONFIG_ARCH_AM33XX) += \ am335x-bone.dtb \ am335x-boneblack.dtb \ + am335x-bone-common.dtb \ am335x-phytec-phycore.dtb dtb-$(CONFIG_ARCH_IMX25) += imx25-karo-tx25.dtb dtb-$(CONFIG_ARCH_IMX27) += imx27-phytec-phycard-s-rdk-bb.dtb @@ -42,7 +43,7 @@ BUILTIN_DTB := $(patsubst "%",%,$(CONFIG_BUILTIN_DTB_NAME)) obj-$(CONFIG_BUILTIN_DTB) += $(BUILTIN_DTB).dtb.o -pbl-$(CONFIG_MACH_BEAGLEBONE) += am335x-bone.dtb.o am335x-boneblack.dtb.o +pbl-$(CONFIG_MACH_BEAGLEBONE) += am335x-bone.dtb.o am335x-boneblack.dtb.o am335x-bone-common.dtb.o pbl-$(CONFIG_MACH_EFIKA_MX_SMARTBOOK) += imx51-genesi-efika-sb.dtb.o pbl-$(CONFIG_MACH_EMBEST_RIOTBOARD) += imx6s-riotboard.dtb.o pbl-$(CONFIG_MACH_FREESCALE_MX51_PDK) += imx51-babbage.dtb.o diff --git a/arch/arm/dts/am335x-bone-common.dts b/arch/arm/dts/am335x-bone-common.dts new file mode 100644 index 0000000..5d3d2ed --- /dev/null +++ b/arch/arm/dts/am335x-bone-common.dts @@ -0,0 +1,25 @@ +/dts-v1/; + +/* + * DTS for the beaglebone white/black MLO + * + * Only contains the common parts of both boards which is + * all we need for the MLO + */ + +#include "am33xx.dtsi" +#include "am335x-bone-common.dtsi" + +/ { + model = "TI AM335x BeagleBone"; + compatible = "ti,am335x-bone", "ti,am33xx"; +}; + +&mmc2 { + vmmc-supply = <&vmmcsd_fixed>; + pinctrl-names = "default"; + pinctrl-0 = <&emmc_pins>; + bus-width = <8>; + status = "disabled"; /* only present on beaglebone black, enabled during runtime */ + ti,vcc-aux-disable-is-sleep; +}; diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index 8035468..1d487b9 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -314,7 +314,7 @@ image_size - sizeof(*header)); if (ret < 0) goto err_out; - if (ret < end - sizeof(*header)) { + if (ret < image_size - sizeof(*header)) { printf("premature end of image\n"); ret = -EIO; goto err_out; diff --git a/arch/arm/mach-imx/esdctl.c b/arch/arm/mach-imx/esdctl.c index bb8fec2..811592f 100644 --- a/arch/arm/mach-imx/esdctl.c +++ b/arch/arm/mach-imx/esdctl.c @@ -549,9 +549,9 @@ unsigned long base, size; upper_or_coalesced_range(MX53_CSD0_BASE_ADDR, - imx_v3_sdram_size((void *)MX53_ESDCTL_BASE_ADDR, 0), + imx_v4_sdram_size((void *)MX53_ESDCTL_BASE_ADDR, 0), MX53_CSD1_BASE_ADDR, - imx_v3_sdram_size((void *)MX53_ESDCTL_BASE_ADDR, 1), + imx_v4_sdram_size((void *)MX53_ESDCTL_BASE_ADDR, 1), &base, &size); barebox_arm_entry(base, size, boarddata); diff --git a/drivers/mtd/core.c b/drivers/mtd/core.c index d954f72..82fb5f7 100644 --- a/drivers/mtd/core.c +++ b/drivers/mtd/core.c @@ -401,9 +401,9 @@ mtd->cdev.mtd = mtd; if (IS_ENABLED(CONFIG_PARAMETER)) { - dev_add_param_int_ro(&mtd->class_dev, "size", mtd->size, "%llu"); + dev_add_param_llint_ro(&mtd->class_dev, "size", mtd->size, "%llu"); dev_add_param_int_ro(&mtd->class_dev, "erasesize", mtd->erasesize, "%u"); - dev_add_param_int_ro(&mtd->class_dev, "writesize", mtd->oobsize, "%u"); + dev_add_param_int_ro(&mtd->class_dev, "writesize", mtd->writesize, "%u"); dev_add_param_int_ro(&mtd->class_dev, "oobsize", mtd->oobsize, "%u"); } diff --git a/drivers/mtd/nor/cfi_flash.c b/drivers/mtd/nor/cfi_flash.c index 3d3d231..a8118cb 100644 --- a/drivers/mtd/nor/cfi_flash.c +++ b/drivers/mtd/nor/cfi_flash.c @@ -949,6 +949,8 @@ static void cfi_init_mtd(struct flash_info *info) { struct mtd_info *mtd = &info->mtd; + u_int32_t erasesize; + int i; mtd->read = cfi_mtd_read; mtd->write = cfi_mtd_write; @@ -956,7 +958,14 @@ mtd->lock = cfi_mtd_lock; mtd->unlock = cfi_mtd_unlock; mtd->size = info->size; - mtd->erasesize = info->eraseregions[1].erasesize; /* FIXME */ + + erasesize = 0; + for (i=0; i < info->numeraseregions; i++) { + if (erasesize < info->eraseregions[i].erasesize) + erasesize = info->eraseregions[i].erasesize; + } + mtd->erasesize = erasesize; + mtd->writesize = 1; mtd->subpage_sft = 0; mtd->eraseregions = info->eraseregions; diff --git a/drivers/of/partition.c b/drivers/of/partition.c index e2ddec5..3dce844 100644 --- a/drivers/of/partition.c +++ b/drivers/of/partition.c @@ -21,6 +21,7 @@ #include #include #include +#include #include struct cdev *of_parse_partition(struct cdev *cdev, struct device_node *node) @@ -60,6 +61,9 @@ filename = asprintf("%s.%s", cdev->name, partname); new = devfs_add_partition(cdev->name, offset, size, flags, filename); + if (IS_ERR(new)) + new = NULL; + if (new && new->dev) new->dev->device_node = node;