public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@bootlin.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 13/28] mtd: ensure MTD is compiled when ENV_IS_IN_FLASH is selected
Date: Thu, 6 Dec 2018 10:00:16 +0100	[thread overview]
Message-ID: <20181206100016.706330ba@bbrezillon> (raw)
In-Reply-To: <20181206080605.C943B242268@gemini.denx.de>

Hello Wolfgang,

On Thu, 06 Dec 2018 09:06:05 +0100
Wolfgang Denk <wd@denx.de> wrote:

> Dear Miquel,
> 
> In message <20181205153218.36f6ed4e@xps13> you wrote:
> >
> > I took a rather small configuration: stm32f429-discovery_defconfig
> > which uses CONFIG_MTD_NOR_FLASH. Without CONFIG_MTD, u-boot.bin is
> > 209416 bytes. With CONFIG_MTD, u-boot.bin is 214540 bytes. This is an
> > additional 5124 bytes which represent about 2% of the entire size.  
> 
> So it's a 5 k code increase for zero benefit.

There's no short term benefit, but the long term benefit is ease better
maintainability.

> 
> > I am talking about U-Boot only, there is a CONFIG_SPL_MTD_SUPPORT
> > option that must be enabled to compile MTD in the SPL so the change
> > I propose do not enlarge the SPL.  
> 
> This is even worse - the SPL is frequently at the size limits.

I think you missed the *no*. There's no overhead at all for the SPL.
Either the platform was already enabling CONFIG_SPL_MTD_SUPPORT and the
MTD code was already compiled in before Miquel's patch, or this option
is disabled, and the SPL still does *not* embed the MTD layer.

> 
> Please understand that there is a fundamental difference between
> parallel NOR flash and things like NAND, SPI NOR etc. - the latter
> are storage devices, which are usually handled as block device or
> similar, i. e. you always need a driver to read data.  Parallel NOR
> is not storage, it is _memory_, which is directly mapped int o
> memory. You can execute code from it.

