All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heiko Schocher <hs@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCHv3 4/4] igep00x0: UBIize
Date: Mon, 11 Jan 2016 07:20:06 +0100	[thread overview]
Message-ID: <56934996.6050300@denx.de> (raw)
In-Reply-To: <20160110231810.GD5338@localhost.localdomain>

Hello Ladislav,

Am 11.01.2016 um 00:18 schrieb Ladislav Michl:
> This patch converts IGEP board to use UBI volumes for environment,
> u-boot, kernel... With exception of first four sectors read by SoC
> boot ROM whole NAND is UBI managed. Code is too big, so I dropped
> CONFIG_SPL_EXT_SUPPORT to make it fit. It is meant more likely as a test
> of Thomas' patch, so more people can play with that.
>
> Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
> ---
>   board/isee/igep00x0/igep00x0.c    | 76 +++++++++++++++++++++++++++++++++++++++
>   common/spl/Makefile               |  5 ++-
>   common/spl/spl.c                  | 13 +++++++
>   common/spl/spl_ubi.c              | 36 +++++++++++++++++++
>   include/configs/omap3_igep00x0.h  | 64 +++++++++++++++------------------
>   include/configs/ti_armv7_common.h |  1 -
>   include/spl.h                     |  4 +++
>   7 files changed, 162 insertions(+), 37 deletions(-)
>   create mode 100644 common/spl/spl_ubi.c

Could you seperate common changes in "common/*" and your special
board changes?

Beside of that, this patch does not apply ...

pollux:u-boot-smartweb hs [master] $ git am mbox
Wende an: igep00x0: UBIize
error: Anwendung des Patches fehlgeschlagen: board/isee/igep00x0/igep00x0.c:212
error: board/isee/igep00x0/igep00x0.c: Patch konnte nicht angewendet werden
/work/hs/tbot/u-boot-smartweb/.git/rebase-apply/patch:194: new blank line at EOF.
+
error: Anwendung des Patches fehlgeschlagen: include/configs/omap3_igep00x0.h:77
error: include/configs/omap3_igep00x0.h: Patch konnte nicht angewendet werden
Anwendung des Patches fehlgeschlagen bei 0001 igep00x0: UBIize
Die Kopie des fehlgeschlagenen Patches befindet sich in:
    /work/hs/tbot/u-boot-smartweb/.git/rebase-apply/patch
Wenn Sie das Problem gel?st haben, f?hren Sie "git am --continue" aus.
Falls Sie diesen Patch auslassen m?chten, f?hren Sie stattdessen
"git am --skip" aus.
Um den urspr?nglichen Branch wiederherzustellen und die Anwendung der
Patches abzubrechen, f?hren Sie "git am --abort" aus.
pollux:u-boot-smartweb hs [master] $ git am --abort

"git am -3 mbox" fails also ...

I used as base:
commit e6c516a973dff2718488d065d859bcfe64fb05aa
Merge: d77a092 b5e7c1e
Author: Tom Rini <trini@konsulko.com>
Date:   Sun Jan 10 09:17:52 2016 -0500

     Merge branch 'master' of git://www.denx.de/git/u-boot-imx

With the "patch" command it works:

pollux:u-boot-smartweb hs [master] $ patch -p1 < mbox
patching file board/isee/igep00x0/igep00x0.c
Hunk #2 succeeded at 210 with fuzz 1 (offset -5 lines).
patching file common/spl/Makefile
patching file common/spl/spl.c
patching file common/spl/spl_ubi.c
patching file include/configs/omap3_igep00x0.h
Hunk #1 succeeded at 80 with fuzz 2 (offset 3 lines).
Hunk #2 succeeded at 94 (offset 7 lines).
Hunk #3 succeeded at 108 (offset 7 lines).
Hunk #4 succeeded at 125 with fuzz 1 (offset 7 lines).
Hunk #5 succeeded@175 (offset 7 lines).
patching file include/configs/ti_armv7_common.h
patching file include/spl.h
pollux:u-boot-smartweb hs [master] $

Do you have local changes in "include/configs/omap3_igep00x0.h" ?

> diff --git a/board/isee/igep00x0/igep00x0.c b/board/isee/igep00x0/igep00x0.c
> index e2fce50..51e4eea 100644
> --- a/board/isee/igep00x0/igep00x0.c
> +++ b/board/isee/igep00x0/igep00x0.c
> @@ -10,6 +10,9 @@
>   #include <ns16550.h>
>   #include <twl4030.h>
>   #include <netdev.h>
> +#include <nand.h>
> +#include <ubispl.h>
> +#include <spl.h>
>   #include <asm/gpio.h>
>   #include <asm/io.h>
>   #include <asm/arch/mem.h>
> @@ -212,3 +215,76 @@ int board_eth_init(bd_t *bis)
>   #endif
>   }
>   #endif
> +
> +#undef CONFIG_SPL_OS_BOOT
> +
> +#ifdef CONFIG_SPL_BUILD
> +#ifdef CONFIG_SPL_OS_BOOT
> +int spl_start_uboot(void)
> +{
> +	/* break into full u-boot on 'c' */
> +	if (serial_tstc() && serial_getc() == 'c')
> +		return 1;
> +
> +	return 0;
> +}
> +
> +static void spl_set_header_linux(void)
> +{
> +	spl_image.size = 3 * 1024 * 1024;
> +	spl_image.entry_point = 0x82000000;
> +	spl_image.load_addr = 0x82000000;
> +	spl_image.os = IH_OS_LINUX;
> +	spl_image.name = "Linux";
> +}
> +#endif
> +
> +int spl_board_ubi_load_image(u32 boot_device)
> +{
> +	int ret;
> +	struct image_header *header;
> +	struct ubispl_info info;
> +	struct ubispl_load volumes[2];
> +
> +	info.ubi = (struct ubi_scan_info *)
> +		(CONFIG_SYS_SPL_MALLOC_START + CONFIG_SYS_SPL_MALLOC_SIZE);
> +	info.fastmap = 1;
> +	info.read = nand_spl_read_block;
> +
> +	info.peb_offset = 4;
> +	info.peb_size = CONFIG_SYS_NAND_BLOCK_SIZE;
> +	info.vid_offset = 512;
> +	info.leb_start = 2048;
> +	info.peb_count = 4096 - info.peb_offset;
> +
> +#ifdef CONFIG_SPL_OS_BOOT
> +	if (!spl_start_uboot()) {
> +		volumes[0].name = "kernel";
> +		volumes[0].vol_id = 3;
> +		volumes[0].load_addr = (void *)0x82000000;
> +		volumes[1].name = "dtb";
> +		volumes[1].vol_id = 4;
> +		volumes[1].load_addr = (void *)0x88000000;

Maybe you would use defines here instead hardcoded numbers?

> +
> +		ret = ubispl_load_volumes(&info, volumes, 2);
> +		if (!ret) {
> +			puts("Linux loaded.\n");
> +			spl_set_header_linux();
> +			return 0;
> +		}
> +		puts("Loading Linux failed, falling back to U-Boot.\n");
> +	}
> +#endif
> +	header = (struct image_header *)
> +		(CONFIG_SYS_TEXT_BASE - sizeof(struct image_header));
> +	volumes[0].name = "loader";
> +	volumes[0].vol_id = 0;
> +	volumes[0].load_addr = (void *)header;
> +
> +	ret = ubispl_load_volumes(&info, volumes, 1);
> +	if (!ret)
> +		spl_parse_image_header(header);
> +
> +	return ret;
> +}
> +#endif
> diff --git a/common/spl/Makefile b/common/spl/Makefile
> index 10a4589..e4535c4 100644
> --- a/common/spl/Makefile
> +++ b/common/spl/Makefile
> @@ -10,10 +10,13 @@
>
>   ifdef CONFIG_SPL_BUILD
>   obj-$(CONFIG_SPL_FRAMEWORK) += spl.o
> -obj-$(CONFIG_SPL_NOR_SUPPORT) += spl_nor.o
>   obj-$(CONFIG_SPL_YMODEM_SUPPORT) += spl_ymodem.o
> +ifndef CONFIG_SPL_UBI
> +obj-$(CONFIG_SPL_NOR_SUPPORT) += spl_nor.o
>   obj-$(CONFIG_SPL_NAND_SUPPORT) += spl_nand.o
>   obj-$(CONFIG_SPL_ONENAND_SUPPORT) += spl_onenand.o
> +endif
> +obj-$(CONFIG_SPL_UBI) += spl_ubi.o
>   obj-$(CONFIG_SPL_NET_SUPPORT) += spl_net.o
>   obj-$(CONFIG_SPL_MMC_SUPPORT) += spl_mmc.o
>   obj-$(CONFIG_SPL_USB_SUPPORT) += spl_usb.o
> diff --git a/common/spl/spl.c b/common/spl/spl.c
> index 6e6dee7..048a325 100644
> --- a/common/spl/spl.c
> +++ b/common/spl/spl.c
> @@ -286,6 +286,18 @@ static int spl_load_image(u32 boot_device)
>   	case BOOT_DEVICE_MMC2_2:
>   		return spl_mmc_load_image(boot_device);
>   #endif
> +#ifdef CONFIG_SPL_UBI
> +#ifdef CONFIG_SPL_NAND_SUPPORT
> +	case BOOT_DEVICE_NAND:
> +#endif
> +#ifdef CONFIG_SPL_ONENAND_SUPPORT
> +	case BOOT_DEVICE_ONENAND:
> +#endif
> +#ifdef CONFIG_SPL_NOR_SUPPORT
> +	case BOOT_DEVICE_NOR:
> +#endif
> +		return spl_ubi_load_image(boot_device);

I am unsure here if we should disable raw nor read complete
when enabling UBISPL, but this is maybe a theoretical case, so
this is OK for me. If someone needs it we can change this here
later.

> +#else
>   #ifdef CONFIG_SPL_NAND_SUPPORT
>   	case BOOT_DEVICE_NAND:
>   		return spl_nand_load_image();
> @@ -298,6 +310,7 @@ static int spl_load_image(u32 boot_device)
>   	case BOOT_DEVICE_NOR:
>   		return spl_nor_load_image();
>   #endif
> +#endif /* CONFIG_SPL_UBI */
>   #ifdef CONFIG_SPL_YMODEM_SUPPORT
>   	case BOOT_DEVICE_UART:
>   		return spl_ymodem_load_image();
> diff --git a/common/spl/spl_ubi.c b/common/spl/spl_ubi.c
> new file mode 100644
> index 0000000..a292841
> --- /dev/null
> +++ b/common/spl/spl_ubi.c
> @@ -0,0 +1,36 @@
> +/*
> + * Copyright (C) 2016
> + * Ladislav Michl <ladis@linux-mips.org>
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +#include <common.h>
> +#include <config.h>
> +#include <spl.h>
> +#include <asm/io.h>
> +#include <nand.h>
> +
> +__weak int spl_board_ubi_load_image(u32 boot_device)
> +{
> +	return -EINVAL;
> +}
> +
> +int spl_ubi_load_image(u32 boot_device)
> +{
> +	int ret;
> +
> +#ifdef CONFIG_SPL_NAND_SUPPORT
> +	if (boot_device == BOOT_DEVICE_NAND)
> +		nand_init();
> +#endif
> +
> +	ret = spl_board_ubi_load_image(boot_device);
> +
> +#ifdef CONFIG_SPL_NAND_SUPPORT
> +	if (boot_device == BOOT_DEVICE_NAND)
> +		nand_deselect();
> +#endif
> +
> +	return ret;
> +}
> +
> diff --git a/include/configs/omap3_igep00x0.h b/include/configs/omap3_igep00x0.h
> index 5da6cfd..451e511 100644
> --- a/include/configs/omap3_igep00x0.h
> +++ b/include/configs/omap3_igep00x0.h
> @@ -77,6 +77,7 @@
>   #endif
>   #define CONFIG_CMD_DHCP
>   #define CONFIG_CMD_PING
> +#define CONFIG_CMD_UBI
>
>   #ifndef CONFIG_SPL_BUILD
>
> @@ -86,6 +87,10 @@
>   	"stdout=serial\0" \
>   	"stderr=serial\0"
>
> +#define ENV_MTD_SETTINGS \
> +	"mtdids=nand0=gpmc-nand.0\0" \
> +	"mtdparts=mtdparts=gpmc-nand.0:512k(SPL),-(UBI)\0"
> +
>   #define MEM_LAYOUT_SETTINGS \
>   	DEFAULT_LINUX_BOOT_ENV \
>   	"scriptaddr=0x87E00000\0" \
> @@ -96,36 +101,15 @@
>
>   #include <config_distro_bootcmd.h>
>
> -
>   #define CONFIG_EXTRA_ENV_SETTINGS \
>   	ENV_DEVICE_SETTINGS \
> +	ENV_MTD_SETTINGS \
>   	MEM_LAYOUT_SETTINGS \
>   	BOOTENV
>
>   #endif
>
>   /*
> - * FLASH and environment organization
> - */
> -
> -#ifdef CONFIG_BOOT_ONENAND
> -#define CONFIG_SYS_ONENAND_BASE		ONENAND_MAP
> -
> -#define ONENAND_ENV_OFFSET		0x260000 /* environment starts here */
> -
> -#define CONFIG_ENV_IS_IN_ONENAND	1
> -#define CONFIG_ENV_SIZE			(512 << 10) /* Total Size Environment */
> -#define CONFIG_ENV_ADDR			ONENAND_ENV_OFFSET
> -#endif
> -
> -#ifdef CONFIG_NAND
> -#define CONFIG_ENV_OFFSET		0x260000 /* environment starts here */
> -#define CONFIG_ENV_IS_IN_NAND	        1
> -#define CONFIG_ENV_SIZE			(512 << 10) /* Total Size Environment */
> -#define CONFIG_ENV_ADDR			NAND_ENV_OFFSET
> -#endif
> -
> -/*
>    * SMSC911x Ethernet
>    */
>   #if defined(CONFIG_CMD_NET)
> @@ -134,19 +118,37 @@
>   #define CONFIG_SMC911X_BASE		0x2C000000
>   #endif /* (CONFIG_CMD_NET) */
>
> +/*
> + * FLASH and environment organization
> + */
> +#define CONFIG_SPL_UBI			1
> +#define CONFIG_SPL_UBI_MAX_VOL_LEBS	256
> +#define CONFIG_SPL_UBI_MAX_PEB_SIZE	(256*1024)
> +#define CONFIG_SPL_UBI_MAX_PEBS		4096
> +#define CONFIG_SPL_UBI_VOL_IDS		8
> +
> +#define CONFIG_ENV_IS_IN_UBI		1
> +#define CONFIG_ENV_UBI_PART		"UBI"
> +#define CONFIG_ENV_UBI_VOLUME		"config"
> +#define CONFIG_ENV_UBI_VOLUME_REDUND	"config_r"
> +#define CONFIG_UBI_SILENCE_MSG		1
> +#define CONFIG_UBIFS_SILENCE_MSG	1
> +#define CONFIG_ENV_SIZE			(32*1024)
> +
> +#define CONFIG_RBTREE
> +#define CONFIG_MTD_PARTITIONS
> +#define MTDIDS_DEFAULT			"nand0=gpmc-nand.0"
> +#define MTDPARTS_DEFAULT		"mtdparts=gpmc-nand.0:512k(SPL),-(UBI)"
> +
>   /* OneNAND boot config */
>   #ifdef CONFIG_BOOT_ONENAND
>   #define CONFIG_SPL_ONENAND_SUPPORT
> -#define CONFIG_SYS_ONENAND_U_BOOT_OFFS  0x80000
>   #define CONFIG_SYS_ONENAND_PAGE_SIZE	2048
> -#define CONFIG_SPL_ONENAND_LOAD_ADDR    0x80000
> -#define CONFIG_SPL_ONENAND_LOAD_SIZE    \
> -	(512 * 1024 - CONFIG_SPL_ONENAND_LOAD_ADDR)
> -
>   #endif
>
>   /* NAND boot config */
>   #ifdef CONFIG_NAND
> +#define CONFIG_SPL_NAND_SUPPORT
>   #define CONFIG_SYS_NAND_BUSWIDTH_16BIT
>   #define CONFIG_SYS_NAND_5_ADDR_CYCLE
>   #define CONFIG_SYS_NAND_PAGE_COUNT	64
> @@ -166,14 +168,6 @@
>   #define CONFIG_NAND_OMAP_ECCSCHEME	OMAP_ECC_BCH8_CODE_HW_DETECTION_SW
>   #define CONFIG_NAND_OMAP_GPMC
>   #define CONFIG_BCH
> -
> -#define CONFIG_SYS_NAND_U_BOOT_OFFS	0x80000
> -/* NAND: SPL falcon mode configs */
> -#ifdef CONFIG_SPL_OS_BOOT
> -#define CONFIG_CMD_SPL_NAND_OFS		0x240000
> -#define CONFIG_SYS_NAND_SPL_KERNEL_OFFS	0x280000
> -#define CONFIG_CMD_SPL_WRITE_SIZE	0x2000
> -#endif
>   #endif
>
>   #endif /* __IGEP00X0_H */
> diff --git a/include/configs/ti_armv7_common.h b/include/configs/ti_armv7_common.h
> index 2087eb1..45bdd75 100644
> --- a/include/configs/ti_armv7_common.h
> +++ b/include/configs/ti_armv7_common.h
> @@ -232,7 +232,6 @@
>   #define CONFIG_SPL_LIBDISK_SUPPORT
>   #define CONFIG_SPL_MMC_SUPPORT
>   #define CONFIG_SPL_FAT_SUPPORT
> -#define CONFIG_SPL_EXT_SUPPORT
>   #endif
>
>   #define CONFIG_SYS_THUMB_BUILD
> diff --git a/include/spl.h b/include/spl.h
> index 92cdc04..1ab9295 100644
> --- a/include/spl.h
> +++ b/include/spl.h
> @@ -40,6 +40,7 @@ u32 spl_boot_mode(void);
>   void spl_set_header_raw_uboot(void);
>   void spl_parse_image_header(const struct image_header *header);
>   void spl_board_prepare_for_linux(void);
> +int spl_board_ubi_load_image(u32 boot_device);
>   void __noreturn jump_to_image_linux(void *arg);
>   int spl_start_uboot(void);
>   void spl_display_print(void);
> @@ -53,6 +54,9 @@ int spl_onenand_load_image(void);
>   /* NOR SPL functions */
>   int spl_nor_load_image(void);
>
> +/* UBI SPL functions */
> +int spl_ubi_load_image(u32 boot_device);
> +
>   /* MMC SPL functions */
>   int spl_mmc_load_image(u32 boot_device);
>
>

Looks good to me, please seperate the common changes into a seperate
patch, and I think we can add the patchserie to mainline, if merge
window opens.

Thanks for your work!

bye,
Heiko
-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany

  reply	other threads:[~2016-01-11  6:20 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-01-10 23:14 [U-Boot] [PATCHv3 0/4] spl: Lightweight UBI and UBI fastmap support Ladislav Michl
2016-01-10 23:15 ` [U-Boot] [PATCHv3 1/4] mtd: Sort subsystem directories aplhabeticaly in Makefile Ladislav Michl
2016-01-13  2:38   ` Tom Rini
2016-01-10 23:16 ` [U-Boot] [PATCHv3 2/4] nand_spl_simple: Add a simple NAND read function Ladislav Michl
2016-01-13  2:39   ` Tom Rini
2016-01-10 23:17 ` [U-Boot] [PATCHv3 3/4] spl: Lightweight UBI and UBI fastmap support Ladislav Michl
2016-01-11  6:14   ` Heiko Schocher
2016-01-13  2:39   ` Tom Rini
2016-01-10 23:18 ` [U-Boot] [PATCHv3 4/4] igep00x0: UBIize Ladislav Michl
2016-01-11  6:20   ` Heiko Schocher [this message]
2016-01-11 12:58     ` Ladislav Michl
2016-01-12  9:08       ` Heiko Schocher
2016-01-12 22:17         ` Ladislav Michl
2016-01-13  5:09           ` Heiko Schocher
2016-01-12 23:24         ` Ladislav Michl

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=56934996.6050300@denx.de \
    --to=hs@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.