All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heinrich Schuchardt <xypron.glpk@gmx.de>
To: Simon Glass <sjg@chromium.org>
Cc: Jagan Teki <jagan@amarulasolutions.com>,
	Mike Frysinger <vapier@gentoo.org>,
	U-Boot Mailing List <u-boot@lists.denx.de>
Subject: Re: [PATCH v4 5/5] sf: Provide a command to access memory-mapped SPI
Date: Sat, 13 Nov 2021 12:47:03 +0100	[thread overview]
Message-ID: <35de6992-6b1d-6fb0-9c22-346c0a393941@gmx.de> (raw)
In-Reply-To: <20210919214937.3829422-6-sjg@chromium.org>



On 9/19/21 23:49, Simon Glass wrote:
> Add a new 'sf mmap' function to show the address of a SPI offset, if the

I would expect a 'spi info' command to provide this information.

Best regards

Heinrich

> hardware supports it. This is useful on x86 systems.
>
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
> (no changes since v3)
>
> Changes in v3:
> - Add configuration and return value also
>
>   arch/Kconfig     |  2 ++
>   cmd/Kconfig      |  8 ++++++
>   cmd/sf.c         | 35 +++++++++++++++++++++++++++
>   doc/usage/sf.rst | 63 ++++++++++++++++++++++++++++++++++++++++++++++++
>   4 files changed, 108 insertions(+)
>
> diff --git a/arch/Kconfig b/arch/Kconfig
> index 8f8daadcf92..406e5a6c627 100644
> --- a/arch/Kconfig
> +++ b/arch/Kconfig
> @@ -136,6 +136,7 @@ config SANDBOX
>   	imply CMD_LZMADEC
>   	imply CMD_SATA
>   	imply CMD_SF
> +	imply CMD_SF_MMAP
>   	imply CMD_SF_TEST
>   	imply CRC32_VERIFY
>   	imply FAT_WRITE
> @@ -200,6 +201,7 @@ config X86
>   	imply CMD_IRQ
>   	imply CMD_PCI
>   	imply CMD_SF
> +	imply CMD_SF_MMAP
>   	imply CMD_SF_TEST
>   	imply CMD_ZBOOT
>   	imply DM_ETH
> diff --git a/cmd/Kconfig b/cmd/Kconfig
> index 3a857b3f6e2..44485f1588c 100644
> --- a/cmd/Kconfig
> +++ b/cmd/Kconfig
> @@ -1273,6 +1273,14 @@ config CMD_SF
>   	help
>   	  SPI Flash support
>
> +config CMD_SF_MMAP
> +	bool "sf mmap - Access memory-mapped SPI flash"
> +	depends on CMD_SF
> +	help
> +	  On some systems part of the SPI flash is mapped into mmemory. This
> +	  command provides a way to map a SPI-flash offset to a memory address,
> +	  so that the contents can be browsed using 'md', for example.
> +
>   config CMD_SF_TEST
>   	bool "sf test - Allow testing of SPI flash"
>   	depends on CMD_SF
> diff --git a/cmd/sf.c b/cmd/sf.c
> index 72246d912fe..c78cd7e6342 100644
> --- a/cmd/sf.c
> +++ b/cmd/sf.c
> @@ -384,6 +384,36 @@ static int do_spi_protect(int argc, char *const argv[])
>   	return ret == 0 ? 0 : 1;
>   }
>
> +static int do_spi_flash_mmap(int argc, char *const argv[])
> +{
> +	loff_t offset, len, maxsize;
> +	uint map_offset, map_size;
> +	ulong map_base;
> +	int dev = 0;
> +	int ret;
> +
> +	if (argc < 2)
> +		return CMD_RET_USAGE;
> +
> +	ret = mtd_arg_off_size(argc - 1, &argv[1], &dev, &offset, &len,
> +			       &maxsize, MTD_DEV_TYPE_NOR, flash->size);
> +	if (ret)
> +		return ret;
> +
> +	ret = dm_spi_get_mmap(flash->dev, &map_base, &map_size, &map_offset);
> +	if (ret) {
> +		printf("Mapping not available (err=%d)\n", ret);
> +		return CMD_RET_FAILURE;
> +	}
> +	if (offset < 0 || offset + len > map_size) {
> +		printf("Offset out of range (map size %x)\n", map_size);
> +		return CMD_RET_FAILURE;
> +	}
> +	printf("%lx\n", map_base + (ulong)offset);
> +
> +	return 0;
> +}
> +
>   enum {
>   	STAGE_ERASE,
>   	STAGE_CHECK,
> @@ -580,6 +610,8 @@ static int do_spi_flash(struct cmd_tbl *cmdtp, int flag, int argc,
>   		ret = do_spi_flash_erase(argc, argv);
>   	else if (strcmp(cmd, "protect") == 0)
>   		ret = do_spi_protect(argc, argv);
> +	else if (IS_ENABLED(CONFIG_CMD_SF_MMAP) && !strcmp(cmd, "mmap"))
> +		ret = do_spi_flash_mmap(argc, argv);
>   	else if (IS_ENABLED(CONFIG_CMD_SF_TEST) && !strcmp(cmd, "test"))
>   		ret = do_spi_flash_test(argc, argv);
>   	else
> @@ -611,6 +643,9 @@ static const char long_help[] =
>   	"					  or to start of mtd `partition'\n"
>   	"sf protect lock/unlock sector len	- protect/unprotect 'len' bytes starting\n"
>   	"					  at address 'sector'"
> +#ifdef CONFIG_CMD_SF_MMAP
> +	"\nsf mmap offset len		- get memory address of SPI-flash offset\n"
> +#endif
>   #ifdef CONFIG_CMD_SF_TEST
>   	"\nsf test offset len		- run a very basic destructive test"
>   #endif
> diff --git a/doc/usage/sf.rst b/doc/usage/sf.rst
> index 71bd1be5175..93fb8409370 100644
> --- a/doc/usage/sf.rst
> +++ b/doc/usage/sf.rst
> @@ -14,6 +14,7 @@ Synopis
>       sf erase <offset>|<partition> <len>
>       sf update <addr> <offset>|<partition> <len>
>       sf protect lock|unlock <sector> <len>
> +    sf mmap <offset>|<partition> <len>
>       sf test <offset>|<partition> <len>
>
>   Description
> @@ -143,6 +144,16 @@ lock|unlock
>   	Number of bytes to lock/unlock
>
>
> +Memory-mapped flash
> +-------------------
> +
> +On some systems part of the SPI flash is mapped into mmemory. With *sf mmap*
> +you can map a SPI-flash offset to a memory address, so that the contents can be
> +browsed using 'md', for example.
> +
> +The command will fail if this is not supported by the hardware or driver.
> +
> +
>   Test
>   ~~~~
>
> @@ -240,6 +251,58 @@ This second example is running on coral, an x86 Chromebook::
>      2 write: 227 ticks, 2255 KiB/s 18.040 Mbps
>      3 read: 189 ticks, 2708 KiB/s 21.664 Mbps
>
> +   # On coral, SPI flash offset 0 corresponds to address ff081000 in memory
> +   => sf mmap 0 1000
> +   device 0 offset 0x0, size 0x1000
> +   ff081000
> +
> +   # See below for how this address was obtained
> +   => sf mmap e80000 11e18
> +   device 0 offset 0xe80000, size 0x11e18
> +   fff01000
> +   => md fff01000
> +   fff01000: b2e8e089 89000030 30b4e8c4 c0310000    ....0......0..1.
> +   fff01010: 002c95e8 2ce8e800 feeb0000 dfe8c489    ..,....,........
> +   fff01020: f400002c 83f4fdeb d4e80cec 3100001e    ,..............1
> +   fff01030: 0cc483c0 f883c3c3 8b0b770a df408504    .........w....@.
> +   fff01040: c085fef1 c8b80575 c3fef1e5 53565755    ....u.......UWVS
> +   fff01050: 89c38951 2404c7c5 80000002 8924048b    Q......$......$.
> +   fff01060: 89a20fdf 89fb89de 75890045 084d8904    ........E..u..M.
> +   fff01070: ff0c5589 c5832404 243c8110 80000005    .U...$....<$....
> +   fff01080: 43c6da75 3b800030 43037520 d889f8eb    u..C0..; u.C....
> +   fff01090: 5f5e5b5a 80e6c35d 535657c3 e7e8c689    Z[^_]....WVS....
> +   fff010a0: 89000069 00a164c3 8b000000 408b4c56    i....d......VL.@
> +   fff010b0: 0cec837c ddb9ff6a e8fef1e5 00004e01    |...j........N..
> +   fff010c0: a1640389 00000000 1c80b60f 66000001    ..d............f
> +   fff010d0: b80c4389 00000001 a20fdf89 fb89de89    .C..............
> +   fff010e0: 89104389 c4831453 5bc03110 56c35f5e    .C..S....1.[^_.V
> +   fff010f0: 14ec8353 ce89d389 0000a164 b60f0000    S.......d.......
> +
> +
> +The offset e80000 was obtained using the following binman command, to find the
> +location of U-Boot SPL::
> +
> +   $ binman ls -i /tmp/b/chromebook_coral/u-boot.rom
> +   Name                                   Image-pos  Size      Entry-type        Offset     Uncomp-size
> +   ------------------------------------------------------------------------------------------------------
> +   main-section                                   0   1000000  section                   0
> +     spl                                     e80000     11e18  u-boot-spl         ffe80000
> +     u-boot                                  d00000     9106e  u-boot             ffd00000
> +     ...
> +
>
>   .. _SPI documentation:
>      https://en.wikipedia.org/wiki/Serial_Peripheral_Interface
> +
> +
> +Configuration
> +-------------
> +
> +The *sf* command is only available if `CONFIG_CMD_SF=y`. Note that it depends on
> +`CONFIG_DM_SPI_FLASH`.
> +
> +Return value
> +------------
> +
> +The return value $? is set to 0 (true) if the command succeded and to 1 (false)
> +otherwise.
>

  parent reply	other threads:[~2021-11-13 11:47 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-19 21:49 [PATCH v4 0/5] sf: Add documentation and an 'sf mmap' command Simon Glass
2021-09-19 21:49 ` [PATCH v4 1/5] command: Use a constant pointer for the help Simon Glass
2021-10-08 12:40   ` Jagan Teki
2021-11-13 11:13   ` Heinrich Schuchardt
2021-11-24 17:47   ` Simon Glass
2021-11-24 17:47   ` Simon Glass
2021-09-19 21:49 ` [PATCH v4 2/5] sf: Use const for the stage name Simon Glass
2021-10-08 12:41   ` Jagan Teki
2021-11-13 11:15   ` Heinrich Schuchardt
2021-11-24 17:47   ` Simon Glass
2021-11-24 17:47   ` Simon Glass
2021-09-19 21:49 ` [PATCH v4 3/5] sf: Tidy up code to avoid #ifdef Simon Glass
2021-09-20 11:08   ` Pratyush Yadav
2021-09-24  2:48     ` Simon Glass
2021-10-08 12:41   ` Jagan Teki
2021-11-24 17:47   ` Simon Glass
2021-11-24 17:47   ` Simon Glass
2021-09-19 21:49 ` [PATCH v4 4/5] sf: doc: Add documentation for the 'sf' command Simon Glass
2021-10-08 12:42   ` Jagan Teki
2021-11-13 11:34   ` Heinrich Schuchardt
2021-11-13 14:21     ` Simon Glass
2021-11-13 15:26       ` Heinrich Schuchardt
2021-11-13 18:14         ` Simon Glass
2021-11-24 17:47         ` Simon Glass
2021-11-24 17:47         ` Simon Glass
2021-09-19 21:49 ` [PATCH v4 5/5] sf: Provide a command to access memory-mapped SPI Simon Glass
2021-10-08 12:47   ` Jagan Teki
2021-10-08 20:29     ` Simon Glass
2021-11-13 11:47   ` Heinrich Schuchardt [this message]
2021-11-25  0:12     ` Simon Glass
2021-11-13  3:17 ` [PATCH v4 0/5] sf: Add documentation and an 'sf mmap' command Simon Glass

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=35de6992-6b1d-6fb0-9c22-346c0a393941@gmx.de \
    --to=xypron.glpk@gmx.de \
    --cc=jagan@amarulasolutions.com \
    --cc=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    --cc=vapier@gentoo.org \
    /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.