That's only partially true. Yes, you can read from a parallel NORs like
if it was memory because memory controllers embedded in SoCs provide
your a direct mmio mapping. That's not true for write accesses,
as NORs need to be erased before you can write on it. The MTD layer is
here to abstract that, such that flash users only have to know how to
manipulate an MTD device instead of having one backend per flash-type
(actually it's even one per-flash-type+mem-bus).

> 
> Reading data from parallel NOR comes at zero overhead (except maybe
> for setting up the memory controller to map the NOR into the address
> space).

The overhead can be minimal if we want (we can have a tiny MTD layer)

current:
	flash_read()

proposed:
	mtd_read()
		mtd_to_flash_read_wrapper()
			flash_read()

and when I say minimal, I mean both in term of size and perfs (we're
talking about an indirect jump and a few extra instructions in
mtd_to_flash_read_wrapper()).

The benefit, well, a single entry point for all kind of mtd accesses.
That means we can have an MTD backend for env retrieval instead of one
per flash type. Same goes for DFU backends, and maybe even for SPL
boots.
To sum-up: less code to maintain. And I wouldn't be surprized if we
were actually reducing the image footprint in some cases (when support
for several flash types is enabled).

> 
> Adding a dependency on the MTD layer is broken.
> 
> > Today, there are multiple boards having more than one type of MTD
> > device (eg. raw NAND and SPI-NOR). In this case you need to compile two
> > commands which interface only with the subsystem they have been written
> > for. We propose to kill this approach and instead use an 'mtd' command
> > which shares the same code for all MTD devices: less duplication, more
> > users, and in the end, a reduced size. And I am not event talking about
> > all the code that has been added over the years to "avoid using MTD"
> > which enlarges the binary as well.  
> 
> This is perfectly fine.  But you must not break fundamental features
> that have been there ever since the beginning of the project.
> 
> Simple things - like reading the environment from parallel NOR
> (which boils down to calling ofa memcpy()) must not be bloated with
> unneeded layers like MTD - even if these are needed and useful
> elsewhere.
> 
> Please do not understand me wrong: I fully agree with the MTD rework
> in general, and I'm happy to see it happen.  But please do it in a
> way not to break existing basic use cases.

Okay, maybe we can put aside the parallel NOR case for now, but I do
think even parallel NOR accesses would benefit from the MTD layer.

Regards,

Boris

  reply	other threads:[~2018-12-06  9:00 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-12-04 23:56 [U-Boot] [PATCH v3 00/28] MTD defconfigs/Kconfigs/Makefiles heavy cleanup Miquel Raynal
2018-12-04 23:56 ` [U-Boot] [PATCH v3 01/28] Makefile: move MTD-related lines in coherent Makefiles Miquel Raynal
2018-12-05  8:44   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 02/28] mtd: rename CONFIG_NAND -> CONFIG_MTD_RAW_NAND Miquel Raynal
2018-12-05  8:37   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 03/28] mtd: rename CONFIG_MTD -> CONFIG_DM_MTD Miquel Raynal
2018-12-05  8:38   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 04/28] mtd: rename CONFIG_MTD_DEVICE -> CONFIG_MTD Miquel Raynal
2018-12-05  8:38   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 05/28] mtd: ensure MTD is compiled when there is a NOR flash Miquel Raynal
2018-12-05  8:39   ` Boris Brezillon
2018-12-05 12:11   ` Wolfgang Denk
2018-12-04 23:56 ` [U-Boot] [PATCH v3 06/28] mtd: ensure MTD/the raw NAND core are compiled when there is a NAND flash Miquel Raynal
2018-12-05  9:20   ` Boris Brezillon
2018-12-05 12:09   ` Wolfgang Denk
2018-12-04 23:56 ` [U-Boot] [PATCH v3 07/28] mtd: ensure MTD is compiled when there is a SPI NOR flash using MTD Miquel Raynal
2018-12-05  5:58   ` Vignesh R
2018-12-05  7:43     ` Miquel Raynal
2018-12-05  9:21   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 08/28] mtd: ensure UBI is compiled when using fastmap Miquel Raynal
2018-12-05  9:33   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 09/28] mtd: ensure MTD is compiled when UBI is used Miquel Raynal
2018-12-05  9:34   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 10/28] mtd: ensure UBI is compiled when CMD_UBI is selected Miquel Raynal
2018-12-05  9:35   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 11/28] mtd: ensure UBI is compiled when ENV_IS_IN_UBI " Miquel Raynal
2018-12-05  9:35   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 12/28] mtd: ensure MTD_RAW_NAND is compiled when ENV_IS_IN_NAND " Miquel Raynal
2018-12-05  9:37   ` Boris Brezillon
2018-12-04 23:56 ` [U-Boot] [PATCH v3 13/28] mtd: ensure MTD is compiled when ENV_IS_IN_FLASH " Miquel Raynal
2018-12-05  9:46   ` Boris Brezillon
2018-12-05 12:06   ` Wolfgang Denk
2018-12-05 14:32     ` Miquel Raynal
2018-12-05 15:40       ` Schrempf Frieder
2018-12-06  8:10         ` Wolfgang Denk
2018-12-06  8:06       ` Wolfgang Denk
2018-12-06  9:00         ` Boris Brezillon [this message]
2018-12-06  9:32           ` Wolfgang Denk
2018-12-06 15:23             ` Miquel Raynal
2018-12-06 15:59               ` Tom Rini
2018-12-06 16:19                 ` Simon Goldschmidt
2018-12-09  8:41                   ` Vignesh R
2018-12-07 11:09                 ` Miquel Raynal
2018-12-07 14:07                   ` Tom Rini
2018-12-08 15:42               ` Wolfgang Denk
2018-12-04 23:57 ` [U-Boot] [PATCH v3 14/28] mtd: ensure CMD_NAND is compiled when its options are selected Miquel Raynal
2018-12-05 10:01   ` Boris Brezillon
2018-12-04 23:57 ` [U-Boot] [PATCH v3 15/28] mtd: ensure MTD is compiled when CMD_MTDPARTS is selected Miquel Raynal
2018-12-05 10:12   ` Boris Brezillon
2018-12-04 23:57 ` [U-Boot] [PATCH v3 16/28] configs: move CONFIG_MTD in defconfigs when set in arch includes Miquel Raynal
2018-12-05 10:17   ` Boris Brezillon
2018-12-05 10:53     ` Miquel Raynal
2018-12-05 11:25     ` Miquel Raynal
2018-12-04 23:57 ` [U-Boot] [PATCH v3 17/28] configs: remove raw NAND core from k2g defconfigs Miquel Raynal
2018-12-05 10:19   ` Boris Brezillon
2018-12-05 10:55     ` Miquel Raynal
2018-12-04 23:57 ` [U-Boot] [PATCH v3 18/28] configs: remove MTD support from bcm11130 and M54418TWR defconfigs Miquel Raynal
2018-12-05 10:21   ` Boris Brezillon
2018-12-04 23:57 ` [U-Boot] [PATCH v3 19/28] mtd: nand: add includes in NAND core to avoid warnings Miquel Raynal
2018-12-05 10:26   ` Boris Brezillon
2018-12-04 23:57 ` [U-Boot] [PATCH v3 20/28] dfu: add dependency on the NAND core Miquel Raynal
2018-12-05 10:27   ` Boris Brezillon
2018-12-04 23:57 ` [U-Boot] [PATCH v3 21/28] mtd: nor: NOR flashes depend on MTD Miquel Raynal
2018-12-05 10:31   ` Boris Brezillon
2018-12-05 11:20     ` Miquel Raynal
2018-12-05 12:13   ` Wolfgang Denk
2018-12-04 23:57 ` [U-Boot] [PATCH v3 22/28] mtd: nand: remove dependency on commands in Kconfig Miquel Raynal
2018-12-05 10:29   ` Boris Brezillon
2018-12-04 23:57 ` [U-Boot] [PATCH v3 23/28] mtd: ubi: remove dependency on command " Miquel Raynal
2018-12-05 10:39   ` Boris Brezillon
2018-12-04 23:57 ` [U-Boot] [PATCH v3 24/28] cmd: mtdparts: show Kconfig options only if the command is selected Miquel Raynal
2018-12-05 10:16   ` Boris Brezillon
2018-12-04 23:57 ` [U-Boot] [PATCH v3 25/28] cmd: nand/sf: isolate legacy code Miquel Raynal
2018-12-05 10:37   ` Boris Brezillon
2018-12-05 10:53     ` Thomas Petazzoni
2018-12-05 11:15       ` Miquel Raynal
2018-12-04 23:57 ` [U-Boot] [PATCH v3 26/28] cmd: make MTD commands depend on MTD Miquel Raynal
2018-12-05 10:42   ` Boris Brezillon
2018-12-05 10:48     ` Miquel Raynal
2018-12-05 10:49       ` Boris Brezillon
2018-12-04 23:57 ` [U-Boot] [PATCH v3 27/28] mtd: simplify Makefile Miquel Raynal
2018-12-04 23:57 ` [U-Boot] [PATCH v3 28/28] mtd: properly handle SPL kbuild lines Miquel Raynal
2018-12-05 10:47   ` Boris Brezillon

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=20181206100016.706330ba@bbrezillon \
    --to=boris.brezillon@bootlin.com \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox